diff --git a/api/zi_event_bus.hpp b/api/zi_event_bus.hpp index 6a7b9a9..549bca3 100644 --- a/api/zi_event_bus.hpp +++ b/api/zi_event_bus.hpp @@ -8,9 +8,9 @@ namespace iflytop { using namespace std; -typedef enum { - kreg_change_event = 1, -} event_type_t; +// typedef enum { +// kreg_change_event = 1, +// } event_type_t; class ZIEventBusSender { public: @@ -20,6 +20,6 @@ class ZIEventBusSender { * * @param moduleid */ - virtual void push_reg_state_change_event(int32_t moduleid, int32_t regindex, int32_t toval) = 0; + virtual void push_reg_state_change_event(int32_t moduleid, int32_t regindex, int32_t oldval, int32_t toval) = 0; }; } // namespace iflytop diff --git a/protocol_event_bus_sender.cpp b/protocol_event_bus_sender.cpp index 2b7dd7e..6629b64 100644 --- a/protocol_event_bus_sender.cpp +++ b/protocol_event_bus_sender.cpp @@ -1,19 +1,24 @@ #include "protocol_event_bus_sender.hpp" #include "api/api.hpp" +#include "cmdid.hpp" namespace iflytop { using namespace std; void ProtocolEventBusSender::initialize(IZCanCmder* zcan_cmder) { m_zcan_cmder = zcan_cmder; } -void ProtocolEventBusSender::push_reg_state_change_event(int32_t moduleid, int32_t event_id, int32_t eventval) { - zcr_cmd_header_t rx_cmd_header = {0}; - int32_t data[4]; - data[0] = kreg_change_event; - data[1] = moduleid; - data[2] = event_id; - data[3] = eventval; - m_zcan_cmder->triggerEvent(&rx_cmd_header, (uint8_t*)data, sizeof(data)); +void ProtocolEventBusSender::push_reg_state_change_event(int32_t moduleid, int32_t regindex, int32_t oldval, int32_t toval) { + zcr_cmd_header_t cmd_header = {0}; + int32_t data[3]; + + cmd_header.cmdmoduleid = moduleid; + cmd_header.cmdmoduleid = zcr::kevent_bus_reg_change_report >> 8; + cmd_header.submoduleid = zcr::kevent_bus_reg_change_report & 0xff; + + data[1] = regindex; + data[2] = oldval; + data[3] = toval; + m_zcan_cmder->triggerEvent(&cmd_header, (uint8_t*)data, sizeof(data)); } } // namespace iflytop \ No newline at end of file diff --git a/protocol_event_bus_sender.hpp b/protocol_event_bus_sender.hpp index c8b66aa..8fe347e 100644 --- a/protocol_event_bus_sender.hpp +++ b/protocol_event_bus_sender.hpp @@ -8,6 +8,6 @@ class ProtocolEventBusSender : public ZIEventBusSender { public: void initialize(IZCanCmder* zcan_cmder); - virtual void push_reg_state_change_event(int32_t moduleid, int32_t event_id, int32_t eventval) override; + virtual void push_reg_state_change_event(int32_t moduleid, int32_t regindex, int32_t oldval, int32_t toval) override; }; } // namespace iflytop \ No newline at end of file diff --git a/zmodule_device_manager.cpp b/zmodule_device_manager.cpp index 36eabeb..7f61626 100644 --- a/zmodule_device_manager.cpp +++ b/zmodule_device_manager.cpp @@ -18,15 +18,12 @@ void ZModuleDeviceManager::initialize(IZcanCmderMaster *cancmder) { // assert(m_cancmder != nullptr); if (m_cancmder) { m_cancmder->regEventPacketListener([this](int32_t fromboard, zcr_cmd_header_t *packet, int32_t datalen) { - if (datalen < 4) return; - - int32_t *pdata = (int32_t *)packet->data; - int32_t event = pdata[0]; - if (event == kreg_change_event) { - int32_t moduleid = pdata[1]; - int32_t event_id = pdata[2]; - int32_t eventval = pdata[3]; - callOnRegValChangeEvent(moduleid, event_id, eventval); + if (CMDID(packet->cmdmoduleid, packet->subcmdid) == zcr::kevent_bus_reg_change_report) { + int32_t *pdata = (int32_t *)packet->data; + int32_t regindex = pdata[0]; + int32_t regold = pdata[1]; + int32_t regnew = pdata[2]; + callOnRegValChangeEvent(packet->cmdmoduleid, regindex, regold, regnew); } }); } diff --git a/zmodule_device_manager.hpp b/zmodule_device_manager.hpp index eedca7a..708c1b5 100644 --- a/zmodule_device_manager.hpp +++ b/zmodule_device_manager.hpp @@ -13,7 +13,7 @@ class ZModuleDeviceManager { map m_modulers; IZcanCmderMaster *m_cancmder = nullptr; - typedef function regval_change_event_t; + typedef function regval_change_event_t; regval_change_event_t m_on_reg_val_change_event_cb; list m_on_reg_val_change_event_cbs; @@ -23,9 +23,9 @@ class ZModuleDeviceManager { void registerModule(ZIModule *module); void regOnRegValChangeEvent(regval_change_event_t on_regval_change_event) { m_on_reg_val_change_event_cbs.push_back(on_regval_change_event); } - void callOnRegValChangeEvent(int32_t moduleid, int32_t event_id, int32_t eventval) { + void callOnRegValChangeEvent(int32_t moduleid, int32_t regindex, int32_t oldval, int32_t toval) { for (auto &cb : m_on_reg_val_change_event_cbs) - if (cb) cb(moduleid, event_id, eventval); + if (cb) cb(moduleid, regindex, oldval,toval); } void for_each_module(function cb) {