diff --git a/lib/access.c b/lib/access.c index 0a67d6a2..a0ca6175 100644 --- a/lib/access.c +++ b/lib/access.c @@ -496,3 +496,67 @@ int sensors_do_all_sets(void) }; return sensors_do_chip_sets(name); } + +/* Return the feature type based on the feature name */ +sensors_feature_type sensors_feature_get_type( + const sensors_feature_data *feature) +{ + const char *name; + + /* this will only work when the sensors_chip_feature is obtained through + sensors_get_all_features */ + if (((const struct sensors_chip_feature *)feature)->sysname) + name = ((const struct sensors_chip_feature *)feature)->sysname; + else + name = feature->name; + + if (strstr(name, "temp")) { + if (strlen(name) == 5) + return SENSORS_FEATURE_TEMP; + + if (strstr(name, "hyst")) + return SENSORS_FEATURE_TEMP_HYST; + + if (strstr(name, "over")) + return SENSORS_FEATURE_TEMP_OVER; + + if (strstr(name, "max")) + return SENSORS_FEATURE_TEMP_MAX; + + if (strstr(name, "min")) + return SENSORS_FEATURE_TEMP_MIN; + + if (strstr(name, "low")) + return SENSORS_FEATURE_TEMP_LOW; + + if (strstr(name, "crit")) + return SENSORS_FEATURE_TEMP_CRIT; + } else if (strstr(name, "in") && name[0] != 'f') { + if (strlen(name) == 3 || strstr(name, "input")) + return SENSORS_FEATURE_IN; + + if (strstr(name, "max")) + return SENSORS_FEATURE_IN_MAX; + + if (strstr(name, "min")) + return SENSORS_FEATURE_IN_MIN; + + if (strstr(name, "alarm")) + return SENSORS_FEATURE_IN_ALARM; + } else if (strstr(name, "fan")) { + if (strlen(name) == 4) + return SENSORS_FEATURE_FAN; + + if (strstr(name, "min")) + return SENSORS_FEATURE_FAN_MIN; + + if (strstr(name, "div")) + return SENSORS_FEATURE_FAN_DIV; + } else if (!strcmp(name, "vrm")) { + return SENSORS_FEATURE_VRM; + } else if (strstr(name, "vid")) { + return SENSORS_FEATURE_VID; + } + + return SENSORS_FEATURE_UNKNOWN; +} diff --git a/lib/sensors.h b/lib/sensors.h index bb694a07..eeaca583 100644 --- a/lib/sensors.h +++ b/lib/sensors.h @@ -146,6 +146,38 @@ typedef struct sensors_feature_data { extern const sensors_feature_data *sensors_get_all_features (sensors_chip_name name, int *nr1,int *nr2); +typedef enum sensors_feature_type { + SENSORS_FEATURE_TEMP = 0, + SENSORS_FEATURE_TEMP_ALARM, + SENSORS_FEATURE_TEMP_HYST, + SENSORS_FEATURE_TEMP_OVER, + SENSORS_FEATURE_TEMP_MAX, + SENSORS_FEATURE_TEMP_MIN, + SENSORS_FEATURE_TEMP_HIGH, + SENSORS_FEATURE_TEMP_LOW, + SENSORS_FEATURE_TEMP_LIM, + SENSORS_FEATURE_TEMP_CRIT, + + SENSORS_FEATURE_IN, + SENSORS_FEATURE_IN_ALARM, + SENSORS_FEATURE_IN_MIN, + SENSORS_FEATURE_IN_MAX, + SENSORS_FEATURE_IN_MIN_ALARM, + SENSORS_FEATURE_IN_MAX_ALARM, + + SENSORS_FEATURE_FAN, + SENSORS_FEATURE_FAN_ALARM, + SENSORS_FEATURE_FAN_MIN, + SENSORS_FEATURE_FAN_DIV, + + SENSORS_FEATURE_VID, + SENSORS_FEATURE_VRM, + + SENSORS_FEATURE_UNKNOWN +} sensors_feature_type; + +sensors_feature_type sensors_feature_get_type( + const sensors_feature_data *feature); #ifdef __cplusplus } #endif /* __cplusplus */