Browse Source

update

master
zhaohe 1 year ago
parent
commit
d75cc83259
  1. 2
      iflytop_canbus_protocol
  2. 105
      usrc/base/hardware.cpp
  3. 66
      usrc/base/hardware.hpp
  4. 16
      usrc/protocol_impl/function_impl/afunction_impl.hpp
  5. 24
      usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp
  6. 24
      usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp
  7. 16
      usrc/protocol_impl/protocol_impl_service.cpp
  8. 2
      zsdk

2
iflytop_canbus_protocol

@ -1 +1 @@
Subproject commit 955c39e8b8aa1480b0846a1ae26aaa6ba4e38ce0
Subproject commit cf9895020ce2ad2ee628dd27ee4d74d633b832e6

105
usrc/base/hardware.cpp

@ -15,63 +15,11 @@ using namespace iflytop;
static osThreadId H2O2CaptureThreadId;
static osThreadId AdcCaptureThreadId;
// 加热片控制
ZGPIO m_Heater_ctrlGpio;
ZGPIO m_Heater_safeCtrlGpio;
ZADC m_Heater_electricCurrentAdc;
ZADC m_Heater_temperatureAdc;
// 鼓风机
ZGPIO m_Blowser_ctrlGpio;
ZGPIO m_Blowser_safeCtrlGpio;
ZADC m_Blowser_electricCurrentAdc;
// 空压机
ZGPIO m_AirCompressor_ctrlGpio;
ZGPIO m_AirCompressor_safeCtrlGpio;
ZADC m_AirCompressor_electricCurrentAdc;
// H2O2过氧化氢
#ifdef H2O2_SENSOR_TYPE_HMP110
static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; //
static ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制
static HMP110 m_H2o2Sensor_HMP110; // H2O2传感器
static int32_t m_h2o2sensor_detectId = -1;
#endif
#ifdef H2O2_SENSOR_TYPE_HPP272
static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; //
static HPP272 m_H2o2Sensor_HPP272; // H2O2传感器
static int32_t m_h2o2sensor_detectId = -1;
#endif
/***********************************************************************************************************************
* FUNC *
***********************************************************************************************************************/
static void onAdcCaptureThreadId(void const* argument) {
while (1) {
osDelay(30);
// m_Heater_electricCurrentAdc.updateAdcValToCache();
// m_Heater_temperatureAdc.updateAdcValToCache();
// m_Blowser_electricCurrentAdc.updateAdcValToCache();
// m_AirCompressor_electricCurrentAdc.updateAdcValToCache();
}
}
static void onH2O2CaptureThreadId(void const* argument) {
while (1) {
osDelay(1000);
#ifdef H2O2_SENSOR_TYPE_HMP110
if (m_h2o2sensor_detectId > 0) {
m_H2o2Sensor_H2O2Adc.updateAdcValToCache();
m_H2o2Sensor_HMP110.updateSensorDataAndErrorcode();
}
#endif
}
}
static void c_onAdcCaptureThread(void const* argument) { Hardware::ins().onAdcCaptureThread(); }
static void c_onH2O2CaptureThread(void const* argument) { Hardware::ins().onH2O2CaptureThread(); }
void Hardware::init() {
/***********************************************************************************************************************
@ -140,31 +88,14 @@ void Hardware::init() {
#endif
osThreadDef(AdcCaptureThread, onAdcCaptureThreadId, osPriorityNormal, 0, 1024);
osThreadDef(AdcCaptureThread, c_onAdcCaptureThread, osPriorityNormal, 0, 1024);
AdcCaptureThreadId = osThreadCreate(osThread(AdcCaptureThread), NULL);
osThreadDef(H2O2CaptureThread, onH2O2CaptureThreadId, osPriorityNormal, 0, 1024);
osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024);
H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), NULL);
}
/***********************************************************************************************************************
* FUMP_IMPL *
***********************************************************************************************************************/
void Hardware::heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); }
void Hardware::heater_ctrl_safe_valve(int32_t val) { m_Heater_safeCtrlGpio.write(val); }
int32_t Hardware::heater_read_electric_current() {
int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
return ma;
}
int32_t Hardware::heater_read_temperature_data() {
int32_t adcv = m_Heater_temperatureAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
int32_t temp = (ma - 4) / (20 - 4) * (3000 - 0) + 0;
return temp; // C*10
}
/***********************************************************************************************************************
* H2O2 *
***********************************************************************************************************************/
@ -257,4 +188,32 @@ int32_t Hardware::h2o2_sensor_data(report_h2o2_data_t* readdata) {
return 0;
#endif
}
void Hardware::onAdcCaptureThread() {
while (1) {
osDelay(30);
m_Heater_electricCurrentAdc.updateAdcValToCache();
m_Heater_temperatureAdc.updateAdcValToCache();
m_Blowser_electricCurrentAdc.updateAdcValToCache();
m_AirCompressor_electricCurrentAdc.updateAdcValToCache();
}
}
void Hardware::onH2O2CaptureThread() {
while (1) {
osDelay(1000);
#ifdef H2O2_SENSOR_TYPE_HMP110
if (m_h2o2sensor_detectId > 0) {
m_H2o2Sensor_H2O2Adc.updateAdcValToCache();
m_H2o2Sensor_HMP110.updateSensorDataAndErrorcode();
}
#endif
#ifdef H2O2_SENSOR_TYPE_HPP272
if (m_h2o2sensor_detectId > 0) {
m_H2o2Sensor_HPP272.updateSensorDataAndErrorcode();
}
#endif
}
}

66
usrc/base/hardware.hpp

@ -15,7 +15,35 @@ void hardware_init();
namespace iflytop {
class Hardware {
// 加热片控制
ZGPIO m_Heater_ctrlGpio;
ZGPIO m_Heater_safeCtrlGpio;
ZADC m_Heater_electricCurrentAdc;
ZADC m_Heater_temperatureAdc;
// 鼓风机
ZGPIO m_Blowser_ctrlGpio;
ZGPIO m_Blowser_safeCtrlGpio;
ZADC m_Blowser_electricCurrentAdc;
// 空压机
ZGPIO m_AirCompressor_ctrlGpio;
ZGPIO m_AirCompressor_safeCtrlGpio;
ZADC m_AirCompressor_electricCurrentAdc;
#ifdef H2O2_SENSOR_TYPE_HMP110
ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; //
ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制
HMP110 m_H2o2Sensor_HMP110; // H2O2传感器
int32_t m_h2o2sensor_detectId = -1;
#endif
#ifdef H2O2_SENSOR_TYPE_HPP272
ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; //
HPP272 m_H2o2Sensor_HPP272; // H2O2传感器
int32_t m_h2o2sensor_detectId = -1;
#endif
public:
static Hardware& ins() {
@ -25,19 +53,45 @@ class Hardware {
void init();
void mini_pwm_blower_ctrl(int32_t val);
int32_t mini_pwm_blower_read_fbcount();
void heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); }
void heater_ctrl_safe_valve(int32_t val) { m_Heater_safeCtrlGpio.write(val); }
int32_t heater_read_electric_current() {
int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
return ma;
}
int32_t heater_read_temperature_data() {
int32_t adcv = m_Heater_temperatureAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
int32_t temp = (ma - 4) / (20 - 4) * (3000 - 0) + 0;
return temp; // C*10
}
void heater_ctrl(int32_t val);
void heater_ctrl_safe_valve(int32_t val);
int32_t heater_read_electric_current();
int32_t heater_read_temperature_data();
void blower_ctrl(int32_t val) { m_Blowser_ctrlGpio.write(val); }
void blower_ctrl_safe_valve(int32_t val) { m_Blowser_safeCtrlGpio.write(val); }
int32_t blower_read_electric_current() {
int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
return ma;
}
void air_compressor_ctrl(int32_t val) { m_AirCompressor_ctrlGpio.write(val); }
void air_compressor_ctrl_safe_valve(int32_t val) { m_AirCompressor_safeCtrlGpio.write(val); }
int32_t air_compressor_read_electric_current() {
int32_t adcv = m_AirCompressor_electricCurrentAdc.getCacheVal();
int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0;
return ma;
}
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);
public:
void onAdcCaptureThread();
void onH2O2CaptureThread();
};
} // namespace iflytop

16
usrc/protocol_impl/function_impl/afunction_impl.hpp

@ -14,22 +14,30 @@
* basic_fn *
***********************************************************************************************************************/
void basic_fn_init();
void fn_cmd_read_board_info(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_read_sysinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_read_taskinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_heart_ping(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_clear_reset_flag(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void basic_fn_init();
void heater_fn_impl_init();
void fn_cmd_heater_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_heater_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_heater_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_heater_read_temperature_data(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void heater_fn_impl_init();
void blower_fn_impl_init();
void fn_cmd_blower_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_blower_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_blower_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void air_compressor_fn_impl_init();
void fn_cmd_air_compressor_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_air_compressor_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_air_compressor_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void h2o2_fn_impl_init();
void fn_cmd_h2o2_sensor_read_calibration_date(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_h2o2_sensor_read_sub_ic_errorcode(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void fn_cmd_h2o2_sensor_read_sub_ic_reg(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len);
void h2o2_fn_impl_init();

24
usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp

@ -0,0 +1,24 @@
#include "afunction_impl.hpp"
using namespace iflytop;
#define TAG "PROTO-AIR_COMP"
void fn_cmd_air_compressor_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
CHECK_PARAM_LEN(PARAM_LEN(), 1);
Hardware::ins().air_compressor_ctrl(GET_PARAM(packet->params, 0));
zcanbus_send_ack(packet, NULL, 0);
}
void fn_cmd_air_compressor_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
CHECK_PARAM_LEN(PARAM_LEN(), 1);
Hardware::ins().air_compressor_ctrl_safe_valve(GET_PARAM(packet->params, 0));
zcanbus_send_ack(packet, NULL, 0);
}
void fn_cmd_air_compressor_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
int32_t current = Hardware::ins().air_compressor_read_electric_current();
zcanbus_send_ack(packet, (uint8_t*)&current, sizeof(current));
}
void air_compressor_fn_impl_init() {}

24
usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp

@ -0,0 +1,24 @@
#include "afunction_impl.hpp"
using namespace iflytop;
#define TAG "PROTO-BLOWER"
void fn_cmd_blower_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
CHECK_PARAM_LEN(PARAM_LEN(), 1);
Hardware::ins().blower_ctrl(GET_PARAM(packet->params, 0));
zcanbus_send_ack(packet, NULL, 0);
}
void fn_cmd_blower_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
CHECK_PARAM_LEN(PARAM_LEN(), 1);
Hardware::ins().blower_ctrl_safe_valve(GET_PARAM(packet->params, 0));
zcanbus_send_ack(packet, NULL, 0);
}
void fn_cmd_blower_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) {
int32_t current = Hardware::ins().blower_read_electric_current();
zcanbus_send_ack(packet, (uint8_t*)&current, sizeof(current));
}
void blower_fn_impl_init() {}

16
usrc/protocol_impl/protocol_impl_service.cpp

@ -43,7 +43,7 @@ void protocol_impl_service_init() { //
zcanbus_init(deviceInfo_getBoardId());
zcanbus_reglistener(zcanbus_on_rx);
zcanbus_reg_on_connected_listener(zcanbus_on_connected);
{
basic_fn_init();
fn_map_reg(kcmd_read_board_info, fn_cmd_read_board_info);
@ -68,6 +68,20 @@ void protocol_impl_service_init() { //
fn_map_reg(kcmd_heater_read_temperature_data, fn_cmd_heater_read_temperature_data);
}
{
blower_fn_impl_init();
fn_map_reg(kcmd_blower_ctrl, fn_cmd_blower_ctrl);
fn_map_reg(kcmd_blower_ctrl_safe_valve, fn_cmd_blower_ctrl_safe_valve);
fn_map_reg(kcmd_blower_read_electric_current, fn_cmd_blower_read_electric_current);
}
{
air_compressor_fn_impl_init();
fn_map_reg(kcmd_air_compressor_ctrl, fn_cmd_air_compressor_ctrl);
fn_map_reg(kcmd_air_compressor_ctrl_safe_valve, fn_cmd_air_compressor_ctrl_safe_valve);
fn_map_reg(kcmd_air_compressor_read_electric_current, fn_cmd_air_compressor_read_electric_current);
}
osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 0, 1024);
PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL);
}

2
zsdk

@ -1 +1 @@
Subproject commit 59955298ef676c401438a09236f699520d114f86
Subproject commit c88c14bebbce81a3b6e0d461588e958eb0e839d3
Loading…
Cancel
Save