Browse Source

recode

master
zhaohe 1 year ago
parent
commit
853ee0de81
  1. 2
      app_protocols/transmit_disfection_protocol
  2. 84
      usrc/app/dmapp.cpp
  3. 12
      usrc/app/dmapp.hpp
  4. 4
      usrc/app/exth2o2_sensor.cpp
  5. 11
      usrc/base/appthread/app_period_task_mgr.cpp
  6. 12
      usrc/base/appthread/app_period_task_mgr.hpp
  7. 5
      usrc/base/gflag/gflag.c
  8. 1
      usrc/base/gflag/gflag.h
  9. 42
      usrc/board_base/app_share/air_compressor_controller.hpp
  10. 37
      usrc/board_base/app_share/blower_controller.hpp
  11. 8
      usrc/board_base/app_share/h2o2_sensor_driver.cpp
  12. 7
      usrc/board_base/app_share/h2o2_sensor_driver.hpp
  13. 54
      usrc/board_base/app_share/heater_controller.hpp
  14. 5
      usrc/board_base/app_share/proportional_valve_ctrl.hpp
  15. 3
      usrc/board_base/app_share/pxxpsbus.hpp
  16. 10
      usrc/board_base/app_share/tmc_motor_group.cpp
  17. 1
      usrc/board_base/app_share/tmc_motor_group.hpp
  18. 3
      usrc/board_base/app_share/warning_light_driver.hpp
  19. 1
      usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp
  20. 18
      usrc/protocol_processer_impl/public_cmd_processer.cpp
  21. 1
      usrc/protocol_processer_impl/public_cmd_processer.hpp
  22. 2
      zsdk

2
app_protocols/transmit_disfection_protocol

@ -1 +1 @@
Subproject commit cc6b0133119f5d7a8538a7e644234e3bb0e7ce57
Subproject commit 6bfe740cbf0caae387badd4e7702337d4583f46b

84
usrc/app/dmapp.cpp

@ -42,34 +42,28 @@ void DisinfectionApp::initialize() {
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
bindHeaterCtrler();
} else if (isBoardType(kDrawBarDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
heaterCtrler.initialize(PC7, NULL, 0, &hadc1, ADC_CHANNEL_1);
bindHeaterCtrler();
}
// 风机
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1);
bindBlowerCtrler();
} else if (isBoardType(kPipeDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1);
blowerCtrler.initializeAsHighPowerUartBlower(&huart2, &hadc1, ADC_CHANNEL_1);
bindBlowerCtrler();
} else if (isBoardType(kDrawBarDMPowerCtrlBoard)) {
DBDMPowerCtrlBoard::HTIM3_INIT();
blowerCtrler.initializeAsMiniPwmBlower(&htim3, TIM_CHANNEL_3, PC6 /*en*/, PC9 /*fb*/);
bindBlowerCtrler();
}
// 空压机
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
bindAirComCtrler();
} else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) {
airComCtrler.initialize(PD14, NULL, 0);
}
@ -78,8 +72,7 @@ void DisinfectionApp::initialize() {
// kfn_air_tightness_test_ac_ctrl
if (isBoardType(kPipeDMPowerCtrlBoard)) {
REG_LAMADA_FN(kfn_air_tightness_test_ac_ctrl, [&](ProcessContext* cxt) {
airComCtrler.air_compressor_ctrl(GET_PARAM(0));
airComCtrler.air_compressor_ctrl_safe_valve(GET_PARAM(0));
airComCtrler.open(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
});
} else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) {
@ -96,7 +89,6 @@ void DisinfectionApp::initialize() {
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_3);
bindH2o2Sensor();
}
// 水浸传感器
@ -104,8 +96,9 @@ void DisinfectionApp::initialize() {
ZLOGI(TAG, "WaterSensor init");
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
bindDeviceBottomWS();
bindEvaporationBinWS();
REG_LAMADA_FN(kfn_device_bottom_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, deviceBottomWS.read()); });
REG_LAMADA_FN(kfn_evaporation_tank_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, evaporationBinWS.read()); });
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
@ -113,7 +106,6 @@ void DisinfectionApp::initialize() {
ZLOGI(TAG, "TMCMotorGroup init");
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT();
tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/});
bindTmcPowerGroup();
}
// 三色指示灯
@ -121,7 +113,6 @@ void DisinfectionApp::initialize() {
// 三色指示灯初始化
ZLOGI(TAG, "WarningLightDriver init");
wlDriver.initialize(PD8, PD7, PD9, PD10);
bindWlDriver();
}
// 压力传感器初始化
@ -130,14 +121,12 @@ void DisinfectionApp::initialize() {
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
bindPsBus();
}
// 比例阀初始化
if (isBoardType(kPipeDMLiquidCtrlBoard)) {
ZLOGI(TAG, "ProportionalValveCtrl init");
LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600);
proportionalValveCtrl.initialize(&huart2);
bindProportionalValveCtrl();
}
// 气密性测试通道
@ -163,70 +152,5 @@ void DisinfectionApp::initialize() {
/***********************************************************************************************************************
* PROTOCOL_BIND *
***********************************************************************************************************************/
void DisinfectionApp::bindHeaterCtrler() {
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_electric_current);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_temperature_data);
}
void DisinfectionApp::bindBlowerCtrler() {
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_read_electric_current);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_is_error);
}
void DisinfectionApp::bindAirComCtrler() {
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_read_electric_current);
}
void DisinfectionApp::bindH2o2Sensor() {
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
}
void DisinfectionApp::bindWlDriver() { BIND_FN(WarningLightDriver, &wlDriver, fn_triple_warning_light_ctl); }
void DisinfectionApp::bindTmcPowerGroup() {
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_rotate);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_stop);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, &tmcPowerGroup, fn_pump_ping);
}
void DisinfectionApp::bindPsBus() {
BIND_FN(PXXPSBus, &psBus, fn_psbus_read_data);
BIND_FN(PXXPSBus, &psBus, fn_psbus_scan);
}
void DisinfectionApp::bindEvaporationBinWS() {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_evaporation_tank_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = evaporationBinWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
void DisinfectionApp::bindDeviceBottomWS() {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_device_bottom_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = deviceBottomWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
void DisinfectionApp::bindProportionalValveCtrl() {
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_set_valve);
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_read_pos);
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_is_busy);
}

12
usrc/app/dmapp.hpp

@ -44,17 +44,5 @@ class DisinfectionApp {
void initialize();
private:
void bindHeaterCtrler();
void bindBlowerCtrler();
void bindAirComCtrler();
void bindH2o2Sensor();
void bindWlDriver();
void bindTmcPowerGroup();
void bindPsBus();
void bindEvaporationBinWS();
void bindDeviceBottomWS();
void bindProportionalValveCtrl();
};
} // namespace iflytop

4
usrc/app/exth2o2_sensor.cpp

@ -25,10 +25,6 @@ void ExtH2O2Sensor::initialize() {
m_alarmLightY.initAsOutput(PD8, kxs_gpio_pullup, true, false);
id_from_machine.initAsInput(PE8, kxs_gpio_nopull, kxs_gpio_no_irq, false);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
osThreadDef(H2O2SensorMonitor, c_onH2O2MonitorThread, osPriorityNormal, 0, 1024);
H2O2SensorMonitorThreadId = osThreadCreate(osThread(H2O2SensorMonitor), NULL);

11
usrc/base/appthread/app_period_task_mgr.cpp

@ -26,12 +26,21 @@ void AppPeriodTaskMgr::regTask(const char* name, task_fn_t fn, void* cxt, int pe
ZLOGI(TAG, "reg task %s", name);
ntask++;
}
void AppPeriodTaskMgr::regTask(const char* name, std::function<void()> fn, int period) {
task[ntask].exfn = fn;
task[ntask].taskname = name;
task[ntask].period = period;
task[ntask].lastcalltp = HAL_GetTick();
ZLOGI(TAG, "reg task %s", name);
ntask++;
}
void AppPeriodTaskMgr::onThreadCB() {
while (true) {
for (int i = 0; i < ntask; i++) {
if (haspassedms(task[i].lastcalltp) >= task[i].period) {
task[i].fn(task[i].cxt);
if (task[i].fn) task[i].fn(task[i].cxt);
if (task[i].exfn) task[i].exfn();
task[i].lastcalltp = HAL_GetTick();
}
}

12
usrc/base/appthread/app_period_task_mgr.hpp

@ -13,11 +13,12 @@ namespace iflytop {
typedef void (*task_fn_t)(void*);
typedef struct {
task_fn_t fn;
const char* taskname;
void* cxt;
int period;
int32_t lastcalltp;
task_fn_t fn;
std::function<void()> exfn;
const char* taskname;
void* cxt;
int period;
int32_t lastcalltp;
} task_t;
class AppPeriodTaskMgr {
@ -33,6 +34,7 @@ class AppPeriodTaskMgr {
void initialize();
void regTask(const char* name, task_fn_t fn, void* cxt, int period);
void regTask(const char* name, std::function<void()> fn, int period);
void onThreadCB();
void startScheduler();

5
usrc/base/gflag/gflag.c

@ -5,8 +5,9 @@
#include "cmsis_os.h"
bool gInitErrorFlag = false;
uint32_t gBoardFlag = 0;
bool gInitErrorFlag = false;
uint32_t gBoardFlag = 0;
bool gEnableReportFlag = true;
void gBoardFlagSetResetFlag() {
vPortEnterCritical();

1
usrc/base/gflag/gflag.h

@ -16,6 +16,7 @@ extern bool gInitErrorFlag;
* 0: board reset flag (1:reset)
*/
extern uint32_t gBoardFlag;
extern bool gEnableReportFlag;
void gBoardFlagSetResetFlag();
void gBoardFlagClearResetFlag();

42
usrc/board_base/app_share/air_compressor_controller.hpp

@ -6,8 +6,8 @@ using namespace zscanprotocol;
using namespace transmit_disfection_protocol;
class AirCompressorController {
ZGPIO m_AirCompressor_ctrlGpio;
ZADC m_AirCompressor_iAdc;
ZGPIO m_ctrlGpio;
ZADC m_iAdc;
bool m_isInitialized = false;
public:
@ -17,35 +17,35 @@ class AirCompressorController {
}
void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) {
if (m_isInitialized) return;
m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich);
ZASSERT(!m_isInitialized);
m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_iAdc.initialize("AirComAdc", iadc, ich);
m_isInitialized = true;
AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000);
// BIND
BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei);
BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei_adc_raw);
}
bool isInitialized() { return m_isInitialized; }
// FN
void air_compressor_ctrl(int32_t val) { m_AirCompressor_ctrlGpio.write(val); }
void air_compressor_ctrl_safe_valve(int32_t val) {}
int32_t air_compressor_read_electric_current() { return airCompressorAdcToCurrent(m_AirCompressor_iAdc.getCacheVal()); }
int32_t air_compressor_read_iadc() { return m_AirCompressor_iAdc.getCacheVal(); }
public:
void open(bool val) { m_ctrlGpio.write(val); }
private:
// PP
void fn_air_compressor_ctrl(ProcessContext* cxt) { //
air_compressor_ctrl(GET_PARAM(0));
m_ctrlGpio.write(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
}
void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { //
air_compressor_ctrl_safe_valve(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
}
void fn_air_compressor_read_electric_current(ProcessContext* cxt) { //
auto val = air_compressor_read_electric_current();
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
}
void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, NULL, 0); }
void fn_air_compressor_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airCompressorAdcToCurrent(m_iAdc.getCacheVal())); }
void fn_air_compressor_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iAdc.getCacheVal()); }
void periodTask() { m_AirCompressor_iAdc.updateAdcValToCache(); }
private:
void periodTask() { m_iAdc.updateAdcValToCache(); }
};
} // namespace iflytop

37
usrc/board_base/app_share/blower_controller.hpp

@ -34,22 +34,39 @@ class BlowerController {
void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) {
m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_iadc.initialize("Blower-iadc", iadc, ich);
AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000);
m_blowerType = kIOBlower;
m_isInitialized = true;
bindFn();
}
bool isInitialized() { return m_isInitialized; }
void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) {
m_modbusblock.initialize(huart);
m_iadc.initialize("Blower-iadc", iadc, ich);
m_blowerType = kHighPowerUartBlower;
AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000);
m_blowerType = kHighPowerUartBlower;
m_isInitialized = true;
bindFn();
}
void initializeAsMiniPwmBlower(TIM_HandleTypeDef* htim, uint32_t channel, Pin_t enGpio, Pin_t fbGpio) {
m_miniPwmBlower_htim = htim;
m_miniPwmBlower_channle = channel;
m_miniPwmBlower_enGpio.initAsOutput(enGpio, kxs_gpio_nopull, true, false);
m_miniPwmBlower_fbGpio.initAsInput(fbGpio, kxs_gpio_nopull, kxs_gpio_rising_irq, false);
m_blowerType = kMiniPwmBlower;
AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000);
m_blowerType = kMiniPwmBlower;
m_isInitialized = true;
bindFn();
}
bool isInitialized() { return m_isInitialized; }
void bindFn() {
BIND_FN(BlowerController, this, fn_blower_ctrl);
BIND_FN(BlowerController, this, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, this, fn_blower_read_ei);
BIND_FN(BlowerController, this, fn_blower_is_error);
BIND_FN(BlowerController, this, fn_blower_read_ei_adc_raw);
}
/***********************************************************************************************************************
@ -69,7 +86,7 @@ class BlowerController {
}
}
void blower_ctrl_safe_valve(int32_t val) {}
int32_t blower_read_electric_current() {
int32_t blower_read_ei() {
if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) {
return blowserAdcToCurrent(m_iadc.getCacheVal());
}
@ -102,15 +119,9 @@ class BlowerController {
blower_ctrl_safe_valve(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
}
void fn_blower_read_electric_current(ProcessContext* cxt) { //
auto val = blower_read_electric_current();
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
}
void fn_blower_is_error(ProcessContext* cxt) { //
auto val = blower_is_error();
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
}
void fn_blower_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_read_ei()); }
void fn_blower_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iadc.getCacheVal()); }
void fn_blower_is_error(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_is_error()); }
private:
void mini_pwm_blower_ctrl(int32_t duty) {

8
usrc/board_base/app_share/h2o2_sensor_driver.cpp

@ -1,4 +1,5 @@
#include "h2o2_sensor_driver.hpp"
#include "zsdk/zcanreceiver/zcanreceiver.hpp"
using namespace iflytop;
@ -35,8 +36,11 @@ void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef*
osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024);
H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this);
m_isInitialized = true;
m_isInitialized = true;
BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_reg);
}
/***********************************************************************************************************************
@ -99,6 +103,6 @@ void H2O2SensorDriver::onH2O2CaptureThread() {
static report_h2o2_data_t data;
memset(&data, 0, sizeof(data));
h2o2_sensor_data(&data);
zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30);
if (gEnableReportFlag) zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30);
}
}

7
usrc/board_base/app_share/h2o2_sensor_driver.hpp

@ -9,11 +9,11 @@ class H2O2SensorDriver {
ModbusBlockHost m_ModbusBlockHost; //
ZADC m_H2O2Adc; // H2O2传感器控制
HMP110 m_HMP110; // H2O2传感器
int32_t m_detectId = -1;
bool m_isInitialized = false;
int32_t m_detectId = -1;
bool m_isInitialized = false;
public:
void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel);
void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel);
bool isInitialized() { return m_isInitialized; }
bool h2o2_sensor_is_online();
@ -22,6 +22,7 @@ class H2O2SensorDriver {
int32_t h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len);
int32_t h2o2_sensor_data(report_h2o2_data_t* sensorData);
private:
// PP
void fn_h2o2_sensor_read_calibration_date(ProcessContext* cxt) {
int32_t data[3];

54
usrc/board_base/app_share/heater_controller.hpp

@ -5,27 +5,35 @@ namespace iflytop {
using namespace transmit_disfection_protocol;
class HeaterController {
ZGPIO m_Heater_ctrlGpio;
ZADC m_Heater_electricCurrentAdc;
ZADC m_Heater_temperatureAdc;
ZGPIO m_ctrlGpio;
ZADC m_iAdc;
ZADC m_tempAdc;
bool m_isInitialized = false;
public:
void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich, ADC_HandleTypeDef* tadc, uint32_t tch) {
m_Heater_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_Heater_electricCurrentAdc.initialize("HeaterCurrentAdc", iadc, ich);
m_Heater_temperatureAdc.initialize("temperatureAdc", iadc, tch);
m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_iAdc.initialize("heater-idac", iadc, ich);
m_tempAdc.initialize("heater-tadc", iadc, tch);
m_isInitialized = true;
AppPeriodTaskMgr::ins()->regTask("Heater-ADC", [this]() { periodTask(); }, 1000);
BIND_FN(HeaterController, this, fn_heater_ctrl);
BIND_FN(HeaterController, this, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, this, fn_heater_read_ei);
BIND_FN(HeaterController, this, fn_heater_read_temperature_data);
BIND_FN(HeaterController, this, fn_heater_read_ei_adc_raw);
BIND_FN(HeaterController, this, fn_heater_read_temperature_data_adc_raw);
}
bool isInitialized() { return m_isInitialized; }
void heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); }
void heater_ctrl(int32_t val) { m_ctrlGpio.write(val); }
void heater_ctrl_safe_valve(int32_t val) {}
int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_Heater_temperatureAdc.getCacheVal()); }
int32_t heater_read_electric_current() { return hearterAdcToCurrent(m_Heater_electricCurrentAdc.getCacheVal()); }
int32_t heater_read_iadc() { return m_Heater_electricCurrentAdc.getCacheVal(); }
int32_t heater_read_tadc() { return m_Heater_temperatureAdc.getCacheVal(); }
int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_tempAdc.getCacheVal()); }
int32_t heater_read_ei() { return hearterAdcToCurrent(m_iAdc.getCacheVal()); }
int32_t heater_read_iadc() { return m_iAdc.getCacheVal(); }
int32_t heater_read_tadc() { return m_tempAdc.getCacheVal(); }
// PP
void fn_heater_ctrl(ProcessContext* cxt) { //
@ -36,19 +44,29 @@ class HeaterController {
heater_ctrl_safe_valve(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
}
void fn_heater_read_electric_current(ProcessContext* cxt) { //
auto val = heater_read_electric_current();
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
void fn_heater_read_ei(ProcessContext* cxt) { //
auto val = heater_read_ei();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
void fn_heater_read_temperature_data(ProcessContext* cxt) { //
auto val = heater_read_temperature_data();
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
public:
void fn_heater_read_ei_adc_raw(ProcessContext* cxt) { //
auto val = m_iAdc.getCacheVal();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
void fn_heater_read_temperature_data_adc_raw(ProcessContext* cxt) { //
auto val = m_tempAdc.getCacheVal();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
private:
void periodTask() {
m_Heater_electricCurrentAdc.updateAdcValToCache();
m_Heater_temperatureAdc.updateAdcValToCache();
m_iAdc.updateAdcValToCache();
m_tempAdc.updateAdcValToCache();
}
};
} // namespace iflytop

5
usrc/board_base/app_share/proportional_valve_ctrl.hpp

@ -12,10 +12,15 @@ class ProportionalValveCtrl {
void initialize(UART_HandleTypeDef* huart) {
valve.initialize(huart);
m_isInitialized = true;
BIND_FN(ProportionalValveCtrl, this, fn_proportional_set_valve);
BIND_FN(ProportionalValveCtrl, this, fn_proportional_read_pos);
BIND_FN(ProportionalValveCtrl, this, fn_proportional_is_busy);
}
bool isInitialized() { return m_isInitialized; }
private:
void fn_proportional_set_valve(ProcessContext* cxt) {
int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1));
if (err) {

3
usrc/board_base/app_share/pxxpsbus.hpp

@ -12,9 +12,12 @@ class PXXPSBus {
void initialize(UART_HandleTypeDef* huart) {
psbus.init(huart);
m_isInitialized = true;
BIND_FN(PXXPSBus, this, fn_psbus_read_data);
BIND_FN(PXXPSBus, this, fn_psbus_scan);
}
bool isInitialized() { return m_isInitialized; }
private:
void fn_psbus_read_data(ProcessContext* cxt) {
CHECK_PARAM_LEN(PRAAM_LEN(), 1);
int32_t index = GET_PARAM(0);

10
usrc/board_base/app_share/tmc_motor_group.cpp

@ -110,6 +110,16 @@ void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cf
ZLOGI(TAG, "MotorMonitorTimerId: %p", this);
osTimerStart(MotorMonitorTimerId, 1000);
m_isInitialized = true;
BIND_FN(TmcMotorGroup, this, fn_pump_rotate);
BIND_FN(TmcMotorGroup, this, fn_pump_stop);
BIND_FN(TmcMotorGroup, this, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, this, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, this, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, this, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, this, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, this, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, this, fn_pump_ping);
}
#define MOTOR_CHECK() \

1
usrc/board_base/app_share/tmc_motor_group.hpp

@ -22,6 +22,7 @@ class TmcMotorGroup {
return &m_motor[index];
}
private:
void fn_pump_rotate(ProcessContext* cxt);
void fn_pump_stop(ProcessContext* cxt);
void fn_pump_set_ihold_irun_idelay(ProcessContext* cxt);

3
usrc/board_base/app_share/warning_light_driver.hpp

@ -18,7 +18,7 @@ class WarningLightDriver {
triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false);
triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false);
m_isInitialized = true;
BIND_FN(WarningLightDriver, this, fn_triple_warning_light_ctl);
}
bool isInitialized() { return m_isInitialized; }
@ -44,6 +44,7 @@ class WarningLightDriver {
triLight_BEEP.write(0);
}
private:
void fn_triple_warning_light_ctl(ProcessContext* cxt) {
CHECK_PARAM_LEN(PRAAM_LEN(), 4);

1
usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp

@ -1,4 +1,3 @@
#pragma once
#include "dbdm_power_ctrl_board.hpp"
using namespace iflytop;
void DBDMPowerCtrlBoard::HTIM3_INIT() {

18
usrc/protocol_processer_impl/public_cmd_processer.cpp

@ -11,6 +11,7 @@ void PublicCmdProcesser::initialize() {
REG_FN(fn_read_taskinfo);
REG_FN(fn_heart_ping);
REG_FN(fn_clear_reset_flag);
REG_FN(fn_enable_report);
}
void PublicCmdProcesser::fn_read_board_info(ProcessContext* cxt) {
@ -25,11 +26,11 @@ void PublicCmdProcesser::fn_read_board_info(ProcessContext* cxt) {
}
void PublicCmdProcesser::fn_read_sysinfo(ProcessContext* cxt) {
static ack_sysinfo_t ack;
ack.free_heap_size = SysMgr::ins()->osGetMinimumEverFreeHeapSize();
ack.total_heap_size = SysMgr::ins()->osGetTotalHeapSize();
ack.free_heap_size = SysMgr::ins()->osGetFreeSysHeapSize();
ack.taskNum = SysMgr::ins()->getTaskNum();
ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000;
ack.free_heap_size = SysMgr::ins()->osGetMinimumEverFreeHeapSize();
ack.total_heap_size = SysMgr::ins()->osGetTotalHeapSize();
ack.free_sys_heap_size = SysMgr::ins()->osGetFreeSysHeapSize();
ack.taskNum = SysMgr::ins()->getTaskNum();
ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000;
zcanbus_send_ack(cxt->packet, (uint8_t*)&ack, sizeof(ack));
}
void PublicCmdProcesser::fn_read_taskinfo(ProcessContext* cxt) {
@ -53,4 +54,9 @@ void PublicCmdProcesser::fn_heart_ping(ProcessContext* cxt) {
void PublicCmdProcesser::fn_clear_reset_flag(ProcessContext* cxt) {
gBoardFlagClearResetFlag();
zcanbus_send_ack(cxt->packet, NULL, 0);
}
}
void PublicCmdProcesser::fn_enable_report(ProcessContext* cxt) {
gEnableReportFlag = GET_PARAM(0);
zcanbus_send_ack(cxt->packet, NULL, 0);
}

1
usrc/protocol_processer_impl/public_cmd_processer.hpp

@ -25,6 +25,7 @@ class PublicCmdProcesser {
void fn_read_taskinfo(ProcessContext* cxt);
void fn_heart_ping(ProcessContext* cxt);
void fn_clear_reset_flag(ProcessContext* cxt);
void fn_enable_report(ProcessContext* cxt);
};
} // namespace iflytop

2
zsdk

@ -1 +1 @@
Subproject commit 333f0d4eb7cd32934156ba989d63b2cc079ed098
Subproject commit 4b1b1b80df20a5eca96c43f787ac3ee23708065b
Loading…
Cancel
Save