ZigBee: Try to improve performance in windows.

This commit is contained in:
Mentalflow 2024-03-04 12:01:24 +08:00
parent 5b4cc11fc1
commit f683bb7aa3
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
6 changed files with 45 additions and 36 deletions

View File

@ -11,8 +11,11 @@ class ZigBeeDataResolver : public QObject
Q_OBJECT
public:
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:
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:
explicit ZigBeeDataResolver(QObject *parent = nullptr);
~ZigBeeDataResolver();
@ -26,7 +29,7 @@ private:
QMap<uint16_t, QPair<device,device>> nodes;
QList<uint16_t> _allow_list,_deny_list,_wait_queue;
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

View File

@ -7,7 +7,6 @@
#include <QJsonObject>
#include <QQueue>
#include <zigbeeframe.h>
#include "../3rdparty/RibbonUI/lib_source/definitions.h"
#include "protocol.h"
#include "eventsbus.h"
#include "config.h"
@ -19,14 +18,20 @@ class ZigBeeParser : public QObject
QML_ELEMENT
QML_SINGLETON
QML_NAMED_ELEMENT(ZigBeeParser)
Q_PROPERTY_RW(QList<uint16_t>, allow_list)
Q_PROPERTY_RW(QList<uint16_t>, deny_list)
Q_PROPERTY_RW(QList<uint16_t>, wait_queue)
Q_PROPERTY(QList<uint16_t> allow_list READ allow_list WRITE setAllow_list NOTIFY allow_listChanged FINAL)
Q_PROPERTY(QList<uint16_t> deny_list READ deny_list WRITE setDeny_list NOTIFY deny_listChanged FINAL)
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 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(){ _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;};
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;};
@ -37,7 +42,10 @@ public:
signals:
void 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:
explicit ZigBeeParser(QObject *parent = nullptr);
~ZigBeeParser();
@ -50,6 +58,6 @@ private:
ZigBeeDataResolver* _resolver = nullptr;
QThread *_thread = nullptr;
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

View File

@ -32,6 +32,8 @@ RibbonView{
end_index = count-1
//console.log('append:',begin_index,end_index)
}
if(count===0)
show_model.clear()
}
}
ListModel{
@ -40,16 +42,17 @@ RibbonView{
ListView{
id: message_list
cacheBuffer: message_list.height * 2
Layout.alignment: Qt.AlignHCenter
Layout.preferredHeight: contentHeight
Layout.preferredWidth: parent.width
interactive: false
model: show_model
add: Transition {
NumberAnimation { properties: "y"; from: message_list.height; duration: 200 }
NumberAnimation { properties: "y"; from: message_list.height; duration: 100 }
}
displaced: Transition {
NumberAnimation { properties: "y"; duration: 200 }
NumberAnimation { properties: "y"; duration: 100 }
}
}
Connections{

View File

@ -17,12 +17,13 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
#ifdef Q_OS_WIN
FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
FramelessConfig::instance()->set(Global::Option::UseCrossPlatformQtImplementation);
//FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
//FramelessConfig::instance()->set(Global::Option::ForceNonNativeBackgroundBlur);
#else
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
#endif
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);
QTranslator translator;
bool result = translator.load(QLocale::system(), u""_qs, u""_qs, u":/translations"_qs);
if (result)

View File

@ -89,7 +89,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("recieved", true);
object.insert("sender", sender);
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;
}
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("recieved", true);
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))
{
u8 hmac[33]="";
@ -127,9 +127,9 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("recieved", false);
object.insert("sender", QString::number(_protocol->self_addr,16).toUpper());
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)
emit data_send("serial_port",object,_allow_list,_deny_list,_wait_queue);
emit data_send("serial_port",object);
}
else
{
@ -158,9 +158,9 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("recieved", false);
object.insert("sender", QString::number(_protocol->self_addr,16).toUpper());
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)
emit data_send("serial_port",object,_allow_list,_deny_list,_wait_queue);
emit data_send("serial_port",object);
return;
}
}
@ -168,7 +168,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("recieved", true);
object.insert("sender", sender);
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))
@ -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("recieved", true);
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 (!_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("recieved", true);
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
{
@ -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("recieved", true);
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;
@ -231,7 +231,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("type","zigbee_recv_data");
if (QRandomGenerator::global()->bounded(2)!=0 && is_demo)
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
{
@ -240,7 +240,7 @@ void ZigBeeDataResolver::des_port_parser(zigbee_protocol::ZigbeeFrame &zframe, b
object.insert("note_text",QJsonValue("收到节点0x"+sender+"发送的数据,但节点并未认证"));
object.insert("recieved", true);
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;
new_data_frame(5) 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("recieved", false);
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:
@ -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;
_allow_list = allow_list;
_deny_list = deny_list;
_wait_queue = wait_queue;
if (message["type"] == "demo_verify_request")
{
hmac_frame frame;

View File

@ -49,13 +49,10 @@ ZigBeeParser* ZigBeeParser::instance()
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);
_allow_list = allow_list;
_deny_list = deny_list;
_wait_queue = wait_queue;
}