diff --git a/components/ti/drv8710.cpp b/components/ti/drv8710.cpp index 2487c1a..82d31d5 100644 --- a/components/ti/drv8710.cpp +++ b/components/ti/drv8710.cpp @@ -1,7 +1,7 @@ #include "drv8710.hpp" using namespace iflytop; -void DRV8710::initialize(hardware_cfg_t* cfg) { // +void DRV8710::initialize(config_t* cfg) { // m_cfg = *cfg; m_pwmCtrl.initialize(cfg->tim, 10 * 000, false); diff --git a/components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp b/components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp index 4d854e1..2699852 100644 --- a/components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp +++ b/components/water_cooling_temperature_control_module/pwm_ctrl_module.cpp @@ -3,7 +3,7 @@ #include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp" using namespace iflytop; -void PWMSpeedCtrlModule::initialize(fangroup_device_cfg_t* pcfg, bool enablefbcheck) { +void PWMSpeedCtrlModule::initialize(config_t* pcfg, bool enablefbcheck) { ZASSERT(pcfg); ZASSERT(pcfg->fanCtrlTim); cfg = *pcfg; diff --git a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp index a2d7fb0..04af080 100644 --- a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp +++ b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp @@ -7,34 +7,60 @@ using namespace iflytop; #define TAG "WaterCoolingTemperatureControlModule" -void WaterCoolingTemperatureControlModule::initialize(config_t* cfg, // - ZITemperatureSensor** temperature_sensor, int32_t ntemperature, // - DRV8710** m_peltier_ctrl, int32_t m_peltier_ctrl_num, // - PWMSpeedCtrlModule** fan, int32_t nfan, // - PWMSpeedCtrlModule* pump // -) { - ZASSERT(ntemperature < 4); - - m_n_temperature_sensor = ntemperature; - m_fanNum = nfan; - - for (int32_t i = 0; i < ntemperature; i++) { - m_temperature_sensor[i] = temperature_sensor[i]; - ZASSERT(m_temperature_sensor[i]); +void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, hardwared_config_t* hardwaredconfig) { +#if 0 + ZITemperatureSensor* temperature_sensor[4]; + PWMSpeedCtrlModule* fanTable[4]; + PWMSpeedCtrlModule* pump; + DRV8710* peltier_ctrl[2]; + + ZGPIO::OutputGpioCfg_t ext_input[10]; + ZGPIO::InputGpioCfg_t ext_output[10]; +#endif + + for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->temperature_sensor); i++) { + if (!hardwaredconfig->temperature_sensor[i]) break; + m_temperature_sensor[i] = hardwaredconfig->temperature_sensor[i]; + m_n_temperature_sensor++; + } + + for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->fanTable); i++) { + if (!hardwaredconfig->fanTable[i]) break; + m_fanTable[i] = hardwaredconfig->fanTable[i]; + m_fanNum++; } - for (int32_t i = 0; i < nfan; i++) { - m_fanTable[i] = fan[i]; - ZASSERT(m_fanTable[i]); + m_pump = hardwaredconfig->pump; + + for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->peltier_ctrl); i++) { + if (!hardwaredconfig->peltier_ctrl[i]) break; + m_peltier_ctrl[i] = hardwaredconfig->peltier_ctrl[i]; + m_peltier_ctrl_num++; + } + + for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->ext_input); i++) { + if (hardwaredconfig->ext_input[i].pin == PinNull) break; + ZGPIO::InputGpioCfg_t* incfg = &hardwaredconfig->ext_input[i]; + m_ext_input[i].initAsInput(incfg->pin, incfg->mode, incfg->irqtype, incfg->mirror); + m_n_ext_input++; } - m_pump = pump; + for (int32_t i = 0; i < ZARRAY_SIZE(hardwaredconfig->ext_output); i++) { + if (hardwaredconfig->ext_output[i].pin == PinNull) break; + ZGPIO::OutputGpioCfg_t* outcfg = &hardwaredconfig->ext_output[i]; + m_ext_output[i].initAsOutput(outcfg->pin, outcfg->mode, outcfg->mirror, outcfg->initLevel); + m_n_ext_output++; + } m_pidmodule.initialize(&cfg->pid_cfg); m_thread.init("WaterCoolingTemperatureControlModule"); ZLOGI(TAG, "WaterCoolingTemperatureControlModule initialized..."); } +int32_t WaterCoolingTemperatureControlModule::getid(int32_t* id) { + *id = m_id; + return 0; +} void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { cfg->fanlevel = 90; @@ -58,23 +84,6 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { *param_value = modulereg / precision; \ break; -#if 0 - kreg_pid_kp = REG_INDEX(3000, 0), // kp - kreg_pid_ki = REG_INDEX(3000, 1), // ki - kreg_pid_kd = REG_INDEX(3000, 2), // kd - kreg_pid_max_output = REG_INDEX(3000, 3), // 最大输出 - kreg_pid_min_output = REG_INDEX(3000, 4), // 最小输出 - kreg_pid_max_integral = REG_INDEX(3000, 5), // 最大积分 - kreg_pid_min_integral = REG_INDEX(3000, 6), // 最小积分 - kreg_error_limit = REG_INDEX(3000, 7), // 误差限制 - kreg_compute_interval = REG_INDEX(3000, 8), // 计算间隔 - - kreg_pid_target = REG_INDEX(3050, 0), // 目标数值 - kreg_pid_nowoutput = REG_INDEX(3050, 1), // 当前输出 - kreg_pid_feedbackval = REG_INDEX(3050, 2), // 当前输出 - -#endif - int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t param_id, int32_t param_value) { switch (param_id) { SET_REG(kreg_pid_kp, m_cfg.pid_cfg.kp, 0.01); @@ -271,3 +280,20 @@ float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t inde } return m_temperature_sensor[index]->getTemperature(); } + +int32_t WaterCoolingTemperatureControlModule::module_readio(int32_t* io) { + uint32_t iostate = 0; + + for (int32_t i = 0; i < m_n_ext_input; i++) { + iostate |= m_ext_input[i].getStateUint32() << i; + } + *io = (int32_t)iostate; + return 0; +} +int32_t WaterCoolingTemperatureControlModule::module_writeio(int32_t idindex, int32_t io) { + if (idindex < 0 || idindex >= m_n_ext_output) { + return err::kparam_out_of_range; + } + m_ext_output[idindex].setState(io); + return 0; +} \ No newline at end of file diff --git a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp index e6c5b02..62dcdd5 100644 --- a/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp +++ b/components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp @@ -38,10 +38,26 @@ class WaterCoolingTemperatureControlModule : public ZIModule { int32_t pidcompute_periodms; } config_t; + typedef struct { + ZITemperatureSensor* temperature_sensor[4]; + PWMSpeedCtrlModule* fanTable[4]; + PWMSpeedCtrlModule* pump; + DRV8710* peltier_ctrl[2]; + + ZGPIO::InputGpioCfg_t ext_input[10]; + ZGPIO::OutputGpioCfg_t ext_output[10]; + } hardwared_config_t; + private: config_t m_cfg; int32_t m_id = 1; + ZGPIO m_ext_input[10]; + int32_t m_n_ext_input = 0; + + ZGPIO m_ext_output[10]; + int32_t m_n_ext_output = 0; + // 温度传感器 ZITemperatureSensor* m_temperature_sensor[4] = {0}; int32_t m_n_temperature_sensor = 0; @@ -65,15 +81,11 @@ class WaterCoolingTemperatureControlModule : public ZIModule { public: WaterCoolingTemperatureControlModule(){}; + virtual ~WaterCoolingTemperatureControlModule(){}; static void createDefaultConfig(config_t* cfg); - void initialize(config_t* cfg, // - ZITemperatureSensor** temperature_sensor, int32_t ntemperature, // - DRV8710** m_peltier_ctrl, int32_t m_peltier_ctrl_num, // - PWMSpeedCtrlModule** fan, int32_t nfan, // - PWMSpeedCtrlModule* pump // - ); + void initialize(int32_t id, config_t* cfg, hardwared_config_t* hardwaredconfig); virtual int32_t getid(int32_t* id) override; @@ -88,6 +100,9 @@ class WaterCoolingTemperatureControlModule : public ZIModule { virtual int32_t module_start() override; virtual int32_t module_break() override; + virtual int32_t module_readio(int32_t* io) override; + virtual int32_t module_writeio(int32_t idindex, int32_t io) override; + private: void workloop();