diff --git a/chip/api/zi_api.hpp b/chip/api/zi_api.hpp index 04e4c7f..c906f30 100644 --- a/chip/api/zi_api.hpp +++ b/chip/api/zi_api.hpp @@ -1,4 +1,5 @@ #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 +#include "zi_temperature.hpp" +#include "zi_pwm_ctrl.hpp" \ No newline at end of file diff --git a/chip/api/zi_pwm_ctrl.hpp b/chip/api/zi_pwm_ctrl.hpp new file mode 100644 index 0000000..f974fb3 --- /dev/null +++ b/chip/api/zi_pwm_ctrl.hpp @@ -0,0 +1,15 @@ +#pragma once +#include + +namespace iflytop { +using namespace std; +class ZIPWMCtrl { + public: + virtual ~ZIPWMCtrl(){}; + + virtual int32_t set_pwm_duty(int32_t duty) = 0; + virtual int32_t set_pwm_freq(int32_t freq) = 0; + virtual int32_t get_pwm_duty() = 0; + virtual int32_t get_pwm_freq() = 0; +}; +} // namespace iflytop diff --git a/components/subcanmodule/zcancmder_subboard_initer.cpp b/components/subcanmodule/zcancmder_subboard_initer.cpp index 1120cd0..5488733 100644 --- a/components/subcanmodule/zcancmder_subboard_initer.cpp +++ b/components/subcanmodule/zcancmder_subboard_initer.cpp @@ -71,10 +71,12 @@ void ZCancmderSubboardIniter::initmodule() { 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)); + static_assert(ZARRAY_SIZE(hcfg.pwmctrl) == ZARRAY_SIZE(m_cfg.pwmctrl)); 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)); + memcpy(&hcfg.pwmctrl, &m_cfg.pwmctrl, sizeof(m_cfg.pwmctrl)); boardmodule.initialize(get_module_id(0), &hcfg); ziProtocolParser.registerModule(&boardmodule); diff --git a/components/subcanmodule/zcancmder_subboard_initer.hpp b/components/subcanmodule/zcancmder_subboard_initer.hpp index e693c1b..3c8055a 100644 --- a/components/subcanmodule/zcancmder_subboard_initer.hpp +++ b/components/subcanmodule/zcancmder_subboard_initer.hpp @@ -15,9 +15,10 @@ class ZCancmderSubboardIniter { public: typedef struct { int32_t deviceId; - ZGPIO::InputGpioCfg_t input_gpio[16]; - ZGPIO::OutputGpioCfg_t output_gpio[16]; + ZGPIO::InputGpioCfg_t input_gpio[32]; + ZGPIO::OutputGpioCfg_t output_gpio[32]; ZITemperatureSensor* temperature_sensor[8]; + ZIPWMCtrl* pwmctrl[8]; } cfg_t; private: diff --git a/components/zcancmder/zcan_board_module.cpp b/components/zcancmder/zcan_board_module.cpp index f644492..6f0d22e 100644 --- a/components/zcancmder/zcan_board_module.cpp +++ b/components/zcancmder/zcan_board_module.cpp @@ -56,6 +56,24 @@ int32_t ZCanBoardModule::module_xxx_reg(int32_t param_id, bool read, int32_t &va 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); + + PROCESS_REG(kreg_pwm0_duty, readPwmDuty(0, val), setPwmDuty(0, val)); + PROCESS_REG(kreg_pwm1_duty, readPwmDuty(1, val), setPwmDuty(1, val)); + PROCESS_REG(kreg_pwm2_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + PROCESS_REG(kreg_pwm3_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + PROCESS_REG(kreg_pwm4_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + PROCESS_REG(kreg_pwm5_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + PROCESS_REG(kreg_pwm6_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + PROCESS_REG(kreg_pwm7_duty, readPwmDuty(2, val), setPwmDuty(2, val)); + + PROCESS_REG(kreg_pwm0_freq, readPwmFreq(0, val), setPwmFreq(0, val)); + PROCESS_REG(kreg_pwm1_freq, readPwmFreq(1, val), setPwmFreq(1, val)); + PROCESS_REG(kreg_pwm2_freq, readPwmFreq(2, val), setPwmFreq(2, val)); + PROCESS_REG(kreg_pwm3_freq, readPwmFreq(3, val), setPwmFreq(3, val)); + PROCESS_REG(kreg_pwm4_freq, readPwmFreq(4, val), setPwmFreq(4, val)); + PROCESS_REG(kreg_pwm5_freq, readPwmFreq(5, val), setPwmFreq(5, val)); + PROCESS_REG(kreg_pwm6_freq, readPwmFreq(6, val), setPwmFreq(6, val)); + default: return err::kmodule_not_find_config_index; break; @@ -100,3 +118,45 @@ int32_t ZCanBoardModule::readTemperature(int32_t sensorId, int32_t &temperature_ } return temperature_sensor[sensorId]->getTemperature(temperature_val); } + +int32_t ZCanBoardModule::readPwmDuty(int32_t pwmId, int32_t &duty) { + if (pwmId < 0 || pwmId >= ZARRAY_SIZE(m_cfg.pwmctrl)) { + return err::kmodule_not_find_config_index; + } + if (m_cfg.pwmctrl[pwmId] == nullptr) { + return err::kmodule_not_find_config_index; + } + duty = m_cfg.pwmctrl[pwmId]->get_pwm_duty(); + return 0; +} +int32_t ZCanBoardModule::setPwmDuty(int32_t pwmId, int32_t duty) { + if (pwmId < 0 || pwmId >= ZARRAY_SIZE(m_cfg.pwmctrl)) { + return err::kmodule_not_find_config_index; + } + if (m_cfg.pwmctrl[pwmId] == nullptr) { + return err::kmodule_not_find_config_index; + } + m_cfg.pwmctrl[pwmId]->set_pwm_duty(duty); + return 0; +} + +int32_t ZCanBoardModule::readPwmFreq(int32_t pwmId, int32_t &freq) { + if (pwmId < 0 || pwmId >= ZARRAY_SIZE(m_cfg.pwmctrl)) { + return err::kmodule_not_find_config_index; + } + if (m_cfg.pwmctrl[pwmId] == nullptr) { + return err::kmodule_not_find_config_index; + } + freq = m_cfg.pwmctrl[pwmId]->get_pwm_freq(); + return 0; +} +int32_t ZCanBoardModule::setPwmFreq(int32_t pwmId, int32_t freq) { + if (pwmId < 0 || pwmId >= ZARRAY_SIZE(m_cfg.pwmctrl)) { + return err::kmodule_not_find_config_index; + } + if (m_cfg.pwmctrl[pwmId] == nullptr) { + return err::kmodule_not_find_config_index; + } + m_cfg.pwmctrl[pwmId]->set_pwm_freq(freq); + return 0; +} \ No newline at end of file diff --git a/components/zcancmder/zcan_board_module.hpp b/components/zcancmder/zcan_board_module.hpp index 7d71e33..490beb3 100644 --- a/components/zcancmder/zcan_board_module.hpp +++ b/components/zcancmder/zcan_board_module.hpp @@ -5,6 +5,7 @@ #pragma once #include "sdk/os/zos.hpp" // +#include "sdk/chip/api/zi_api.hpp" #include "sdk/chip/api/zi_temperature.hpp" #include "sdk\chip\api\zi_adc.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp" @@ -32,9 +33,10 @@ using namespace std; class ZCanBoardModule : public ZIModule { public: typedef struct { - ZGPIO::InputGpioCfg_t input[16]; - ZGPIO::OutputGpioCfg_t output[16]; + ZGPIO::InputGpioCfg_t input[32]; + ZGPIO::OutputGpioCfg_t output[32]; ZITemperatureSensor *temperature_sensor[8]; + ZIPWMCtrl *pwmctrl[8]; } hardware_config_t; hardware_config_t m_cfg; @@ -67,8 +69,13 @@ 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); + int32_t readTemperature(int32_t sensorId, int32_t &temperature_val); + int32_t readPwmDuty(int32_t pwmId, int32_t &duty); + int32_t setPwmDuty(int32_t pwmId, int32_t duty); + + int32_t readPwmFreq(int32_t pwmId, int32_t &freq); + int32_t setPwmFreq(int32_t pwmId, int32_t freq); }; } // namespace iflytop \ No newline at end of file diff --git a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp index 8b3a0be..136ad1d 100644 --- a/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp +++ b/components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp @@ -213,6 +213,22 @@ void MicroComputerModuleDeviceScriptCmderPaser::app_dump_reg(int32_t moduleId, i DUMP_CONFIG("sensor_humidity8", kreg_sensor_humidity8); DUMP_CONFIG("sensor_humidity9", kreg_sensor_humidity9); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm0_duty", kreg_pwm0_duty); + DUMP_CONFIG("reg_pwm1_freq", kreg_pwm1_freq); + DUMP_CONFIG("reg_pwm2_freq", kreg_pwm2_freq); + DUMP_CONFIG("reg_pwm3_freq", kreg_pwm3_freq); + DUMP_CONFIG("reg_pwm4_freq", kreg_pwm4_freq); + DUMP_CONFIG("reg_pwm5_freq", kreg_pwm5_freq); + DUMP_CONFIG("reg_pwm6_freq", kreg_pwm6_freq); + DUMP_CONFIG("reg_pwm7_freq", kreg_pwm7_freq); + /******************************************************************************* * »úеÈËͨÓÃÅäÖà * *******************************************************************************/ diff --git a/components/zprotocols/zcancmder_v2 b/components/zprotocols/zcancmder_v2 index d06f09d..a84acec 160000 --- a/components/zprotocols/zcancmder_v2 +++ b/components/zprotocols/zcancmder_v2 @@ -1 +1 @@ -Subproject commit d06f09d8b3724156381c36d0cc5d0d9a0b098cc4 +Subproject commit a84acec79b74da740fa1a5a3cf17f45c2b3303a9