From cc8a5b4f9af4e1111cd51e0242dbf9172298db3a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 2 Feb 2024 21:35:07 +0800 Subject: [PATCH] zcan_board_module_supoort temperature --- chip/api/zi_api.hpp | 1 + chip/api/zi_temperature.hpp | 12 ++++++++++++ .../subcanmodule/zcancmder_subboard_initer.cpp | 3 ++- .../subcanmodule/zcancmder_subboard_initer.hpp | 3 ++- components/zcancmder/zcan_board_module.cpp | 22 +++++++++++++++++++++- components/zcancmder/zcan_board_module.hpp | 8 ++++++++ 6 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 chip/api/zi_temperature.hpp diff --git a/chip/api/zi_api.hpp b/chip/api/zi_api.hpp index beb37f7..04e4c7f 100644 --- a/chip/api/zi_api.hpp +++ b/chip/api/zi_api.hpp @@ -1,3 +1,4 @@ #pragma once #include "zi_adc.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp" +#include "zi_temperature.hpp" \ No newline at end of file diff --git a/chip/api/zi_temperature.hpp b/chip/api/zi_temperature.hpp new file mode 100644 index 0000000..b40ae68 --- /dev/null +++ b/chip/api/zi_temperature.hpp @@ -0,0 +1,12 @@ +#pragma once +#include + +namespace iflytop { +using namespace std; +class ZITemperatureSensor { + public: + virtual ~ZITemperatureSensor(){}; + + virtual int32_t getTemperature(int32_t& sensorval) = 0; +}; +} // namespace iflytop diff --git a/components/subcanmodule/zcancmder_subboard_initer.cpp b/components/subcanmodule/zcancmder_subboard_initer.cpp index b6c7cea..1120cd0 100644 --- a/components/subcanmodule/zcancmder_subboard_initer.cpp +++ b/components/subcanmodule/zcancmder_subboard_initer.cpp @@ -70,9 +70,11 @@ void ZCancmderSubboardIniter::initmodule() { ZCanBoardModule::hardware_config_t hcfg = {}; static_assert(ZARRAY_SIZE(hcfg.input) == ZARRAY_SIZE(m_cfg.input_gpio)); static_assert(ZARRAY_SIZE(hcfg.output) == ZARRAY_SIZE(m_cfg.output_gpio)); + static_assert(ZARRAY_SIZE(hcfg.temperature_sensor) == ZARRAY_SIZE(m_cfg.temperature_sensor)); memcpy(&hcfg.input, &m_cfg.input_gpio, sizeof(m_cfg.input_gpio)); memcpy(&hcfg.output, &m_cfg.output_gpio, sizeof(m_cfg.output_gpio)); + memcpy(&hcfg.temperature_sensor, &m_cfg.temperature_sensor, sizeof(m_cfg.temperature_sensor)); boardmodule.initialize(get_module_id(0), &hcfg); ziProtocolParser.registerModule(&boardmodule); @@ -86,7 +88,6 @@ void ZCancmderSubboardIniter::register_module(ZIModule* module) { void ZCancmderSubboardIniter::loop() { while (true) { - OSDefaultSchduler::getInstance()->loop(); zcanCmder.loop(); cmder.schedule(); diff --git a/components/subcanmodule/zcancmder_subboard_initer.hpp b/components/subcanmodule/zcancmder_subboard_initer.hpp index ab1bed9..e693c1b 100644 --- a/components/subcanmodule/zcancmder_subboard_initer.hpp +++ b/components/subcanmodule/zcancmder_subboard_initer.hpp @@ -5,9 +5,9 @@ #include "sdk\components\zcancmder\zcan_board_module.hpp" #include "sdk\components\zcancmder\zcanreceiver.hpp" #include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\protocol_event_bus_sender.hpp" #include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp" #include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp" -#include "sdk\components\zprotocols\zcancmder_v2\protocol_event_bus_sender.hpp" #ifdef HAL_CAN_MODULE_ENABLED namespace iflytop { @@ -17,6 +17,7 @@ class ZCancmderSubboardIniter { int32_t deviceId; ZGPIO::InputGpioCfg_t input_gpio[16]; ZGPIO::OutputGpioCfg_t output_gpio[16]; + ZITemperatureSensor* temperature_sensor[8]; } cfg_t; private: diff --git a/components/zcancmder/zcan_board_module.cpp b/components/zcancmder/zcan_board_module.cpp index 0a98ac7..f644492 100644 --- a/components/zcancmder/zcan_board_module.cpp +++ b/components/zcancmder/zcan_board_module.cpp @@ -47,6 +47,15 @@ int32_t ZCanBoardModule::module_xxx_reg(int32_t param_id, bool read, int32_t &va PROCESS_REG(kreg_module_initflag, /* */ REG_GET(module_get_inited_flag()), module_set_inited_flag(val)); PROCESS_REG(kreg_module_output_state, /* */ REG_GET(readoutput()), ACTION_NONE); PROCESS_REG(kreg_module_input_state, /* */ REG_GET(readinput()), ACTION_NONE); + + PROCESS_REG(kreg_sensor_temperature0, readTemperature(0, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature1, readTemperature(1, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature2, readTemperature(2, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature3, readTemperature(3, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature4, readTemperature(4, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature5, readTemperature(5, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature6, readTemperature(6, val), ACTION_NONE); + PROCESS_REG(kreg_sensor_temperature7, readTemperature(7, val), ACTION_NONE); default: return err::kmodule_not_find_config_index; break; @@ -79,4 +88,15 @@ int32_t ZCanBoardModule::readoutput() { } } return outputval; -} \ No newline at end of file +} + +int32_t ZCanBoardModule::readTemperature(int32_t sensorId, int32_t &temperature_val) { + if (sensorId < 0 || sensorId >= ZARRAY_SIZE(temperature_sensor)) { + return err::kmodule_not_find_config_index; + } + + if (temperature_sensor[sensorId] == nullptr) { + return err::kmodule_not_find_config_index; + } + return temperature_sensor[sensorId]->getTemperature(temperature_val); +} diff --git a/components/zcancmder/zcan_board_module.hpp b/components/zcancmder/zcan_board_module.hpp index b5fc8c9..7d71e33 100644 --- a/components/zcancmder/zcan_board_module.hpp +++ b/components/zcancmder/zcan_board_module.hpp @@ -4,6 +4,9 @@ #pragma once #include "sdk/os/zos.hpp" +// +#include "sdk/chip/api/zi_temperature.hpp" +#include "sdk\chip\api\zi_adc.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp" /** @@ -31,6 +34,7 @@ class ZCanBoardModule : public ZIModule { typedef struct { ZGPIO::InputGpioCfg_t input[16]; ZGPIO::OutputGpioCfg_t output[16]; + ZITemperatureSensor *temperature_sensor[8]; } hardware_config_t; hardware_config_t m_cfg; @@ -42,6 +46,8 @@ class ZCanBoardModule : public ZIModule { int32_t m_input_num = 0; int32_t m_output_num = 0; + ZITemperatureSensor *temperature_sensor[8]; + public: virtual ~ZCanBoardModule() {} @@ -61,6 +67,8 @@ class ZCanBoardModule : public ZIModule { int32_t module_xxx_reg(int32_t param_id, bool read, int32_t ¶m_value); int32_t readinput(); int32_t readoutput(); + int32_t readTemperature(int32_t sensorId, int32_t &temperature_val); + }; } // namespace iflytop \ No newline at end of file