Browse Source

update

change_pipette_api
zhaohe 2 years ago
parent
commit
6bb0f643c8
  1. 4
      api/api.hpp
  2. 9
      api/i_zcan_cmder.hpp
  3. 2
      api/i_zcan_cmder_master.hpp
  4. 1
      api/packet_interface.hpp
  5. 3
      api/reg_index.hpp
  6. 25
      api/zi_event_bus.hpp
  7. 2
      api/zi_module.hpp
  8. 3
      cmdid.hpp
  9. 19
      protocol_event_bus_sender.cpp
  10. 13
      protocol_event_bus_sender.hpp
  11. 13
      zmodule_device_manager.cpp
  12. 13
      zmodule_device_manager.hpp
  13. 18
      zmodule_device_script_cmder_paser.cpp
  14. 7
      zmodule_device_script_cmder_paser.hpp

4
api/api.hpp

@ -25,4 +25,6 @@
//
#include "zi_code_scaner.hpp"
//
#include "zi_pipette_ctrl_module.hpp"
#include "zi_pipette_ctrl_module.hpp"
//
#include "zi_event_bus.hpp"

9
api/i_zcan_cmder.hpp

@ -17,10 +17,11 @@ class IZcanCmderListener {
class IZCanCmder {
public:
public:
virtual void registerListener(IZcanCmderListener *listener) = 0;
virtual int32_t sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) = 0;
virtual int32_t sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int32_t nack) = 0;
virtual int32_t sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorcode) = 0;
virtual void registerListener(IZcanCmderListener *listener) = 0;
virtual int32_t sendBufAck(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) = 0;
virtual int32_t sendAck(zcr_cmd_header_t *rx_cmd_header, int32_t *ackvar, int32_t nack) = 0;
virtual int32_t sendErrorAck(zcr_cmd_header_t *rx_cmd_header, int32_t errorcode) = 0;
virtual int32_t triggerEvent(zcr_cmd_header_t *rx_cmd_header, uint8_t *data, int32_t len) = 0;
};
} // namespace iflytop

2
api/i_zcan_cmder_master.hpp

@ -17,6 +17,8 @@ class IZcanCmderMaster {
public:
virtual int32_t sendCmd(int32_t cmdid, int32_t moduleid, int32_t *param, size_t npara, int32_t *ack, size_t nack, int overtime_ms) = 0;
virtual int32_t sendCmdAndReceiveBuf(int32_t cmdid, int32_t moduleid, int32_t *param, size_t npara, uint8_t *ack, int32_t *rxsize, int overtime_ms) = 0;
virtual void regEventPacketListener(function<void(uint8_t *data, size_t len)> on_event) = 0;
};
} // namespace iflytop

1
api/packet_interface.hpp

@ -18,6 +18,7 @@ typedef enum {
kptv2_cmd = 0,
kptv2_ack = 1,
kptv2_error_ack = 2,
kptv2_event = 3,
} zcan_cmd_packet_type_t;
} // namespace zcr

3
api/reg_index.hpp

@ -19,6 +19,9 @@ typedef enum {
kreg_module_errorbitflag1 = REG_INDEX(0, 7), //
kreg_module_input_state = REG_INDEX(0, 8), //
kreg_module_output_state = REG_INDEX(0, 9), //
kreg_module_raw_sector_size = REG_INDEX(0, 10), // sector_size
kreg_module_raw_sector_num = REG_INDEX(0, 11), //
kreg_module_is_online = REG_INDEX(0, 12), //
kreg_module_last_cmd_exec_status = REG_INDEX(20, 0), // 上一条指令执行的状态
kreg_module_last_cmd_exec_val0 = REG_INDEX(20, 1), // 上一条指令执行的结果0
kreg_module_last_cmd_exec_val1 = REG_INDEX(20, 2), // 上一条指令执行的结果1

25
api/zi_event_bus.hpp

@ -0,0 +1,25 @@
#pragma once
#include <stdint.h>
#include <functional>
#include "errorcode.hpp"
namespace iflytop {
using namespace std;
typedef enum {
kreg_change_event = 1,
} event_type_t;
class ZIEventBusSender {
public:
virtual ~ZIEventBusSender() {}
/**
* @brief ,
*
* @param moduleid
*/
virtual void push_reg_state_change_event(int32_t moduleid, int32_t regindex, int32_t toval) = 0;
};
} // namespace iflytop

2
api/zi_module.hpp

@ -66,7 +66,7 @@ class ZIModule {
virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) { return err::koperation_not_support; }
virtual int32_t module_read_raw(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; }
virtual int32_t module_read_raw(int32_t index, uint8_t *data, int32_t *len) { return err::koperation_not_support; }
virtual int32_t module_set_inited_flag(int32_t flag) {
m_inited_flag = flag;

3
cmdid.hpp

@ -11,6 +11,9 @@ typedef enum {
virtual int32_t module_start() { return err::koperation_not_support; }
#endif
kevent_bus_reg_change_report = CMDID(0, 100), // para:{}, ack:{}
kmodule_stop = CMDID(1, 1), // para:{}, ack:{}
kmodule_break = CMDID(1, 2), // para:{}, ack:{}
kmodule_get_last_exec_status = CMDID(1, 3), // para:{}, ack:{4}

19
protocol_event_bus_sender.cpp

@ -0,0 +1,19 @@
#include "protocol_event_bus_sender.hpp"
#include "api/api.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));
}
} // namespace iflytop

13
protocol_event_bus_sender.hpp

@ -0,0 +1,13 @@
#include "api/api.hpp"
namespace iflytop {
using namespace std;
class ProtocolEventBusSender : public ZIEventBusSender {
IZCanCmder* m_zcan_cmder = nullptr;
public:
void initialize(IZCanCmder* zcan_cmder);
virtual void push_reg_state_change_event(int32_t moduleid, int32_t event_id, int32_t eventval) override;
};
} // namespace iflytop

13
zmodule_device_manager.cpp

@ -16,6 +16,19 @@ using namespace std;
void ZModuleDeviceManager::initialize(IZcanCmderMaster *cancmder) {
m_cancmder = cancmder;
assert(m_cancmder != nullptr);
m_cancmder->regEventPacketListener([this](uint8_t *data, size_t len) {
if (len < 4) return;
int32_t *pdata = (int32_t *)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);
}
});
}
void ZModuleDeviceManager::registerModule(ZIModule *module) {
assert(module != nullptr);

13
zmodule_device_manager.hpp

@ -1,4 +1,5 @@
#pragma once
#include <list>
#include <map>
#include "api/api.hpp"
@ -6,14 +7,26 @@
#include "cmdid.hpp"
namespace iflytop {
using namespace std;
class ZModuleDeviceManager {
private:
map<uint16_t, ZIModule *> m_modulers;
IZcanCmderMaster *m_cancmder = nullptr;
typedef function<void(int32_t moduleid, int32_t event_id, int32_t eventval)> regval_change_event_t;
regval_change_event_t m_on_reg_val_change_event_cb;
list<regval_change_event_t> m_on_reg_val_change_event_cbs;
public:
void initialize(IZcanCmderMaster *m_cancmder);
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) {
for (auto &cb : m_on_reg_val_change_event_cbs)
if (cb) cb(moduleid, event_id, eventval);
}
/*******************************************************************************
* ZIModule *
*******************************************************************************/

18
zmodule_device_script_cmder_paser.cpp

@ -6,11 +6,11 @@
using namespace iflytop;
using namespace std;
#define PROCESS_PACKET_XX(var_funcname, cmdhelp, XP, XACK, ...) \
cancmder->regCMD(#var_funcname, cmdhelp, XP, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { \
ack->ecode = m_deviceManager->var_funcname(__VA_ARGS__); \
ack->acktype = ICmdParserACK::kAckType_int32; \
ack->rawlen = XACK * 4; \
#define PROCESS_PACKET_XX(var_funcname, cmdhelp, XP, XACK, ...) \
m_cmdParser->regCMD(#var_funcname, cmdhelp, XP, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { \
ack->ecode = m_deviceManager->var_funcname(__VA_ARGS__); \
ack->acktype = ICmdParserACK::kAckType_int32; \
ack->rawlen = XACK * 4; \
});
#define PROCESS_PACKET_00(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 0, 0)
@ -46,6 +46,10 @@ using namespace std;
void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager) {
m_cmdParser = cancmder;
m_deviceManager = deviceManager;
regfn();
}
void ZModuleDeviceScriptCmderPaser::regfn() {
#if 0
/*******************************************************************************
* ZIModule *
@ -114,7 +118,7 @@ void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDevi
PROCESS_PACKET_10(module_factory_reset, "(mid)");
PROCESS_PACKET_10(module_flush_cfg, "(mid)");
PROCESS_PACKET_10(module_active_cfg, "(mid)");
cancmder->regCMD("module_read_raw", "(mid, readsize)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
m_cmdParser->regCMD("module_read_raw", "(mid, readsize)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
if (atoi(paraV[2]) > (int32_t)sizeof(ack->rawdata)) {
ack->ecode = err::kbuffer_not_enough;
return;
@ -197,7 +201,7 @@ void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDevi
PROCESS_PACKET_10(code_scaner_start_scan, "(mid)");
PROCESS_PACKET_10(code_scaner_stop_scan, "(mid)");
cancmder->regCMD("code_scaner_read_scaner_result", "(mid, pad0)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
m_cmdParser->regCMD("code_scaner_read_scaner_result", "(mid, pad0)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
if (atoi(paraV[2]) > (int32_t)sizeof(ack->rawdata)) {
ack->ecode = err::kbuffer_not_enough;
return;

7
zmodule_device_script_cmder_paser.hpp

@ -1,5 +1,6 @@
#pragma once
#include <map>
#include <list>
#include "api/api.hpp"
#include "api/i_cmdparser.hpp"
@ -7,16 +8,20 @@
#include "zmodule_device_manager.hpp"
namespace iflytop {
using namespace std;
class ZModuleDeviceScriptCmderPaser {
private:
ICmdParser* m_cmdParser = nullptr;
ZModuleDeviceManager* m_deviceManager;
public:
void initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager);
ICmdParser* getCmdParser() { return m_cmdParser; }
ZModuleDeviceManager* getDeviceManager() { return m_deviceManager; }
private:
void regfn();
};
} // namespace iflytop
Loading…
Cancel
Save