SerialPort and ZigBeeParser: bug fix in windows.
This commit is contained in:
parent
e82af33bb8
commit
ce2218857f
|
@ -92,8 +92,6 @@ void DLLN3X::rled_blink(uint8_t time)
|
||||||
|
|
||||||
uint16_t DLLN3X::read_addr()
|
uint16_t DLLN3X::read_addr()
|
||||||
{
|
{
|
||||||
if (_self_addr != 0)
|
|
||||||
return _self_addr;
|
|
||||||
_self_addr = rw_config(CONFIG::ADDR);
|
_self_addr = rw_config(CONFIG::ADDR);
|
||||||
return _self_addr;
|
return _self_addr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "zigbeeframe.h"
|
#include "zigbeeframe.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#define SELF_ADDR 0xEEEE //按照实际修改
|
#define DEFAULT_SELF_ADDR 0xEEEE //按照实际修改
|
||||||
|
|
||||||
namespace zigbee_protocol {
|
namespace zigbee_protocol {
|
||||||
class Protocol
|
class Protocol
|
||||||
|
@ -31,6 +31,7 @@ public:
|
||||||
QString en_key = "");
|
QString en_key = "");
|
||||||
QString hmac_verify_key = "11223344556677888877665544332211";
|
QString hmac_verify_key = "11223344556677888877665544332211";
|
||||||
QStringList pre_hmac_verify_key;
|
QStringList pre_hmac_verify_key;
|
||||||
|
u16 self_addr = DEFAULT_SELF_ADDR;
|
||||||
private:
|
private:
|
||||||
Protocol();
|
Protocol();
|
||||||
~Protocol();
|
~Protocol();
|
||||||
|
|
|
@ -25,7 +25,7 @@ class ZigBeeParser : public QObject
|
||||||
Q_PROPERTY(QString hmac_verify_key READ hmac_verify_key WRITE setHmac_verify_key NOTIFY hmac_verify_keyChanged FINAL)
|
Q_PROPERTY(QString hmac_verify_key READ hmac_verify_key WRITE setHmac_verify_key NOTIFY hmac_verify_keyChanged FINAL)
|
||||||
Q_PROPERTY(QStringList pre_hmac_verify_key READ pre_hmac_verify_key WRITE setPre_hmac_verify_key NOTIFY pre_hmac_verify_keyChanged FINAL)
|
Q_PROPERTY(QStringList pre_hmac_verify_key READ pre_hmac_verify_key WRITE setPre_hmac_verify_key NOTIFY pre_hmac_verify_keyChanged FINAL)
|
||||||
public:
|
public:
|
||||||
Q_INVOKABLE QString self_addr(){ return _self_addr;};
|
Q_INVOKABLE QString self_addr(){ _self_addr = QString::number(_protocol->self_addr,16).toUpper(); return _self_addr;};
|
||||||
QString hmac_verify_key(){ return _protocol->hmac_verify_key;};
|
QString hmac_verify_key(){ return _protocol->hmac_verify_key;};
|
||||||
void setHmac_verify_key(QString key){ _config->Set("Protocol","hmac_verify_key",key); _protocol->hmac_verify_key = key;emit hmac_verify_keyChanged();};
|
void setHmac_verify_key(QString key){ _config->Set("Protocol","hmac_verify_key",key); _protocol->hmac_verify_key = key;emit hmac_verify_keyChanged();};
|
||||||
QStringList pre_hmac_verify_key(){ return _protocol->pre_hmac_verify_key;};
|
QStringList pre_hmac_verify_key(){ return _protocol->pre_hmac_verify_key;};
|
||||||
|
@ -47,7 +47,7 @@ private:
|
||||||
Event _event;
|
Event _event;
|
||||||
EventsBus *_bus = nullptr;
|
EventsBus *_bus = nullptr;
|
||||||
zigbee_protocol::Protocol* _protocol = nullptr;
|
zigbee_protocol::Protocol* _protocol = nullptr;
|
||||||
QString _self_addr = QString::number(SELF_ADDR,16).toUpper();
|
QString _self_addr = QString::number(DEFAULT_SELF_ADDR,16).toUpper();
|
||||||
Config* _config = nullptr;
|
Config* _config = nullptr;
|
||||||
};
|
};
|
||||||
#endif // ZIGBEEPARSER_H
|
#endif // ZIGBEEPARSER_H
|
||||||
|
|
|
@ -373,8 +373,7 @@ RibbonTabBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
let repeat_count = 16
|
let repeat_count = 16
|
||||||
let t = `FF 29 ${get_rand_byte()}${get_rand_byte()} 83 `+
|
let t = `FF 29 ${get_rand_byte()}${get_rand_byte()} 83 23 32 `+
|
||||||
`${get_rand_byte()}${get_rand_byte()} ${get_rand_byte()}${get_rand_byte()} `+
|
|
||||||
`AA AD 23 32 52 48 23 32 01 00 17 00 00 00 AA AA 01 00 10 00 00 `
|
`AA AD 23 32 52 48 23 32 01 00 17 00 00 00 AA AA 01 00 10 00 00 `
|
||||||
for (let j=0;j<repeat_count;j++){
|
for (let j=0;j<repeat_count;j++){
|
||||||
t+=` ${get_rand_byte()}${get_rand_byte()}`
|
t+=` ${get_rand_byte()}${get_rand_byte()}`
|
||||||
|
|
|
@ -253,7 +253,7 @@ Flow{
|
||||||
}
|
}
|
||||||
|
|
||||||
RibbonToolTip{
|
RibbonToolTip{
|
||||||
text: "ZigBee帧 源地址"
|
text: `ZigBee帧 源地址, 采用小端序,实际地址为0x${data_list[5]}${data_list[4]}`
|
||||||
visible: z_address_hh.hovered && control.show_tooltip
|
visible: z_address_hh.hovered && control.show_tooltip
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ void Protocol::base_frame_maker(void *in_frame, base_frame *out_frame, u16 dest_
|
||||||
|
|
||||||
bool Protocol::base_frame_parser(base_frame *in_frame, void **out_frame , device *dev)
|
bool Protocol::base_frame_parser(base_frame *in_frame, void **out_frame , device *dev)
|
||||||
{
|
{
|
||||||
if (in_frame->des_addr == SELF_ADDR && (dev->id == 0||in_frame->reset_num==0xDD||((in_frame->id > dev->id && in_frame->id<=BASE_FRAME_RESET_NUM))))
|
if (in_frame->des_addr == self_addr && (dev->id == 0||in_frame->reset_num==0xDD||((in_frame->id > dev->id && in_frame->id<=BASE_FRAME_RESET_NUM))))
|
||||||
{
|
{
|
||||||
dev->addr = in_frame->ori_addr;
|
dev->addr = in_frame->ori_addr;
|
||||||
dev->id = in_frame->id;
|
dev->id = in_frame->id;
|
||||||
|
|
|
@ -26,6 +26,7 @@ SerialPortManager::SerialPortManager(QObject *parent)
|
||||||
if (!_handledBymanager && _serial_port.isOpen())
|
if (!_handledBymanager && _serial_port.isOpen())
|
||||||
{
|
{
|
||||||
_zigbee->init(&_serial_port, _serial_port.baudRate());
|
_zigbee->init(&_serial_port, _serial_port.baudRate());
|
||||||
|
zigbee_protocol::Protocol::getInstance()->self_addr = _zigbee->read_addr();
|
||||||
connect(_zigbee, &zigbee_protocol::DLLN3X::recved, this, &SerialPortManager::zigbee_callback);
|
connect(_zigbee, &zigbee_protocol::DLLN3X::recved, this, &SerialPortManager::zigbee_callback);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -192,7 +193,7 @@ bool SerialPortManager::write(QString data)
|
||||||
for (auto item : td)
|
for (auto item : td)
|
||||||
bdata += QByteArray::fromHex(item.toLatin1());
|
bdata += QByteArray::fromHex(item.toLatin1());
|
||||||
|
|
||||||
zigbee_protocol::ZigbeeFrame zf(bdata[2],bdata[3],(uint16_t)bdata[4] | bdata[5]<<8, bdata.data()+6,bdata.length()-7);
|
zigbee_protocol::ZigbeeFrame zf(bdata[2],bdata[3],*(uint16_t*)(bdata.data()+4), bdata.data()+6,bdata.length()-7);
|
||||||
|
|
||||||
return _zigbee->send(zf);
|
return _zigbee->send(zf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
||||||
QPair<device,device>* node = nullptr;
|
QPair<device,device>* node = nullptr;
|
||||||
memset(&temp,0,sizeof(temp));
|
memset(&temp,0,sizeof(temp));
|
||||||
memset(&temp,0,sizeof(self));
|
memset(&temp,0,sizeof(self));
|
||||||
self.addr = SELF_ADDR;
|
self.addr = _protocol->self_addr;
|
||||||
if (!nodes.contains(((base_frame *)zframe.getData().data())->ori_addr))
|
if (!nodes.contains(((base_frame *)zframe.getData().data())->ori_addr))
|
||||||
{
|
{
|
||||||
temp.addr=((base_frame *)zframe.getData().data())->ori_addr;
|
temp.addr=((base_frame *)zframe.getData().data())->ori_addr;
|
||||||
|
@ -75,7 +75,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
||||||
}
|
}
|
||||||
node = &nodes[((base_frame *)zframe.getData().data())->ori_addr];
|
node = &nodes[((base_frame *)zframe.getData().data())->ori_addr];
|
||||||
bframe = (base_frame*)zframe.getData().data();
|
bframe = (base_frame*)zframe.getData().data();
|
||||||
if (is_demo || bframe->des_addr == SELF_ADDR && (node->first.id == 0||bframe->reset_num==0xDD||((bframe->id > node->first.id && bframe->id<=BASE_FRAME_RESET_NUM))))
|
if (is_demo || bframe->des_addr == _protocol->self_addr && (node->first.id == 0||bframe->reset_num==0xDD||((bframe->id > node->first.id && bframe->id<=BASE_FRAME_RESET_NUM))))
|
||||||
{
|
{
|
||||||
node->first.addr = bframe->ori_addr;
|
node->first.addr = bframe->ori_addr;
|
||||||
node->first.id = bframe->id;
|
node->first.id = bframe->id;
|
||||||
|
@ -126,7 +126,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
||||||
object.insert("text",QJsonValue(QString(zdata.toHex(' ').toUpper())));
|
object.insert("text",QJsonValue(QString(zdata.toHex(' ').toUpper())));
|
||||||
object.insert("note_text",QJsonValue("向0x"+QString::number(node->first.addr,16).toUpper()+"节点发送验证通过回复信息"));
|
object.insert("note_text",QJsonValue("向0x"+QString::number(node->first.addr,16).toUpper()+"节点发送验证通过回复信息"));
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
object.insert("sender", QString::number(SELF_ADDR,16).toUpper());
|
object.insert("sender", QString::number(_protocol->self_addr,16).toUpper());
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
_bus->push_data("zigbee_identify_data_view",object);
|
_bus->push_data("zigbee_identify_data_view",object);
|
||||||
if(!is_demo)
|
if(!is_demo)
|
||||||
|
@ -160,7 +160,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
||||||
object.insert("text",QJsonValue(QString(zfdata.toHex(' ').toUpper())));
|
object.insert("text",QJsonValue(QString(zfdata.toHex(' ').toUpper())));
|
||||||
object.insert("note_text",QJsonValue("节点0x"+QString::number(node->first.addr,16).toUpper()+"正在使用旧密钥,发送密钥更新指令"));
|
object.insert("note_text",QJsonValue("节点0x"+QString::number(node->first.addr,16).toUpper()+"正在使用旧密钥,发送密钥更新指令"));
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
object.insert("sender", QString::number(SELF_ADDR,16).toUpper());
|
object.insert("sender", QString::number(_protocol->self_addr,16).toUpper());
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
_bus->push_data("zigbee_identify_data_view",object);
|
_bus->push_data("zigbee_identify_data_view",object);
|
||||||
if(!is_demo)
|
if(!is_demo)
|
||||||
|
@ -253,7 +253,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
||||||
zigbee_protocol::ZigbeeFrame zf(0x83,0x83,node->first.addr,(char *)&bframe,bframe.length);
|
zigbee_protocol::ZigbeeFrame zf(0x83,0x83,node->first.addr,(char *)&bframe,bframe.length);
|
||||||
QByteArray zfdata((char *)zf.data(),zf.size());
|
QByteArray zfdata((char *)zf.data(),zf.size());
|
||||||
QJsonObject object;
|
QJsonObject object;
|
||||||
object.insert("sender", QString::number(SELF_ADDR,16).toUpper());
|
object.insert("sender", QString::number(_protocol->self_addr,16).toUpper());
|
||||||
object.insert("text",QJsonValue(QString(zfdata.toHex(' ').toUpper())));
|
object.insert("text",QJsonValue(QString(zfdata.toHex(' ').toUpper())));
|
||||||
object.insert("note_text",QJsonValue("向节点0x"+sender+"发送重置命令"));
|
object.insert("note_text",QJsonValue("向节点0x"+sender+"发送重置命令"));
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
|
@ -279,7 +279,7 @@ void ZigBeeParser::remote_addr_parser(zigbee_protocol::ZigbeeFrame &zframe, bool
|
||||||
|
|
||||||
void ZigBeeParser::message_parser(QJsonObject message)
|
void ZigBeeParser::message_parser(QJsonObject message)
|
||||||
{
|
{
|
||||||
if (message["type"] == "demo_verify_request" || message["type"] == "zigbee_verify_request")
|
if (message["type"] == "demo_verify_request")
|
||||||
{
|
{
|
||||||
hmac_frame frame;
|
hmac_frame frame;
|
||||||
frame.value = QRandomGenerator::global()->bounded(256);
|
frame.value = QRandomGenerator::global()->bounded(256);
|
||||||
|
@ -290,11 +290,11 @@ void ZigBeeParser::message_parser(QJsonObject message)
|
||||||
new_base_frame(50 + BASE_FRAME_PREFIX_LEN) bframe;
|
new_base_frame(50 + BASE_FRAME_PREFIX_LEN) bframe;
|
||||||
device test;
|
device test;
|
||||||
test.addr = 0x5656;
|
test.addr = 0x5656;
|
||||||
_protocol->base_frame_maker(&frame, (base_frame *)&bframe, 0x5656, &test);
|
_protocol->base_frame_maker(&frame, (base_frame *)&bframe, _protocol->self_addr, &test);
|
||||||
zigbee_protocol::ZigbeeFrame zf(0x81,0x81,0x5656,(char*)&bframe,bframe.length);
|
zigbee_protocol::ZigbeeFrame zf(0x81,0x81,0x5656,(char*)&bframe,bframe.length);
|
||||||
data_parser(zf, message["type"] == "demo_verify_request");
|
data_parser(zf, true);
|
||||||
}
|
}
|
||||||
if (message["type"] == "demo_verify_key_update" || message["type"] == "zigbee_verify_key_update")
|
if (message["type"] == "demo_verify_key_update")
|
||||||
{
|
{
|
||||||
hmac_frame frame;
|
hmac_frame frame;
|
||||||
frame.value = QRandomGenerator::global()->bounded(256);
|
frame.value = QRandomGenerator::global()->bounded(256);
|
||||||
|
@ -305,9 +305,9 @@ void ZigBeeParser::message_parser(QJsonObject message)
|
||||||
new_base_frame(50 + BASE_FRAME_PREFIX_LEN) bframe;
|
new_base_frame(50 + BASE_FRAME_PREFIX_LEN) bframe;
|
||||||
device test;
|
device test;
|
||||||
test.addr = 0x5656;
|
test.addr = 0x5656;
|
||||||
_protocol->base_frame_maker(&frame, (base_frame *)&bframe, 0x5656, &test);
|
_protocol->base_frame_maker(&frame, (base_frame *)&bframe, _protocol->self_addr, &test);
|
||||||
zigbee_protocol::ZigbeeFrame zf(0x81,0x81,0x5656,(char*)&bframe,bframe.length);
|
zigbee_protocol::ZigbeeFrame zf(0x81,0x81,0x5656,(char*)&bframe,bframe.length);
|
||||||
data_parser(zf, message["type"] == "demo_verify_key_update");
|
data_parser(zf, true);
|
||||||
}
|
}
|
||||||
if (message["type"] == "demo_recv_data" || message["type"] == "zigbee_raw_data")
|
if (message["type"] == "demo_recv_data" || message["type"] == "zigbee_raw_data")
|
||||||
{
|
{
|
||||||
|
@ -316,7 +316,7 @@ void ZigBeeParser::message_parser(QJsonObject message)
|
||||||
QStringList td = data.split(' ');
|
QStringList td = data.split(' ');
|
||||||
for (auto item : td)
|
for (auto item : td)
|
||||||
bdata += QByteArray::fromHex(item.toLatin1());
|
bdata += QByteArray::fromHex(item.toLatin1());
|
||||||
zigbee_protocol::ZigbeeFrame zf(bdata[2],bdata[3],(uint16_t)bdata[4] | bdata[5]<<8, bdata.data()+6,bdata.length()-7);
|
zigbee_protocol::ZigbeeFrame zf(bdata[2],bdata[3], *(uint16_t*)(bdata.data()+4), bdata.data()+6,bdata.length()-7);
|
||||||
data_parser(zf, message["type"] == "demo_recv_data");
|
data_parser(zf, message["type"] == "demo_recv_data");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue