From 6364cdfbe3851c3f706a5c20cab08b4880941667 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 9 Aug 2024 13:57:05 +0800 Subject: [PATCH] recode --- usrc/base/i_protocol_processer.hpp | 4 +- usrc/board/app_share/air_compressor_controller.hpp | 50 ----- usrc/board/app_share/blower_controller.hpp | 43 ----- usrc/board/app_share/h2o2_sensor_driver.cpp | 102 ---------- usrc/board/app_share/h2o2_sensor_driver.hpp | 48 ----- usrc/board/app_share/heater_controller.hpp | 52 ------ usrc/board/app_share/pxxpsbus.hpp | 41 ---- usrc/board/app_share/tmc_motor_group.cpp | 208 --------------------- usrc/board/app_share/tmc_motor_group.hpp | 34 ---- usrc/board/app_share/warning_light_driver.hpp | 55 ------ .../large_space_dm_liquid_ctrl_board_hal.cpp | 120 ------------ .../large_space_dm_liquid_ctrl_board_hal.hpp | 20 -- .../baseboard/large_space_dm_power_ctrl_board.cpp | 142 -------------- .../baseboard/large_space_dm_power_ctrl_board.hpp | 13 -- usrc/board/dep.hpp | 12 -- usrc/board/large_space_dm_liquid_ctrl_board.hpp | 2 +- usrc/board/large_space_dm_power_ctrl_board.hpp | 3 +- usrc/board/pipe_dm_liquid_ctrl_board.hpp | 32 ++++ usrc/board/pipe_dm_power_ctrl_board.hpp | 32 ++++ .../app_share/air_compressor_controller copy.hpp | 50 +++++ .../app_share/air_compressor_controller.hpp | 50 +++++ usrc/board_base/app_share/blower_controller.hpp | 43 +++++ usrc/board_base/app_share/h2o2_sensor_driver.cpp | 102 ++++++++++ usrc/board_base/app_share/h2o2_sensor_driver.hpp | 48 +++++ usrc/board_base/app_share/heater_controller.hpp | 52 ++++++ usrc/board_base/app_share/pxxpsbus.hpp | 41 ++++ usrc/board_base/app_share/tmc_motor_group.cpp | 208 +++++++++++++++++++++ usrc/board_base/app_share/tmc_motor_group.hpp | 34 ++++ usrc/board_base/app_share/warning_light_driver.hpp | 55 ++++++ .../large_space_dm_liquid_ctrl_board_hal.cpp | 120 ++++++++++++ .../large_space_dm_liquid_ctrl_board_hal.hpp | 20 ++ .../baseboard/large_space_dm_power_ctrl_board.cpp | 142 ++++++++++++++ .../baseboard/large_space_dm_power_ctrl_board.hpp | 13 ++ usrc/board_base/board_base.hpp | 12 ++ .../large_space_dm_liquid_ctrl_board_pp.hpp | 25 ++- .../large_space_dm_power_ctrl_board_pp.hpp | 21 ++- .../public_cmd_processer.cpp | 20 +- .../public_cmd_processer.hpp | 10 +- 38 files changed, 1110 insertions(+), 969 deletions(-) delete mode 100644 usrc/board/app_share/air_compressor_controller.hpp delete mode 100644 usrc/board/app_share/blower_controller.hpp delete mode 100644 usrc/board/app_share/h2o2_sensor_driver.cpp delete mode 100644 usrc/board/app_share/h2o2_sensor_driver.hpp delete mode 100644 usrc/board/app_share/heater_controller.hpp delete mode 100644 usrc/board/app_share/pxxpsbus.hpp delete mode 100644 usrc/board/app_share/tmc_motor_group.cpp delete mode 100644 usrc/board/app_share/tmc_motor_group.hpp delete mode 100644 usrc/board/app_share/warning_light_driver.hpp delete mode 100644 usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp delete mode 100644 usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp delete mode 100644 usrc/board/baseboard/large_space_dm_power_ctrl_board.cpp delete mode 100644 usrc/board/baseboard/large_space_dm_power_ctrl_board.hpp delete mode 100644 usrc/board/dep.hpp create mode 100644 usrc/board/pipe_dm_liquid_ctrl_board.hpp create mode 100644 usrc/board/pipe_dm_power_ctrl_board.hpp create mode 100644 usrc/board_base/app_share/air_compressor_controller copy.hpp create mode 100644 usrc/board_base/app_share/air_compressor_controller.hpp create mode 100644 usrc/board_base/app_share/blower_controller.hpp create mode 100644 usrc/board_base/app_share/h2o2_sensor_driver.cpp create mode 100644 usrc/board_base/app_share/h2o2_sensor_driver.hpp create mode 100644 usrc/board_base/app_share/heater_controller.hpp create mode 100644 usrc/board_base/app_share/pxxpsbus.hpp create mode 100644 usrc/board_base/app_share/tmc_motor_group.cpp create mode 100644 usrc/board_base/app_share/tmc_motor_group.hpp create mode 100644 usrc/board_base/app_share/warning_light_driver.hpp create mode 100644 usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp create mode 100644 usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp create mode 100644 usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp create mode 100644 usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp create mode 100644 usrc/board_base/board_base.hpp diff --git a/usrc/base/i_protocol_processer.hpp b/usrc/base/i_protocol_processer.hpp index f9352a0..ed21619 100644 --- a/usrc/base/i_protocol_processer.hpp +++ b/usrc/base/i_protocol_processer.hpp @@ -15,8 +15,8 @@ using namespace std; using namespace zscanprotocol; using namespace transmit_disfection_protocol; -#define REG_FN(fn) cmdprocesser.push_back(CmdProcesser(kfn_##fn, bind(&ThisClass::fn, this, placeholders::_1))) -#define BIND_FN(ClassName, obj, fn) cmdprocesser.push_back(CmdProcesser(kfn_##fn, bind(&ClassName::fn, obj, placeholders::_1))); +#define REG_FN(fn) cmdprocesser.push_back(CmdProcesser(k##fn, bind(&ThisClass::fn, this, placeholders::_1))) +#define BIND_FN(ClassName, obj, fn) cmdprocesser.push_back(CmdProcesser(k##fn, bind(&ClassName::fn, obj, placeholders::_1))); #define GET_PARAM(off) ((((int32_t*)(cxt->packet->params))[off])) #define PRAAM_LEN() ((cxt->packetlen - sizeof(zcanbus_packet_t)) / 4) diff --git a/usrc/board/app_share/air_compressor_controller.hpp b/usrc/board/app_share/air_compressor_controller.hpp deleted file mode 100644 index 90384a2..0000000 --- a/usrc/board/app_share/air_compressor_controller.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace zscanprotocol; -using namespace transmit_disfection_protocol; - -class AirCompressorController { - ZGPIO m_AirCompressor_ctrlGpio; - ZADC m_AirCompressor_iAdc; - - public: - static AirCompressorController* ins() { - static AirCompressorController instance; - return &instance; - } - - void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { - m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich); - - AppPeriodTaskMgr::ins()->regTask("AirComAdc", AirCompressorController::periodTask, this, 10); - } - - // 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()); } - - // PP - void air_compressor_ctrl(ProcessContext* cxt) { // - air_compressor_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void air_compressor_ctrl_safe_valve(ProcessContext* cxt) { // - air_compressor_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void air_compressor_read_electric_current(ProcessContext* cxt) { // - auto val = air_compressor_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } - - private: - static void periodTask(void* p) { ((AirCompressorController*)p)->periodTask(); } - void periodTask() { m_AirCompressor_iAdc.updateAdcValToCache(); } -}; -} // namespace iflytop - -#pragma once diff --git a/usrc/board/app_share/blower_controller.hpp b/usrc/board/app_share/blower_controller.hpp deleted file mode 100644 index df7e121..0000000 --- a/usrc/board/app_share/blower_controller.hpp +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class BlowerController { - ZGPIO m_Blowser_ctrlGpio; - ZADC m_Blowser_electricCurrentAdc; - - public: - void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { - m_Blowser_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_Blowser_electricCurrentAdc.initialize("BlowserCurrentAdc", iadc, ich); - - AppPeriodTaskMgr::ins()->regTask("blowerAdc", BlowerController::periodTask, this, 10); - } - - // FN - void blower_ctrl(int32_t val) { m_Blowser_ctrlGpio.write(val); } - void blower_ctrl_safe_valve(int32_t val) {} - int32_t blower_read_electric_current() { return blowserAdcToCurrent(m_Blowser_electricCurrentAdc.getCacheVal()); } - - // PP - void blower_ctrl(ProcessContext* cxt) { // - blower_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void blower_ctrl_safe_valve(ProcessContext* cxt) { // - blower_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void blower_read_electric_current(ProcessContext* cxt) { // - auto val = blower_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } - - private: - static void periodTask(void* p) { ((BlowerController*)p)->periodTask(); } - void periodTask() { m_Blowser_electricCurrentAdc.updateAdcValToCache(); } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/app_share/h2o2_sensor_driver.cpp b/usrc/board/app_share/h2o2_sensor_driver.cpp deleted file mode 100644 index 0ad2b16..0000000 --- a/usrc/board/app_share/h2o2_sensor_driver.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "h2o2_sensor_driver.hpp" -#include "zsdk/zcanreceiver/zcanreceiver.hpp" -using namespace iflytop; - -#define TAG "LSDMPowerCtrlBoard" -using namespace transmit_disfection_protocol; - -static osThreadId H2O2CaptureThreadId; -/*********************************************************************************************************************** - * FUNC * - ***********************************************************************************************************************/ -static void c_onH2O2CaptureThread(void const* argument) { - H2O2SensorDriver* driver = (H2O2SensorDriver*)argument; - driver->onH2O2CaptureThread(); -} - -void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel) { - ZASSERT(huart->Init.BaudRate == 19200); - ZASSERT(huart->Init.StopBits == UART_STOPBITS_2); - - m_ModbusBlockHost.initialize(huart); - m_H2O2Adc.initialize("H2O2Adc", hadc, adcChannel); - m_HMP110.init(&m_ModbusBlockHost); - - m_detectId = 240; - if (m_HMP110.ping(1)) { - ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: 1"); - m_detectId = 1; - } - if (m_HMP110.ping(240)) { - m_detectId = 240; - } - m_HMP110.setid(m_detectId); - // ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: %d", m_detectId); - - osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); - H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); -} - -/*********************************************************************************************************************** - * H2O2 * - ***********************************************************************************************************************/ - -bool H2O2SensorDriver::h2o2_sensor_is_online() { - if (m_detectId <= 0) return false; - int32_t ecode = m_HMP110.read_cache_errorcode(); - if (ecode == -1) return false; - return true; -} -int32_t H2O2SensorDriver::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // - *year = 1; - *month = 2; - *day = 3; - return 0; -} -int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_errorcode() { // - return m_HMP110.read_cache_errorcode(); -} -int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { // - return m_HMP110.read_reg(add, val, len); -} -int32_t H2O2SensorDriver::h2o2_sensor_data(report_h2o2_data_t* readdata) { - HMP110::hmp110_sensordata_t sensordata; - int h2o2adcData = 0; - - h2o2adcData = m_H2O2Adc.getCacheVal(); - m_HMP110.read_cache_sensor_data(&sensordata); - - if (m_detectId > 0) { - readdata->sensor_error = m_HMP110.read_cache_errorcode() != 0; - } else { - readdata->sensor_error = 1; - } - readdata->h2o2 = h2o2adcToPPM(h2o2adcData); - readdata->humid = sensordata.rh; - readdata->temp = sensordata.temp; - readdata->saturation = 0; - ZLOGI(TAG, "ppm:%d(adc:%d), rh:%d, temp:%d, df_ptemp:%d, ah:%d, mr:%d, wbt:%d, eh:%d", // - readdata->h2o2, // - h2o2adcData, // - sensordata.rh, // - sensordata.temp, // - sensordata.df_ptemp, // - sensordata.ah, // - sensordata.mr, // - sensordata.wet_bulb_temp, // - sensordata.enthalpy); - return 0; -} - -void H2O2SensorDriver::onH2O2CaptureThread() { - while (1) { - osDelay(5000); - m_H2O2Adc.updateAdcValToCache(); - m_HMP110.updateSensorDataAndErrorcode(); - - 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); - } -} \ No newline at end of file diff --git a/usrc/board/app_share/h2o2_sensor_driver.hpp b/usrc/board/app_share/h2o2_sensor_driver.hpp deleted file mode 100644 index b816141..0000000 --- a/usrc/board/app_share/h2o2_sensor_driver.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class H2O2SensorDriver { - public: - ModbusBlockHost m_ModbusBlockHost; // - ZADC m_H2O2Adc; // H2O2传感器控制 - HMP110 m_HMP110; // H2O2传感器 - int32_t m_detectId = -1; - - public: - void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); - bool h2o2_sensor_is_online(); - int32_t h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day); - int32_t h2o2_sensor_read_sub_ic_errorcode(); - 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); - - // PP - void h2o2_sensor_read_calibration_date(ProcessContext* cxt) { - int32_t data[3]; - h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); - zcanbus_send_ack(cxt->packet, (uint8_t*)&data, sizeof(data)); - } - void h2o2_sensor_read_sub_ic_errorcode(ProcessContext* cxt) { - int32_t ecode = h2o2_sensor_read_sub_ic_errorcode(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&ecode, sizeof(ecode)); - } - void h2o2_sensor_read_sub_ic_reg(ProcessContext* cxt) { - int32_t addr = GET_PARAM(0); - int32_t regNum = GET_PARAM(1); - if (regNum > 10) regNum = 10; // 最多读10个寄存器 - static uint16_t data[10]; - memset(data, 0, sizeof(data)); - - h2o2_sensor_read_sub_ic_reg(addr, data, regNum); - zcanbus_send_ack(cxt->packet, (uint8_t*)&data, regNum * 2); - } - - public: - void onH2O2CaptureThread(); - - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/app_share/heater_controller.hpp b/usrc/board/app_share/heater_controller.hpp deleted file mode 100644 index 947729c..0000000 --- a/usrc/board/app_share/heater_controller.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class HeaterController { - ZGPIO m_Heater_ctrlGpio; - ZADC m_Heater_electricCurrentAdc; - ZADC m_Heater_temperatureAdc; - - 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); - - AppPeriodTaskMgr::ins()->regTask("HeaterController", HeaterController::periodTask, this, 10); - } - - void heater_ctrl(int32_t val) { m_Heater_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()); } - - // PP - void heater_ctrl(ProcessContext* cxt) { // - heater_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void heater_ctrl_safe_valve(ProcessContext* cxt) { // - heater_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void heater_read_electric_current(ProcessContext* cxt) { // - auto val = heater_read_electric_current(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } - void heater_read_temperature_data(ProcessContext* cxt) { // - auto val = heater_read_temperature_data(); - zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); - } - - private: - static void periodTask(void* p) { ((HeaterController*)p)->periodTask(); } - void periodTask() { - m_Heater_electricCurrentAdc.updateAdcValToCache(); - m_Heater_temperatureAdc.updateAdcValToCache(); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/app_share/pxxpsbus.hpp b/usrc/board/app_share/pxxpsbus.hpp deleted file mode 100644 index 758a459..0000000 --- a/usrc/board/app_share/pxxpsbus.hpp +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class PXXPSBus { - PXXPressureSensorBus psbus; - - public: - void initialize(UART_HandleTypeDef* huart) { psbus.init(huart); } - - void psbus_read_data(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - int32_t index = GET_PARAM(0); - - int16_t val = 0; - int32_t reportVal = 0; - bool suc = psbus.readData(index, &val); - - reportVal = val; - - if (suc) { - zcanbus_send_ack(cxt->packet, (uint8_t*)&reportVal, sizeof(reportVal)); - } else { - zcanbus_send_errorack(cxt->packet, kerr_subdevice_offline); - } - } - void psbus_scan(ProcessContext* cxt) { - auto* sensors = psbus.sensors; - int numSensor = psbus.sensorNum; - - ack_psbus_scan_t result = {0}; - result.numOnlineId = numSensor; - for (int i = 0; i < numSensor; i++) { - result.onlineId[i] = sensors[i].id; - } - zcanbus_send_ack(cxt->packet, (uint8_t*)&result, sizeof(result)); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/app_share/tmc_motor_group.cpp b/usrc/board/app_share/tmc_motor_group.cpp deleted file mode 100644 index 1fc97fe..0000000 --- a/usrc/board/app_share/tmc_motor_group.cpp +++ /dev/null @@ -1,208 +0,0 @@ -#include "tmc_motor_group.hpp" -using namespace iflytop; -#define TAG "TmcMotorGroup" - -/*********************************************************************************************************************** - * 电机异常监控 * - ***********************************************************************************************************************/ -static osTimerId MotorMonitorTimerId; // 压力传感器数值上报 -static bool motorErrorFlagCache[10]; // 电机异常状态上报标志位 -static zmutex motorErrorFlagCacheLock; - -static bool motorErrorFlag_get(int subindex) { - bool ret; - { - zlock_guard guard(motorErrorFlagCacheLock); - ret = motorErrorFlagCache[subindex]; - } - return ret; -} - -static void motorErrorFlag_set(int subindex, bool val) { - { - zlock_guard guard(motorErrorFlagCacheLock); - motorErrorFlagCache[subindex] = val; - } -} - -static void onMotorMonitorTimer(void const* argument) { - // 电机异常检查 - TmcMotorGroup* DEVICE = (TmcMotorGroup*)argument; - report_exeception_data_t data; - for (size_t i = 0; i < DEVICE->motorNum(); i++) { - bool estate = motorErrorFlag_get(i); - - if (!DEVICE->motor(i)->ping()) { - data.subid = i; - data.ecode = kerr_motor_subdevice_offline; - - if (!estate) { - motorErrorFlag_set(i, true); - ZLOGE(TAG, "motor %d offline error", i); - zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); - } - } else { - auto gstate = DEVICE->motor(i)->getGState(); - bool flag = gstate.reset || gstate.drv_err || gstate.uv_cp; - if (!flag && estate) { - motorErrorFlag_set(i, false); - } else if (flag && !estate) { - ZLOGE(TAG, "motor %d error, reset %d, drv_err %d, uv_cp %d", i, gstate.reset, gstate.drv_err, gstate.uv_cp); - if (gstate.reset) { - data.ecode = kerr_motor_reset_error; - } else if (gstate.uv_cp) { - data.ecode = kerr_motor_undervoltage_error; - } else if (gstate.drv_err) { - data.ecode = kerr_motor_driver_error; - } else { - data.ecode = kerr_motor_unkown_error; - } - data.subid = i; - motorErrorFlag_set(i, true); - zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); - } - } - } -} - -void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1) { - m_tmc_power_pin.initAsOutput(tmcPowerPin, kxs_gpio_nopull, true, false); - osDelay(100); - m_tmc_power_pin.write(true); - // PB2 - - m_motor[0].initialize(cfg0); - m_motor[0].setIHOLD_IRUN(1, 28, 0); - m_motor[0].setMotorShaft(true); - - m_motor[1].initialize(cfg1); - m_motor[1].setIHOLD_IRUN(1, 28, 0); - m_motor[1].setMotorShaft(true); - - int32_t chipv0 = m_motor[0].readICVersion(); // 5130:0x11 - int32_t chipv1 = m_motor[1].readICVersion(); // 5130:0x11 - // m_motor[0].rotate(500000); - // m_motor[1].rotate(500000); - ZLOGI(TAG, "chipv0: %x, chipv1: %x", chipv0, chipv1); - - auto gstate0 = m_motor[0].getGState(); - auto gstate1 = m_motor[1].getGState(); - - ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); - ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); - - gstate0 = m_motor[0].getGState(); - gstate1 = m_motor[1].getGState(); - - ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); - ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); - - motorErrorFlagCacheLock.init(); - osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); - MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, this); - osTimerStart(MotorMonitorTimerId, 1000); -} - -#define MOTOR_CHECK() \ - if (GET_PARAM(0) >= motorNum()) { \ - zcanbus_send_errorack(cxt->packet, kerr_invalid_param); \ - return; \ - } \ - if (!motor(GET_PARAM(0))->ping()) { \ - zcanbus_send_errorack(cxt->packet, kerr_motor_subdevice_offline); \ - return; \ - } - -void TmcMotorGroup::pump_rotate(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - - int32_t velocity = GET_PARAM(1); - - ZLOGI(TAG, "pump_rotate: %d %d", GET_PARAM(0), velocity); - - motor(GET_PARAM(0))->enable(false); - motor(GET_PARAM(0))->enable(true); - motor(GET_PARAM(0))->moveToEnd(velocity > 0 ? 1 : -1, abs(velocity)); - - zcanbus_send_ack(cxt->packet, NULL, 0); - motorErrorFlag_set(GET_PARAM(0), false); -} -void TmcMotorGroup::pump_stop(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - MOTOR_CHECK(); - - ZLOGI(TAG, "pump_stop: %d", GET_PARAM(0)); - motor(GET_PARAM(0))->stop(); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::pump_set_ihold_irun_idelay(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 4); - MOTOR_CHECK(); - - int32_t ihold = GET_PARAM(1); - int32_t irun = GET_PARAM(2); - int32_t idelay = GET_PARAM(3); - - ZLOGI(TAG, "pump_set_ihold_irun_idelay: %d ihold:%d irun:%d idelay:%d", GET_PARAM(0), ihold, irun, idelay); - motor(GET_PARAM(0))->setIHOLD_IRUN(ihold, irun, idelay); - - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::pump_set_acc(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - - int32_t acc = GET_PARAM(1); - - motor(GET_PARAM(0))->setAmax(acc); - motor(GET_PARAM(0))->setDmax(acc); - - ZLOGI(TAG, "pump_set_acc: %d acc:%d", GET_PARAM(0), acc); - - zcanbus_send_ack(cxt->packet, NULL, 0); -} - -void TmcMotorGroup::pump_set_ramp(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 5); - MOTOR_CHECK(); - - // index,vs,a1,amx,v1 - int32_t vs = GET_PARAM(1); - int32_t a1 = GET_PARAM(2); - int32_t amx = GET_PARAM(3); - int32_t v1 = GET_PARAM(4); - - ZLOGI(TAG, "pump_set_ramp: %d vs:%d a1:%d amx:%d v1:%d", GET_PARAM(0), vs, a1, amx, v1); - - motor(GET_PARAM(0))->setVstart(vs); - motor(GET_PARAM(0))->setVstop(vs); - motor(GET_PARAM(0))->setA1(a1); - motor(GET_PARAM(0))->setD1(a1); - motor(GET_PARAM(0))->setAmax(amx); - motor(GET_PARAM(0))->setDmax(amx); - motor(GET_PARAM(0))->setV1(v1); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::pump_set_tzw(ProcessContext* cxt) {} - -void TmcMotorGroup::pump_set_subic_reg(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 3); - MOTOR_CHECK(); - ZLOGI(TAG, "pump_set_subic_reg: %d %d %x", GET_PARAM(0), GET_PARAM(1), GET_PARAM(2)); - motor(GET_PARAM(0))->writeIntExt(GET_PARAM(1), GET_PARAM(2)); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::pump_get_subic_reg(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - int32_t val = motor(GET_PARAM(0))->readIntExt(GET_PARAM(1)); - ZLOGI(TAG, "pump_get_subic_reg: %d %x -> %x ", GET_PARAM(0), GET_PARAM(1), val); - - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); -} -void TmcMotorGroup::pump_ping(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - MOTOR_CHECK(); - zcanbus_send_ack(cxt->packet, NULL, 0); -} \ No newline at end of file diff --git a/usrc/board/app_share/tmc_motor_group.hpp b/usrc/board/app_share/tmc_motor_group.hpp deleted file mode 100644 index 469af7b..0000000 --- a/usrc/board/app_share/tmc_motor_group.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class TmcMotorGroup { - public: - TMC51X0 m_motor[2]; // 蠕动泵控制 - ZGPIO m_tmc_power_pin; // - - public: - void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); - int motorNum() { return 2; } - TMC51X0* motor(int32_t index) { - if (index < 0 || index >= motorNum()) { - return nullptr; - } - return &m_motor[index]; - } - - void pump_rotate(ProcessContext* cxt); - void pump_stop(ProcessContext* cxt); - void pump_set_ihold_irun_idelay(ProcessContext* cxt); - void pump_set_acc(ProcessContext* cxt); - void pump_set_ramp(ProcessContext* cxt); - void pump_set_tzw(ProcessContext* cxt); - void pump_set_subic_reg(ProcessContext* cxt); - void pump_get_subic_reg(ProcessContext* cxt); - void pump_ping(ProcessContext* cxt); - - public: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/app_share/warning_light_driver.hpp b/usrc/board/app_share/warning_light_driver.hpp deleted file mode 100644 index bf52337..0000000 --- a/usrc/board/app_share/warning_light_driver.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class WarningLightDriver { - ZGPIO triLight_R; - ZGPIO triLight_G; - ZGPIO triLight_B; - ZGPIO triLight_BEEP; - - public: - void initialize(Pin_t r, Pin_t g, Pin_t b, Pin_t beep) { - triLight_R.initAsOutput(r, kxs_gpio_nopull, false, false); - triLight_G.initAsOutput(g, kxs_gpio_nopull, false, false); - triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); - triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); - } - void setRGBW(int32_t r, int32_t g, int32_t b, int32_t beep) { - if (r > 0) - triLight_R.write(1); - else - triLight_R.write(0); - - if (g > 0) - triLight_G.write(1); - else - triLight_G.write(0); - - if (b > 0) - triLight_B.write(1); - else - triLight_B.write(0); - - if (beep > 0) - triLight_BEEP.write(1); - else - triLight_BEEP.write(0); - } - - void triple_warning_light_ctl(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 4); - - int32_t r = GET_PARAM(0); - int32_t g = GET_PARAM(1); - int32_t b = GET_PARAM(2); - int32_t warning = GET_PARAM(3); - - ZLOGI("WarningLightDriver", "triple_warning_light_ctl: r:%d g:%d b:%d warning:%d", r, g, b, warning); - setRGBW(r, g, b, warning); - zcanbus_send_ack(cxt->packet, NULL, 0); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp b/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp deleted file mode 100644 index 66121fe..0000000 --- a/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "large_space_dm_liquid_ctrl_board_hal.hpp" - -using namespace iflytop; - -#define TAG "LSDM_LCB_HAL" - -void LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT() { - __HAL_RCC_SPI1_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) { - Error_Handler(); - } - /**SPI1 GPIO Configuration - * PA5 ------> SPI1_SCK - * PA6 ------> SPI1_MISO - * PA7 ------> SPI1_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); -} - -void LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART3_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_DMA1_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart3.Instance = USART3; - huart3.Init.BaudRate = baudrate; - huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = StopBits; - huart3.Init.Parity = UART_PARITY_NONE; - huart3.Init.Mode = UART_MODE_TX_RX; - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart3) != HAL_OK) { - Error_Handler(); - } - UART_HandleTypeDef* uartHandle = &huart3; - - /* USER CODE BEGIN USART3_MspInit 0 */ - - /* USER CODE END USART3_MspInit 0 */ - /* USART3 clock enable */ - - /**USART3 GPIO Configuration - PB10 ------> USART3_TX - PB11 ------> USART3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USART3 DMA Init */ - /* USART3_RX Init */ - hdma1_stream1.Instance = DMA1_Stream1; - hdma1_stream1.Init.Channel = DMA_CHANNEL_4; - hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE; - hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE; - hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma1_stream1.Init.Mode = DMA_NORMAL; - hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW; - hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle, hdmarx, hdma1_stream1); - - /* USART3_TX Init */ - hdma1_stream3.Instance = DMA1_Stream3; - hdma1_stream3.Init.Channel = DMA_CHANNEL_4; - hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE; - hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE; - hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma1_stream3.Init.Mode = DMA_NORMAL; - hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW; - hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle, hdmatx, hdma1_stream3); - - HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); - - HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); -} - - diff --git a/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp b/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp deleted file mode 100644 index a69cc14..0000000 --- a/usrc/board/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include -#include -#include "base/appdep.hpp" - -namespace iflytop { -class LargeSpaceDMLiquidCtrlBoardHal { - public: - static void HSPI1_INIT(); - /** - * @brief - * - * @param baudrate - * @param StopBits UART_STOPBITS_1 UART_STOPBITS_2 - */ - static void HUART3_INIT(int baudrate, uint32_t StopBits); - - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/baseboard/large_space_dm_power_ctrl_board.cpp b/usrc/board/baseboard/large_space_dm_power_ctrl_board.cpp deleted file mode 100644 index d618620..0000000 --- a/usrc/board/baseboard/large_space_dm_power_ctrl_board.cpp +++ /dev/null @@ -1,142 +0,0 @@ -#include "large_space_dm_power_ctrl_board.hpp" - -#include "base/appdep.hpp" - -using namespace iflytop; - -void LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT() { - __HAL_RCC_ADC1_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - ADC_ChannelConfTypeDef sConfig = {0}; - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - hadc1.Instance = ADC1; - hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; - hadc1.Init.Resolution = ADC_RESOLUTION_12B; - hadc1.Init.ScanConvMode = DISABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; - hadc1.Init.DMAContinuousRequests = DISABLE; - hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; - if (HAL_ADC_Init(&hadc1) != HAL_OK) { - Error_Handler(); - } - - /**ADC1 GPIO Configuration -PA0-WKUP ------> ADC1_IN0 -PA1 ------> ADC1_IN1 -PA2 ------> ADC1_IN2 -PA3 ------> ADC1_IN3 -PB0 ------> ADC1_IN8 -PB1 ------> ADC1_IN9 -*/ - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* ADC1 interrupt Init */ - HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(ADC_IRQn); - - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { - Error_Handler(); - } -} - -void LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART2_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_DMA1_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart2.Instance = USART2; - huart2.Init.BaudRate = baudrate; - huart2.Init.WordLength = UART_WORDLENGTH_8B; - huart2.Init.StopBits = StopBits; - huart2.Init.Parity = UART_PARITY_NONE; - huart2.Init.Mode = UART_MODE_TX_RX; - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart2) != HAL_OK) { - Error_Handler(); - } - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART2_IRQn); - - __HAL_RCC_DMA1_CLK_ENABLE(); - HalUtils::uartdmainit(&huart2, &hdma1_stream5, DMA_CHANNEL_4, &hdma1_stream6, DMA_CHANNEL_4); - HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); -} - -void LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART3_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart3.Instance = USART3; - huart3.Init.BaudRate = baudrate; - huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = StopBits; - huart3.Init.Parity = UART_PARITY_NONE; - huart3.Init.Mode = UART_MODE_TX_RX; - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart3) != HAL_OK) { - Error_Handler(); - } - /**USART3 GPIO Configuration - PB10 ------> USART3_TX - PB11 ------> USART3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); - - /* DMA controller clock enable */ - - __HAL_RCC_DMA1_CLK_ENABLE(); - HalUtils::uartdmainit(&huart3, &hdma1_stream1, DMA_CHANNEL_4, &hdma1_stream3, DMA_CHANNEL_4); - HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); -} diff --git a/usrc/board/baseboard/large_space_dm_power_ctrl_board.hpp b/usrc/board/baseboard/large_space_dm_power_ctrl_board.hpp deleted file mode 100644 index 1f90859..0000000 --- a/usrc/board/baseboard/large_space_dm_power_ctrl_board.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "base/appdep.hpp" - - -namespace iflytop { -class LargeSpaceDmPowerCtrlBoardHal { - public: - static void HADC1_INIT(); - static void HUART2_INIT(int baudrate, uint32_t StopBits); - static void HUART3_INIT(int baudrate, uint32_t StopBits); -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/dep.hpp b/usrc/board/dep.hpp deleted file mode 100644 index 3dcd13f..0000000 --- a/usrc/board/dep.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -// -#include "app_share/air_compressor_controller.hpp" -#include "app_share/blower_controller.hpp" -#include "app_share/h2o2_sensor_driver.hpp" -#include "app_share/heater_controller.hpp" -#include "app_share/tmc_motor_group.hpp" -#include "app_share/warning_light_driver.hpp" -#include "app_share/pxxpsbus.hpp" -// -#include "baseboard/large_space_dm_liquid_ctrl_board_hal.hpp" -#include "baseboard/large_space_dm_power_ctrl_board.hpp" diff --git a/usrc/board/large_space_dm_liquid_ctrl_board.hpp b/usrc/board/large_space_dm_liquid_ctrl_board.hpp index 2512230..4287275 100644 --- a/usrc/board/large_space_dm_liquid_ctrl_board.hpp +++ b/usrc/board/large_space_dm_liquid_ctrl_board.hpp @@ -1,5 +1,5 @@ #pragma once -#include "dep.hpp" +#include "board_base/board_base.hpp" namespace iflytop { class LargeSpaceDmLiquidCtrlBoard { public: diff --git a/usrc/board/large_space_dm_power_ctrl_board.hpp b/usrc/board/large_space_dm_power_ctrl_board.hpp index 54c5215..ebdc99a 100644 --- a/usrc/board/large_space_dm_power_ctrl_board.hpp +++ b/usrc/board/large_space_dm_power_ctrl_board.hpp @@ -1,5 +1,6 @@ #pragma once -#include "dep.hpp" +#include "board_base/board_base.hpp" + // namespace iflytop { diff --git a/usrc/board/pipe_dm_liquid_ctrl_board.hpp b/usrc/board/pipe_dm_liquid_ctrl_board.hpp new file mode 100644 index 0000000..9348e46 --- /dev/null +++ b/usrc/board/pipe_dm_liquid_ctrl_board.hpp @@ -0,0 +1,32 @@ +#pragma once +#include "board_base/board_base.hpp" +namespace iflytop { +class PipeDMLiquidCtrlBoard { + public: + ZGPIO evaporationBinWS; // 蒸发仓水浸 + ZGPIO deviceBottomWS; // 设备底部水浸 + WarningLightDriver wlDriver; // 报警灯 + TmcMotorGroup tmcPowerGroup; // TMC电机 + PXXPSBus psBus; // PXX压力传感器总线 + + public: + static PipeDMLiquidCtrlBoard* ins() { + static PipeDMLiquidCtrlBoard instance; + return &instance; + } + void initialize() { + // 水浸初始化 + evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + // TMC电机初始化 + LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT(); + tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/}); + // 三色指示灯初始化 + wlDriver.initialize(PD8, PD7, PD9, PD10); + // 压力传感器初始化 + osDelay(1500); // 等待传感器上电 + LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1); + psBus.initialize(&huart3); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/pipe_dm_power_ctrl_board.hpp b/usrc/board/pipe_dm_power_ctrl_board.hpp new file mode 100644 index 0000000..475d20f --- /dev/null +++ b/usrc/board/pipe_dm_power_ctrl_board.hpp @@ -0,0 +1,32 @@ +#pragma once +#include "board_base/board_base.hpp" + +// + +namespace iflytop { +#define H2O2_SENSOR_TYPE_HMP110 +using namespace transmit_disfection_protocol; + +class PipeDMPowerCtrlBoard { + public: + HeaterController heaterCtrler; + BlowerController blowerCtrler; + AirCompressorController airComCtrler; + H2O2SensorDriver h2o2Sensor; + + public: + static PipeDMPowerCtrlBoard* ins() { + static PipeDMPowerCtrlBoard instance; + return &instance; + } + void initialize() { + LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); + LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(19200, UART_STOPBITS_2); + + heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8); + blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1); + airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0); + h2o2Sensor.initialize(&huart2, &hadc1, ADC_CHANNEL_10); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/air_compressor_controller copy.hpp b/usrc/board_base/app_share/air_compressor_controller copy.hpp new file mode 100644 index 0000000..65f01f7 --- /dev/null +++ b/usrc/board_base/app_share/air_compressor_controller copy.hpp @@ -0,0 +1,50 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace zscanprotocol; +using namespace transmit_disfection_protocol; + +class AirCompressorController { + ZGPIO m_AirCompressor_ctrlGpio; + ZADC m_AirCompressor_iAdc; + + public: + static AirCompressorController* ins() { + static AirCompressorController instance; + return &instance; + } + + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich); + + AppPeriodTaskMgr::ins()->regTask("AirComAdc", AirCompressorController::periodTask, this, 10); + } + + // 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()); } + + // PP + void fn_air_compressor_ctrl(ProcessContext* cxt) { // + air_compressor_ctrl(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)); + } + + private: + static void periodTask(void* p) { ((AirCompressorController*)p)->periodTask(); } + void periodTask() { m_AirCompressor_iAdc.updateAdcValToCache(); } +}; +} // namespace iflytop + +#pragma once diff --git a/usrc/board_base/app_share/air_compressor_controller.hpp b/usrc/board_base/app_share/air_compressor_controller.hpp new file mode 100644 index 0000000..65f01f7 --- /dev/null +++ b/usrc/board_base/app_share/air_compressor_controller.hpp @@ -0,0 +1,50 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace zscanprotocol; +using namespace transmit_disfection_protocol; + +class AirCompressorController { + ZGPIO m_AirCompressor_ctrlGpio; + ZADC m_AirCompressor_iAdc; + + public: + static AirCompressorController* ins() { + static AirCompressorController instance; + return &instance; + } + + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_AirCompressor_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_AirCompressor_iAdc.initialize("AirComAdc", iadc, ich); + + AppPeriodTaskMgr::ins()->regTask("AirComAdc", AirCompressorController::periodTask, this, 10); + } + + // 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()); } + + // PP + void fn_air_compressor_ctrl(ProcessContext* cxt) { // + air_compressor_ctrl(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)); + } + + private: + static void periodTask(void* p) { ((AirCompressorController*)p)->periodTask(); } + void periodTask() { m_AirCompressor_iAdc.updateAdcValToCache(); } +}; +} // namespace iflytop + +#pragma once diff --git a/usrc/board_base/app_share/blower_controller.hpp b/usrc/board_base/app_share/blower_controller.hpp new file mode 100644 index 0000000..3cf9f96 --- /dev/null +++ b/usrc/board_base/app_share/blower_controller.hpp @@ -0,0 +1,43 @@ +#pragma once +#include "base/appdep.hpp" + + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class BlowerController { + ZGPIO m_Blowser_ctrlGpio; + ZADC m_Blowser_electricCurrentAdc; + + public: + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_Blowser_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_Blowser_electricCurrentAdc.initialize("BlowserCurrentAdc", iadc, ich); + + AppPeriodTaskMgr::ins()->regTask("blowerAdc", BlowerController::periodTask, this, 10); + } + + // FN + void blower_ctrl(int32_t val) { m_Blowser_ctrlGpio.write(val); } + void blower_ctrl_safe_valve(int32_t val) {} + int32_t blower_read_electric_current() { return blowserAdcToCurrent(m_Blowser_electricCurrentAdc.getCacheVal()); } + + // PP + void fn_blower_ctrl(ProcessContext* cxt) { // + blower_ctrl(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_blower_ctrl_safe_valve(ProcessContext* cxt) { // + 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)); + } + + private: + static void periodTask(void* p) { ((BlowerController*)p)->periodTask(); } + void periodTask() { m_Blowser_electricCurrentAdc.updateAdcValToCache(); } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.cpp b/usrc/board_base/app_share/h2o2_sensor_driver.cpp new file mode 100644 index 0000000..0ad2b16 --- /dev/null +++ b/usrc/board_base/app_share/h2o2_sensor_driver.cpp @@ -0,0 +1,102 @@ +#include "h2o2_sensor_driver.hpp" +#include "zsdk/zcanreceiver/zcanreceiver.hpp" +using namespace iflytop; + +#define TAG "LSDMPowerCtrlBoard" +using namespace transmit_disfection_protocol; + +static osThreadId H2O2CaptureThreadId; +/*********************************************************************************************************************** + * FUNC * + ***********************************************************************************************************************/ +static void c_onH2O2CaptureThread(void const* argument) { + H2O2SensorDriver* driver = (H2O2SensorDriver*)argument; + driver->onH2O2CaptureThread(); +} + +void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel) { + ZASSERT(huart->Init.BaudRate == 19200); + ZASSERT(huart->Init.StopBits == UART_STOPBITS_2); + + m_ModbusBlockHost.initialize(huart); + m_H2O2Adc.initialize("H2O2Adc", hadc, adcChannel); + m_HMP110.init(&m_ModbusBlockHost); + + m_detectId = 240; + if (m_HMP110.ping(1)) { + ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: 1"); + m_detectId = 1; + } + if (m_HMP110.ping(240)) { + m_detectId = 240; + } + m_HMP110.setid(m_detectId); + // ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: %d", m_detectId); + + osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); + H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); +} + +/*********************************************************************************************************************** + * H2O2 * + ***********************************************************************************************************************/ + +bool H2O2SensorDriver::h2o2_sensor_is_online() { + if (m_detectId <= 0) return false; + int32_t ecode = m_HMP110.read_cache_errorcode(); + if (ecode == -1) return false; + return true; +} +int32_t H2O2SensorDriver::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // + *year = 1; + *month = 2; + *day = 3; + return 0; +} +int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_errorcode() { // + return m_HMP110.read_cache_errorcode(); +} +int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { // + return m_HMP110.read_reg(add, val, len); +} +int32_t H2O2SensorDriver::h2o2_sensor_data(report_h2o2_data_t* readdata) { + HMP110::hmp110_sensordata_t sensordata; + int h2o2adcData = 0; + + h2o2adcData = m_H2O2Adc.getCacheVal(); + m_HMP110.read_cache_sensor_data(&sensordata); + + if (m_detectId > 0) { + readdata->sensor_error = m_HMP110.read_cache_errorcode() != 0; + } else { + readdata->sensor_error = 1; + } + readdata->h2o2 = h2o2adcToPPM(h2o2adcData); + readdata->humid = sensordata.rh; + readdata->temp = sensordata.temp; + readdata->saturation = 0; + ZLOGI(TAG, "ppm:%d(adc:%d), rh:%d, temp:%d, df_ptemp:%d, ah:%d, mr:%d, wbt:%d, eh:%d", // + readdata->h2o2, // + h2o2adcData, // + sensordata.rh, // + sensordata.temp, // + sensordata.df_ptemp, // + sensordata.ah, // + sensordata.mr, // + sensordata.wet_bulb_temp, // + sensordata.enthalpy); + return 0; +} + +void H2O2SensorDriver::onH2O2CaptureThread() { + while (1) { + osDelay(5000); + m_H2O2Adc.updateAdcValToCache(); + m_HMP110.updateSensorDataAndErrorcode(); + + 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); + } +} \ No newline at end of file diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.hpp b/usrc/board_base/app_share/h2o2_sensor_driver.hpp new file mode 100644 index 0000000..4354849 --- /dev/null +++ b/usrc/board_base/app_share/h2o2_sensor_driver.hpp @@ -0,0 +1,48 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class H2O2SensorDriver { + public: + ModbusBlockHost m_ModbusBlockHost; // + ZADC m_H2O2Adc; // H2O2传感器控制 + HMP110 m_HMP110; // H2O2传感器 + int32_t m_detectId = -1; + + public: + void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); + bool h2o2_sensor_is_online(); + int32_t h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day); + int32_t h2o2_sensor_read_sub_ic_errorcode(); + 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); + + // PP + void fn_h2o2_sensor_read_calibration_date(ProcessContext* cxt) { + int32_t data[3]; + h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); + zcanbus_send_ack(cxt->packet, (uint8_t*)&data, sizeof(data)); + } + void fn_h2o2_sensor_read_sub_ic_errorcode(ProcessContext* cxt) { + int32_t ecode = h2o2_sensor_read_sub_ic_errorcode(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&ecode, sizeof(ecode)); + } + void fn_h2o2_sensor_read_sub_ic_reg(ProcessContext* cxt) { + int32_t addr = GET_PARAM(0); + int32_t regNum = GET_PARAM(1); + if (regNum > 10) regNum = 10; // 最多读10个寄存器 + static uint16_t data[10]; + memset(data, 0, sizeof(data)); + + h2o2_sensor_read_sub_ic_reg(addr, data, regNum); + zcanbus_send_ack(cxt->packet, (uint8_t*)&data, regNum * 2); + } + + public: + void onH2O2CaptureThread(); + + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/heater_controller.hpp b/usrc/board_base/app_share/heater_controller.hpp new file mode 100644 index 0000000..bfc6d24 --- /dev/null +++ b/usrc/board_base/app_share/heater_controller.hpp @@ -0,0 +1,52 @@ +#pragma once +#include "base/appdep.hpp" + + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class HeaterController { + ZGPIO m_Heater_ctrlGpio; + ZADC m_Heater_electricCurrentAdc; + ZADC m_Heater_temperatureAdc; + + 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); + + AppPeriodTaskMgr::ins()->regTask("HeaterController", HeaterController::periodTask, this, 10); + } + + void heater_ctrl(int32_t val) { m_Heater_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()); } + + // PP + void fn_heater_ctrl(ProcessContext* cxt) { // + heater_ctrl(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_heater_ctrl_safe_valve(ProcessContext* cxt) { // + 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_temperature_data(ProcessContext* cxt) { // + auto val = heater_read_temperature_data(); + zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val)); + } + + private: + static void periodTask(void* p) { ((HeaterController*)p)->periodTask(); } + void periodTask() { + m_Heater_electricCurrentAdc.updateAdcValToCache(); + m_Heater_temperatureAdc.updateAdcValToCache(); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/pxxpsbus.hpp b/usrc/board_base/app_share/pxxpsbus.hpp new file mode 100644 index 0000000..c57accf --- /dev/null +++ b/usrc/board_base/app_share/pxxpsbus.hpp @@ -0,0 +1,41 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class PXXPSBus { + PXXPressureSensorBus psbus; + + public: + void initialize(UART_HandleTypeDef* huart) { psbus.init(huart); } + + void fn_psbus_read_data(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + int32_t index = GET_PARAM(0); + + int16_t val = 0; + int32_t reportVal = 0; + bool suc = psbus.readData(index, &val); + + reportVal = val; + + if (suc) { + zcanbus_send_ack(cxt->packet, (uint8_t*)&reportVal, sizeof(reportVal)); + } else { + zcanbus_send_errorack(cxt->packet, kerr_subdevice_offline); + } + } + void fn_psbus_scan(ProcessContext* cxt) { + auto* sensors = psbus.sensors; + int numSensor = psbus.sensorNum; + + ack_psbus_scan_t result = {0}; + result.numOnlineId = numSensor; + for (int i = 0; i < numSensor; i++) { + result.onlineId[i] = sensors[i].id; + } + zcanbus_send_ack(cxt->packet, (uint8_t*)&result, sizeof(result)); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/tmc_motor_group.cpp b/usrc/board_base/app_share/tmc_motor_group.cpp new file mode 100644 index 0000000..9720251 --- /dev/null +++ b/usrc/board_base/app_share/tmc_motor_group.cpp @@ -0,0 +1,208 @@ +#include "tmc_motor_group.hpp" +using namespace iflytop; +#define TAG "TmcMotorGroup" + +/*********************************************************************************************************************** + * 电机异常监控 * + ***********************************************************************************************************************/ +static osTimerId MotorMonitorTimerId; // 压力传感器数值上报 +static bool motorErrorFlagCache[10]; // 电机异常状态上报标志位 +static zmutex motorErrorFlagCacheLock; + +static bool motorErrorFlag_get(int subindex) { + bool ret; + { + zlock_guard guard(motorErrorFlagCacheLock); + ret = motorErrorFlagCache[subindex]; + } + return ret; +} + +static void motorErrorFlag_set(int subindex, bool val) { + { + zlock_guard guard(motorErrorFlagCacheLock); + motorErrorFlagCache[subindex] = val; + } +} + +static void onMotorMonitorTimer(void const* argument) { + // 电机异常检查 + TmcMotorGroup* DEVICE = (TmcMotorGroup*)argument; + report_exeception_data_t data; + for (size_t i = 0; i < DEVICE->motorNum(); i++) { + bool estate = motorErrorFlag_get(i); + + if (!DEVICE->motor(i)->ping()) { + data.subid = i; + data.ecode = kerr_motor_subdevice_offline; + + if (!estate) { + motorErrorFlag_set(i, true); + ZLOGE(TAG, "motor %d offline error", i); + zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); + } + } else { + auto gstate = DEVICE->motor(i)->getGState(); + bool flag = gstate.reset || gstate.drv_err || gstate.uv_cp; + if (!flag && estate) { + motorErrorFlag_set(i, false); + } else if (flag && !estate) { + ZLOGE(TAG, "motor %d error, reset %d, drv_err %d, uv_cp %d", i, gstate.reset, gstate.drv_err, gstate.uv_cp); + if (gstate.reset) { + data.ecode = kerr_motor_reset_error; + } else if (gstate.uv_cp) { + data.ecode = kerr_motor_undervoltage_error; + } else if (gstate.drv_err) { + data.ecode = kerr_motor_driver_error; + } else { + data.ecode = kerr_motor_unkown_error; + } + data.subid = i; + motorErrorFlag_set(i, true); + zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); + } + } + } +} + +void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1) { + m_tmc_power_pin.initAsOutput(tmcPowerPin, kxs_gpio_nopull, true, false); + osDelay(100); + m_tmc_power_pin.write(true); + // PB2 + + m_motor[0].initialize(cfg0); + m_motor[0].setIHOLD_IRUN(1, 28, 0); + m_motor[0].setMotorShaft(true); + + m_motor[1].initialize(cfg1); + m_motor[1].setIHOLD_IRUN(1, 28, 0); + m_motor[1].setMotorShaft(true); + + int32_t chipv0 = m_motor[0].readICVersion(); // 5130:0x11 + int32_t chipv1 = m_motor[1].readICVersion(); // 5130:0x11 + // m_motor[0].rotate(500000); + // m_motor[1].rotate(500000); + ZLOGI(TAG, "chipv0: %x, chipv1: %x", chipv0, chipv1); + + auto gstate0 = m_motor[0].getGState(); + auto gstate1 = m_motor[1].getGState(); + + ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); + ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); + + gstate0 = m_motor[0].getGState(); + gstate1 = m_motor[1].getGState(); + + ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); + ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); + + motorErrorFlagCacheLock.init(); + osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); + MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, this); + osTimerStart(MotorMonitorTimerId, 1000); +} + +#define MOTOR_CHECK() \ + if (GET_PARAM(0) >= motorNum()) { \ + zcanbus_send_errorack(cxt->packet, kerr_invalid_param); \ + return; \ + } \ + if (!motor(GET_PARAM(0))->ping()) { \ + zcanbus_send_errorack(cxt->packet, kerr_motor_subdevice_offline); \ + return; \ + } + +void TmcMotorGroup::fn_pump_rotate(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + + int32_t velocity = GET_PARAM(1); + + ZLOGI(TAG, "pump_rotate: %d %d", GET_PARAM(0), velocity); + + motor(GET_PARAM(0))->enable(false); + motor(GET_PARAM(0))->enable(true); + motor(GET_PARAM(0))->moveToEnd(velocity > 0 ? 1 : -1, abs(velocity)); + + zcanbus_send_ack(cxt->packet, NULL, 0); + motorErrorFlag_set(GET_PARAM(0), false); +} +void TmcMotorGroup::fn_pump_stop(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + MOTOR_CHECK(); + + ZLOGI(TAG, "pump_stop: %d", GET_PARAM(0)); + motor(GET_PARAM(0))->stop(); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_ihold_irun_idelay(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 4); + MOTOR_CHECK(); + + int32_t ihold = GET_PARAM(1); + int32_t irun = GET_PARAM(2); + int32_t idelay = GET_PARAM(3); + + ZLOGI(TAG, "pump_set_ihold_irun_idelay: %d ihold:%d irun:%d idelay:%d", GET_PARAM(0), ihold, irun, idelay); + motor(GET_PARAM(0))->setIHOLD_IRUN(ihold, irun, idelay); + + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_acc(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + + int32_t acc = GET_PARAM(1); + + motor(GET_PARAM(0))->setAmax(acc); + motor(GET_PARAM(0))->setDmax(acc); + + ZLOGI(TAG, "pump_set_acc: %d acc:%d", GET_PARAM(0), acc); + + zcanbus_send_ack(cxt->packet, NULL, 0); +} + +void TmcMotorGroup::fn_pump_set_ramp(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 5); + MOTOR_CHECK(); + + // index,vs,a1,amx,v1 + int32_t vs = GET_PARAM(1); + int32_t a1 = GET_PARAM(2); + int32_t amx = GET_PARAM(3); + int32_t v1 = GET_PARAM(4); + + ZLOGI(TAG, "pump_set_ramp: %d vs:%d a1:%d amx:%d v1:%d", GET_PARAM(0), vs, a1, amx, v1); + + motor(GET_PARAM(0))->setVstart(vs); + motor(GET_PARAM(0))->setVstop(vs); + motor(GET_PARAM(0))->setA1(a1); + motor(GET_PARAM(0))->setD1(a1); + motor(GET_PARAM(0))->setAmax(amx); + motor(GET_PARAM(0))->setDmax(amx); + motor(GET_PARAM(0))->setV1(v1); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_tzw(ProcessContext* cxt) {} + +void TmcMotorGroup::fn_pump_set_subic_reg(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 3); + MOTOR_CHECK(); + ZLOGI(TAG, "pump_set_subic_reg: %d %d %x", GET_PARAM(0), GET_PARAM(1), GET_PARAM(2)); + motor(GET_PARAM(0))->writeIntExt(GET_PARAM(1), GET_PARAM(2)); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_get_subic_reg(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + int32_t val = motor(GET_PARAM(0))->readIntExt(GET_PARAM(1)); + ZLOGI(TAG, "pump_get_subic_reg: %d %x -> %x ", GET_PARAM(0), GET_PARAM(1), val); + + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); +} +void TmcMotorGroup::fn_pump_ping(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + MOTOR_CHECK(); + zcanbus_send_ack(cxt->packet, NULL, 0); +} \ No newline at end of file diff --git a/usrc/board_base/app_share/tmc_motor_group.hpp b/usrc/board_base/app_share/tmc_motor_group.hpp new file mode 100644 index 0000000..a236182 --- /dev/null +++ b/usrc/board_base/app_share/tmc_motor_group.hpp @@ -0,0 +1,34 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class TmcMotorGroup { + public: + TMC51X0 m_motor[2]; // 蠕动泵控制 + ZGPIO m_tmc_power_pin; // + + public: + void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); + int motorNum() { return 2; } + TMC51X0* motor(int32_t index) { + if (index < 0 || index >= motorNum()) { + return nullptr; + } + return &m_motor[index]; + } + + void fn_pump_rotate(ProcessContext* cxt); + void fn_pump_stop(ProcessContext* cxt); + void fn_pump_set_ihold_irun_idelay(ProcessContext* cxt); + void fn_pump_set_acc(ProcessContext* cxt); + void fn_pump_set_ramp(ProcessContext* cxt); + void fn_pump_set_tzw(ProcessContext* cxt); + void fn_pump_set_subic_reg(ProcessContext* cxt); + void fn_pump_get_subic_reg(ProcessContext* cxt); + void fn_pump_ping(ProcessContext* cxt); + + public: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/warning_light_driver.hpp b/usrc/board_base/app_share/warning_light_driver.hpp new file mode 100644 index 0000000..1695938 --- /dev/null +++ b/usrc/board_base/app_share/warning_light_driver.hpp @@ -0,0 +1,55 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class WarningLightDriver { + ZGPIO triLight_R; + ZGPIO triLight_G; + ZGPIO triLight_B; + ZGPIO triLight_BEEP; + + public: + void initialize(Pin_t r, Pin_t g, Pin_t b, Pin_t beep) { + triLight_R.initAsOutput(r, kxs_gpio_nopull, false, false); + triLight_G.initAsOutput(g, kxs_gpio_nopull, false, false); + triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); + triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); + } + void setRGBW(int32_t r, int32_t g, int32_t b, int32_t beep) { + if (r > 0) + triLight_R.write(1); + else + triLight_R.write(0); + + if (g > 0) + triLight_G.write(1); + else + triLight_G.write(0); + + if (b > 0) + triLight_B.write(1); + else + triLight_B.write(0); + + if (beep > 0) + triLight_BEEP.write(1); + else + triLight_BEEP.write(0); + } + + void fn_triple_warning_light_ctl(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 4); + + int32_t r = GET_PARAM(0); + int32_t g = GET_PARAM(1); + int32_t b = GET_PARAM(2); + int32_t warning = GET_PARAM(3); + + ZLOGI("WarningLightDriver", "triple_warning_light_ctl: r:%d g:%d b:%d warning:%d", r, g, b, warning); + setRGBW(r, g, b, warning); + zcanbus_send_ack(cxt->packet, NULL, 0); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp new file mode 100644 index 0000000..66121fe --- /dev/null +++ b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp @@ -0,0 +1,120 @@ +#include "large_space_dm_liquid_ctrl_board_hal.hpp" + +using namespace iflytop; + +#define TAG "LSDM_LCB_HAL" + +void LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT() { + __HAL_RCC_SPI1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi1) != HAL_OK) { + Error_Handler(); + } + /**SPI1 GPIO Configuration + * PA5 ------> SPI1_SCK + * PA6 ------> SPI1_MISO + * PA7 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); +} + +void LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART3_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_DMA1_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart3.Instance = USART3; + huart3.Init.BaudRate = baudrate; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = StopBits; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) { + Error_Handler(); + } + UART_HandleTypeDef* uartHandle = &huart3; + + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* USART3 clock enable */ + + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USART3 DMA Init */ + /* USART3_RX Init */ + hdma1_stream1.Instance = DMA1_Stream1; + hdma1_stream1.Init.Channel = DMA_CHANNEL_4; + hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE; + hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma1_stream1.Init.Mode = DMA_NORMAL; + hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW; + hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle, hdmarx, hdma1_stream1); + + /* USART3_TX Init */ + hdma1_stream3.Instance = DMA1_Stream3; + hdma1_stream3.Init.Channel = DMA_CHANNEL_4; + hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE; + hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE; + hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma1_stream3.Init.Mode = DMA_NORMAL; + hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW; + hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle, hdmatx, hdma1_stream3); + + HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART3_IRQn); + + HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); +} + + diff --git a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp new file mode 100644 index 0000000..a69cc14 --- /dev/null +++ b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp @@ -0,0 +1,20 @@ +#pragma once +#include +#include +#include "base/appdep.hpp" + +namespace iflytop { +class LargeSpaceDMLiquidCtrlBoardHal { + public: + static void HSPI1_INIT(); + /** + * @brief + * + * @param baudrate + * @param StopBits UART_STOPBITS_1 UART_STOPBITS_2 + */ + static void HUART3_INIT(int baudrate, uint32_t StopBits); + + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp new file mode 100644 index 0000000..d618620 --- /dev/null +++ b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp @@ -0,0 +1,142 @@ +#include "large_space_dm_power_ctrl_board.hpp" + +#include "base/appdep.hpp" + +using namespace iflytop; + +void LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT() { + __HAL_RCC_ADC1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + ADC_ChannelConfTypeDef sConfig = {0}; + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.ScanConvMode = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.NbrOfConversion = 1; + hadc1.Init.DMAContinuousRequests = DISABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + if (HAL_ADC_Init(&hadc1) != HAL_OK) { + Error_Handler(); + } + + /**ADC1 GPIO Configuration +PA0-WKUP ------> ADC1_IN0 +PA1 ------> ADC1_IN1 +PA2 ------> ADC1_IN2 +PA3 ------> ADC1_IN3 +PB0 ------> ADC1_IN8 +PB1 ------> ADC1_IN9 +*/ + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); + + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = 1; + sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { + Error_Handler(); + } +} + +void LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART2_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_DMA1_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart2.Instance = USART2; + huart2.Init.BaudRate = baudrate; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = StopBits; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) { + Error_Handler(); + } + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); + + __HAL_RCC_DMA1_CLK_ENABLE(); + HalUtils::uartdmainit(&huart2, &hdma1_stream5, DMA_CHANNEL_4, &hdma1_stream6, DMA_CHANNEL_4); + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); +} + +void LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART3_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart3.Instance = USART3; + huart3.Init.BaudRate = baudrate; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = StopBits; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) { + Error_Handler(); + } + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART3_IRQn); + + /* DMA controller clock enable */ + + __HAL_RCC_DMA1_CLK_ENABLE(); + HalUtils::uartdmainit(&huart3, &hdma1_stream1, DMA_CHANNEL_4, &hdma1_stream3, DMA_CHANNEL_4); + HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); +} diff --git a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp new file mode 100644 index 0000000..1f90859 --- /dev/null +++ b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "base/appdep.hpp" + + +namespace iflytop { +class LargeSpaceDmPowerCtrlBoardHal { + public: + static void HADC1_INIT(); + static void HUART2_INIT(int baudrate, uint32_t StopBits); + static void HUART3_INIT(int baudrate, uint32_t StopBits); +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/board_base.hpp b/usrc/board_base/board_base.hpp new file mode 100644 index 0000000..3dcd13f --- /dev/null +++ b/usrc/board_base/board_base.hpp @@ -0,0 +1,12 @@ +#pragma once +// +#include "app_share/air_compressor_controller.hpp" +#include "app_share/blower_controller.hpp" +#include "app_share/h2o2_sensor_driver.hpp" +#include "app_share/heater_controller.hpp" +#include "app_share/tmc_motor_group.hpp" +#include "app_share/warning_light_driver.hpp" +#include "app_share/pxxpsbus.hpp" +// +#include "baseboard/large_space_dm_liquid_ctrl_board_hal.hpp" +#include "baseboard/large_space_dm_power_ctrl_board.hpp" diff --git a/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp index 08cb1e7..de1ca22 100644 --- a/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp +++ b/usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp @@ -14,8 +14,6 @@ using namespace transmit_disfection_protocol; // ------------------------------------------------------ class LargeSpaceDmLiquidCtrlBoardPP : public IProtocolProcesser { - uint8_t boardResetFlag; // 0: 重启标志 - public: static LargeSpaceDmLiquidCtrlBoardPP* ins() { static LargeSpaceDmLiquidCtrlBoardPP ins; @@ -24,18 +22,31 @@ class LargeSpaceDmLiquidCtrlBoardPP : public IProtocolProcesser { virtual const char* getName() override { return "LiquidCtrlBoardCmdProcesser"; }; virtual void initialize() override { - REG_FN(evaporation_tank_water_sensor_read_state); - REG_FN(device_bottom_water_sensor_read_state); + REG_FN(fn_evaporation_tank_water_sensor_read_state); + REG_FN(fn_device_bottom_water_sensor_read_state); // - BIND_FN(WarningLightDriver, &DEVICE->wlDriver, triple_warning_light_ctl); + BIND_FN(WarningLightDriver, &DEVICE->wlDriver, fn_triple_warning_light_ctl); + + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_rotate); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_stop); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ihold_irun_idelay); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_acc); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ramp); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_tzw); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_subic_reg); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_get_subic_reg); + BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_ping); + + BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_read_data); + BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_scan); } private: - void evaporation_tank_water_sensor_read_state(ProcessContext* cxt) { + void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) { int32_t val = DEVICE->evaporationBinWS.read(); zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); } - void device_bottom_water_sensor_read_state(ProcessContext* cxt) { + void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) { int32_t val = DEVICE->deviceBottomWS.read(); zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); } diff --git a/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp b/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp index b6c2d19..3af3044 100644 --- a/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp +++ b/usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp @@ -14,15 +14,30 @@ using namespace transmit_disfection_protocol; // /----------------------------- class LargeSpaceDmPowerCtrlBoardPP : public IProtocolProcesser { - uint8_t boardResetFlag; // 0: 重启标志 - public: static LargeSpaceDmPowerCtrlBoardPP* ins() { static LargeSpaceDmPowerCtrlBoardPP ins; return &ins; } - virtual void initialize() override {} + virtual void initialize() override { + BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl); + BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl_safe_valve); + BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_electric_current); + BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_temperature_data); + + BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl); + BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl_safe_valve); + BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_read_electric_current); + + BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl); + BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl_safe_valve); + BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_read_electric_current); + + BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_calibration_date); + BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode); + BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg); + } virtual const char* getName() override { return "LargeSpaceDmPowerCtrlBoardPP"; }; private: diff --git a/usrc/protocol_processer_impl/public_cmd_processer.cpp b/usrc/protocol_processer_impl/public_cmd_processer.cpp index 5629380..78bf973 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.cpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.cpp @@ -6,14 +6,14 @@ using namespace transmit_disfection_protocol; #define ThisClass PublicCmdProcesser void PublicCmdProcesser::initialize() { - REG_FN(read_board_info); - REG_FN(read_sysinfo); - REG_FN(read_taskinfo); - REG_FN(heart_ping); - REG_FN(clear_reset_flag); + REG_FN(fn_read_board_info); + REG_FN(fn_read_sysinfo); + REG_FN(fn_read_taskinfo); + REG_FN(fn_heart_ping); + REG_FN(fn_clear_reset_flag); } -void PublicCmdProcesser::read_board_info(ProcessContext* cxt) { +void PublicCmdProcesser::fn_read_board_info(ProcessContext* cxt) { static ack_read_board_info_data_t ack; ack.boardType = PublicBoard::ins()->getBoardTypeId(); ack.projectId = PublicBoard::ins()->getProjId(); @@ -23,7 +23,7 @@ void PublicCmdProcesser::read_board_info(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, (uint8_t*)&ack, sizeof(ack)); } -void PublicCmdProcesser::read_sysinfo(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(); @@ -31,7 +31,7 @@ void PublicCmdProcesser::read_sysinfo(ProcessContext* cxt) { ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000; zcanbus_send_ack(cxt->packet, (uint8_t*)&ack, sizeof(ack)); } -void PublicCmdProcesser::read_taskinfo(ProcessContext* cxt) { +void PublicCmdProcesser::fn_read_taskinfo(ProcessContext* cxt) { static ask_taskinfo_t ack; int32_t taskoff = GET_PARAM(0); osThreadId taskId = SysMgr::ins()->osGetId(taskoff); @@ -42,14 +42,14 @@ void PublicCmdProcesser::read_taskinfo(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, (uint8_t*)&ack, sizeof(ack)); } -void PublicCmdProcesser::heart_ping(ProcessContext* cxt) { +void PublicCmdProcesser::fn_heart_ping(ProcessContext* cxt) { static report_heatpacket_data_t heatpacket; heatpacket.boardType = PublicBoard::ins()->getBoardTypeId(); heatpacket.heartIndex = GET_PARAM(0); heatpacket.flag = gBoardFlag; zcanbus_send_report(kreport_heatpacket_pong, (uint8_t*)&heatpacket, sizeof(heatpacket), 30); } -void PublicCmdProcesser::clear_reset_flag(ProcessContext* cxt) { +void PublicCmdProcesser::fn_clear_reset_flag(ProcessContext* cxt) { gBoardFlagClearResetFlag(); zcanbus_send_ack(cxt->packet, NULL, 0); } \ No newline at end of file diff --git a/usrc/protocol_processer_impl/public_cmd_processer.hpp b/usrc/protocol_processer_impl/public_cmd_processer.hpp index 04171a6..4058b16 100644 --- a/usrc/protocol_processer_impl/public_cmd_processer.hpp +++ b/usrc/protocol_processer_impl/public_cmd_processer.hpp @@ -21,11 +21,11 @@ class PublicCmdProcesser : public IProtocolProcesser { virtual const char* getName() override { return "PublicCmdProcesser"; }; private: - void read_board_info(ProcessContext* cxt); - void read_sysinfo(ProcessContext* cxt); - void read_taskinfo(ProcessContext* cxt); - void heart_ping(ProcessContext* cxt); - void clear_reset_flag(ProcessContext* cxt); + void fn_read_board_info(ProcessContext* cxt); + void fn_read_sysinfo(ProcessContext* cxt); + void fn_read_taskinfo(ProcessContext* cxt); + void fn_heart_ping(ProcessContext* cxt); + void fn_clear_reset_flag(ProcessContext* cxt); }; } // namespace iflytop \ No newline at end of file