From 51938500b6ba5377d112d8293085d32e99c9edbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 12 Feb 2019 14:41:57 +0100 Subject: [PATCH] Add baudrate settings --- libqtzigbee/interface/zigbeeinterface.cpp | 5 +++-- libqtzigbee/interface/zigbeeinterface.h | 2 +- libqtzigbee/zigbeebridgecontroller.cpp | 4 ++-- libqtzigbee/zigbeebridgecontroller.h | 2 +- libqtzigbee/zigbeenetworkmanager.cpp | 4 ++-- libqtzigbee/zigbeenetworkmanager.h | 2 +- zigbee-cli/core.cpp | 7 ++++--- zigbee-cli/core.h | 3 ++- zigbee-cli/main.cpp | 16 +++++++++++++--- 9 files changed, 29 insertions(+), 16 deletions(-) diff --git a/libqtzigbee/interface/zigbeeinterface.cpp b/libqtzigbee/interface/zigbeeinterface.cpp index 203c7b7..bd2d400 100644 --- a/libqtzigbee/interface/zigbeeinterface.cpp +++ b/libqtzigbee/interface/zigbeeinterface.cpp @@ -166,7 +166,7 @@ void ZigbeeInterface::onError(const QSerialPort::SerialPortError &error) } } -bool ZigbeeInterface::enable(const QString &serialPort) +bool ZigbeeInterface::enable(const QString &serialPort, qint32 baudrate) { if (m_serialPort) { delete m_serialPort; @@ -174,7 +174,8 @@ bool ZigbeeInterface::enable(const QString &serialPort) } m_serialPort = new QSerialPort(serialPort, this); - m_serialPort->setBaudRate(QSerialPort::Baud115200); + //m_serialPort->setBaudRate(QSerialPort::Baud115200); + m_serialPort->setBaudRate(baudrate); m_serialPort->setDataBits(QSerialPort::Data8); m_serialPort->setParity(QSerialPort::NoParity); m_serialPort->setFlowControl(QSerialPort::NoFlowControl); diff --git a/libqtzigbee/interface/zigbeeinterface.h b/libqtzigbee/interface/zigbeeinterface.h index e7331ad..292ba8d 100644 --- a/libqtzigbee/interface/zigbeeinterface.h +++ b/libqtzigbee/interface/zigbeeinterface.h @@ -56,7 +56,7 @@ private slots: void onError(const QSerialPort::SerialPortError &error); public slots: - bool enable(const QString &serialPort = "/dev/ttyS0"); + bool enable(const QString &serialPort = "/dev/ttyS0", qint32 baudrate = 115200); void disable(); void sendMessage(const ZigbeeInterfaceMessage &message); diff --git a/libqtzigbee/zigbeebridgecontroller.cpp b/libqtzigbee/zigbeebridgecontroller.cpp index 008cf09..f736c42 100644 --- a/libqtzigbee/zigbeebridgecontroller.cpp +++ b/libqtzigbee/zigbeebridgecontroller.cpp @@ -1,14 +1,14 @@ #include "zigbeebridgecontroller.h" #include "loggingcategory.h" -ZigbeeBridgeController::ZigbeeBridgeController(const QString &serialPort, QObject *parent) : +ZigbeeBridgeController::ZigbeeBridgeController(const QString &serialPort, qint32 baudrate, QObject *parent) : QObject(parent) { m_interface = new ZigbeeInterface(this); connect(m_interface, &ZigbeeInterface::messageReceived, this, &ZigbeeBridgeController::onMessageReceived); - if (!m_interface->enable(serialPort)) { + if (!m_interface->enable(serialPort, baudrate)) { qCCritical(dcZigbeeController()) << "Could not enable ZigbeeInterface on" << serialPort; return; } diff --git a/libqtzigbee/zigbeebridgecontroller.h b/libqtzigbee/zigbeebridgecontroller.h index 7a3eb53..f634ba2 100644 --- a/libqtzigbee/zigbeebridgecontroller.h +++ b/libqtzigbee/zigbeebridgecontroller.h @@ -14,7 +14,7 @@ class ZigbeeBridgeController : public QObject { Q_OBJECT public: - explicit ZigbeeBridgeController(const QString &serialPort, QObject *parent = nullptr); + explicit ZigbeeBridgeController(const QString &serialPort, qint32 baudrate, QObject *parent = nullptr); bool available() const; diff --git a/libqtzigbee/zigbeenetworkmanager.cpp b/libqtzigbee/zigbeenetworkmanager.cpp index 3789ede..4382c0a 100644 --- a/libqtzigbee/zigbeenetworkmanager.cpp +++ b/libqtzigbee/zigbeenetworkmanager.cpp @@ -6,8 +6,8 @@ #include #include -ZigbeeNetworkManager::ZigbeeNetworkManager(const int &channel, const QString &serialPort, QObject *parent) : - ZigbeeNode(new ZigbeeBridgeController(serialPort, parent), parent), +ZigbeeNetworkManager::ZigbeeNetworkManager(const int &channel, const QString &serialPort, qint32 baudrate, QObject *parent) : + ZigbeeNode(new ZigbeeBridgeController(serialPort, baudrate, parent), parent), m_serialPort(serialPort) { connect(controller(), &ZigbeeBridgeController::messageReceived, this, &ZigbeeNetworkManager::onMessageReceived); diff --git a/libqtzigbee/zigbeenetworkmanager.h b/libqtzigbee/zigbeenetworkmanager.h index 8b53923..99c6c48 100644 --- a/libqtzigbee/zigbeenetworkmanager.h +++ b/libqtzigbee/zigbeenetworkmanager.h @@ -11,7 +11,7 @@ class ZigbeeNetworkManager : public ZigbeeNode { Q_OBJECT public: - explicit ZigbeeNetworkManager(const int &channel = 0, const QString &serialPort = "/dev/ttyS0", QObject *parent = nullptr); + explicit ZigbeeNetworkManager(const int &channel = 0, const QString &serialPort = "/dev/ttyS0", qint32 baudrate = 115200, QObject *parent = nullptr); bool isAvailable() const; diff --git a/zigbee-cli/core.cpp b/zigbee-cli/core.cpp index 41a29d7..6f86253 100644 --- a/zigbee-cli/core.cpp +++ b/zigbee-cli/core.cpp @@ -4,14 +4,15 @@ #include -Core::Core(const QString &serialPort, const int &channel, QObject *parent) : +Core::Core(const QString &serialPort, qint32 baudrate, const int &channel, QObject *parent) : QObject(parent), - m_serialPort(serialPort) + m_serialPort(serialPort), + m_baudRate(baudrate) { m_channelMask = 0; m_channelMask |= 1 << (channel); - m_manager = new ZigbeeNetworkManager(channel, m_serialPort, this); + m_manager = new ZigbeeNetworkManager(channel, m_serialPort, m_baudRate, this); // Set commands TerminalCommand runCommand("run", "Run the zigbee controller in a normal non interactive mode."); diff --git a/zigbee-cli/core.h b/zigbee-cli/core.h index 38098bc..695f9be 100644 --- a/zigbee-cli/core.h +++ b/zigbee-cli/core.h @@ -15,12 +15,13 @@ class Core : public QObject { Q_OBJECT public: - explicit Core(const QString &serialPort, const int &channel, QObject *parent = nullptr); + explicit Core(const QString &serialPort, qint32 baudrate, const int &channel, QObject *parent = nullptr); private: ZigbeeNetworkManager *m_manager = nullptr; QList m_commands; QString m_serialPort; + qint32 m_baudRate; quint32 m_channelMask = 0; ZigbeeNode *findNode(const QString &shortAddressString); diff --git a/zigbee-cli/main.cpp b/zigbee-cli/main.cpp index bd635cd..5705a30 100644 --- a/zigbee-cli/main.cpp +++ b/zigbee-cli/main.cpp @@ -125,10 +125,14 @@ int main(int argc, char *argv[]) serialOption.setValueName("port"); parser.addOption(serialOption); + QCommandLineOption baudOption(QStringList() << "b" << "baudrate", "Set the serial port baud rate for the NXP controller. Default '115200'."); + baudOption.setDefaultValue("115200"); + baudOption.setValueName("baudrate"); + parser.addOption(baudOption); // Channel QCommandLineOption channelOption(QStringList() << "c" << "channel", "Set channel for the zigbee network. Channel between [11-26] are allowed. If not specified, the quitest channel will be choosen automatically."); - channelOption.setDefaultValue(0); + channelOption.setDefaultValue("0"); channelOption.setValueName("channel"); parser.addOption(channelOption); @@ -160,9 +164,15 @@ int main(int argc, char *argv[]) } } + // Check baud rate value + bool baudrateValueOk = false; + int baudrate = parser.value(baudOption).toInt(&baudrateValueOk); + if (!debugLevelValueOk) { + qCritical() << "Invalid baud rate passed:" << parser.value(baudOption) << "Reset to default baudrate 115200."; + baudrate = 115200; + } - - Core core(parser.value(serialOption), channel); + Core core(parser.value(serialOption), baudrate, channel); return application.exec(); }