Show
Ignore:
Timestamp:
08/26/07 22:37:15 (7 years ago)
Author:
khali
Message:

Change print_temp_limits() to expose a sane interface. This lets us get
rid of arbitrary constants. Now we can reuse the same code to display
the extra temperature limits.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/branches/lm-sensors-3.0.0/prog/sensors/chips.c

    r4717 r4718  
    3131{ 
    3232        return cel * (9.0F / 5.0F) + 32.0F; 
    33 } 
    34  
    35 #define HYST 0 
    36 #define MINMAX 1 
    37 #define MAXONLY 2 
    38 #define CRIT 3 
    39 #define SINGLE 4 
    40 #define HYSTONLY 5 
    41  
    42 /* symbolic constants for minmax defined above */ 
    43 static void print_temp_limits(float n_over, float n_hyst, 
    44                               int minmax) 
    45 { 
    46         if (fahrenheit) { 
    47                 n_over = deg_ctof(n_over); 
    48                 n_hyst = deg_ctof(n_hyst); 
    49         } 
    50  
    51         if (minmax == MINMAX) 
    52                 printf("(low  = %+5.1f%s, high = %+5.1f%s)  ", 
    53                        n_hyst, degstr, 
    54                        n_over, degstr); 
    55         else if (minmax == MAXONLY) 
    56                 printf("(high = %+5.1f%s)                  ", 
    57                        n_over, degstr); 
    58         else if (minmax == CRIT) 
    59                 printf("(high = %+5.1f%s, crit = %+5.1f%s)  ", 
    60                        n_over, degstr, 
    61                        n_hyst, degstr); 
    62         else if (minmax == HYST) 
    63                 printf("(high = %+5.1f%s, hyst = %+5.1f%s)  ", 
    64                        n_over, degstr, 
    65                        n_hyst, degstr); 
    66         else if (minmax == HYSTONLY) 
    67                 printf("(hyst = %+5.1f%s)                  ", 
    68                        n_over, degstr); 
    69         else if (minmax != SINGLE) 
    70                 printf("Unknown temperature mode!"); 
    7133} 
    7234 
     
    174136} 
    175137 
     138static void print_temp_limits(float limit1, float limit2, 
     139                              const char *name1, const char *name2, int alarm) 
     140{ 
     141        if (fahrenheit) { 
     142                limit1 = deg_ctof(limit1); 
     143                limit2 = deg_ctof(limit2); 
     144        } 
     145 
     146        if (name2) { 
     147                printf("(%-4s = %+5.1f%s, %-4s = %+5.1f%s)  ", 
     148                       name1, limit1, degstr, 
     149                       name2, limit2, degstr); 
     150        } else if (name1) { 
     151                printf("(%-4s = %+5.1f%s)                  ", 
     152                       name1, limit1, degstr); 
     153        } else { 
     154                printf("                                  "); 
     155        } 
     156 
     157        if (alarm) 
     158                printf("ALARM  "); 
     159} 
     160 
    176161#define TEMP_FEATURE(x)         has_features[x - SENSORS_FEATURE_TEMP - 1] 
    177162#define TEMP_FEATURE_VAL(x)     feature_vals[x - SENSORS_FEATURE_TEMP - 1] 
     
    180165                                    int i, int label_size) 
    181166{ 
    182         double val, max, min; 
    183         char *label; 
    184         int type; 
     167        double val, limit1, limit2; 
     168        const char *s1, *s2; 
     169        int alarm, crit_displayed = 0; 
     170        char *label; 
    185171        const int size = SENSORS_FEATURE_TEMP_SENS - SENSORS_FEATURE_TEMP; 
    186172        short has_features[SENSORS_FEATURE_TEMP_SENS - SENSORS_FEATURE_TEMP] = { 0, }; 
     
    202188                                       SENSORS_FEATURE_TEMP); 
    203189 
     190        alarm = TEMP_FEATURE(SENSORS_FEATURE_TEMP_ALARM) && 
     191                TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_ALARM); 
    204192        if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MAX)) { 
    205                 max = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX); 
    206  
    207                 if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MIN)) { 
    208                         min = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MIN); 
    209                         type = MINMAX; 
    210                 } else if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MAX_HYST)) { 
    211                         min = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX_HYST); 
    212                         type = HYST; 
    213                 } else if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT)) { 
    214                         min = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT); 
    215                         type = CRIT; 
     193                if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MAX_ALARM) && 
     194                    TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX_ALARM)) 
     195                        alarm |= 1; 
     196 
     197                if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MIN)) { 
     198                        limit1 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MIN); 
     199                        s1 = "low"; 
     200                        limit2 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX); 
     201                        s2 = "high"; 
     202 
     203                        if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MIN_ALARM) && 
     204                            TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MIN_ALARM)) 
     205                                alarm |= 1; 
    216206                } else { 
    217                         min = 0; 
    218                         type = MAXONLY; 
     207                        limit1 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX); 
     208                        s1 = "high"; 
     209 
     210                        if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_MAX_HYST)) { 
     211                                limit2 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX_HYST); 
     212                                s2 = "hyst"; 
     213                        } else if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT)) { 
     214                                limit2 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT); 
     215                                s2 = "crit"; 
     216 
     217                                if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_ALARM) && 
     218                                    TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_ALARM)) 
     219                                        alarm |= 1; 
     220                                crit_displayed = 1; 
     221                        } else { 
     222                                limit2 = 0; 
     223                                s2 = NULL; 
     224                        } 
    219225                } 
    220226        } else { 
    221                 min = max = 0; 
    222                 type = SINGLE; 
     227                limit1 = limit2 = 0; 
     228                s1 = s2 = NULL; 
    223229        } 
    224230 
     
    234240                printf("%+6.1f%s  ", val, degstr); 
    235241        } 
    236         print_temp_limits(max, min, type); 
    237  
    238         /* ALARM features */ 
    239         if ((TEMP_FEATURE(SENSORS_FEATURE_TEMP_ALARM) && 
    240              TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_ALARM) > 0.5) 
    241          || (type == MINMAX && 
    242              TEMP_FEATURE(SENSORS_FEATURE_TEMP_MIN_ALARM) && 
    243              TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MIN_ALARM) > 0.5) 
    244          || (type == MINMAX && 
    245              TEMP_FEATURE(SENSORS_FEATURE_TEMP_MAX_ALARM) && 
    246              TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_MAX_ALARM) > 0.5) 
    247          || (type == CRIT && 
    248              TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_ALARM) && 
    249              TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_ALARM) > 0.5)) { 
    250                 printf("ALARM  "); 
    251         } 
    252  
    253         if (type != CRIT && TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT)) { 
    254                 if (fahrenheit) { 
    255                         TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT) = deg_ctof( 
    256                                 TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT)); 
    257                         TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_HYST) = deg_ctof( 
    258                                 TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_HYST)); 
    259                 } 
    260  
    261                 if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_HYST)) 
    262                         printf("\n%*s(crit = %+5.1f%s, hyst = %+5.1f%s)  ", 
    263                                label_size + 10, "", 
    264                                TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT), 
    265                                degstr, 
    266                                TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_HYST), 
    267                                degstr); 
    268                 else 
    269                         printf("\n%*s(crit = %+5.1f%s)  ", 
    270                                label_size + 10, "", 
    271                                TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT), 
    272                                degstr); 
    273  
    274                 if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_ALARM) && 
    275                     TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_ALARM)) { 
    276                         printf("ALARM  "); 
    277                 } 
     242        print_temp_limits(limit1, limit2, s1, s2, alarm); 
     243 
     244        if (!crit_displayed && TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT)) { 
     245                limit1 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT); 
     246                s1 = "crit"; 
     247 
     248                if (TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_HYST)) { 
     249                        limit2 = TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_HYST); 
     250                        s2 = "hyst"; 
     251                } else { 
     252                        limit2 = 0; 
     253                        s2 = NULL; 
     254                } 
     255 
     256                alarm = TEMP_FEATURE(SENSORS_FEATURE_TEMP_CRIT_ALARM) && 
     257                        TEMP_FEATURE_VAL(SENSORS_FEATURE_TEMP_CRIT_ALARM); 
     258 
     259                printf("\n%*s", label_size + 10, ""); 
     260                print_temp_limits(limit1, limit2, s1, s2, alarm); 
    278261        } 
    279262