From 0923cbacbdd6c1c5858d5ec160a6f3dd3b23560e Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 4 Jun 2024 21:09:50 +0800 Subject: [PATCH] add code scaner --- components/sensors/m3078/m3078_code_scaner.cpp | 29 ++++++++--------- components/sensors/m3078/m3078_code_scaner.hpp | 20 +++++++----- components/zcancmder/zcan_protocol_parser.cpp | 45 ++++++++++++++++++++++++++ components/zcancmder/zcan_protocol_parser.hpp | 10 ++++-- 4 files changed, 78 insertions(+), 26 deletions(-) diff --git a/components/sensors/m3078/m3078_code_scaner.cpp b/components/sensors/m3078/m3078_code_scaner.cpp index b3d6eac..4f95274 100644 --- a/components/sensors/m3078/m3078_code_scaner.cpp +++ b/components/sensors/m3078/m3078_code_scaner.cpp @@ -27,8 +27,8 @@ void M3078CodeScanner::initialize(int moduleid, hardware_config_t* hardwareconfi }); m_uart.startRxIt(); m_triggerGpio.initAsOutput(hardwareconfig->triggerPin, ZGPIO::kMode_nopull, true, false); - //creg.module_enable = 1; - id = moduleid; + // creg.module_enable = 1; + id = moduleid; } void M3078CodeScanner::trigger() { ZLOGI(TAG, "trigger"); @@ -56,27 +56,29 @@ int32_t M3078CodeScanner::module_stop() { stopTrigger(); return 0; } -int32_t M3078CodeScanner::module_break() { + +int32_t M3078CodeScanner::code_scaner_start_scan() { + trigger(); + return 0; +} +int32_t M3078CodeScanner::code_scaner_stop_scan() { stopTrigger(); return 0; } -int32_t M3078CodeScanner::module_start() { - trigger(); +int32_t M3078CodeScanner::code_scaner_result_is_ready(int32_t* ready) { + *ready = read_status(); return 0; } - -int32_t M3078CodeScanner::module_get_status(int32_t* status) { - *status = read_status(); +int32_t M3078CodeScanner::code_scaner_get_result_length(int32_t* length) { + *length = getIdinfoLen(); return 0; } - -int32_t M3078CodeScanner::module_read_raw(int32_t startadd, uint8_t* data, int32_t* len) { - ZLOGI(TAG, "module_read_raw"); +int32_t M3078CodeScanner::code_scaner_read_scaner_result(uint8_t* result, int32_t* len) { if (codecachelen > *len) { return err::kbuffer_not_enough; } *len = codecachelen; - memcpy(data, codecache, codecachelen); + memcpy(result, codecache, codecachelen); return 0; } int32_t M3078CodeScanner::get_id_info_len(int32_t* len) { @@ -90,9 +92,6 @@ int32_t M3078CodeScanner::get_raw_sector_num(int32_t* num) { int32_t M3078CodeScanner::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { switch (param_id) { MODULE_COMMON_PROCESS_REG_CB(); - // PROCESS_REG(kreg_module_raw_sector_size, /* */ get_id_info_len(&val), ACTION_NONE); - // PROCESS_REG(kreg_module_raw_sector_num, /* */ get_raw_sector_num(&val), ACTION_NONE); - default: return err::kmodule_not_find_config_index; break; diff --git a/components/sensors/m3078/m3078_code_scaner.hpp b/components/sensors/m3078/m3078_code_scaner.hpp index 5a50039..72302d3 100644 --- a/components/sensors/m3078/m3078_code_scaner.hpp +++ b/components/sensors/m3078/m3078_code_scaner.hpp @@ -3,8 +3,8 @@ // #pragma once -#include "sdk/os/zos.hpp" #include "a8000_protocol\protocol.hpp" +#include "sdk/os/zos.hpp" /** * @brief @@ -26,7 +26,7 @@ namespace iflytop { using namespace std; -class M3078CodeScanner : public ZIModule { +class M3078CodeScanner : public ZIModule, public ZICodeScaner { ENABLE_MODULE(M3078CodeScanner, kcode_scaner, 1); public: @@ -85,16 +85,20 @@ class M3078CodeScanner : public ZIModule { *id = this->id; return 0; } - virtual int32_t module_stop() ; - virtual int32_t module_break() ; - virtual int32_t module_start() ; - virtual int32_t module_read_raw(int32_t index, uint8_t* data, int32_t* len) ; - virtual int32_t module_get_status(int32_t* status) override; private: virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t& val) override; - int32_t read_status(); + virtual int32_t module_stop() override; + public: + virtual int32_t code_scaner_start_scan() override; + virtual int32_t code_scaner_stop_scan() override; + virtual int32_t code_scaner_result_is_ready(int32_t* ready) override; + virtual int32_t code_scaner_get_result_length(int32_t* length) override; + virtual int32_t code_scaner_read_scaner_result(uint8_t* result, int32_t* len) override; + + private: + int32_t read_status(); int32_t get_id_info_len(int32_t* len); int32_t get_raw_sector_num(int32_t* num); }; diff --git a/components/zcancmder/zcan_protocol_parser.cpp b/components/zcancmder/zcan_protocol_parser.cpp index ce24ba6..a305b0b 100644 --- a/components/zcancmder/zcan_protocol_parser.cpp +++ b/components/zcancmder/zcan_protocol_parser.cpp @@ -296,6 +296,9 @@ int32_t ZCanProtocolParser::mini_servo_rotate_with_torque(cmdcontxt_t* cxt) { #undef MODULE_CLASS +/*********************************************************************************************************************** + * ZIBoard * + ***********************************************************************************************************************/ #define MODULE_CLASS ZIBoard int32_t ZCanProtocolParser::board_read_ext_io(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(1); @@ -307,6 +310,48 @@ int32_t ZCanProtocolParser::board_write_ext_io(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(2); return module->board_write_ext_io(cxt->params[0], cxt->params[1]); } + +int32_t ZCanProtocolParser::board_read_muti_io(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(0); + int32_t* ack = (int32_t*)cxt->ackbuf; + cxt->acklen = 4; + return module->board_read_muti_io(ack); +} + +#undef MODULE_CLASS + +/*********************************************************************************************************************** + * ZICodeScaner * + ***********************************************************************************************************************/ +#define MODULE_CLASS ZICodeScaner +int32_t ZCanProtocolParser::code_scaner_start_scan(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(0); + return module->code_scaner_start_scan(); +} + +int32_t ZCanProtocolParser::code_scaner_stop_scan(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(0); + return module->code_scaner_stop_scan(); +} + +int32_t ZCanProtocolParser::code_scaner_result_is_ready(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(1); + int32_t* ack = (int32_t*)cxt->ackbuf; + cxt->acklen = 4; + return module->code_scaner_result_is_ready(&ack[0]); +} + +int32_t ZCanProtocolParser::code_scaner_get_result_length(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(1); + int32_t* ack = (int32_t*)cxt->ackbuf; + cxt->acklen = 4; + return module->code_scaner_get_result_length(&ack[0]); +} + +int32_t ZCanProtocolParser::code_scaner_read_scaner_result(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(0); + return module->code_scaner_read_scaner_result(cxt->ackbuf, &cxt->acklen); +} #undef MODULE_CLASS #if 0 diff --git a/components/zcancmder/zcan_protocol_parser.hpp b/components/zcancmder/zcan_protocol_parser.hpp index 3221c3b..ad2261e 100644 --- a/components/zcancmder/zcan_protocol_parser.hpp +++ b/components/zcancmder/zcan_protocol_parser.hpp @@ -79,11 +79,15 @@ class ZCanProtocolParser : public IZCanReceiverListener { static int32_t mini_servo_rotate(cmdcontxt_t* cxt); static int32_t mini_servo_rotate_with_torque(cmdcontxt_t* cxt); - // virtual int32_t board_read_ext_io(int32_t ioindex, int32_t *val) = 0; - // virtual int32_t board_write_ext_io(int32_t ioindex, int32_t val) = 0; - static int32_t board_read_ext_io(cmdcontxt_t* cxt); static int32_t board_write_ext_io(cmdcontxt_t* cxt); + static int32_t board_read_muti_io(cmdcontxt_t* cxt); + + static int32_t code_scaner_start_scan(cmdcontxt_t* cxt); + static int32_t code_scaner_stop_scan(cmdcontxt_t* cxt); + static int32_t code_scaner_result_is_ready(cmdcontxt_t* cxt); + static int32_t code_scaner_get_result_length(cmdcontxt_t* cxt); + static int32_t code_scaner_read_scaner_result(cmdcontxt_t* cxt); #if 0 static int32_t xymotor_enable(cmdcontxt_t* cxt);