diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3080e17..6697d83 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -60,6 +60,8 @@
"ostream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
- "typeinfo": "cpp"
+ "typeinfo": "cpp",
+ "cstdarg": "cpp",
+ "cinttypes": "cpp"
}
}
\ No newline at end of file
diff --git a/sdk b/sdk
index f28856b..914b4c7 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit f28856b68a9c6fd2b06070a2a10c6f40dfe9896d
+Subproject commit 914b4c75556afc4137ed32bb341bf4377f2765b1
diff --git a/testtools/config.js b/testtools/config.js
new file mode 100644
index 0000000..83ce37c
--- /dev/null
+++ b/testtools/config.js
@@ -0,0 +1,50 @@
+const websocketAddress = "ws://192.168.1.138:19001";
+const config = {
+ // 256333
+ 打开工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":1}}`,
+ 关闭工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":0}}`,
+ 读取所有光电输入: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":1000,"ctrlPointVal":0}}`,
+ 推杆电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":2000}}`,
+ 推杆电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-2000}}`,
+ 推杆电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":51200}}`,
+ 推杆电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-51200}}`,
+ 推杆电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10103,"ctrlPointVal":1000}}`,
+ 推杆电机_零点: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":0}}`,
+ 推杆电机_推出位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":719133}}`,
+ 推杆电机_扫码完成位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":256333}}`,
+ 推杆电机_扫码速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":100000}}`,
+ 推杆电机_最快速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":1000000}}`,
+ 推杆电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10113,"ctrlPointVal":0}}`,
+ 推杆电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10109,"ctrlPointVal":0}}`,
+ 推杆电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10108,"ctrlPointVal":0}}`,
+ 平移电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":2000}}`,
+ 平移电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-2000}}`,
+ 平移电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":200000}}`,
+ 平移电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-200000}}`,
+ 平移电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10003,"ctrlPointVal":1000}}`,
+ 平移电机_位置1: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`,
+ 平移电机_位置2: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`,
+ 平移电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10013,"ctrlPointVal":0}}`,
+ 平移电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10009,"ctrlPointVal":0}}`,
+ 平移电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10008,"ctrlPointVal":0}}`,
+ 开始读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":1}}`,
+ 连续读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":2}}`,
+ 停止读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":0}}`,
+ 开始扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":1}}`,
+ 停止扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":0}}`,
+ 读取扫码结果: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30007,"ctrlPointVal":0}}`,
+
+};
+const commonMessage = {
+ protocol: "iflytopCanProtocolStackV1",
+ message: {
+ attribute: "normal",
+ priority: 4,
+ type: "write",
+ targetId: 133,
+ sourceId: 1,
+ seq: 0,
+ ctrlPointAddr: 10500,
+ ctrlPointVal: 1,
+ },
+};
diff --git a/testtools/index.html b/testtools/index.html
new file mode 100644
index 0000000..72d681d
--- /dev/null
+++ b/testtools/index.html
@@ -0,0 +1,1153 @@
+
+
+
+
+
+
+
+ 板夹仓测试工具
+
+
+
+
+
+
+
+
+
+
当前状态: 未连接
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/usrc/main.cpp b/usrc/main.cpp
index 87a0855..f2a423b 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -6,6 +6,8 @@
#include "main.h"
#include "project.hpp"
//
+#include "one_dimensional_code_laser_scanner.hpp"
+#include "sdk/components/single_axis_motor_control_v2/single_axis_motor_control_v2.hpp"
#include "sdk/hal/zhal.hpp"
#include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "sdk\components\tmc\ic\ztmc4361A.hpp"
@@ -23,46 +25,74 @@ IflytopCanProtocolStackProcesser m_protocolStack;
TMC5130 m_tj_motor;
TMC5130 m_py_motor;
-// ZGPIO arm_sensor1_gpio;
-// ZGPIO arm_sensor2_gpio;
-// ZGPIO arm_sensor3_gpio;
-// ZGPIO arm_sensor4_gpio;
-// ZGPIO arm_sensor5_gpio;
-// ZGPIO arm_sensor6_gpio;
-// ZGPIO arm_sensor7_gpio;
-// ZGPIO arm_sensor8_gpio;
-
ZGPIO debuglight;
-ZGPIO tmc_motor1_spi_select1_io;
-ZGPIO tmc_motor1_nfreeze_io;
-ZGPIO tmc_motor1_nreset_io;
-ZGPIO tmc_motor1_sub_ic_enn_io;
-ZGPIO tmc_motor2_spi_select1_io;
-ZGPIO tmc_motor2_nfreeze_io;
-ZGPIO tmc_motor2_nreset_io;
-ZGPIO tmc_motor2_sub_ic_enn_io;
+ZGPIO io_fybh_read1;
+ZGPIO io_fybh_read2;
+ZGPIO io_fybh_read3;
+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;
+ZGPIO io_fybjl_sensor5;
+ZGPIO io_fybjl_sensor4;
+ZGPIO io_fybjl_sensor3;
+ZGPIO io_fybjl_sensor2;
+ZGPIO io_fybjl_sensor1;
+ZGPIO io_fybjl_sensor0;
+
+SingleAxisMotorControlerV2 m_pyMotorControlService; // 平移电机
+SingleAxisMotorControlerV2 m_tjMotorControlService; // 推进电机
+
+OneDimensionalCodeLaserScanner m_oneDimensionalCodeLaserScanner;
void input_sensors_init() {
- // arm_sensor1_gpio.initAsInput(ARM_SENSOR1_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
- // arm_sensor2_gpio.initAsInput(ARM_SENSOR2_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
- // arm_sensor3_gpio.initAsInput(ARM_SENSOR3_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
- // arm_sensor4_gpio.initAsInput(ARM_SENSOR4_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
- // arm_sensor5_gpio.initAsInput(ARM_SENSOR5_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
- // arm_sensor6_gpio.initAsInput(ARM_SENSOR6_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
- // arm_sensor7_gpio.initAsInput(ARM_SENSOR7_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
- // arm_sensor8_gpio.initAsInput(ARM_SENSOR8_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
+ io_fybh_read1.initAsInput(FYBH_READ1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+ io_fybh_read2.initAsInput(FYBH_READ2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+ io_fybh_read3.initAsInput(FYBH_READ3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+ io_fybh_read4.initAsInput(FYBH_READ4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+ io_fybh_read5.initAsInput(FYBH_READ5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+ io_fybh_read6.initAsInput(FYBH_READ6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
+
+ io_fybjl_sensor8.initAsInput(FYBJL_SENSOR8, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
+ io_fybjl_sensor7.initAsInput(FYBJL_SENSOR7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
+ io_fybjl_sensor6.initAsInput(FYBJL_SENSOR6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
+ io_fybjl_sensor5.initAsInput(FYBJL_SENSOR5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
+ io_fybjl_sensor4.initAsInput(FYBJL_SENSOR4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
+ io_fybjl_sensor3.initAsInput(FYBJL_SENSOR3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
+ io_fybjl_sensor2.initAsInput(FYBJL_SENSOR2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
+ io_fybjl_sensor1.initAsInput(FYBJL_SENSOR1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
+ io_fybjl_sensor0.initAsInput(FYBJL_SENSOR0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
}
uint32_t intput_sensors_get_table0() {
uint32_t val = 0;
- // val |= arm_sensor1_gpio.getStateUint32() << 1;
- // val |= arm_sensor2_gpio.getStateUint32() << 2;
- // val |= arm_sensor3_gpio.getStateUint32() << 3;
- // val |= arm_sensor4_gpio.getStateUint32() << 4;
- // val |= arm_sensor5_gpio.getStateUint32() << 5;
- // val |= arm_sensor6_gpio.getStateUint32() << 6;
- // val |= arm_sensor7_gpio.getStateUint32() << 7;
- // val |= arm_sensor8_gpio.getStateUint32() << 8;
+
+ val |= io_fybjl_sensor0.getStateUint32() << 0;
+ val |= io_fybjl_sensor1.getStateUint32() << 1;
+ val |= io_fybjl_sensor2.getStateUint32() << 2;
+ val |= io_fybjl_sensor3.getStateUint32() << 3;
+ val |= io_fybjl_sensor4.getStateUint32() << 4;
+ val |= io_fybjl_sensor5.getStateUint32() << 5;
+ val |= io_fybjl_sensor6.getStateUint32() << 6;
+ val |= io_fybjl_sensor7.getStateUint32() << 7;
+ val |= io_fybjl_sensor8.getStateUint32() << 8;
+
+ val |= io_fybh_read1.getStateUint32() << 9;
+ val |= io_fybh_read2.getStateUint32() << 10;
+ val |= io_fybh_read3.getStateUint32() << 11;
+ val |= io_fybh_read4.getStateUint32() << 12;
+ val |= io_fybh_read5.getStateUint32() << 13;
+ val |= io_fybh_read6.getStateUint32() << 14;
return val;
}
@@ -98,6 +128,8 @@ void Main::run() {
m_py_motor.initialize(&cfg);
int32_t chipv = m_py_motor.readChipVERSION();
ZLOGI(TAG, "m_py_motor:%lx", chipv);
+ m_py_motor.setIHOLD_IRUN(1, 31, 0);
+ // m_py_motor.rotate(500000);
}
{
@@ -106,6 +138,8 @@ void Main::run() {
m_tj_motor.initialize(&cfg);
int32_t chipv = m_tj_motor.readChipVERSION();
ZLOGI(TAG, "m_tj_motor:%lx", chipv);
+ m_tj_motor.setIHOLD_IRUN(1, 31, 0);
+ // m_tj_motor.rotate(500000);
}
/*******************************************************************************
@@ -138,6 +172,60 @@ void Main::run() {
m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kwr, 0);
}
+ /*******************************************************************************
+ * 横移电机 *
+ *******************************************************************************/
+ m_py_motor.setIHOLD_IRUN(2, 12, 0);
+ m_py_motor.setMotorShaft(false);
+
+ m_pyMotorControlService.initialize( //
+ "infeedMotor", &m_protocolStack, REG_PY_MOTOR_CTRL_ADD_BASE,
+ &io_fybjl_sensor1, // ZERO_GPIO
+ NULL, // LGPIO
+ NULL, // RGPIO
+ &m_py_motor // motor
+ );
+
+ m_pyMotorControlService.cfg_acc->setVal(30000);
+ m_pyMotorControlService.cfg_dec->setVal(30000);
+ m_pyMotorControlService.cfg_velocity->setVal(1000000);
+ m_pyMotorControlService.cfg_zero_shift->setVal(0);
+ m_pyMotorControlService.cfg_runhome_velocity->setVal(50000);
+ m_pyMotorControlService.cfg_runtohome_dec->setVal(100000);
+ m_pyMotorControlService.cfg_min_pos->setVal(-1000);
+ m_pyMotorControlService.cfg_max_pos->setVal(1144028);
+ m_pyMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
+ m_pyMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1);
+
+ /*******************************************************************************
+ * 推杆电机 *
+ *******************************************************************************/
+
+ m_tj_motor.setIHOLD_IRUN(2, 12, 0);
+ m_tj_motor.setMotorShaft(true);
+
+ m_tjMotorControlService.initialize( //
+ "outfeedMotor", &m_protocolStack, REG_TJ_MOTOR_CTRL_ADD_BASE,
+ &io_fybjl_sensor4, // ZERO_GPIO
+ NULL, // LGPIO
+ NULL, // RGPIO
+ &m_tj_motor // motor
+ );
+ m_tjMotorControlService.cfg_acc->setVal(30000);
+ m_tjMotorControlService.cfg_dec->setVal(30000);
+ m_tjMotorControlService.cfg_velocity->setVal(1000000);
+ m_tjMotorControlService.cfg_zero_shift->setVal(0);
+ m_tjMotorControlService.cfg_runhome_velocity->setVal(50000);
+ m_tjMotorControlService.cfg_runtohome_dec->setVal(100000);
+ m_tjMotorControlService.cfg_min_pos->setVal(-1000);
+ m_tjMotorControlService.cfg_max_pos->setVal(1130108);
+ m_tjMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
+ 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(); });
+
while (1) {
ZHALCORE::getInstance()->loop();
}
diff --git a/usrc/one_dimensional_code_laser_scanner.cpp b/usrc/one_dimensional_code_laser_scanner.cpp
new file mode 100644
index 0000000..d2c8ece
--- /dev/null
+++ b/usrc/one_dimensional_code_laser_scanner.cpp
@@ -0,0 +1,85 @@
+#include "one_dimensional_code_laser_scanner.hpp"
+
+using namespace iflytop;
+
+#define ONE_BIT_WIDTH ((int32_t)(51200 * 1.20003 / 8.0))
+#define MIN_POS ((int32_t)(102733))
+
+#define TAG "OneDimensionalCodeLaserScanner"
+int32_t m_off;
+int32_t m_posChache[50];
+int32_t endpos = 0;
+int32_t startpos = 0;
+bool m_idleLevel = true;
+
+void OneDimensionalCodeLaserScanner::initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin,
+ PosReadder_t readder) {
+ m_protocolProcesser = protocolProcesser;
+
+}
+
+void OneDimensionalCodeLaserScanner::startScan() {
+ CriticalContext cc;
+ m_off = 0;
+ m_workflag = true;
+
+ m_idleLevel = m_triggerGpio.getState();
+ startpos = m_readder();
+}
+void OneDimensionalCodeLaserScanner::stopScan() {
+ CriticalContext cc;
+ m_workflag = false;
+
+ endpos = m_readder();
+}
+
+bool OneDimensionalCodeLaserScanner::getPosLevel(int pos) {
+ bool level = m_idleLevel;
+ bool nowlevel = m_idleLevel;
+
+ if (pos < m_posChache[0]) {
+ return m_idleLevel;
+ }
+
+ for (size_t i = 0; i < m_off; i++) {
+ nowlevel = !nowlevel;
+ if (i + 1 < m_off) {
+ if (pos >= m_posChache[i] && pos < m_posChache[i + 1]) {
+ level = nowlevel;
+ break;
+ }
+ } else {
+ level = nowlevel;
+ }
+ }
+
+ return level;
+}
+
+void OneDimensionalCodeLaserScanner::parseResult() { //
+ static uint8_t code[500] = {0};
+
+ //
+ 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++) {
+ code[i] = getPosLevel((int32_t)(sp + len / 500.0 * i));
+ }
+
+ printf("scanresult:");
+ for (size_t i = 0; i < 500; i++) {
+ printf("%d", code[i]);
+ }
+ printf("\r\n");
+}
+void OneDimensionalCodeLaserScanner::onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent) { //
+ if (!m_workflag) {
+ return;
+ }
+ if (m_off >= 50) return;
+ m_posChache[m_off] = m_readder();
+ m_off++;
+}
diff --git a/usrc/one_dimensional_code_laser_scanner.hpp b/usrc/one_dimensional_code_laser_scanner.hpp
new file mode 100644
index 0000000..b3cd61e
--- /dev/null
+++ b/usrc/one_dimensional_code_laser_scanner.hpp
@@ -0,0 +1,50 @@
+#pragma once
+#include
+#include
+
+#include "sdk/hal/zhal.hpp"
+#include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp"
+
+#define REG_CODE_SCANER_ACT_CTRL (0) // 扫码器控制
+#define REG_CODE_SCANER_ACT_CLEAR_EXCEPTION (1) // 清除异常
+#define REG_CODE_SCANER_STAT_STATUS (5) // 设备状态
+#define REG_CODE_SCANER_STAT_EXCEPTION (6) // 异常状态
+#define REG_CODE_SCANER_CODE (7) // 码存放的地方
+#define REG_CODE_SCANER_SIZE (10) //
+
+namespace iflytop {
+using namespace std;
+
+#define POS_CACHE_SIZE 28
+
+class OneDimensionalCodeLaserScanner {
+ public:
+ typedef enum {
+ kidle,
+ kworking,
+ } code_scan_state_t;
+
+ typedef function PosReadder_t;
+
+ private:
+ IflytopCanProtocolStackProcesser* m_protocolProcesser;
+ PosReadder_t m_readder;
+
+ ZGPIO m_triggerGpio;
+ bool m_workflag = false;
+
+ public:
+ OneDimensionalCodeLaserScanner(){};
+ ~OneDimensionalCodeLaserScanner(){};
+
+ void initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, PosReadder_t readder);
+
+ void startScan();
+ void stopScan();
+ void parseResult();
+
+ private:
+ void onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent);
+ bool getPosLevel(int pos);
+};
+} // namespace iflytop