ProtocolParser/app_source/source/dlln3x_handler.cpp

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;
}