Add baudrate settings

This commit is contained in:
Simon Stürz 2019-02-12 14:41:57 +01:00
parent 0255dfd792
commit 51938500b6
9 changed files with 29 additions and 16 deletions

View File

@ -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) { if (m_serialPort) {
delete m_serialPort; delete m_serialPort;
@ -174,7 +174,8 @@ bool ZigbeeInterface::enable(const QString &serialPort)
} }
m_serialPort = new QSerialPort(serialPort, this); 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->setDataBits(QSerialPort::Data8);
m_serialPort->setParity(QSerialPort::NoParity); m_serialPort->setParity(QSerialPort::NoParity);
m_serialPort->setFlowControl(QSerialPort::NoFlowControl); m_serialPort->setFlowControl(QSerialPort::NoFlowControl);

View File

@ -56,7 +56,7 @@ private slots:
void onError(const QSerialPort::SerialPortError &error); void onError(const QSerialPort::SerialPortError &error);
public slots: public slots:
bool enable(const QString &serialPort = "/dev/ttyS0"); bool enable(const QString &serialPort = "/dev/ttyS0", qint32 baudrate = 115200);
void disable(); void disable();
void sendMessage(const ZigbeeInterfaceMessage &message); void sendMessage(const ZigbeeInterfaceMessage &message);

View File

@ -1,14 +1,14 @@
#include "zigbeebridgecontroller.h" #include "zigbeebridgecontroller.h"
#include "loggingcategory.h" #include "loggingcategory.h"
ZigbeeBridgeController::ZigbeeBridgeController(const QString &serialPort, QObject *parent) : ZigbeeBridgeController::ZigbeeBridgeController(const QString &serialPort, qint32 baudrate, QObject *parent) :
QObject(parent) QObject(parent)
{ {
m_interface = new ZigbeeInterface(this); m_interface = new ZigbeeInterface(this);
connect(m_interface, &ZigbeeInterface::messageReceived, this, &ZigbeeBridgeController::onMessageReceived); 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; qCCritical(dcZigbeeController()) << "Could not enable ZigbeeInterface on" << serialPort;
return; return;
} }

View File

@ -14,7 +14,7 @@ class ZigbeeBridgeController : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ZigbeeBridgeController(const QString &serialPort, QObject *parent = nullptr); explicit ZigbeeBridgeController(const QString &serialPort, qint32 baudrate, QObject *parent = nullptr);
bool available() const; bool available() const;

View File

@ -6,8 +6,8 @@
#include <QDataStream> #include <QDataStream>
#include <QSettings> #include <QSettings>
ZigbeeNetworkManager::ZigbeeNetworkManager(const int &channel, const QString &serialPort, QObject *parent) : ZigbeeNetworkManager::ZigbeeNetworkManager(const int &channel, const QString &serialPort, qint32 baudrate, QObject *parent) :
ZigbeeNode(new ZigbeeBridgeController(serialPort, parent), parent), ZigbeeNode(new ZigbeeBridgeController(serialPort, baudrate, parent), parent),
m_serialPort(serialPort) m_serialPort(serialPort)
{ {
connect(controller(), &ZigbeeBridgeController::messageReceived, this, &ZigbeeNetworkManager::onMessageReceived); connect(controller(), &ZigbeeBridgeController::messageReceived, this, &ZigbeeNetworkManager::onMessageReceived);

View File

@ -11,7 +11,7 @@ class ZigbeeNetworkManager : public ZigbeeNode
{ {
Q_OBJECT Q_OBJECT
public: 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; bool isAvailable() const;

View File

@ -4,14 +4,15 @@
#include <QCoreApplication> #include <QCoreApplication>
Core::Core(const QString &serialPort, const int &channel, QObject *parent) : Core::Core(const QString &serialPort, qint32 baudrate, const int &channel, QObject *parent) :
QObject(parent), QObject(parent),
m_serialPort(serialPort) m_serialPort(serialPort),
m_baudRate(baudrate)
{ {
m_channelMask = 0; m_channelMask = 0;
m_channelMask |= 1 << (channel); m_channelMask |= 1 << (channel);
m_manager = new ZigbeeNetworkManager(channel, m_serialPort, this); m_manager = new ZigbeeNetworkManager(channel, m_serialPort, m_baudRate, this);
// Set commands // Set commands
TerminalCommand runCommand("run", "Run the zigbee controller in a normal non interactive mode."); TerminalCommand runCommand("run", "Run the zigbee controller in a normal non interactive mode.");

View File

@ -15,12 +15,13 @@ class Core : public QObject
{ {
Q_OBJECT Q_OBJECT
public: 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: private:
ZigbeeNetworkManager *m_manager = nullptr; ZigbeeNetworkManager *m_manager = nullptr;
QList<TerminalCommand> m_commands; QList<TerminalCommand> m_commands;
QString m_serialPort; QString m_serialPort;
qint32 m_baudRate;
quint32 m_channelMask = 0; quint32 m_channelMask = 0;
ZigbeeNode *findNode(const QString &shortAddressString); ZigbeeNode *findNode(const QString &shortAddressString);

View File

@ -125,10 +125,14 @@ int main(int argc, char *argv[])
serialOption.setValueName("port"); serialOption.setValueName("port");
parser.addOption(serialOption); 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 // 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."); 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"); channelOption.setValueName("channel");
parser.addOption(channelOption); 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), baudrate, channel);
Core core(parser.value(serialOption), channel);
return application.exec(); return application.exec();
} }