Browse Source

update

master
zhaohe 1 year ago
parent
commit
04c5561385
  1. 2
      app_protocols/transmit_disfection_protocol
  2. 2
      usrc/app/dmapp.cpp
  3. 23
      usrc/app/ext_ch_selector_app.cpp
  4. 37
      usrc/app/ext_ch_selector_app.hpp
  5. 69
      usrc/app/exth2o2_sensor.cpp
  6. 45
      usrc/app/exth2o2_sensor.hpp
  7. 8
      usrc/app_main.cpp
  8. 47
      usrc/board/public_board.cpp
  9. 12
      usrc/board_base/app_share/blower_controller.hpp
  10. 53
      usrc/board_base/baseboard/h2o2_ext_board.cpp
  11. 11
      usrc/board_base/baseboard/h2o2_ext_board.hpp
  12. 3
      usrc/board_base/board_base.hpp
  13. 13
      usrc/project_configs.h

2
app_protocols/transmit_disfection_protocol

@ -1 +1 @@
Subproject commit 38ea8db7c4b148c6f21b03b1099a82258ed8cd3f
Subproject commit bbda34d9edff33e1da63790fe4320fedd2595e30

2
usrc/app/dmapp.cpp

@ -157,7 +157,7 @@ void DisinfectionApp::initialize() {
eValve.write(0); // 电磁阀闭合
zcanbus_send_ack(cxt->packet, NULL, 0);
});
REG_LAMADA_FN(kfn_air_tightness_test_recover_ch, [&](ProcessContext* cxt) {
REG_LAMADA_FN(kfn_air_tightness_test_open_ch, [&](ProcessContext* cxt) {
airTightnessTestChGpio.write(0); // 连接空气
eValve.write(1); // 电磁阀打开
zcanbus_send_ack(cxt->packet, NULL, 0);

23
usrc/app/ext_ch_selector_app.cpp

@ -0,0 +1,23 @@
#include "ext_ch_selector_app.hpp"
using namespace iflytop;
using namespace transmit_disfection_protocol;
#define TAG "ExtChSelector"
ExtChSelector* ExtChSelector::ins() {
static ExtChSelector instance;
return &instance;
}
void ExtChSelector::initialize() {
ctrl0.initAsOutput(PinNull, kxs_gpio_nopull, false, false);
ctrl1.initAsOutput(PinNull, kxs_gpio_nopull, false, false);
ctrl2.initAsOutput(PinNull, kxs_gpio_nopull, false, false);
REG_LAMADA_FN(kfn_ext_ch_selector_set_ch, [&](ProcessContext* cxt) {
int ch = GET_PARAM(0);
ZLOGI(TAG, "ext_ch_selector_set_ch : %d", ch);
if (ch == kext_ch_disinfection) {
} else if (ch == kext_ch_degradation) {
} else if (ch == kext_ch_dehumidification) {
}
});
}

37
usrc/app/ext_ch_selector_app.hpp

@ -0,0 +1,37 @@
#pragma once
#include "board/public_board.hpp"
#include "board_base/board_base.hpp"
/**
* @brief
*
*
*
*
* -
* :
* 1.
* 2.
* -
* :
* 1. ()
*
* -
*
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
class ExtChSelector {
public:
ZGPIO ctrl0;
ZGPIO ctrl1;
ZGPIO ctrl2;
public:
static ExtChSelector* ins();
void initialize();
};
} // namespace iflytop

69
usrc/app/exth2o2_sensor.cpp

@ -0,0 +1,69 @@
#include "exth2o2_sensor.hpp"
using namespace iflytop;
using namespace transmit_disfection_protocol;
#define TAG "ExtH2O2Sensor"
static osThreadId H2O2SensorMonitorThreadId;
static osThreadId AlarmLightThreadId;
static void c_onAlarmLightThread(void const* argument) { ExtH2O2Sensor::ins()->onAlarmLightThread(); }
static void c_onH2O2MonitorThread(void const* argument) { ExtH2O2Sensor::ins()->onH2O2MonitorThread(); }
ExtH2O2Sensor* ExtH2O2Sensor::ins() {
static ExtH2O2Sensor instance;
return &instance;
}
void ExtH2O2Sensor::initialize() {
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
H2O2ExtBoard::HADC1_INIT();
h2o2Sensor.initialize(&huart2, &hadc1, ADC_CHANNEL_10);
m_alarmLightR.initAsOutput(PD7, kxs_gpio_pullup, true, false);
m_alarmLightG.initAsOutput(PD9, kxs_gpio_pullup, true, false);
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);
osThreadDef(AlarmLightThread, c_onAlarmLightThread, osPriorityNormal, 0, 1024);
AlarmLightThreadId = osThreadCreate(osThread(AlarmLightThread), NULL);
}
void ExtH2O2Sensor::setAlarmLight(light_state_t state) { m_alarmLightState = state; }
void ExtH2O2Sensor::setAlarmLight(bool r, bool g, bool y) {
m_alarmLightR.write(r);
m_alarmLightG.write(g);
m_alarmLightY.write(y);
}
void ExtH2O2Sensor::onAlarmLightThread() {
while (1) {
osDelay(500);
if (m_alarmLightState == kdisconnected) {
static bool state;
setAlarmLight(false, state, false);
state = !state;
} else if (m_alarmLightState == kconnected) {
setAlarmLight(false, true, false);
} else if (m_alarmLightState == kerror) {
setAlarmLight(true, false, false);
}
}
}
void ExtH2O2Sensor::onH2O2MonitorThread() {
while (1) {
if (h2o2Sensor.h2o2_sensor_read_sub_ic_errorcode() != 0) {
ZLOGI(TAG, "H2O2 sensor sub ic error");
setAlarmLight(kerror);
} else {
setAlarmLight(kconnected);
}
}
}

45
usrc/app/exth2o2_sensor.hpp

@ -0,0 +1,45 @@
#pragma once
#include "board/public_board.hpp"
#include "board_base/board_base.hpp"
/**
* @brief
*
*
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
class ExtH2O2Sensor {
public:
typedef enum {
kdisconnected,
kconnected,
kerror,
} light_state_t;
public:
H2O2SensorDriver h2o2Sensor;
ZGPIO m_alarmLightR;
ZGPIO m_alarmLightG;
ZGPIO m_alarmLightY;
ZGPIO id_from_machine; // 消毒机上的开关
light_state_t m_alarmLightState = kdisconnected;
public:
static ExtH2O2Sensor* ins();
void initialize();
private:
void setAlarmLight(bool r, bool g, bool y);
void setAlarmLight(light_state_t state);
public:
void onAlarmLightThread();
void onH2O2MonitorThread();
};
} // namespace iflytop

8
usrc/app_main.cpp

@ -3,6 +3,8 @@
//
#include "app/dmapp.hpp"
#include "app/ext_ch_selector_app.hpp"
#include "app/exth2o2_sensor.hpp"
#include "base/appdep.hpp"
//
#include "board/public_board.hpp"
@ -103,8 +105,12 @@ void umain() {
case kDrawBarDMPowerCtrlBoard:
DisinfectionApp::ins()->initialize();
break;
case kDrawBarDMExtBallValveCtrl:
case kDrawBarDMExtChSelector:
ExtChSelector::ins()->initialize();
break;
case kH2O2SensorBoard:
ExtH2O2Sensor::ins()->initialize();
break;
default:
gInitErrorFlag = true;
break;

47
usrc/board/public_board.cpp

@ -87,21 +87,23 @@ void PublicBoard::canInit() {
}
void PublicBoard::initialize() {
// if (getDeviceIdFromFlash() <= 0) {
// BID0.initAsInput(PE1, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID1.initAsInput(PE2, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID2.initAsInput(PE3, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID3.initAsInput(PE4, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID4.initAsInput(PE5, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID5.initAsInput(PE6, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID6.initAsInput(PE7, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// BID7.initAsInput(PE8, kxs_gpio_pullup, kxs_gpio_no_irq, false);
// }
debugUartInit();
canInit();
if (getDeviceIdFromFlash() <= 0) {
BID0.initAsInput(PE1, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID1.initAsInput(PE2, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID2.initAsInput(PE3, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID3.initAsInput(PE4, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID4.initAsInput(PE5, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID5.initAsInput(PE6, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID6.initAsInput(PE7, kxs_gpio_pullup, kxs_gpio_no_irq, false);
BID7.initAsInput(PE8, kxs_gpio_pullup, kxs_gpio_no_irq, false);
if (getDeviceIdFromFlash() == kH2O2SensorBoard) {
} else {
m_debugled.initAsOutput(H2O2_SENSOR_BOARD_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
}
m_debugled.initAsOutput(DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
}
void PublicBoard::setDebugLightState(bool state) { m_debugled.write(state); }
@ -112,16 +114,17 @@ int PublicBoard::getBoardTypeId() {
if (getDeviceIdFromFlash() > 0) {
return getDeviceIdFromFlash();
} else {
int32_t id = 0;
id += BID0.read() ? 1 : 0;
id += BID1.read() ? 2 : 0;
id += BID2.read() ? 4 : 0;
id += BID3.read() ? 8 : 0;
id += BID4.read() ? 16 : 0;
id += BID5.read() ? 32 : 0;
id += BID6.read() ? 64 : 0;
id += BID7.read() ? 128 : 0;
return id;
return 0;
// int32_t id = 0;
// id += BID0.read() ? 1 : 0;
// id += BID1.read() ? 2 : 0;
// id += BID2.read() ? 4 : 0;
// id += BID3.read() ? 8 : 0;
// id += BID4.read() ? 16 : 0;
// id += BID5.read() ? 32 : 0;
// id += BID6.read() ? 64 : 0;
// id += BID7.read() ? 128 : 0;
// return id;
}
}
int PublicBoard::getBoardId() { return IdMgr::ins().getBoardId(getBoardTypeId()); }

12
usrc/board_base/app_share/blower_controller.hpp

@ -20,13 +20,13 @@ class BlowerController {
ModbusBlockHost m_modbusblock;
// kMiniPwmBlower
static TIM_HandleTypeDef* m_miniPwmBlower_htim;
static uint32_t m_miniPwmBlower_channle;
static ZGPIO m_miniPwmBlower_enGpio;
static ZGPIO m_miniPwmBlower_fbGpio;
TIM_HandleTypeDef* m_miniPwmBlower_htim;
uint32_t m_miniPwmBlower_channle;
ZGPIO m_miniPwmBlower_enGpio;
ZGPIO m_miniPwmBlower_fbGpio;
ZADC m_iadc;
bool m_iadcIsInit = fasle;
bool m_iadcIsInit = false;
bool m_isInitialized = false;
@ -133,4 +133,4 @@ class BlowerController {
m_miniPwmBlower_enGpio.write(duty != 0);
}
};
} // namespace iflytop
} // namespace iflytop

53
usrc/board_base/baseboard/h2o2_ext_board.cpp

@ -0,0 +1,53 @@
#include "h2o2_ext_board.hpp"
#include "base/appdep.hpp"
using namespace iflytop;
void H2O2ExtBoard::HADC1_INIT() {
static bool inited = false;
if (inited) return;
inited = true;
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_GPIOC_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
PC0 ------> ADC1_IN10
PC1 ------> ADC1_IN11
*/
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &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();
}
}

11
usrc/board_base/baseboard/h2o2_ext_board.hpp

@ -0,0 +1,11 @@
#pragma once
#include "base/appdep.hpp"
namespace iflytop {
class H2O2ExtBoard {
public:
static void HADC1_INIT();
};
} // namespace iflytop

3
usrc/board_base/board_base.hpp

@ -11,4 +11,5 @@
//
#include "baseboard/large_space_dm_liquid_ctrl_board_hal.hpp"
#include "baseboard/large_space_dm_power_ctrl_board.hpp"
#include "baseboard/dbdm_power_ctrl_board.hpp"
#include "baseboard/dbdm_power_ctrl_board.hpp"
#include "board_base/baseboard/h2o2_ext_board.hpp"

13
usrc/project_configs.h

@ -15,12 +15,13 @@
* @brief
*
*/
#define SOFTWARE_VERSION 1 // 软件版本
#define HARDWARE_VERSION 1 // 硬件版本
#define PROJECT "transmit_disinfection_micro" // 工程名称
#define SN_HEADER "SN" // SN号前缀
#define DEBUG_UART huart1 // 调试串口
#define DEBUG_LIGHT_GPIO PE0 // 调试指示灯
#define SOFTWARE_VERSION 1 // 软件版本
#define HARDWARE_VERSION 1 // 硬件版本
#define PROJECT "transmit_disinfection_micro" // 工程名称
#define SN_HEADER "SN" // SN号前缀
#define DEBUG_UART huart1 // 调试串口
#define DEBUG_LIGHT_GPIO PE0 // 调试指示灯
#define H2O2_SENSOR_BOARD_DEBUG_LIGHT_GPIO PE2 // 过氧化氢板-调试指示灯
#define BOARD_TYPE_ID_FLASH_ADD 0x080E0000
#define SDK_CFG__SN_FLASH_ADDR 0x080E0004 //
Loading…
Cancel
Save