@@ -242,6 +242,37 @@ class CONST(object):
242242 avg = avg_acc / input_smooth_level
243243"""
244244
245+ SENSOR_PARAM_RANGE = {
246+ r'module\d+' : {
247+ "val_min_offset" : {
248+ "min" : - 30000 ,
249+ "max" : - 5000 ,
250+ },
251+ "val_max_offset" : {
252+ "min" : - 30000 ,
253+ "max" : 0 ,
254+ },
255+ "pwm_min" : {
256+ "min" : 20 ,
257+ "max" : 100 ,
258+ },
259+ "pwm_max" : {
260+ "min" : 30 ,
261+ "max" : 100 ,
262+ }
263+ },
264+ r'.*' : {
265+ "pwm_min" : {
266+ "min" : 20 ,
267+ "max" : 100 ,
268+ },
269+ "pwm_max" : {
270+ "min" : 30 ,
271+ "max" : 100 ,
272+ }
273+ }
274+ }
275+
245276# fmt: off
246277SENSOR_DEF_CONFIG = {
247278 r'psu\d+_fan' : {"type" : "psu_fan_sensor" ,
@@ -1340,6 +1371,13 @@ def start(self):
13401371 self .log .info ("Starting {}" .format (self .name ))
13411372 self .pwm_min = int (self .sensors_config .get ("pwm_min" , CONST .PWM_MIN ))
13421373 self .pwm_max = int (self .sensors_config .get ("pwm_max" , CONST .PWM_MAX ))
1374+ if not self .validate_sensor_param ("pwm_min" , self .pwm_min ):
1375+ self .log .error ("{}: pwm_min incorrect value ({})" .format (self .name , self .pwm_min ), 1 )
1376+ raise ValueError ("Incorrect value of pwm_min {}" .format (self .pwm_min ))
1377+ if not self .validate_sensor_param ("pwm_max" , self .pwm_max ):
1378+ self .log .error ("{}: pwm_max incorrect value ({})" .format (self .name , self .pwm_max ), 1 )
1379+ raise ValueError ("Incorrect value of pwm_max {}" .format (self .pwm_max ))
1380+
13431381 self .pwm_regulator .update_param (self .val_min , self .val_max , self .pwm_min , self .pwm_max )
13441382 self .refresh_attr_period = self .sensors_config .get ("refresh_attr_period" , 0 )
13451383 if self .refresh_attr_period :
@@ -1563,6 +1601,37 @@ def read_val_min_max(self, filename, trh_type, scale=1):
15631601 self .log .debug ("Set {} {} : {}" .format (self .name , trh_type , val ))
15641602 return val
15651603
1604+ # ----------------------------------------------------------------------
1605+ def validate_sensor_param (self , param_name , param_value ):
1606+ """
1607+ @summary: Validate sensor parameter value
1608+ """
1609+ if not isinstance (param_value , (int , float )):
1610+ self .log .error ("{}: {} value({}) is not a number" .format (self .name , param_name , param_value ), repeat = 1 )
1611+ return False
1612+ param_value = float (param_value )
1613+ for sensor_name_mask , sensor_param_list in SENSOR_PARAM_RANGE .items ():
1614+ if re .match (sensor_name_mask , self .name ):
1615+ if param_name in sensor_param_list :
1616+ param_value_range = sensor_param_list [param_name ]
1617+ if "min" in param_value_range :
1618+ if param_value < param_value_range ["min" ]:
1619+ self .log .info ("{}: {} value({}) is out of range({}-{})" .format (self .name ,
1620+ param_name ,
1621+ param_value ,
1622+ param_value_range ["min" ],
1623+ param_value_range ["max" ]))
1624+ return False
1625+ if "max" in param_value_range :
1626+ if param_value > param_value_range ["max" ]:
1627+ self .log .info ("{}: {} value({}) is out of range({}-{})" .format (self .name ,
1628+ param_name ,
1629+ param_value ,
1630+ param_value_range ["min" ],
1631+ param_value_range ["max" ]))
1632+ return False
1633+ return True
1634+
15661635 # ----------------------------------------------------------------------
15671636 def check_sensor_blocked (self , name = None ):
15681637 """
@@ -1831,6 +1900,25 @@ def __init__(self, cmd_arg, sys_config, name, tc_logger):
18311900 self .scale = CONST .TEMP_SENSOR_SCALE / scale_value
18321901 self .val_lcrit = self .read_val_min_max (None , "val_lcrit" , self .scale )
18331902 self .val_hcrit = self .read_val_min_max (None , "val_hcrit" , self .scale )
1903+
1904+ self .pwm_min = float (self .sensors_config .get ("pwm_min" , CONST .PWM_MIN ))
1905+ self .pwm_max = float (self .sensors_config .get ("pwm_max" , CONST .PWM_MAX ))
1906+ if not self .validate_sensor_param ("pwm_min" , self .pwm_min ):
1907+ self .log .error ("{}: pwm_min incorrect value ({})" .format (self .name , self .pwm_min ), repeat = 1 )
1908+ raise ValueError ("Incorrect value of pwm_min {}" .format (self .pwm_min ))
1909+ if not self .validate_sensor_param ("pwm_max" , self .pwm_max ):
1910+ self .log .error ("{}: pwm_max incorrect value ({})" .format (self .name , self .pwm_max ), repeat = 1 )
1911+ raise ValueError ("Incorrect value of pwm_max {}" .format (self .pwm_max ))
1912+
1913+ self .val_min_offset = self .sensors_config .get ("val_min_offset" , 0 )
1914+ self .val_max_offset = self .sensors_config .get ("val_max_offset" , 0 )
1915+ if not self .validate_sensor_param ("val_min_offset" , self .val_min_offset ):
1916+ self .log .error ("{}: val_min_offset incorrect value ({})" .format (self .name , self .val_min_offset ), repeat = 1 )
1917+ raise ValueError ("Incorrect value of val_min_offset {}" .format (self .val_min_offset ))
1918+ if not self .validate_sensor_param ("val_max_offset" , self .val_max_offset ):
1919+ self .log .error ("{}: val_max_offset incorrect value ({})" .format (self .name , self .val_max_offset ), repeat = 1 )
1920+ raise ValueError ("Incorrect value of val_max_offset {}" .format (self .val_max_offset ))
1921+
18341922 self .refresh_attr ()
18351923
18361924 # ----------------------------------------------------------------------
@@ -1839,14 +1927,10 @@ def refresh_attr(self):
18391927 @summary: refresh sensor attributes.
18401928 @return None
18411929 """
1842- self .pwm_min = float (self .sensors_config .get ("pwm_min" , CONST .PWM_MIN ))
1843- self .pwm_max = float (self .sensors_config .get ("pwm_max" , CONST .PWM_MAX ))
1844- val_min_offset = self .sensors_config .get ("val_min_offset" , 0 )
1845- val_max_offset = self .sensors_config .get ("val_max_offset" , 0 )
18461930 val_max = self .read_val_min_max ("thermal/{}_temp_crit" .format (self .base_file_name ), "val_max" , scale = self .scale )
18471931 if val_max != 0 :
1848- self .val_min = val_max + val_min_offset / self .scale
1849- self .val_max = val_max + val_max_offset / self .scale
1932+ self .val_max = val_max + self . val_max_offset / self .scale
1933+ self .val_min = self . val_max + self . val_min_offset / self .scale
18501934 else :
18511935 self .val_max = 0.0
18521936 self .val_min = 0.0
0 commit comments