Add Qt6 support
This commit is contained in:
parent
f29206b2d4
commit
9ccaff3c2f
16
config.pri
16
config.pri
@ -1,7 +1,19 @@
|
||||
QT += gui serialport sql
|
||||
|
||||
QMAKE_CXXFLAGS += -Werror -std=c++11 -z defs
|
||||
QMAKE_LFLAGS += -std=c++11
|
||||
greaterThan(QT_MAJOR_VERSION, 5) {
|
||||
message("Building using Qt6 support")
|
||||
CONFIG *= c++17
|
||||
QMAKE_LFLAGS *= -std=c++17
|
||||
QMAKE_CXXFLAGS *= -std=c++17
|
||||
} else {
|
||||
message("Building using Qt5 support")
|
||||
CONFIG *= c++11
|
||||
QMAKE_LFLAGS *= -std=c++11
|
||||
QMAKE_CXXFLAGS *= -std=c++11
|
||||
DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x050F00
|
||||
}
|
||||
|
||||
QMAKE_CXXFLAGS += -Werror -z defs
|
||||
|
||||
sourceDir = $$PWD
|
||||
buildDir = $$shadowed($$PWD)
|
||||
|
||||
@ -262,7 +262,11 @@ bool ZigbeeInterfaceDeconz::enable(const QString &serialPort, qint32 baudrate)
|
||||
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
||||
|
||||
connect(m_serialPort, &QSerialPort::readyRead, this, &ZigbeeInterfaceDeconz::onReadyRead);
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||
connect(m_serialPort, &QSerialPort::errorOccurred, this, &ZigbeeInterfaceDeconz::onError, Qt::QueuedConnection);
|
||||
#else
|
||||
connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onError(QSerialPort::SerialPortError)), Qt::QueuedConnection);
|
||||
#endif
|
||||
|
||||
if (!m_serialPort->open(QSerialPort::ReadWrite)) {
|
||||
qCWarning(dcZigbeeInterface()) << "Could not open serial port" << serialPort << baudrate << m_serialPort->errorString();
|
||||
|
||||
@ -259,7 +259,11 @@ bool ZigbeeInterfaceNxp::enable(const QString &serialPort, qint32 baudrate)
|
||||
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
||||
|
||||
connect(m_serialPort, &QSerialPort::readyRead, this, &ZigbeeInterfaceNxp::onReadyRead);
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||
connect(m_serialPort, &QSerialPort::errorOccurred, this, &ZigbeeInterfaceNxp::onError, Qt::QueuedConnection);
|
||||
#else
|
||||
connect(m_serialPort, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onError(QSerialPort::SerialPortError)), Qt::QueuedConnection);
|
||||
#endif
|
||||
|
||||
if (!m_serialPort->open(QSerialPort::ReadWrite)) {
|
||||
qCWarning(dcZigbeeInterface()) << "Could not open serial port" << serialPort << baudrate << m_serialPort->errorString();
|
||||
|
||||
@ -89,7 +89,7 @@ ZigbeeNetworkReply *ZigbeeNetworkNxp::sendRequest(const ZigbeeNetworkRequest &re
|
||||
m_bufferedReplies.remove(requestId);
|
||||
return;
|
||||
}
|
||||
//qCWarning(dcZigbeeNetwork()) << "#### Removed network reply" << reply << "ID:" << requestId << "Current reply count" << m_pendingReplies.count();
|
||||
//qCWarning(dcZigbeeNetwork()) << "#### Removed network reply" << reply << "ID:" << requestId << "Current reply count" << m_pendingReplies.size();
|
||||
});
|
||||
|
||||
// Finish the reply right away if the network is offline
|
||||
|
||||
@ -221,8 +221,12 @@ bool ZigbeeInterfaceTi::enable(const QString &serialPort, qint32 baudrate)
|
||||
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
||||
|
||||
connect(m_serialPort, &QSerialPort::readyRead, this, &ZigbeeInterfaceTi::onReadyRead);
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
|
||||
connect(m_serialPort, &QSerialPort::errorOccurred, this, &ZigbeeInterfaceTi::onError);
|
||||
#else
|
||||
typedef void (QSerialPort::* errorSignal)(QSerialPort::SerialPortError);
|
||||
connect(m_serialPort, static_cast<errorSignal>(&QSerialPort::error), this, &ZigbeeInterfaceTi::onError);
|
||||
#endif
|
||||
|
||||
if (!m_serialPort->open(QSerialPort::ReadWrite)) {
|
||||
qCWarning(dcZigbeeInterface()) << "Could not open serial port" << serialPort << baudrate << m_serialPort->errorString();
|
||||
|
||||
@ -11,8 +11,13 @@ packagesExist(libudev) {
|
||||
message(Build without libudev support)
|
||||
DEFINES += DISABLE_UDEV
|
||||
}
|
||||
|
||||
PKGCONFIG += qca2-qt5
|
||||
greaterThan(QT_MAJOR_VERSION, 5) {
|
||||
# Note: available since mantic
|
||||
# PKGCONFIG += qca2-qt6
|
||||
DEFINES += DISABLE_TI
|
||||
} else {
|
||||
PKGCONFIG += qca2-qt5
|
||||
}
|
||||
|
||||
SOURCES += \
|
||||
backends/deconz/interface/zigbeeinterfacedeconz.cpp \
|
||||
@ -24,10 +29,6 @@ SOURCES += \
|
||||
backends/nxp/interface/zigbeeinterfacenxpreply.cpp \
|
||||
backends/nxp/zigbeebridgecontrollernxp.cpp \
|
||||
backends/nxp/zigbeenetworknxp.cpp \
|
||||
backends/ti/interface/zigbeeinterfaceti.cpp \
|
||||
backends/ti/interface/zigbeeinterfacetireply.cpp \
|
||||
backends/ti/zigbeebridgecontrollerti.cpp \
|
||||
backends/ti/zigbeenetworkti.cpp \
|
||||
zcl/closures/zigbeeclusterdoorlock.cpp \
|
||||
zcl/closures/zigbeeclusterwindowcovering.cpp \
|
||||
zcl/general/zigbeeclusteranaloginput.cpp \
|
||||
@ -90,6 +91,21 @@ SOURCES += \
|
||||
zigbeenode.cpp \
|
||||
zigbeeaddress.cpp
|
||||
|
||||
!contains(DEFINES, DISABLE_TI) {
|
||||
SOURCES += \
|
||||
backends/ti/interface/zigbeeinterfaceti.cpp \
|
||||
backends/ti/interface/zigbeeinterfacetireply.cpp \
|
||||
backends/ti/zigbeebridgecontrollerti.cpp \
|
||||
backends/ti/zigbeenetworkti.cpp \
|
||||
|
||||
HEADERS += \
|
||||
backends/ti/interface/ti.h \
|
||||
backends/ti/interface/zigbeeinterfaceti.h \
|
||||
backends/ti/interface/zigbeeinterfacetireply.h \
|
||||
backends/ti/zigbeebridgecontrollerti.h \
|
||||
backends/ti/zigbeenetworkti.h \
|
||||
}
|
||||
|
||||
HEADERS += \
|
||||
backends/deconz/interface/deconz.h \
|
||||
backends/deconz/interface/zigbeeinterfacedeconz.h \
|
||||
@ -102,11 +118,6 @@ HEADERS += \
|
||||
backends/nxp/interface/zigbeeinterfacenxpreply.h \
|
||||
backends/nxp/zigbeebridgecontrollernxp.h \
|
||||
backends/nxp/zigbeenetworknxp.h \
|
||||
backends/ti/interface/ti.h \
|
||||
backends/ti/interface/zigbeeinterfaceti.h \
|
||||
backends/ti/interface/zigbeeinterfacetireply.h \
|
||||
backends/ti/zigbeebridgecontrollerti.h \
|
||||
backends/ti/zigbeenetworkti.h \
|
||||
zcl/closures/zigbeeclusterdoorlock.h \
|
||||
zcl/closures/zigbeeclusterwindowcovering.h \
|
||||
zcl/general/zigbeeclusteranaloginput.h \
|
||||
|
||||
@ -39,7 +39,11 @@ ZigbeeClusterGroups::ZigbeeClusterGroups(ZigbeeNetwork *network, ZigbeeNode *nod
|
||||
ZigbeeClusterReply *ZigbeeClusterGroups::addGroup(quint16 groupId, const QString &groupName)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << groupId << static_cast<quint8>(Zigbee::CharString);
|
||||
for (int i = 0; i < groupName.length(); i++) {
|
||||
@ -51,7 +55,11 @@ ZigbeeClusterReply *ZigbeeClusterGroups::addGroup(quint16 groupId, const QString
|
||||
ZigbeeClusterReply *ZigbeeClusterGroups::viewGroup(quint16 groupId)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << groupId;
|
||||
return executeClusterCommand(ZigbeeClusterGroups::CommandViewGroup, payload);
|
||||
@ -60,7 +68,11 @@ ZigbeeClusterReply *ZigbeeClusterGroups::viewGroup(quint16 groupId)
|
||||
ZigbeeClusterReply *ZigbeeClusterGroups::getGroupMembership(quint8 groupCount, const QList<quint16> &groupList)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << groupCount;
|
||||
for (int i = 0; i < groupList.length(); i++) {
|
||||
@ -72,7 +84,11 @@ ZigbeeClusterReply *ZigbeeClusterGroups::getGroupMembership(quint8 groupCount, c
|
||||
ZigbeeClusterReply *ZigbeeClusterGroups::removeGroup(quint16 groupId)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << groupId;
|
||||
return executeClusterCommand(ZigbeeClusterGroups::CommandRemoveGroup, payload);
|
||||
@ -86,7 +102,11 @@ ZigbeeClusterReply *ZigbeeClusterGroups::removeAllGroups()
|
||||
ZigbeeClusterReply *ZigbeeClusterGroups::addGroupIfIdentifying(quint16 groupId, const QString &groupName)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << groupId << static_cast<quint8>(Zigbee::CharString);
|
||||
for (int i = 0; i < groupName.length(); i++) {
|
||||
|
||||
@ -44,7 +44,11 @@ void ZigbeeClusterScenes::processDataIndication(ZigbeeClusterLibrary::Frame fram
|
||||
// Read the payload which is
|
||||
Command command = static_cast<Command>(frame.header.command);
|
||||
QByteArray payload = frame.payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream payloadStream(&payload, QDataStream::ReadOnly);
|
||||
#else
|
||||
QDataStream payloadStream(&payload, QIODevice::ReadOnly);
|
||||
#endif
|
||||
payloadStream.setByteOrder(QDataStream::LittleEndian);
|
||||
quint16 groupId = 0; quint8 sceneId;
|
||||
payloadStream >> groupId >> sceneId;
|
||||
|
||||
@ -40,7 +40,11 @@ ZigbeeClusterIasWd::ZigbeeClusterIasWd(ZigbeeNetwork *network, ZigbeeNode *node,
|
||||
ZigbeeClusterReply *ZigbeeClusterIasWd::startWarning(WarningMode warningMode, bool strobeEnabled, SirenLevel sirenLevel, quint16 duration, quint8 strobeDutyCycle, StrobeLevel strobeLevel)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << static_cast<quint8>(warningMode | (strobeEnabled ? 0x04 : 0x00) | sirenLevel);
|
||||
stream << duration;
|
||||
@ -55,7 +59,11 @@ ZigbeeClusterReply *ZigbeeClusterIasWd::startWarning(WarningMode warningMode, bo
|
||||
ZigbeeClusterReply *ZigbeeClusterIasWd::squawk(SquawkMode squawkMode, bool strobeEnabled, SquawkLevel squawkLevel)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << static_cast<quint8>(squawkMode | (strobeEnabled ? 0x08 : 0x00) | squawkLevel);
|
||||
qCDebug(dcZigbeeCluster) << "Sending payload:" << payload.toHex();
|
||||
|
||||
@ -80,7 +80,12 @@ ZigbeeClusterLibrary::FrameControl ZigbeeClusterLibrary::parseFrameControlByte(q
|
||||
QByteArray ZigbeeClusterLibrary::buildHeader(const ZigbeeClusterLibrary::Header &header)
|
||||
{
|
||||
QByteArray headerData;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&headerData, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&headerData, QIODevice::WriteOnly);
|
||||
#endif
|
||||
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << buildFrameControlByte(header.frameControl);
|
||||
|
||||
@ -144,7 +149,11 @@ QList<ZigbeeClusterLibrary::ReadAttributeStatusRecord> ZigbeeClusterLibrary::par
|
||||
ZigbeeDataType ZigbeeClusterLibrary::readDataType(QDataStream *stream, Zigbee::DataType dataType)
|
||||
{
|
||||
QByteArray data; quint16 numberOfElenemts = 0; quint8 elementType = 0;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream dataStream(&data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream dataStream(&data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
dataStream.setByteOrder(QDataStream::LittleEndian);
|
||||
|
||||
// Parse data depending on the type
|
||||
@ -257,7 +266,11 @@ QByteArray ZigbeeClusterLibrary::buildFrame(const ZigbeeClusterLibrary::Frame &f
|
||||
QByteArray ZigbeeClusterLibrary::buildAttributeReportingConfiguration(const ZigbeeClusterLibrary::AttributeReportingConfiguration &reportingConfiguration)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << static_cast<quint8>(reportingConfiguration.direction);
|
||||
stream << reportingConfiguration.attributeId;
|
||||
@ -265,7 +278,7 @@ QByteArray ZigbeeClusterLibrary::buildAttributeReportingConfiguration(const Zigb
|
||||
stream << reportingConfiguration.minReportingInterval;
|
||||
stream << reportingConfiguration.maxReportingInterval;
|
||||
|
||||
for (int i = 0; i < reportingConfiguration.reportableChange.count(); i++) {
|
||||
for (int i = 0; i < reportingConfiguration.reportableChange.size(); i++) {
|
||||
stream << static_cast<quint8>(reportingConfiguration.reportableChange.at(i));
|
||||
}
|
||||
|
||||
@ -280,11 +293,15 @@ QByteArray ZigbeeClusterLibrary::buildAttributeReportingConfiguration(const Zigb
|
||||
QByteArray ZigbeeClusterLibrary::buildWriteAttributeRecord(const ZigbeeClusterLibrary::WriteAttributeRecord &writeAttributeRecord)
|
||||
{
|
||||
QByteArray payload;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&payload, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&payload, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << writeAttributeRecord.attributeId;
|
||||
stream << static_cast<quint8>(writeAttributeRecord.dataType);
|
||||
for (int i = 0; i < writeAttributeRecord.data.count(); i++) {
|
||||
for (int i = 0; i < writeAttributeRecord.data.size(); i++) {
|
||||
stream << static_cast<quint8>(writeAttributeRecord.data.at(i));
|
||||
}
|
||||
|
||||
|
||||
@ -174,7 +174,11 @@ ZigbeeDataType::ZigbeeDataType(quint8 value)
|
||||
{
|
||||
setDataType(Zigbee::Uint8);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
}
|
||||
@ -183,7 +187,11 @@ ZigbeeDataType::ZigbeeDataType(quint16 value)
|
||||
{
|
||||
setDataType(Zigbee::Uint16);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
}
|
||||
@ -193,7 +201,11 @@ ZigbeeDataType::ZigbeeDataType(quint32 value, Zigbee::DataType dataType)
|
||||
Q_ASSERT_X(dataType == Zigbee::Uint24 || dataType == Zigbee::Uint32, "ZigbeeDataType", "invalid data type for quint32 constructor");
|
||||
setDataType(dataType);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
|
||||
@ -207,7 +219,11 @@ ZigbeeDataType::ZigbeeDataType(quint64 value, Zigbee::DataType dataType)
|
||||
Q_ASSERT_X(dataType == Zigbee::Uint40 || dataType == Zigbee::Uint48 || dataType == Zigbee::Uint56 || dataType == Zigbee::Uint64, "ZigbeeDataType", "invalid data type for quint64 constructor");
|
||||
setDataType(dataType);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
|
||||
@ -224,7 +240,11 @@ ZigbeeDataType::ZigbeeDataType(qint8 value)
|
||||
{
|
||||
setDataType(Zigbee::Int8);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
}
|
||||
@ -233,7 +253,11 @@ ZigbeeDataType::ZigbeeDataType(qint16 value)
|
||||
{
|
||||
setDataType(Zigbee::Int16);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
}
|
||||
@ -243,7 +267,11 @@ ZigbeeDataType::ZigbeeDataType(qint32 value, Zigbee::DataType dataType)
|
||||
Q_ASSERT_X(dataType == Zigbee::Int24 || dataType == Zigbee::Int32, "ZigbeeDataType", "invalid data type for qint32 constructor");
|
||||
setDataType(dataType);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
|
||||
@ -257,7 +285,11 @@ ZigbeeDataType::ZigbeeDataType(qint64 value, Zigbee::DataType dataType)
|
||||
Q_ASSERT_X(dataType == Zigbee::Int40 || dataType == Zigbee::Int48 || dataType == Zigbee::Int56 || dataType == Zigbee::Int64, "ZigbeeDataType", "invalid data type for qint64 constructor");
|
||||
setDataType(dataType);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << value;
|
||||
|
||||
@ -274,7 +306,11 @@ ZigbeeDataType::ZigbeeDataType(bool value)
|
||||
{
|
||||
setDataType(Zigbee::Bool);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
stream << (value ? static_cast<quint8>(1) : static_cast<quint8>(0));
|
||||
}
|
||||
@ -284,7 +320,11 @@ ZigbeeDataType::ZigbeeDataType(const QString &value, Zigbee::DataType dataType)
|
||||
Q_ASSERT_X(dataType == Zigbee::OctetString || dataType == Zigbee::CharString || dataType == Zigbee::LongOctetString || dataType == Zigbee::LongCharString, "ZigbeeDataType", "invalid data type for QString constructor");
|
||||
setDataType(dataType);
|
||||
m_data.clear();
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&m_data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&m_data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream.setByteOrder(QDataStream::LittleEndian);
|
||||
|
||||
if (dataType == Zigbee::OctetString || dataType == Zigbee::CharString) {
|
||||
@ -305,7 +345,7 @@ ZigbeeDataType::ZigbeeDataType(const QString &value, Zigbee::DataType dataType)
|
||||
quint8 ZigbeeDataType::toUInt8(bool *ok) const
|
||||
{
|
||||
if (ok) *ok = true;
|
||||
if (m_data.count() != 1) {
|
||||
if (m_data.size() != 1) {
|
||||
if (ok) *ok = false;
|
||||
return 0;
|
||||
}
|
||||
@ -318,7 +358,7 @@ quint16 ZigbeeDataType::toUInt16(bool *ok) const
|
||||
if (ok) *ok = true;
|
||||
|
||||
quint16 value = 0;
|
||||
if (m_data.count() != 2) {
|
||||
if (m_data.size() != 2) {
|
||||
if (ok) *ok = false;
|
||||
return value;
|
||||
}
|
||||
@ -341,12 +381,12 @@ quint32 ZigbeeDataType::toUInt32(bool *ok) const
|
||||
}
|
||||
|
||||
// Make sure there is enought data
|
||||
if (m_data.count() != 3 && m_data.count() != 4) {
|
||||
if (m_data.size() != 3 && m_data.size() != 4) {
|
||||
if (ok) *ok = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
if (m_data.count() == 3) {
|
||||
if (m_data.size() == 3) {
|
||||
// Make it 32 bit for converting
|
||||
QByteArray convertedData(m_data);
|
||||
convertedData.append(static_cast<char>(0));
|
||||
@ -369,7 +409,7 @@ quint64 ZigbeeDataType::toUInt64(bool *ok) const
|
||||
|
||||
switch (m_dataType) {
|
||||
case Zigbee::Uint40: {
|
||||
if (m_data.count() != 5) {
|
||||
if (m_data.size() != 5) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -385,7 +425,7 @@ quint64 ZigbeeDataType::toUInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Uint48: {
|
||||
if (m_data.count() != 6) {
|
||||
if (m_data.size() != 6) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -401,7 +441,7 @@ quint64 ZigbeeDataType::toUInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Uint56: {
|
||||
if (m_data.count() != 7) {
|
||||
if (m_data.size() != 7) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -415,7 +455,7 @@ quint64 ZigbeeDataType::toUInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Uint64: {
|
||||
if (m_data.count() != 8) {
|
||||
if (m_data.size() != 8) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -436,7 +476,7 @@ quint64 ZigbeeDataType::toUInt64(bool *ok) const
|
||||
qint8 ZigbeeDataType::toInt8(bool *ok) const
|
||||
{
|
||||
if (ok) *ok = true;
|
||||
if (m_data.count() != 1) {
|
||||
if (m_data.size() != 1) {
|
||||
if (ok) *ok = false;
|
||||
return 0;
|
||||
}
|
||||
@ -449,7 +489,7 @@ qint16 ZigbeeDataType::toInt16(bool *ok) const
|
||||
if (ok) *ok = true;
|
||||
|
||||
qint16 value = 0;
|
||||
if (m_data.count() != 2 || m_dataType != Zigbee::Int16) {
|
||||
if (m_data.size() != 2 || m_dataType != Zigbee::Int16) {
|
||||
if (ok) *ok = false;
|
||||
return value;
|
||||
}
|
||||
@ -472,12 +512,12 @@ qint32 ZigbeeDataType::toInt32(bool *ok) const
|
||||
}
|
||||
|
||||
// Make sure there is enought data
|
||||
if (m_data.count() != 3 && m_data.count() != 4) {
|
||||
if (m_data.size() != 3 && m_data.size() != 4) {
|
||||
if (ok) *ok = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
if (m_data.count() == 3) {
|
||||
if (m_data.size() == 3) {
|
||||
// Make it 32 bit for converting
|
||||
QByteArray convertedData(m_data);
|
||||
convertedData.append(static_cast<char>(0));
|
||||
@ -500,7 +540,7 @@ qint64 ZigbeeDataType::toInt64(bool *ok) const
|
||||
|
||||
switch (m_dataType) {
|
||||
case Zigbee::Int40: {
|
||||
if (m_data.count() != 5) {
|
||||
if (m_data.size() != 5) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -516,7 +556,7 @@ qint64 ZigbeeDataType::toInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Int48: {
|
||||
if (m_data.count() != 6) {
|
||||
if (m_data.size() != 6) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -532,7 +572,7 @@ qint64 ZigbeeDataType::toInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Int56: {
|
||||
if (m_data.count() != 7) {
|
||||
if (m_data.size() != 7) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -546,7 +586,7 @@ qint64 ZigbeeDataType::toInt64(bool *ok) const
|
||||
break;
|
||||
}
|
||||
case Zigbee::Int64: {
|
||||
if (m_data.count() != 8) {
|
||||
if (m_data.size() != 8) {
|
||||
if (ok) *ok = false;
|
||||
break;
|
||||
}
|
||||
@ -569,7 +609,7 @@ bool ZigbeeDataType::toBool(bool *ok) const
|
||||
if (ok) *ok = true;
|
||||
bool value = false;
|
||||
|
||||
if (m_data.count() != 1) {
|
||||
if (m_data.size() != 1) {
|
||||
if (ok) *ok = false;
|
||||
return value;
|
||||
}
|
||||
|
||||
@ -30,7 +30,6 @@
|
||||
|
||||
#include "zigbee.h"
|
||||
|
||||
|
||||
class ZigbeeDataType
|
||||
{
|
||||
public:
|
||||
|
||||
@ -74,7 +74,12 @@ QList<ZigbeeNode *> ZigbeeNetworkDatabase::loadNodes()
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Loading nodes from database" << m_db.databaseName();
|
||||
QList<ZigbeeNode *> nodes;
|
||||
QString query("SELECT * FROM nodes;");
|
||||
QSqlQuery nodesQuery = m_db.exec(query);
|
||||
QSqlQuery nodesQuery(query, m_db);
|
||||
if (!nodesQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return QList<ZigbeeNode *>();
|
||||
}
|
||||
|
||||
while (nodesQuery.next()) {
|
||||
QString ieeeAddress = nodesQuery.value("ieeeAddress").toString();
|
||||
quint16 shortAddress = nodesQuery.value("shortAddress").toUInt();
|
||||
@ -101,7 +106,13 @@ QList<ZigbeeNode *> ZigbeeNetworkDatabase::loadNodes()
|
||||
|
||||
// Now load all endpoints for this node
|
||||
query = QString("SELECT * FROM endpoints WHERE ieeeAddress = \"%1\";").arg(ieeeAddress);
|
||||
QSqlQuery endpointsQuery = m_db.exec(query);
|
||||
|
||||
QSqlQuery endpointsQuery(query, m_db);
|
||||
if (!endpointsQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return QList<ZigbeeNode *>();
|
||||
}
|
||||
|
||||
while (endpointsQuery.next()) {
|
||||
quint8 endpointId = endpointsQuery.value("endpointId").toUInt();
|
||||
ZigbeeNodeEndpoint *endpoint = new ZigbeeNodeEndpoint(m_network, node, endpointId, node);
|
||||
@ -115,7 +126,13 @@ QList<ZigbeeNode *> ZigbeeNetworkDatabase::loadNodes()
|
||||
query = QString("SELECT * FROM serverClusters WHERE endpointId = (SELECT id FROM endpoints WHERE ieeeAddress = \"%1\" AND endpointId = \"%2\");")
|
||||
.arg(ieeeAddress)
|
||||
.arg(endpointId);
|
||||
QSqlQuery inputClustersQuery = m_db.exec(query);
|
||||
|
||||
QSqlQuery inputClustersQuery(query, m_db);
|
||||
if (!inputClustersQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return QList<ZigbeeNode *>();
|
||||
}
|
||||
|
||||
while (inputClustersQuery.next()) {
|
||||
ZigbeeClusterLibrary::ClusterId clusterId = static_cast<ZigbeeClusterLibrary::ClusterId>(inputClustersQuery.value("clusterId").toUInt());
|
||||
ZigbeeCluster *cluster = endpoint->createCluster(clusterId, ZigbeeCluster::Server);
|
||||
@ -128,13 +145,18 @@ QList<ZigbeeNode *> ZigbeeNetworkDatabase::loadNodes()
|
||||
.arg(ieeeAddress)
|
||||
.arg(endpointId)
|
||||
.arg(cluster->clusterId());
|
||||
QSqlQuery attributesQuery = m_db.exec(query);
|
||||
|
||||
QSqlQuery attributesQuery(query, m_db);
|
||||
if (!attributesQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return QList<ZigbeeNode *>();
|
||||
}
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not fetch attributes from database entries." << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
while (attributesQuery.next()) {
|
||||
quint16 attributeId = attributesQuery.value("attributeId").toUInt();
|
||||
Zigbee::DataType type = static_cast<Zigbee::DataType>(attributesQuery.value("dataType").toUInt());
|
||||
@ -169,7 +191,13 @@ QList<ZigbeeNode *> ZigbeeNetworkDatabase::loadNodes()
|
||||
query = QString("SELECT * FROM clientClusters WHERE endpointId = (SELECT id FROM endpoints WHERE ieeeAddress = \"%1\" AND endpointId = \"%2\");")
|
||||
.arg(ieeeAddress)
|
||||
.arg(endpointId);
|
||||
QSqlQuery outputClustersQuery = m_db.exec(query);
|
||||
|
||||
QSqlQuery outputClustersQuery(query, m_db);
|
||||
if (!outputClustersQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return QList<ZigbeeNode *>();
|
||||
}
|
||||
|
||||
while (outputClustersQuery.next()) {
|
||||
ZigbeeClusterLibrary::ClusterId clusterId = static_cast<ZigbeeClusterLibrary::ClusterId>(outputClustersQuery.value("clusterId").toUInt());
|
||||
ZigbeeCluster *cluster = endpoint->createCluster(clusterId, ZigbeeCluster::Client);
|
||||
@ -207,11 +235,17 @@ bool ZigbeeNetworkDatabase::wipeDatabase()
|
||||
{
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Wipe all database entries from" << m_db.databaseName();
|
||||
// Note: cascade will clean all other tables
|
||||
m_db.exec("DELETE FROM nodes;");
|
||||
QSqlQuery deleteQuery("DELETE FROM nodes;", m_db);
|
||||
if (!deleteQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << deleteQuery.lastQuery() << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not delete all node database entries." << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_db.close();
|
||||
m_db = QSqlDatabase();
|
||||
QSqlDatabase::removeDatabase(m_connectionName);
|
||||
@ -237,14 +271,22 @@ bool ZigbeeNetworkDatabase::initDatabase()
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// FIXME: check schema version fro compatibility or migration
|
||||
// TODO: check schema version fro compatibility or migration
|
||||
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Tables" << m_db.tables();
|
||||
if (m_db.tables().isEmpty()) {
|
||||
// Write pragmas
|
||||
m_db.exec("PRAGMA foreign_keys = ON;");
|
||||
m_db.exec(QString("PRAGMA user_version = %1;").arg(DB_VERSION));
|
||||
QSqlQuery enableForeigenKeysQuery("PRAGMA foreign_keys = ON;", m_db);
|
||||
if (!enableForeigenKeysQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << enableForeigenKeysQuery.lastQuery() << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
}
|
||||
|
||||
QSqlQuery setUserVersionQuery(QString("PRAGMA user_version = %1;").arg(DB_VERSION), m_db);
|
||||
if (!setUserVersionQuery.exec()) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Unable to execute SQL query" << enableForeigenKeysQuery.lastQuery() << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Create nodes table
|
||||
@ -323,7 +365,9 @@ void ZigbeeNetworkDatabase::createTable(const QString &tableName, const QString
|
||||
{
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Creating table" << tableName << schema;
|
||||
QString query = QString("CREATE TABLE IF NOT EXISTS %1 %2;").arg(tableName).arg(schema);
|
||||
m_db.exec(query);
|
||||
QSqlQuery createTableQuery(query, m_db);
|
||||
createTableQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not create table in database." << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return;
|
||||
@ -333,7 +377,13 @@ void ZigbeeNetworkDatabase::createTable(const QString &tableName, const QString
|
||||
void ZigbeeNetworkDatabase::createIndices(const QString &indexName, const QString &tableName, const QString &columns)
|
||||
{
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Creating table indices" << indexName << tableName << columns;
|
||||
m_db.exec(QString("CREATE UNIQUE INDEX IF NOT EXISTS %1 ON %2(%3);").arg(indexName).arg(tableName).arg(columns));
|
||||
QString query = QString("CREATE UNIQUE INDEX IF NOT EXISTS %1 ON %2(%3);").arg(indexName).arg(tableName).arg(columns);
|
||||
QSqlQuery createTableQuery(query, m_db);
|
||||
createTableQuery.exec();
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not create indices in database." << query << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool ZigbeeNetworkDatabase::saveNodeEndpoint(ZigbeeNodeEndpoint *endpoint)
|
||||
@ -348,7 +398,8 @@ bool ZigbeeNetworkDatabase::saveNodeEndpoint(ZigbeeNodeEndpoint *endpoint)
|
||||
.arg(static_cast<quint8>(endpoint->deviceVersion()));
|
||||
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << queryString;
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery saveNodeEndpointQuery(queryString, m_db);
|
||||
saveNodeEndpointQuery.exec();
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save endpoint into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -385,7 +436,9 @@ bool ZigbeeNetworkDatabase::saveInputCluster(ZigbeeCluster *cluster)
|
||||
QString queryString = QString("INSERT OR REPLACE INTO serverClusters (endpointId, clusterId) VALUES (%1, \"%2\");")
|
||||
.arg(endpointIdReferenceQuery)
|
||||
.arg(static_cast<quint16>(cluster->clusterId()));
|
||||
m_db.exec(queryString);
|
||||
|
||||
QSqlQuery saveInputClusterQuery(queryString, m_db);
|
||||
saveInputClusterQuery.exec();
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save input cluster into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -404,7 +457,8 @@ bool ZigbeeNetworkDatabase::saveOutputCluster(ZigbeeCluster *cluster)
|
||||
.arg(endpointIdReferenceQuery)
|
||||
.arg(static_cast<quint16>(cluster->clusterId()));
|
||||
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery saveOutputClusterQuery(queryString, m_db);
|
||||
saveOutputClusterQuery.exec();
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save output cluster into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -430,9 +484,11 @@ bool ZigbeeNetworkDatabase::saveAttribute(ZigbeeCluster *cluster, const ZigbeeCl
|
||||
.arg(static_cast<quint8>(attribute.dataType().dataType()))
|
||||
.arg((attribute.dataType().data().toBase64().data()));
|
||||
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery saveClusterAttributeQuery(queryString, m_db);
|
||||
saveClusterAttributeQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save cluster cluster attribute into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save cluster attribute into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -452,7 +508,10 @@ bool ZigbeeNetworkDatabase::saveNode(ZigbeeNode *node)
|
||||
.arg(node->lastSeen().toMSecsSinceEpoch() / 1000);
|
||||
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << queryString;
|
||||
m_db.exec(queryString);
|
||||
|
||||
QSqlQuery saveNodeQuery(queryString, m_db);
|
||||
saveNodeQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not save node into database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -474,7 +533,9 @@ bool ZigbeeNetworkDatabase::updateNodeLqi(ZigbeeNode *node, quint8 lqi)
|
||||
{
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Update node LQI" << node << lqi;
|
||||
QString queryString = QString("UPDATE nodes SET lqi = \"%1\" WHERE ieeeAddress = \"%2\";").arg(lqi).arg(node->extendedAddress().toString());
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery updateNodeLqiQuery(queryString, m_db);
|
||||
updateNodeLqiQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not update node LQI value in the database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -487,7 +548,9 @@ bool ZigbeeNetworkDatabase::updateNodeNetworkAddress(ZigbeeNode *node, quint16 n
|
||||
{
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Update node network address" << node << ZigbeeUtils::convertUint16ToHexString(networkAddress);
|
||||
QString queryString = QString("UPDATE nodes SET shortAddress = \"%1\" WHERE ieeeAddress = \"%2\";").arg(networkAddress).arg(node->extendedAddress().toString());
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery updateNodeNetworkAddressQuery(queryString, m_db);
|
||||
updateNodeNetworkAddressQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not update node LQI value in the database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -501,7 +564,9 @@ bool ZigbeeNetworkDatabase::updateNodeLastSeen(ZigbeeNode *node, const QDateTime
|
||||
quint64 timestamp = lastSeen.toMSecsSinceEpoch() / 1000;
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Update node last seen UTC timestamp" << node << timestamp;
|
||||
QString queryString = QString("UPDATE nodes SET timestamp = \"%1\" WHERE ieeeAddress = \"%2\";").arg(timestamp).arg(node->extendedAddress().toString());
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery updateNodeLastSeenQuery(queryString, m_db);
|
||||
updateNodeLastSeenQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not update node timestamp value in the database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
@ -546,7 +611,9 @@ bool ZigbeeNetworkDatabase::removeNode(ZigbeeNode *node)
|
||||
qCDebug(dcZigbeeNetworkDatabase()) << "Remove" << node;
|
||||
// Note: cascade delete will clean up all other tables
|
||||
QString queryString = QString("DELETE FROM nodes WHERE ieeeAddress = \"%1\";").arg(node->extendedAddress().toString());
|
||||
m_db.exec(queryString);
|
||||
QSqlQuery removeNodeQuery(queryString, m_db);
|
||||
removeNodeQuery.exec();
|
||||
|
||||
if (m_db.lastError().type() != QSqlError::NoError) {
|
||||
qCWarning(dcZigbeeNetworkDatabase()) << "Could not remove node from database." << queryString << m_db.lastError().databaseText() << m_db.lastError().driverText();
|
||||
return false;
|
||||
|
||||
@ -45,7 +45,7 @@ ZigbeeNetworkKey::ZigbeeNetworkKey(const QString &keyString)
|
||||
if (rawKey.isEmpty())
|
||||
return;
|
||||
|
||||
Q_ASSERT_X(rawKey.count() == 32, "ZigbeeNetworkKey", "invalid key length in ZigbeeNetworkKey(QString).");
|
||||
Q_ASSERT_X(rawKey.size() == 32, "ZigbeeNetworkKey", "invalid key length in ZigbeeNetworkKey(QString).");
|
||||
m_key = QByteArray::fromHex(rawKey.toLatin1());
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ ZigbeeNetworkKey::ZigbeeNetworkKey(const QByteArray &key) :
|
||||
|
||||
bool ZigbeeNetworkKey::isValid() const
|
||||
{
|
||||
return m_key.count() == 16;
|
||||
return m_key.size() == 16;
|
||||
}
|
||||
|
||||
bool ZigbeeNetworkKey::isNull() const
|
||||
@ -88,7 +88,12 @@ QByteArray ZigbeeNetworkKey::toByteArray() const
|
||||
ZigbeeNetworkKey ZigbeeNetworkKey::generateKey()
|
||||
{
|
||||
QByteArray keyData;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&keyData, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&keyData, QIODevice::WriteOnly);
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < 16; i++) {
|
||||
stream << static_cast<quint8>(rand() % (256 - 1) + 1);
|
||||
}
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
#include "loggingcategory.h"
|
||||
|
||||
#include <QSerialPortInfo>
|
||||
#include <QRegularExpression>
|
||||
|
||||
#ifndef DISABLE_UDEV
|
||||
#include <libudev.h>
|
||||
@ -238,7 +239,7 @@ void ZigbeeUartAdapterMonitor::addAdapterInternally(const QString &serialPort)
|
||||
adapter.setBaudRate(115200);
|
||||
}
|
||||
QStringList zStackModels = {"cc2530", "cc2531", "cc2538", "cc1352p", "cc2652p", "cc2652r", "cc2652rb", "sonoff zigbee 3.0 usb"};
|
||||
if (QRegExp(".*(" + zStackModels.join("|") + ").*").exactMatch(serialPortInfo.description().toLower())) {
|
||||
if (QRegularExpression(".*(" + zStackModels.join("|") + ").*").match(serialPortInfo.description().toLower()).hasMatch()) {
|
||||
adapter.setHardwareRecognized(true);
|
||||
adapter.setBackendType(Zigbee::ZigbeeBackendTypeTi);
|
||||
adapter.setBaudRate(115200);
|
||||
|
||||
@ -134,10 +134,10 @@ static QList<QColor> colorTemperatureScale = {
|
||||
|
||||
QBitArray ZigbeeUtils::convertByteArrayToBitArray(const QByteArray &byteArray)
|
||||
{
|
||||
QBitArray bitArray(byteArray.count() * 8);
|
||||
QBitArray bitArray(byteArray.size() * 8);
|
||||
|
||||
// Convert from QByteArray to QBitArray
|
||||
for(int i = 0; i < byteArray.count(); ++i) {
|
||||
for(int i = 0; i < byteArray.size(); ++i) {
|
||||
for(int b = 0; b < 8; b++) {
|
||||
bitArray.setBit(i * 8 + b, byteArray.at(i) & (1 << ( 7 - b)));
|
||||
}
|
||||
@ -168,7 +168,7 @@ bool ZigbeeUtils::checkBitUint16(const quint16 &value, const int &bitNumber)
|
||||
|
||||
quint16 ZigbeeUtils::convertByteArrayToUint16(const QByteArray &data)
|
||||
{
|
||||
Q_ASSERT_X(data.count() == 2, "converting data", "Invalid byte array size for converting to quint16");
|
||||
Q_ASSERT_X(data.size() == 2, "converting data", "Invalid byte array size for converting to quint16");
|
||||
|
||||
quint16 value = static_cast<quint8>(data.at(0));
|
||||
value <<= 8;
|
||||
@ -178,7 +178,7 @@ quint16 ZigbeeUtils::convertByteArrayToUint16(const QByteArray &data)
|
||||
|
||||
quint64 ZigbeeUtils::convertByteArrayToUint64(const QByteArray &data)
|
||||
{
|
||||
Q_ASSERT_X(data.count() == 8, "converting data", "Invalid byte array size for converting to quint64");
|
||||
Q_ASSERT_X(data.size() == 8, "converting data", "Invalid byte array size for converting to quint64");
|
||||
|
||||
quint64 value = static_cast<quint8>(data.at(0));
|
||||
value <<= 8;
|
||||
@ -208,9 +208,9 @@ QString ZigbeeUtils::convertByteToHexString(const quint8 &byte)
|
||||
QString ZigbeeUtils::convertByteArrayToHexString(const QByteArray &byteArray)
|
||||
{
|
||||
QString hexString;
|
||||
for (int i = 0; i < byteArray.count(); i++) {
|
||||
for (int i = 0; i < byteArray.size(); i++) {
|
||||
hexString.append(convertByteToHexString(static_cast<quint8>(byteArray.at(i))));
|
||||
if (i != byteArray.count() - 1) {
|
||||
if (i != byteArray.size() - 1) {
|
||||
hexString.append(" ");
|
||||
}
|
||||
}
|
||||
@ -220,7 +220,11 @@ QString ZigbeeUtils::convertByteArrayToHexString(const QByteArray &byteArray)
|
||||
QString ZigbeeUtils::convertUint16ToHexString(const quint16 &value)
|
||||
{
|
||||
QByteArray data;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream << value;
|
||||
|
||||
return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x"));
|
||||
@ -229,7 +233,11 @@ QString ZigbeeUtils::convertUint16ToHexString(const quint16 &value)
|
||||
QString ZigbeeUtils::convertUint32ToHexString(const quint32 &value)
|
||||
{
|
||||
QByteArray data;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream << value;
|
||||
|
||||
return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x"));
|
||||
@ -238,7 +246,11 @@ QString ZigbeeUtils::convertUint32ToHexString(const quint32 &value)
|
||||
QString ZigbeeUtils::convertUint64ToHexString(const quint64 &value)
|
||||
{
|
||||
QByteArray data;
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QDataStream stream(&data, QDataStream::WriteOnly);
|
||||
#else
|
||||
QDataStream stream(&data, QIODevice::WriteOnly);
|
||||
#endif
|
||||
stream << value;
|
||||
return QString("0x%1").arg(convertByteArrayToHexString(data).remove(" ").remove("0x"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user