Browse Source

update

master
zhaohe 2 years ago
parent
commit
af685a17a8
  1. BIN
      components/sensors/m3078/M03078_OEM产品手册_V1.1.4.pdf
  2. 118
      components/sensors/m3078/m3078_code_scaner.cpp
  3. 103
      components/sensors/m3078/m3078_code_scaner.hpp
  4. 2
      components/zprotocols/zcancmder_v2
  5. 2
      os/zthread.hpp

BIN
components/sensors/m3078/M03078_OEM产品手册_V1.1.4.pdf

118
components/sensors/m3078/m3078_code_scaner.cpp

@ -0,0 +1,118 @@
#include "m3078_code_scaner.hpp"
#include <stdlib.h>
#include <string.h>
using namespace iflytop;
using namespace std;
#define TAG "m3078"
void M3078CodeScanner::initialize(int moduleid, hardware_config_t* hardwareconfig) {
ZUART::cfg_t cfg = {
.name = "m3078",
.huart = hardwareconfig->uart,
.rxbuffersize = ZARRAY_SIZE(codecache) - 1,
.rxovertime_ms = 10,
};
m_uart.initialize(&cfg);
m_uart.setrxcb([this](uint8_t* data, size_t len) {
if (m_codeisready) return;
if (len > 0) {
codecachelen = len;
memcpy(codecache, data, len);
codecache[len] = 0;
m_codeisready = true;
}
});
m_uart.startRxIt();
m_triggerGpio.initAsOutput(hardwareconfig->triggerPin, ZGPIO::kMode_nopull, false, false);
}
void M3078CodeScanner::trigger() {
m_codeisready = false;
m_triggerGpio.setState(0);
zos_delay(3);
m_uart.clearRxData();
m_triggerGpio.setState(1);
}
void M3078CodeScanner::stopTrigger() { m_triggerGpio.setState(0); }
bool M3078CodeScanner::idInfoIsReady() { return m_codeisready; }
char* M3078CodeScanner::getIdinfo() { return codecache; }
void M3078CodeScanner::clearIdinfo() {
memset(codecache, 0, sizeof(codecache));
codecachelen = 0;
m_codeisready = false;
}
size_t M3078CodeScanner::getIdinfoLen() { return codecachelen; }
int32_t M3078CodeScanner::module_stop() {
stopTrigger();
return 0;
}
int32_t M3078CodeScanner::module_break() {
stopTrigger();
return 0;
}
int32_t M3078CodeScanner::module_start() {
trigger();
return 0;
}
#define ACTION_NULL ;
#define REG(param_id, readaction, writeacton) \
case param_id: { \
if (read) { \
readaction; \
} else { \
writeacton; \
} \
}
int32_t M3078CodeScanner::module_xxx_reg(int32_t param_id, bool read, int32_t& val) {
switch (param_id) {
REG(kreg_module_version, /* */ val = 0x0001, ACTION_NULL);
REG(kreg_module_type, /* */ val = 0, ACTION_NULL);
REG(kreg_module_status, /* */ val = read_status(), ACTION_NULL);
REG(kreg_module_errorcode, /* */ val = 0, ACTION_NULL);
REG(kreg_module_initflag, /* */ val = module_get_inited_flag(), module_set_inited_flag(val));
REG(kreg_module_enableflag, /* */ val = 1, ACTION_NULL);
REG(kreg_module_last_cmd_exec_status, val = 0, ACTION_NULL);
default:
return err::kmodule_not_find_config_index;
break;
}
return 0;
}
int32_t M3078CodeScanner::module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); }
int32_t M3078CodeScanner::module_get_reg(int32_t param_id, int32_t* param_value) { return module_xxx_reg(param_id, true, *param_value); }
int32_t M3078CodeScanner::code_scaner_start_scan() {
ZLOGI(TAG, "code_scaner_start_scan");
return module_start();
}
int32_t M3078CodeScanner::code_scaner_stop_scan() {
ZLOGI(TAG, "code_scaner_stop_scan");
return module_stop();
}
int32_t M3078CodeScanner::code_scaner_read_scaner_result(int32_t startadd, uint8_t* data, int32_t* len) {
ZLOGI(TAG, "code_scaner_read_scaner_result");
if (codecachelen > *len) {
return err::kbuffer_not_enough;
}
*len = codecachelen;
memcpy(data, codecache, codecachelen);
return 0;
}
int32_t M3078CodeScanner::read_status() {
if (m_triggerGpio.getState() == 0) {
return 0;
}
if (m_codeisready) {
return 0;
}
return 1;
}

103
components/sensors/m3078/m3078_code_scaner.hpp

@ -0,0 +1,103 @@
//
// Created by zwsd
//
#pragma once
#include "sdk/os/zos.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp"
/**
* @brief
*
* service: M3078
*
* :
* :
* :
* :
*
* :
* 1. :
* 2. :9600
* 3. :
*
*/
namespace iflytop {
using namespace std;
class M3078CodeScanner : public ZIModule, public ZICodeScaner {
public:
typedef struct {
UART_HandleTypeDef* uart;
DMA_HandleTypeDef* hdma_rx;
DMA_HandleTypeDef* hdma_tx;
Pin_t codeReadOkPin;
Pin_t rstPin;
Pin_t triggerPin;
} hardware_config_t;
private:
ZUART m_uart;
ZGPIO m_triggerGpio;
ZGPIO m_rstPin;
int32_t id = 0;
bool m_trigger = false;
char codecache[256] = {0};
int32_t codecachelen = 0;
bool m_codeisready = false;
public:
M3078CodeScanner(){};
~M3078CodeScanner(){};
/**
* @brief
*
* @param os
* @param uart
* @param triggerGpio
*
* @
* 1. buffer要大于最大的一帧码的长度
* 2. 10ms
*/
void initialize(int moduleid, hardware_config_t* hardwareconfig);
void trigger();
void stopTrigger();
bool idInfoIsReady();
char* getIdinfo();
size_t getIdinfoLen();
void clearIdinfo();
public:
virtual int32_t getid(int32_t* id) override {
*id = this->id;
return 0;
}
virtual int32_t module_stop();
virtual int32_t module_break();
virtual int32_t module_start();
virtual int32_t module_set_reg(int32_t param_id, int32_t param_value);
virtual int32_t module_get_reg(int32_t param_id, int32_t* param_value);
virtual int32_t code_scaner_start_scan();
virtual int32_t code_scaner_stop_scan();
virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t* data, int32_t* len);
private:
int32_t module_xxx_reg(int32_t param_id, bool read, int32_t& param_value);
int32_t read_status();
};
} // namespace iflytop

2
components/zprotocols/zcancmder_v2

@ -1 +1 @@
Subproject commit ced01b81ca88792a9278c139be63faed5ef8efb1
Subproject commit fb17dcb55250a0d7230051ca725149928905aa25

2
os/zthread.hpp

@ -37,7 +37,7 @@ class ZThread {
*/
static void zthread_module_init();
void init(const char* threadname, int stack_size = 1024, osPriority priority = osPriorityNormal);
void init(const char* threadname, int stack_size = 512, osPriority priority = osPriorityNormal);
void start(zosthread_cb_t cb);
void start(zosthread_cb_t cb, zosthread_cb_t exitcb);
void stop();

Loading…
Cancel
Save