|
|
@ -10,12 +10,13 @@ void ZcanFanCtrlModule::initialize(int32_t id, ZIPWMFanCtrlModule* fanmodule, in |
|
|
|
|
|
|
|
OSDefaultSchduler::getInstance()->regPeriodJob( |
|
|
|
[this](OSDefaultSchduler::Context& context) { //
|
|
|
|
if (m_isworking && creg.module_errorcode == 0) { |
|
|
|
if (creg.m_module_status == 1) { |
|
|
|
if (m_fanmodule->isError()) { |
|
|
|
ZLOGE(TAG, "detect fan error,stop fan"); |
|
|
|
creg.module_errorcode = err::khwardware_error; |
|
|
|
creg.module_errorcode = err::kfan_hardware_fault; |
|
|
|
m_fanmodule->clearError(); |
|
|
|
module_stop(); |
|
|
|
m_fanmodule->stop(); |
|
|
|
creg.m_module_status = 2; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
@ -26,47 +27,37 @@ int32_t ZcanFanCtrlModule::getid(int32_t* id) { |
|
|
|
*id = m_id; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t ZcanFanCtrlModule::module_get_status(int32_t* status) { |
|
|
|
if (creg.module_errorcode != 0) { |
|
|
|
*status = 2; |
|
|
|
} else if (m_isworking) { |
|
|
|
*status = 1; |
|
|
|
} else { |
|
|
|
*status = 0; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t ZcanFanCtrlModule::set_fan_default_speed(int32_t default_speed) { |
|
|
|
m_default_speed = default_speed; |
|
|
|
if (m_isworking) m_fanmodule->setFanSpeed(default_speed); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZcanFanCtrlModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { |
|
|
|
switch (param_id) { |
|
|
|
MODULE_COMMON_PROCESS_REG_CB(); |
|
|
|
PROCESS_REG(kreg_fan0_ctrl_speed_level, REG_GET(m_default_speed), set_fan_default_speed(val)); |
|
|
|
break; |
|
|
|
default: |
|
|
|
return err::kmodule_not_find_config_index; |
|
|
|
return err::kmodule_not_find_reg; |
|
|
|
} |
|
|
|
return err::kmodule_not_find_config_index; |
|
|
|
return err::kmodule_not_find_reg; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ZcanFanCtrlModule::module_stop() { |
|
|
|
m_isworking = false; |
|
|
|
m_fanmodule->stop(); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t ZcanFanCtrlModule::module_start() { |
|
|
|
module_clear_error(); |
|
|
|
int32_t ZcanFanCtrlModule::module_stop() { return fan_controler_set_speed(0); } |
|
|
|
|
|
|
|
int32_t ZcanFanCtrlModule::fan_controler_set_speed(int32_t fanspeed100) { |
|
|
|
if (creg.m_module_status == 2) { |
|
|
|
ZLOGE(TAG, "fan error trigger, do nothing"); |
|
|
|
if (fanspeed100 == 0) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
return creg.module_errorcode; |
|
|
|
} |
|
|
|
|
|
|
|
m_now_speed = fanspeed100; |
|
|
|
|
|
|
|
if (m_default_speed == 0) { |
|
|
|
module_stop(); |
|
|
|
if (m_now_speed == 0) { |
|
|
|
m_fanmodule->stop(); |
|
|
|
creg.m_module_status = 0; |
|
|
|
} else { |
|
|
|
m_fanmodule->setFanSpeed(m_now_speed); |
|
|
|
creg.m_module_status = 1; |
|
|
|
creg.module_errorcode = 0; |
|
|
|
} |
|
|
|
|
|
|
|
m_isworking = true; |
|
|
|
m_fanmodule->setFanSpeed(m_default_speed); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|