diff --git a/.cproject b/.cproject index 51b9c10..af9c7bb 100644 --- a/.cproject +++ b/.cproject @@ -35,7 +35,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/sdk b/sdk index 914b4c7..74516c3 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 914b4c75556afc4137ed32bb341bf4377f2765b1 +Subproject commit 74516c3308422c3a73853b6aa925d0d38a526eef diff --git a/usrc/main.cpp b/usrc/main.cpp index f2a423b..196bd0c 100644 --- a/usrc/main.cpp +++ b/usrc/main.cpp @@ -34,13 +34,6 @@ ZGPIO io_fybh_read4; ZGPIO io_fybh_read5; ZGPIO io_fybh_read6; -// input_sensor_get_bwm_gpio() { return &FYBJL_SENSOR0; } -// input_sensor_get_py_home_gpio() { return &FYBJL_SENSOR1; } -// input_sensor_get_py_limit_gpio() { return &FYBJL_SENSOR2; } -// input_sensor_get_tj_home_gpio() { return &FYBJL_SENSOR4; } -// input_sensor_get_tj_limit_gpio() { return &FYBJL_SENSOR5; } -// input_sensor_get_card_block_detect_gpio() { return &FYBJL_SENSOR7; } - ZGPIO io_fybjl_sensor8; ZGPIO io_fybjl_sensor7; ZGPIO io_fybjl_sensor6; @@ -51,9 +44,9 @@ ZGPIO io_fybjl_sensor2; ZGPIO io_fybjl_sensor1; ZGPIO io_fybjl_sensor0; -SingleAxisMotorControlerV2 m_pyMotorControlService; // 平移电机 -SingleAxisMotorControlerV2 m_tjMotorControlService; // 推进电机 - +DeviceBaseControlService m_deviceBaseControlService; +SingleAxisMotorControlerV2 m_pyMotorControlService; // 平移电机 +SingleAxisMotorControlerV2 m_tjMotorControlService; // 推进电机 OneDimensionalCodeLaserScanner m_oneDimensionalCodeLaserScanner; void input_sensors_init() { @@ -164,7 +157,7 @@ void Main::run() { /******************************************************************************* * 协议栈初始化 * *******************************************************************************/ - { + { // auto *cfg = IflytopCanProtocolStackProcesser::createDefaultConfig(DEVICE_ID, 128); m_protocolStack.initialize(cfg); m_protocolStack.setDumpPacketFlag(false); @@ -172,6 +165,14 @@ void Main::run() { m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kwr, 0); } + { // + m_deviceBaseControlService.initialize(&m_protocolStack, DEVICE_ID); + m_deviceBaseControlService.setListener([](int32_t engineer_mode) { + m_pyMotorControlService.setEngineerMode(engineer_mode); + m_tjMotorControlService.setEngineerMode(engineer_mode); + }); + } + /******************************************************************************* * 横移电机 * *******************************************************************************/ @@ -223,9 +224,9 @@ void Main::run() { m_tjMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1); // bwm_gpio - m_oneDimensionalCodeLaserScanner.initialize(&m_protocolStack, REG_LARSER_SCANNER_CTRL_ADD_BASE, FYBJL_SENSOR0, [this]() { return m_tj_motor.getXACTUAL(); }); + ZLOGI(TAG, "init done"); while (1) { ZHALCORE::getInstance()->loop(); } diff --git a/usrc/main.hpp b/usrc/main.hpp index c9224c9..87fd276 100644 --- a/usrc/main.hpp +++ b/usrc/main.hpp @@ -4,14 +4,17 @@ #include +#include "sdk\components\iflytop_can_slave_modules\device_base_control_service.hpp" #include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp" namespace iflytop { using namespace std; -class Main : public IflytopCanProtocolStackProcesserListener { +class Main : public IflytopCanProtocolStackProcesserListener{ private: /* data */ public: + + virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser *processer, icps::Reg_t *reg) { return false; } virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser *processer, icps::WriteEvent *event); virtual icps::error_t onHostRegisterReadEvent(IflytopCanProtocolStackProcesser *processer, icps::ReadEvent *event); virtual void onHostRegisterReportEvent(IflytopCanProtocolStackProcesser *processer, icps::ReportEvent *event); diff --git a/usrc/one_dimensional_code_laser_scanner.cpp b/usrc/one_dimensional_code_laser_scanner.cpp index d2c8ece..dbca465 100644 --- a/usrc/one_dimensional_code_laser_scanner.cpp +++ b/usrc/one_dimensional_code_laser_scanner.cpp @@ -15,7 +15,45 @@ bool m_idleLevel = true; void OneDimensionalCodeLaserScanner::initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, PosReadder_t readder) { m_protocolProcesser = protocolProcesser; - + + m_protocolProcesser->activeReg(REG_CODE_SCANER_ACT_CTRL, icps::kw, 0); + m_protocolProcesser->activeReg(REG_CODE_SCANER_ACT_CLEAR_EXCEPTION, icps::kw, 0); + m_protocolProcesser->activeReg(REG_CODE_SCANER_STAT_STATUS, icps::kr, 0); + m_protocolProcesser->activeReg(REG_CODE_SCANER_STAT_EXCEPTION, icps::kr, 0); + m_protocolProcesser->activeReg(REG_CODE_SCANER_CODE, icps::kr, 0); + + m_triggerGpio.initAsInput(triggerPin, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, false /*mirror*/); + m_protocolProcesser->registerListener(this); +} + +bool OneDimensionalCodeLaserScanner::isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg) { // + switch (reg->add) { + case REG_CODE_SCANER_ACT_CTRL: + case REG_CODE_SCANER_ACT_CLEAR_EXCEPTION: + return true; + default: + break; + } + return false; +} +icps::error_t OneDimensionalCodeLaserScanner::onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent) { + switch (writeEvent->reg->add) { + case REG_CODE_SCANER_ACT_CTRL: + if (writeEvent->newvalue == 1) { + startScan(); + } else if (writeEvent->newvalue == 0) { + stopScan(); + parseResult(); + } else { + return icps::kIllegalValue; + } + return icps::kSuccess; + case REG_CODE_SCANER_ACT_CLEAR_EXCEPTION: + return icps::kSuccess; + default: + break; + } + return icps::kRegNotFound; } void OneDimensionalCodeLaserScanner::startScan() { @@ -41,7 +79,7 @@ bool OneDimensionalCodeLaserScanner::getPosLevel(int pos) { return m_idleLevel; } - for (size_t i = 0; i < m_off; i++) { + for (int i = 0; i < m_off; i++) { nowlevel = !nowlevel; if (i + 1 < m_off) { if (pos >= m_posChache[i] && pos < m_posChache[i + 1]) { @@ -59,18 +97,26 @@ bool OneDimensionalCodeLaserScanner::getPosLevel(int pos) { void OneDimensionalCodeLaserScanner::parseResult() { // static uint8_t code[500] = {0}; + printf("scan raw result:\n"); + printf("(%d)", m_idleLevel); + printf("%d ", startpos); + for (int i = 0; i < m_off; i++) { + printf("%d ", m_posChache[i]); + } + printf("%d ", endpos); + printf("\r\n"); // int32_t sp = m_posChache[0]; int32_t ep = endpos; int32_t len = ep - sp; // 把 len分成500份 - for (size_t i = 0; i < 500; i++) { + for (int i = 0; i < 500; i++) { code[i] = getPosLevel((int32_t)(sp + len / 500.0 * i)); } - printf("scanresult:"); - for (size_t i = 0; i < 500; i++) { + printf("scanresult:\n"); + for (int i = 0; i < 500; i++) { printf("%d", code[i]); } printf("\r\n"); diff --git a/usrc/one_dimensional_code_laser_scanner.hpp b/usrc/one_dimensional_code_laser_scanner.hpp index b3cd61e..1ca3af7 100644 --- a/usrc/one_dimensional_code_laser_scanner.hpp +++ b/usrc/one_dimensional_code_laser_scanner.hpp @@ -17,7 +17,7 @@ using namespace std; #define POS_CACHE_SIZE 28 -class OneDimensionalCodeLaserScanner { +class OneDimensionalCodeLaserScanner : public IflytopCanProtocolStackProcesserListener { public: typedef enum { kidle, @@ -39,6 +39,9 @@ class OneDimensionalCodeLaserScanner { void initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, PosReadder_t readder); + virtual bool isThisRegOwnToMe(IflytopCanProtocolStackProcesser* processer, icps::Reg_t* reg); + virtual icps::error_t onHostRegisterWriteEvent(IflytopCanProtocolStackProcesser* processer, IflytopCanProtocolStackWriteEvent* writeEvent); + void startScan(); void stopScan(); void parseResult(); diff --git a/zapp.launch b/zapp.launch index 9e1624d..b284c63 100644 --- a/zapp.launch +++ b/zapp.launch @@ -83,7 +83,7 @@ - +