Browse Source

add pwm controler to board

master
zhaohe 2 years ago
parent
commit
36e5c17539
  1. 3
      chip/api/zi_api.hpp
  2. 15
      chip/api/zi_pwm_ctrl.hpp
  3. 2
      components/subcanmodule/zcancmder_subboard_initer.cpp
  4. 5
      components/subcanmodule/zcancmder_subboard_initer.hpp
  5. 60
      components/zcancmder/zcan_board_module.cpp
  6. 13
      components/zcancmder/zcan_board_module.hpp
  7. 16
      components/zprotocol_helper/micro_computer_module_device_script_cmder_paser.cpp
  8. 2
      components/zprotocols/zcancmder_v2

3
chip/api/zi_api.hpp

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "zi_adc.hpp" #include "zi_adc.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp"
#include "zi_temperature.hpp"
#include "zi_temperature.hpp"
#include "zi_pwm_ctrl.hpp"

15
chip/api/zi_pwm_ctrl.hpp

@ -0,0 +1,15 @@
#pragma once
#include <stdint.h>
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

2
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.input) == ZARRAY_SIZE(m_cfg.input_gpio));
static_assert(ZARRAY_SIZE(hcfg.output) == ZARRAY_SIZE(m_cfg.output_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.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.input, &m_cfg.input_gpio, sizeof(m_cfg.input_gpio));
memcpy(&hcfg.output, &m_cfg.output_gpio, sizeof(m_cfg.output_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.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); boardmodule.initialize(get_module_id(0), &hcfg);
ziProtocolParser.registerModule(&boardmodule); ziProtocolParser.registerModule(&boardmodule);

5
components/subcanmodule/zcancmder_subboard_initer.hpp

@ -15,9 +15,10 @@ class ZCancmderSubboardIniter {
public: public:
typedef struct { typedef struct {
int32_t deviceId; 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]; ZITemperatureSensor* temperature_sensor[8];
ZIPWMCtrl* pwmctrl[8];
} cfg_t; } cfg_t;
private: private:

60
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_temperature5, readTemperature(5, val), ACTION_NONE);
PROCESS_REG(kreg_sensor_temperature6, readTemperature(6, 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_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: default:
return err::kmodule_not_find_config_index; return err::kmodule_not_find_config_index;
break; break;
@ -100,3 +118,45 @@ int32_t ZCanBoardModule::readTemperature(int32_t sensorId, int32_t &temperature_
} }
return temperature_sensor[sensorId]->getTemperature(temperature_val); 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;
}

13
components/zcancmder/zcan_board_module.hpp

@ -5,6 +5,7 @@
#pragma once #pragma once
#include "sdk/os/zos.hpp" #include "sdk/os/zos.hpp"
// //
#include "sdk/chip/api/zi_api.hpp"
#include "sdk/chip/api/zi_temperature.hpp" #include "sdk/chip/api/zi_temperature.hpp"
#include "sdk\chip\api\zi_adc.hpp" #include "sdk\chip\api\zi_adc.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp" #include "sdk\components\zprotocols\zcancmder_v2\api\api.hpp"
@ -32,9 +33,10 @@ using namespace std;
class ZCanBoardModule : public ZIModule { class ZCanBoardModule : public ZIModule {
public: public:
typedef struct { 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]; ZITemperatureSensor *temperature_sensor[8];
ZIPWMCtrl *pwmctrl[8];
} hardware_config_t; } hardware_config_t;
hardware_config_t m_cfg; 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 &param_value); int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &param_value);
int32_t readinput(); int32_t readinput();
int32_t readoutput(); 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 } // namespace iflytop

16
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_humidity8", kreg_sensor_humidity8);
DUMP_CONFIG("sensor_humidity9", kreg_sensor_humidity9); 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);
/******************************************************************************* /*******************************************************************************
* »úеÈËͨÓÃÅäÖà * * »úеÈËͨÓÃÅäÖà *
*******************************************************************************/ *******************************************************************************/

2
components/zprotocols/zcancmder_v2

@ -1 +1 @@
Subproject commit d06f09d8b3724156381c36d0cc5d0d9a0b098cc4
Subproject commit a84acec79b74da740fa1a5a3cf17f45c2b3303a9
Loading…
Cancel
Save