ZigBee: Try to improve performance in windows.
This commit is contained in:
parent
5b4cc11fc1
commit
f683bb7aa3
|
@ -11,8 +11,11 @@ class ZigBeeDataResolver : public QObject
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static ZigBeeDataResolver* instance();
|
static ZigBeeDataResolver* instance();
|
||||||
|
QList<uint16_t>& get_allow_list(){return _allow_list;};
|
||||||
|
QList<uint16_t>& get_deny_list(){return _deny_list;};
|
||||||
|
QList<uint16_t>& get_wait_queue(){return _wait_queue;};
|
||||||
public slots:
|
public slots:
|
||||||
void message_parser(QJsonObject message, QString self_addr, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue);
|
void message_parser(QJsonObject message, QString self_addr);
|
||||||
private:
|
private:
|
||||||
explicit ZigBeeDataResolver(QObject *parent = nullptr);
|
explicit ZigBeeDataResolver(QObject *parent = nullptr);
|
||||||
~ZigBeeDataResolver();
|
~ZigBeeDataResolver();
|
||||||
|
@ -26,7 +29,7 @@ private:
|
||||||
QMap<uint16_t, QPair<device,device>> nodes;
|
QMap<uint16_t, QPair<device,device>> nodes;
|
||||||
QList<uint16_t> _allow_list,_deny_list,_wait_queue;
|
QList<uint16_t> _allow_list,_deny_list,_wait_queue;
|
||||||
signals:
|
signals:
|
||||||
void data_send(QString type, QJsonObject data, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue);
|
void data_send(QString type, QJsonObject data);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ZIGBEEDATARESOLVER_H
|
#endif // ZIGBEEDATARESOLVER_H
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QQueue>
|
#include <QQueue>
|
||||||
#include <zigbeeframe.h>
|
#include <zigbeeframe.h>
|
||||||
#include "../3rdparty/RibbonUI/lib_source/definitions.h"
|
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "eventsbus.h"
|
#include "eventsbus.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -19,14 +18,20 @@ class ZigBeeParser : public QObject
|
||||||
QML_ELEMENT
|
QML_ELEMENT
|
||||||
QML_SINGLETON
|
QML_SINGLETON
|
||||||
QML_NAMED_ELEMENT(ZigBeeParser)
|
QML_NAMED_ELEMENT(ZigBeeParser)
|
||||||
Q_PROPERTY_RW(QList<uint16_t>, allow_list)
|
Q_PROPERTY(QList<uint16_t> allow_list READ allow_list WRITE setAllow_list NOTIFY allow_listChanged FINAL)
|
||||||
Q_PROPERTY_RW(QList<uint16_t>, deny_list)
|
Q_PROPERTY(QList<uint16_t> deny_list READ deny_list WRITE setDeny_list NOTIFY deny_listChanged FINAL)
|
||||||
Q_PROPERTY_RW(QList<uint16_t>, wait_queue)
|
Q_PROPERTY(QList<uint16_t> wait_queue READ wait_queue WRITE setWait_queue NOTIFY wait_queueChanged FINAL)
|
||||||
Q_PROPERTY(QString self_addr READ self_addr FINAL)
|
Q_PROPERTY(QString self_addr READ self_addr FINAL)
|
||||||
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(){ _self_addr = QString::number(_protocol->self_addr,16).toUpper(); return _self_addr;};
|
Q_INVOKABLE QString self_addr(){ _self_addr = QString::number(_protocol->self_addr,16).toUpper(); return _self_addr;};
|
||||||
|
QList<uint16_t> allow_list(){if(!_resolver)_resolver=ZigBeeDataResolver::instance();return _resolver->get_allow_list();};
|
||||||
|
void setAllow_list(QList<uint16_t> allow_list){if(!_resolver)_resolver=ZigBeeDataResolver::instance();QList<uint16_t> &a=_resolver->get_allow_list();a=allow_list;emit allow_listChanged();};
|
||||||
|
QList<uint16_t> deny_list(){if(!_resolver)_resolver=ZigBeeDataResolver::instance();return _resolver->get_deny_list();};
|
||||||
|
void setDeny_list(QList<uint16_t> deny_list){if(!_resolver)_resolver=ZigBeeDataResolver::instance();QList<uint16_t> &a=_resolver->get_deny_list();a=deny_list;emit deny_listChanged();};
|
||||||
|
QList<uint16_t> wait_queue(){if(!_resolver)_resolver=ZigBeeDataResolver::instance();return _resolver->get_wait_queue();};
|
||||||
|
void setWait_queue(QList<uint16_t> wait_queue){if(!_resolver)_resolver=ZigBeeDataResolver::instance();QList<uint16_t> &a=_resolver->get_wait_queue();a=wait_queue;emit wait_queueChanged();};
|
||||||
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;};
|
||||||
|
@ -37,7 +42,10 @@ public:
|
||||||
signals:
|
signals:
|
||||||
void hmac_verify_keyChanged();
|
void hmac_verify_keyChanged();
|
||||||
void pre_hmac_verify_keyChanged();
|
void pre_hmac_verify_keyChanged();
|
||||||
void message_recved(QJsonObject message, QString self_addr, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue);
|
void allow_listChanged();
|
||||||
|
void deny_listChanged();
|
||||||
|
void wait_queueChanged();
|
||||||
|
void message_recved(QJsonObject message, QString self_addr);
|
||||||
private:
|
private:
|
||||||
explicit ZigBeeParser(QObject *parent = nullptr);
|
explicit ZigBeeParser(QObject *parent = nullptr);
|
||||||
~ZigBeeParser();
|
~ZigBeeParser();
|
||||||
|
@ -50,6 +58,6 @@ private:
|
||||||
ZigBeeDataResolver* _resolver = nullptr;
|
ZigBeeDataResolver* _resolver = nullptr;
|
||||||
QThread *_thread = nullptr;
|
QThread *_thread = nullptr;
|
||||||
private slots:
|
private slots:
|
||||||
void bus_data_send(QString type, QJsonObject data, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue);
|
void bus_data_send(QString type, QJsonObject data);
|
||||||
};
|
};
|
||||||
#endif // ZIGBEEPARSER_H
|
#endif // ZIGBEEPARSER_H
|
||||||
|
|
|
@ -32,6 +32,8 @@ RibbonView{
|
||||||
end_index = count-1
|
end_index = count-1
|
||||||
//console.log('append:',begin_index,end_index)
|
//console.log('append:',begin_index,end_index)
|
||||||
}
|
}
|
||||||
|
if(count===0)
|
||||||
|
show_model.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ListModel{
|
ListModel{
|
||||||
|
@ -40,16 +42,17 @@ RibbonView{
|
||||||
|
|
||||||
ListView{
|
ListView{
|
||||||
id: message_list
|
id: message_list
|
||||||
|
cacheBuffer: message_list.height * 2
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
Layout.preferredHeight: contentHeight
|
Layout.preferredHeight: contentHeight
|
||||||
Layout.preferredWidth: parent.width
|
Layout.preferredWidth: parent.width
|
||||||
interactive: false
|
interactive: false
|
||||||
model: show_model
|
model: show_model
|
||||||
add: Transition {
|
add: Transition {
|
||||||
NumberAnimation { properties: "y"; from: message_list.height; duration: 200 }
|
NumberAnimation { properties: "y"; from: message_list.height; duration: 100 }
|
||||||
}
|
}
|
||||||
displaced: Transition {
|
displaced: Transition {
|
||||||
NumberAnimation { properties: "y"; duration: 200 }
|
NumberAnimation { properties: "y"; duration: 100 }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Connections{
|
Connections{
|
||||||
|
|
|
@ -17,12 +17,13 @@ int main(int argc, char *argv[])
|
||||||
QGuiApplication app(argc, argv);
|
QGuiApplication app(argc, argv);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
|
FramelessConfig::instance()->set(Global::Option::UseCrossPlatformQtImplementation);
|
||||||
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
|
//FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
|
||||||
|
//FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
|
||||||
|
#else
|
||||||
|
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
|
||||||
#endif
|
#endif
|
||||||
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
|
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
|
||||||
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
|
|
||||||
|
|
||||||
QTranslator translator;
|
QTranslator translator;
|
||||||
bool result = translator.load(QLocale::system(), u""_qs, u""_qs, u":/translations"_qs);
|
bool result = translator.load(QLocale::system(), u""_qs, u""_qs, u":/translations"_qs);
|
||||||
if (result)
|
if (result)
|
||||||
|
|
|
@ -89,7 +89,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("sender", sender);
|
object.insert("sender", sender);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (zframe.getDesPort()) {
|
switch (zframe.getDesPort()) {
|
||||||
|
@ -102,7 +102,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("收到节点0x"+ sender +"发送的验证信息"));
|
object.insert("note_text",QJsonValue("收到节点0x"+ sender +"发送的验证信息"));
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
if (_allow_list.contains(node->first.addr))
|
if (_allow_list.contains(node->first.addr))
|
||||||
{
|
{
|
||||||
u8 hmac[33]="";
|
u8 hmac[33]="";
|
||||||
|
@ -127,9 +127,9 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
object.insert("sender", QString::number(_protocol->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");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
if(!is_demo)
|
if(!is_demo)
|
||||||
emit data_send("serial_port",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("serial_port",object);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -158,9 +158,9 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
object.insert("sender", QString::number(_protocol->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");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
if(!is_demo)
|
if(!is_demo)
|
||||||
emit data_send("serial_port",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("serial_port",object);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("sender", sender);
|
object.insert("sender", sender);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(_deny_list.contains(node->first.addr))
|
else if(_deny_list.contains(node->first.addr))
|
||||||
|
@ -178,7 +178,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"被禁止接入"));
|
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"被禁止接入"));
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!_wait_queue.contains(node->first.addr))
|
if (!_wait_queue.contains(node->first.addr))
|
||||||
|
@ -189,7 +189,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"进入等待队列"));
|
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"进入等待队列"));
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -198,7 +198,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"已在等待队列"));
|
object.insert("note_text",QJsonValue("节点0x"+QString::number(((base_frame *)zframe.getData().data())->ori_addr,16).toUpper()+"已在等待队列"));
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("type","zigbee_identify_data");
|
object.insert("type","zigbee_identify_data");
|
||||||
emit data_send("zigbee_identify_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_identify_data_view",object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -231,7 +231,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("type","zigbee_recv_data");
|
object.insert("type","zigbee_recv_data");
|
||||||
if (QRandomGenerator::global()->bounded(2)!=0 && is_demo)
|
if (QRandomGenerator::global()->bounded(2)!=0 && is_demo)
|
||||||
object.insert("decrypted_text", QJsonValue(QString(zdata.toHex(' ').toUpper())));
|
object.insert("decrypted_text", QJsonValue(QString(zdata.toHex(' ').toUpper())));
|
||||||
emit data_send("zigbee_recv_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_recv_data_view",object);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -240,7 +240,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("收到节点0x"+sender+"发送的数据,但节点并未认证"));
|
object.insert("note_text",QJsonValue("收到节点0x"+sender+"发送的数据,但节点并未认证"));
|
||||||
object.insert("recieved", true);
|
object.insert("recieved", true);
|
||||||
object.insert("type","zigbee_recv_data");
|
object.insert("type","zigbee_recv_data");
|
||||||
emit data_send("zigbee_recv_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_recv_data_view",object);
|
||||||
node->second.id=0;
|
node->second.id=0;
|
||||||
new_data_frame(5) dframe;
|
new_data_frame(5) dframe;
|
||||||
memset(&dframe,0,sizeof (dframe));
|
memset(&dframe,0,sizeof (dframe));
|
||||||
|
@ -256,7 +256,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
|
||||||
object.insert("note_text",QJsonValue("向节点0x"+sender+"发送重置命令"));
|
object.insert("note_text",QJsonValue("向节点0x"+sender+"发送重置命令"));
|
||||||
object.insert("recieved", false);
|
object.insert("recieved", false);
|
||||||
object.insert("type","zigbee_recv_data");
|
object.insert("type","zigbee_recv_data");
|
||||||
emit data_send("zigbee_recv_data_view",object,_allow_list,_deny_list,_wait_queue);
|
emit data_send("zigbee_recv_data_view",object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -275,12 +275,9 @@ void ZigBeeDataResolver::remote_addr_parser(zigbee_protocol::ZigbeeFrame &zframe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZigBeeDataResolver::message_parser(QJsonObject message, QString self_addr, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue)
|
void ZigBeeDataResolver::message_parser(QJsonObject message, QString self_addr)
|
||||||
{
|
{
|
||||||
_self_addr = self_addr;
|
_self_addr = self_addr;
|
||||||
_allow_list = allow_list;
|
|
||||||
_deny_list = deny_list;
|
|
||||||
_wait_queue = wait_queue;
|
|
||||||
if (message["type"] == "demo_verify_request")
|
if (message["type"] == "demo_verify_request")
|
||||||
{
|
{
|
||||||
hmac_frame frame;
|
hmac_frame frame;
|
||||||
|
|
|
@ -49,13 +49,10 @@ ZigBeeParser* ZigBeeParser::instance()
|
||||||
|
|
||||||
void ZigBeeParser::message_parser(QJsonObject message)
|
void ZigBeeParser::message_parser(QJsonObject message)
|
||||||
{
|
{
|
||||||
emit message_recved(message, _self_addr, _allow_list, _deny_list, _wait_queue);
|
emit message_recved(message, _self_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZigBeeParser::bus_data_send(QString type, QJsonObject data, QList<uint16_t> allow_list, QList<uint16_t> deny_list, QList<uint16_t> wait_queue)
|
void ZigBeeParser::bus_data_send(QString type, QJsonObject data)
|
||||||
{
|
{
|
||||||
_bus->push_data(type, data);
|
_bus->push_data(type, data);
|
||||||
_allow_list = allow_list;
|
|
||||||
_deny_list = deny_list;
|
|
||||||
_wait_queue = wait_queue;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue