57 lines
1.7 KiB
C++
57 lines
1.7 KiB
C++
#include "dlln3x_handler.h"
|
|
|
|
DLLN3X_Handler::DLLN3X_Handler(QObject *parent)
|
|
: QObject{parent}
|
|
{
|
|
_zigbee = zigbee_protocol::DLLN3X::instance();
|
|
handle_serial(false);
|
|
serial(nullptr);
|
|
connect(this, &DLLN3X_Handler::handle_serialChanged, this, [=](){
|
|
if (_handle_serial&&_serial!=nullptr)
|
|
{
|
|
_zigbee->init(_serial, _serial->baudRate());
|
|
connect(_zigbee, &zigbee_protocol::DLLN3X::recved, this, &DLLN3X_Handler::zigbee_callback);
|
|
connect(_serial, &QSerialPort::readyRead, _zigbee, &zigbee_protocol::DLLN3X::loop);
|
|
connect(_serial, &QSerialPort::aboutToClose, this, &DLLN3X_Handler::close);
|
|
}
|
|
else
|
|
{
|
|
close();
|
|
}
|
|
});
|
|
}
|
|
|
|
void DLLN3X_Handler::zigbee_callback(zigbee_protocol::ZigbeeFrame zframe)
|
|
{
|
|
QByteArray zf = QByteArray((char *)zframe.data(),zframe.size());
|
|
QByteArray hex = zf.toHex(' ');
|
|
QByteArray data = hex.toUpper();
|
|
QByteArray num = QByteArray::number(zframe.getRemoteAddr(),16);
|
|
QByteArray sender = num.toUpper();
|
|
emit zigbee_recved(data, sender);
|
|
}
|
|
|
|
void DLLN3X_Handler::close()
|
|
{
|
|
disconnect(_zigbee, &zigbee_protocol::DLLN3X::recved, this, &DLLN3X_Handler::zigbee_callback);
|
|
disconnect(_serial, &QSerialPort::readyRead, _zigbee, &zigbee_protocol::DLLN3X::loop);
|
|
disconnect(_serial, &QSerialPort::aboutToClose, this, &DLLN3X_Handler::close);
|
|
}
|
|
|
|
bool DLLN3X_Handler::send(QString data)
|
|
{
|
|
if (_handle_serial)
|
|
{
|
|
QByteArray bdata;
|
|
QStringList td = data.split(' ');
|
|
for (auto item : td)
|
|
bdata += QByteArray::fromHex(item.toLatin1());
|
|
|
|
zigbee_protocol::ZigbeeFrame zf(bdata.data(),bdata.length());
|
|
|
|
return _zigbee->send(zf);
|
|
}
|
|
else
|
|
return false;
|
|
}
|