diff options
Diffstat (limited to 'powerdebug.c')
-rw-r--r-- | powerdebug.c | 193 |
1 files changed, 16 insertions, 177 deletions
diff --git a/powerdebug.c b/powerdebug.c index c94c14b..5ebb01e 100644 --- a/powerdebug.c +++ b/powerdebug.c @@ -28,190 +28,28 @@ char *win_names[TOTAL_FEATURE_WINS] = { "Clocks", "Sensors" }; -int init_regulator_ds(void) +void usage(char **argv) { - DIR *regdir; - struct dirent *item; + printf("Usage: %s [OPTIONS]\n", argv[0]); + printf(" -r, --regulator Show regulator information\n"); + printf(" -s, --sensor Show sensor information\n"); + printf(" -c, --clock Show clock information\n"); + printf(" -p, --findparents Show all parents for a particular clock\n"); + printf(" -t, --time Set ticktime in seconds (eg. 10.0)\n"); + printf(" -d, --dump Dump information once (no refresh)\n"); + printf(" -v, --verbose Verbose mode (use with -r and/or -s)\n"); + printf(" -V, --version Show Version\n"); + printf(" -h, --help Help\n"); - regdir = opendir("/sys/class/regulator"); - if (!regdir) - return(1); - while((item = readdir(regdir))) { - if (strncmp(item->d_name, "regulator", 9)) - continue; - - numregulators++; - } - closedir(regdir); - - regulators_info = (struct regulator_info *)malloc(numregulators* - sizeof(struct regulator_info)); - if (!regulators_info) { - fprintf(stderr, "init_regulator_ds: Not enough memory to " - "read information for %d regulators!\n", numregulators); - return(1); - } - - return(0); -} - -int read_and_print_sensor_info(int verbose) -{ - DIR *dir, *subdir; - int len, found = 0; - char filename[PATH_MAX], devpath[PATH_MAX]; - char device[PATH_MAX]; - struct dirent *item, *subitem; - - sprintf(filename, "%s", "/sys/class/hwmon"); - dir = opendir(filename); - if (!dir) - return errno; - - while ((item = readdir(dir))) { - if (item->d_name[0] == '.') /* skip the hidden files */ - continue; - - found = 1; - - sprintf(filename, "/sys/class/hwmon/%s", item->d_name); - sprintf(devpath, "%s/device", filename); - - len = readlink(devpath, device, PATH_MAX - 1); - - if (len < 0) - strcpy(devpath, filename); - else - device[len] = '\0'; - - subdir = opendir(devpath); - - printf("\nSensor Information for %s :\n", item->d_name); - fflush(stdin); - - while ((subitem = readdir(subdir))) { - if (subitem->d_name[0] == '.') /* skip hidden files */ - continue; - - if(!strncmp(subitem->d_name, "in", 2)) - get_sensor_info(devpath, subitem->d_name, "in", - verbose); - else if (!strncmp(subitem->d_name, "temp", 4)) - get_sensor_info(devpath, subitem->d_name, - "temp", verbose); - else if (!strncmp(subitem->d_name, "fan", 4)) - get_sensor_info(devpath, subitem->d_name, - "fan", verbose); - else if (!strncmp(subitem->d_name, "pwm", 4)) - get_sensor_info(devpath, subitem->d_name, - "pwm", verbose); - - } - - closedir(subdir); - } - closedir(dir); - - if(!found && verbose) { - printf("Could not find sensor information!"); - printf(" Looks like /sys/class/hwmon is empty.\n"); - } - - return 0; -} - -void read_info_from_dirent(struct dirent *ritem, char *str, int idx) -{ - if (!strcmp(ritem->d_name, "name")) - strcpy(regulators_info[idx].name, str); - if (!strcmp(ritem->d_name, "state")) - strcpy(regulators_info[idx].state, str); - if (!strcmp(ritem->d_name, "status")) - strcpy(regulators_info[idx].status, str); - - if (!strcmp(ritem->d_name, "type")) - strcpy(regulators_info[idx].type, str); - if (!strcmp(ritem->d_name, "opmode")) - strcpy(regulators_info[idx].opmode, str); - - if (!strcmp(ritem->d_name, "microvolts")) - regulators_info[idx].microvolts = atoi(str); - if (!strcmp(ritem->d_name, "min_microvolts")) - regulators_info[idx].min_microvolts = atoi(str); - if (!strcmp(ritem->d_name, "max_microvolts")) - regulators_info[idx].max_microvolts = atoi(str); - - if (!strcmp(ritem->d_name, "microamps")) - regulators_info[idx].microamps = atoi(str); - if (!strcmp(ritem->d_name, "min_microamps")) - regulators_info[idx].min_microamps = atoi(str); - if (!strcmp(ritem->d_name, "max_microamps")) - regulators_info[idx].max_microamps = atoi(str); - if (!strcmp(ritem->d_name, "requested_microamps")) - regulators_info[idx].requested_microamps = atoi(str); - - if (!strcmp(ritem->d_name, "num_users")) - regulators_info[idx].num_users = atoi(str); + exit(0); } -int read_regulator_info(void) +void version() { - FILE *file = NULL; - DIR *regdir, *dir; - int len, count = 0, ret = 0; - char line[1024], filename[1024], *fptr; - struct dirent *item, *ritem; - - regdir = opendir("/sys/class/regulator"); - if (!regdir) - return(1); - while((item = readdir(regdir))) { - if (strlen(item->d_name) < 3) - continue; - - if (strncmp(item->d_name, "regulator", 9)) - continue; - - len = sprintf(filename, "/sys/class/regulator/%s", - item->d_name); - - dir = opendir(filename); - if (!dir) - continue; - count++; - - if (count > numregulators) { - ret = 1; - goto exit; - } - - strcpy(regulators_info[count-1].name, item->d_name); - while((ritem = readdir(dir))) { - if (strlen(ritem->d_name) < 3) - continue; - - sprintf(filename + len, "/%s", ritem->d_name); - file = fopen(filename, "r"); - if (!file) - continue; - memset(line, 0, 1024); - fptr = fgets(line, 1024, file); - fclose(file); - if (!fptr) - continue; - read_info_from_dirent(ritem, fptr, count - 1); - } -exit: - closedir(dir); - if (ret) - break; - } - closedir(regdir); - - return ret; + printf("powerdebug version %s\n", VERSION); + exit(0); } - int main(int argc, char **argv) { int c, i; @@ -461,3 +299,4 @@ int main(int argc, char **argv) } exit(0); } + |