You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.7 KiB

3 weeks ago
  1. #include "heater_controller.hpp"
  2. #include "base/appdep.hpp"
  3. using namespace iflytop;
  4. using namespace transmit_disfection_protocol;
  5. void HeaterController::initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich, ADC_HandleTypeDef* tadc, uint32_t tch) {
  6. m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
  7. m_iAdc.initialize("heater-idac", iadc, ich);
  8. m_tempAdc.initialize("heater-tadc", iadc, tch);
  9. m_isInitialized = true;
  10. AppPeriodTaskMgr::ins()->regTask("Heater-ADC", [this]() { periodTask(); }, 1000);
  11. BIND_FN(HeaterController, this, fn_heater_ctrl);
  12. BIND_FN(HeaterController, this, fn_heater_ctrl_safe_valve);
  13. BIND_FN(HeaterController, this, fn_heater_read_ei);
  14. BIND_FN(HeaterController, this, fn_heater_read_temperature_data);
  15. BIND_FN(HeaterController, this, fn_heater_read_ei_adc_raw);
  16. BIND_FN(HeaterController, this, fn_heater_read_temperature_data_adc_raw);
  17. BIND_FN(HeaterController, this, fn_heater_is_open);
  18. }
  19. bool HeaterController::isInitialized() { return m_isInitialized; }
  20. void HeaterController::heater_ctrl(int32_t val) { m_ctrlGpio.write(val); }
  21. void HeaterController::heater_ctrl_safe_valve(int32_t val) {}
  22. int32_t HeaterController::heater_read_temperature_data() { return heaterAdc2Temp(m_tempAdc.getCacheVal()); }
  23. int32_t HeaterController::heater_read_ei() { return hearterAdcToCurrent(m_iAdc.getCacheVal()); }
  24. int32_t HeaterController::heater_read_iadc() { return m_iAdc.getCacheVal(); }
  25. int32_t HeaterController::heater_read_tadc() { return m_tempAdc.getCacheVal(); }
  26. // PP
  27. void HeaterController::fn_heater_ctrl(ProcessContext* cxt) { //
  28. heater_ctrl(GET_PARAM(0));
  29. zcanbus_send_ack(cxt->packet, NULL, 0);
  30. }
  31. void HeaterController::fn_heater_ctrl_safe_valve(ProcessContext* cxt) { //
  32. heater_ctrl_safe_valve(GET_PARAM(0));
  33. zcanbus_send_ack(cxt->packet, NULL, 0);
  34. }
  35. void HeaterController::fn_heater_read_ei(ProcessContext* cxt) { //
  36. auto val = heater_read_ei();
  37. zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
  38. }
  39. void HeaterController::fn_heater_read_temperature_data(ProcessContext* cxt) { //
  40. auto val = heater_read_temperature_data();
  41. zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
  42. }
  43. void HeaterController::fn_heater_read_ei_adc_raw(ProcessContext* cxt) { //
  44. auto val = m_iAdc.getCacheVal();
  45. zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
  46. }
  47. void HeaterController::fn_heater_read_temperature_data_adc_raw(ProcessContext* cxt) { //
  48. auto val = m_tempAdc.getCacheVal();
  49. zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
  50. }
  51. void HeaterController::fn_heater_is_open(ProcessContext* cxt) { //
  52. zcanbus_send_ack(cxt->packet, m_ctrlGpio.read());
  53. }
  54. void HeaterController::periodTask() {
  55. m_iAdc.updateAdcValToCache();
  56. m_tempAdc.updateAdcValToCache();
  57. }