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()
|
||||
{
|
||||
if (_self_addr != 0)
|
||||
return _self_addr;
|
||||
_self_addr = rw_config(CONFIG::ADDR);
|
||||
return _self_addr;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "zigbeeframe.h"
|
||||
#include "config.h"
|
||||
|
||||
#define SELF_ADDR 0xEEEE //按照实际修改
|
||||
#define DEFAULT_SELF_ADDR 0xEEEE //按照实际修改
|
||||
|
||||
namespace zigbee_protocol {
|
||||
class Protocol
|
||||
|
@ -31,6 +31,7 @@ public:
|
|||
QString en_key = "");
|
||||
QString hmac_verify_key = "11223344556677888877665544332211";
|
||||
QStringList pre_hmac_verify_key;
|
||||
u16 self_addr = DEFAULT_SELF_ADDR;
|
||||
private:
|
||||
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(QStringList pre_hmac_verify_key READ pre_hmac_verify_key WRITE setPre_hmac_verify_key NOTIFY pre_hmac_verify_keyChanged FINAL)
|
||||
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;};
|
||||
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;};
|
||||
|
@ -47,7 +47,7 @@ private:
|
|||
Event _event;
|
||||
EventsBus *_bus = 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;
|
||||
};
|
||||
#endif // ZIGBEEPARSER_H
|
||||
|
|
|
@ -373,8 +373,7 @@ RibbonTabBar {
|
|||
}
|
||||
|
||||
let repeat_count = 16
|
||||
let t = `FF 29 ${get_rand_byte()}${get_rand_byte()} 83 `+
|
||||
`${get_rand_byte()}${get_rand_byte()} ${get_rand_byte()}${get_rand_byte()} `+
|
||||
let t = `FF 29 ${get_rand_byte()}${get_rand_byte()} 83 23 32 `+
|
||||
`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++){
|
||||
t+=` ${get_rand_byte()}${get_rand_byte()}`
|
||||
|
|
|
@ -253,7 +253,7 @@ Flow{
|
|||
}
|
||||
|
||||
RibbonToolTip{
|
||||
text: "ZigBee帧 源地址"
|
||||
text: `ZigBee帧 源地址, 采用小端序,实际地址为0x${data_list[5]}${data_list[4]}`
|
||||
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)
|
||||
{
|
||||
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->id = in_frame->id;
|
||||
|
|
|
@ -26,6 +26,7 @@ SerialPortManager::SerialPortManager(QObject *parent)
|
|||
if (!_handledBymanager && _serial_port.isOpen())
|
||||
{
|
||||
_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);
|
||||
}
|
||||
else
|
||||
|
@ -192,7 +193,7 @@ bool SerialPortManager::write(QString data)
|
|||
for (auto item : td)
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ void ZigBeeParser::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, bool is
|
|||
QPair<device,device>* node = nullptr;
|
||||
memset(&temp,0,sizeof(temp));
|
||||
memset(&temp,0,sizeof(self));
|
||||
self.addr = SELF_ADDR;
|
||||
self.addr = _protocol->self_addr;
|
||||
if (!nodes.contains(((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];
|
||||
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.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("note_text",QJsonValue("向0x"+QString::number(node->first.addr,16).toUpper()+"节点发送验证通过回复信息"));
|
||||
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");
|
||||
_bus->push_data("zigbee_identify_data_view",object);
|
||||
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("note_text",QJsonValue("节点0x"+QString::number(node->first.addr,16).toUpper()+"正在使用旧密钥,发送密钥更新指令"));
|
||||
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");
|
||||
_bus->push_data("zigbee_identify_data_view",object);
|
||||
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);
|
||||
QByteArray zfdata((char *)zf.data(),zf.size());
|
||||
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("note_text",QJsonValue("向节点0x"+sender+"发送重置命令"));
|
||||
object.insert("recieved", false);
|
||||
|
@ -279,7 +279,7 @@ void ZigBeeParser::remote_addr_parser(zigbee_protocol::ZigbeeFrame &zframe, bool
|
|||
|
||||
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;
|
||||
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;
|
||||
device test;
|
||||
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);
|
||||
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;
|
||||
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;
|
||||
device test;
|
||||
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);
|
||||
data_parser(zf, message["type"] == "demo_verify_key_update");
|
||||
data_parser(zf, true);
|
||||
}
|
||||
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(' ');
|
||||
for (auto item : td)
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue