|
|
@ -9,7 +9,7 @@ using namespace iflytop; |
|
|
|
|
|
|
|
#define ACTION_TEST_PELTIER_SET_POWER_LEVEL 1
|
|
|
|
#define ACTION_TEST_PUMP_SET_LEVEL 2
|
|
|
|
#define ACTION_TEST_FAN_SET_LEVEL 3
|
|
|
|
#define ACTION_TEST_FAN_SET_LEVEL 3
|
|
|
|
|
|
|
|
void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, hardwared_config_t* hardwaredconfig) { |
|
|
|
#if 0
|
|
|
@ -43,20 +43,6 @@ void WaterCoolingTemperatureControlModule::initialize(int32_t id, config_t* cfg, |
|
|
|
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++; |
|
|
|
} |
|
|
|
|
|
|
|
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"); |
|
|
|
m_cfg = *cfg; |
|
|
@ -81,20 +67,10 @@ void WaterCoolingTemperatureControlModule::createDefaultConfig(config_t* cfg) { |
|
|
|
cfg->pid_cfg.min_integral = -100; |
|
|
|
cfg->pidcompute_periodms = 1000; |
|
|
|
} |
|
|
|
#define SET_REG(param_id, modulereg, precision) \
|
|
|
|
case param_id: \ |
|
|
|
modulereg = param_value * precision; \ |
|
|
|
break; |
|
|
|
|
|
|
|
#define GET_REG(param_id, modulereg, precision) \
|
|
|
|
case param_id: \ |
|
|
|
*param_value = modulereg / precision; \ |
|
|
|
break; |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_set_reg(int32_t param_id, int32_t param_value) { return module_xxx_reg(param_id, false, param_value); } |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_get_reg(int32_t param_id, int32_t* param_value) { return module_xxx_reg(param_id, true, *param_value); } |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { |
|
|
|
switch (param_id) { |
|
|
|
MODULE_COMMON_PROCESS_REG_CB(); |
|
|
|
PROCESS_REG(kreg_pid_kp, REG_GET_FLOAT(m_cfg.pid_cfg.kp, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kp, 0.01)); |
|
|
|
PROCESS_REG(kreg_pid_ki, REG_GET_FLOAT(m_cfg.pid_cfg.ki, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.ki, 0.01)); |
|
|
|
PROCESS_REG(kreg_pid_kd, REG_GET_FLOAT(m_cfg.pid_cfg.kd, 0.01), REG_SET_FLOAT(m_cfg.pid_cfg.kd, 0.01)); |
|
|
@ -110,25 +86,23 @@ int32_t WaterCoolingTemperatureControlModule::module_xxx_reg(int32_t param_id, b |
|
|
|
PROCESS_REG(kreg_pid_nowoutput, REG_GET(m_pidmodule.get_output()), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_pid_feedbackval, REG_GET(read_pid_temperature()), ACTION_NONE); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_module_version, REG_GET(0), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_module_type, REG_GET(0), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_module_status, REG_GET(getworkstate()), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_module_errorcode, REG_GET(m_errorcode), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_module_initflag, REG_GET(module_get_inited_flag()), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_module_errorbitflag0, REG_GET(geterrorbitflag0()), ACTION_NONE); |
|
|
|
|
|
|
|
PROCESS_REG(kreg_sensor_temperature0, REG_GET(getTemperatureSensorVal(0)), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature1, REG_GET(getTemperatureSensorVal(1)), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature2, REG_GET(getTemperatureSensorVal(2)), ACTION_NONE); |
|
|
|
PROCESS_REG(kreg_sensor_temperature3, REG_GET(getTemperatureSensorVal(3)), ACTION_NONE); |
|
|
|
|
|
|
|
PROCESS_ACTION(); |
|
|
|
default: |
|
|
|
return err::kmodule_not_find_config_index; |
|
|
|
break; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_get_status(int32_t* status) { |
|
|
|
*status = getworkstate(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::gettemperature_sensor_state(int32_t& state) { |
|
|
|
for (int32_t i = 0; i < m_n_temperature_sensor; i++) { |
|
|
|
state |= m_temperature_sensor[i]->isOnline() << i; |
|
|
@ -138,11 +112,11 @@ int32_t WaterCoolingTemperatureControlModule::gettemperature_sensor_state(int32_ |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::do_action(int32_t actioncode) { |
|
|
|
if (actioncode == ACTION_TEST_PELTIER_SET_POWER_LEVEL) { |
|
|
|
return test_peltier_set_power_level(m_reg.module_action_param1); |
|
|
|
return test_peltier_set_power_level(m_com_reg.module_action_param1); |
|
|
|
} else if (actioncode == ACTION_TEST_PUMP_SET_LEVEL) { |
|
|
|
return test_pump_set_level(m_reg.module_action_param1); |
|
|
|
return test_pump_set_level(m_com_reg.module_action_param1); |
|
|
|
} else if (actioncode == ACTION_TEST_FAN_SET_LEVEL) { |
|
|
|
return test_fan_set_level(m_reg.module_action_param1); |
|
|
|
return test_fan_set_level(m_com_reg.module_action_param1); |
|
|
|
} else { |
|
|
|
return err::kmodule_not_support_action; |
|
|
|
} |
|
|
@ -158,7 +132,7 @@ int32_t WaterCoolingTemperatureControlModule::module_stop() { |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::module_start() { |
|
|
|
m_thread.stop(); |
|
|
|
m_errorcode = 0; |
|
|
|
m_com_reg.module_errorcode = 0; |
|
|
|
ZLOGI(TAG, "module_start"); |
|
|
|
m_thread.start([this]() { workloop(); }); |
|
|
|
return 0; |
|
|
@ -252,7 +226,7 @@ void WaterCoolingTemperatureControlModule::peltier_stop() { |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::getworkstate() { |
|
|
|
if (m_errorcode != 0) { |
|
|
|
if (m_com_reg.module_errorcode != 0) { |
|
|
|
return 2; |
|
|
|
} |
|
|
|
|
|
|
@ -283,7 +257,6 @@ int32_t WaterCoolingTemperatureControlModule::geterrorbitflag0() { |
|
|
|
if (m_peltier_ctrl[1]) errorbitflag |= m_peltier_ctrl[1]->isFault() << 9; |
|
|
|
return errorbitflag; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::geterrorbitflag1() { return 0; } |
|
|
|
|
|
|
|
float WaterCoolingTemperatureControlModule::getTemperatureSensorVal(int32_t index) { |
|
|
|
if (index < 0 || index >= m_n_temperature_sensor) { |
|
|
@ -291,39 +264,6 @@ 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; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::read_input_state() { |
|
|
|
uint32_t iostate = 0; |
|
|
|
for (int32_t i = 0; i < m_n_ext_input; i++) { |
|
|
|
iostate |= m_ext_input[i].getStateUint32() << i; |
|
|
|
} |
|
|
|
return (int32_t)iostate; |
|
|
|
} |
|
|
|
int32_t WaterCoolingTemperatureControlModule::read_output_io_state() { |
|
|
|
uint32_t iostate = 0; |
|
|
|
for (int32_t i = 0; i < m_n_ext_output; i++) { |
|
|
|
iostate |= m_ext_output[i].getStateUint32() << i; |
|
|
|
} |
|
|
|
return (int32_t)iostate; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t WaterCoolingTemperatureControlModule::test_peltier_set_power_level(int32_t level) { |
|
|
|
if (level == 0) { |
|
|
|
peltier_stop(); |
|
|
|