Browse Source

recode

master
zhaohe 2 years ago
parent
commit
6b6379ee4a
  1. 88
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp
  2. 54
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp
  3. 0
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module_factory.cpp
  4. 29
      components/water_cooling_temperature_control_module/water_cooling_temperature_control_module_factory.hpp

88
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.cpp

@ -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();

54
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module.hpp

@ -29,7 +29,25 @@ namespace iflytop {
*
*/
#if 0
namespace water_cooling_temperature_control {
class FanCtrlGroup {
public:
};
class PumpCtrlGroup {
public:
};
class PeltierCtrlGroup {
public:
};
} // namespace water_cooling_temperature_control
#endif
class WaterCoolingTemperatureControlModule : public ZIModule {
ENABLE_MODULE(WaterCoolingTemperatureControlModule, ktemperature_ctrl_module, 1);
public:
typedef struct {
PidModule::config_t pid_cfg;
@ -43,35 +61,12 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
PWMSpeedCtrlModule* fanTable[4];
PWMSpeedCtrlModule* pump;
DRV8710* peltier_ctrl[2];
ZGPIO::InputGpioCfg_t ext_input[10];
ZGPIO::OutputGpioCfg_t ext_output[10];
} hardwared_config_t;
typedef struct {
/*******************************************************************************
* ACTION REG *
*******************************************************************************/
int32_t module_do_action0;
int32_t module_action_param1;
int32_t module_action_param2;
int32_t module_action_param3;
int32_t module_action_ack1;
int32_t module_action_ack2;
} reg_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;
reg_t m_reg = {0};
// 温度传感器
ZITemperatureSensor* m_temperature_sensor[4] = {0};
int32_t m_n_temperature_sensor = 0;
@ -91,8 +86,6 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
float m_target_temperature = 0;
int32_t m_errorcode = 0;
public:
WaterCoolingTemperatureControlModule(){};
virtual ~WaterCoolingTemperatureControlModule(){};
@ -104,8 +97,7 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
virtual int32_t getid(int32_t* id) override;
virtual int32_t module_set_reg(int32_t param_id, int32_t param_value) override;
virtual int32_t module_get_reg(int32_t param_id, int32_t* param_value) override;
virtual int32_t module_get_status(int32_t* status) override;
virtual int32_t module_factory_reset() override;
virtual int32_t module_flush_cfg() override;
@ -115,9 +107,6 @@ 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;
virtual int32_t module_clear_error() override;
int32_t read_input_state();
@ -155,8 +144,9 @@ class WaterCoolingTemperatureControlModule : public ZIModule {
int32_t gettemperature_sensor_state(int32_t& state);
float getTemperatureSensorVal(int32_t index);
int32_t do_action(int32_t actioncode);
float getTemperatureSensorVal(int32_t index);
virtual int32_t do_action(int32_t actioncode) override;
};
} // namespace iflytop

0
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module_factory.cpp

29
components/water_cooling_temperature_control_module/water_cooling_temperature_control_module_factory.hpp

@ -1,29 +0,0 @@
#pragma once
/**
* @file water_cooling_temperature_control_module_factory.hpp
* @author zhaohe (h_zhaohe@163.com)
* @brief
* @version 0.1
* @date 2023-04-14
*
* @copyright Copyright (c) 2023
*
*/
#include <stdint.h>
#include "sdk/os/zos.hpp"
//
#include "water_cooling_temperature_control_module_factory.hpp"
namespace iflytop {
/**
* @brief
* Ë®ÀäÎÂÈ¿ØÖÆÄ£¿é
*/
class WaterCoolingTemperatureControlModuleFactory {
public:
WaterCoolingTemperatureControlModuleFactory(){};
};
} // namespace iflytop
Loading…
Cancel
Save