Commit 5fc4e1ac authored by Grzegorz Daniluk's avatar Grzegorz Daniluk

diot_util: adding csv command

parent 15cc9958
......@@ -43,6 +43,8 @@ struct command_entry {
char **command_completion(const char *, int, int);
char *command_name_generator(const char *, int);
int script_mode;
/* commands */
int cmd_print_status(char *params);
int cmd_exit(char *params);
......@@ -61,6 +63,7 @@ struct command_entry commands_list[] = {
{ .cmd_name = "sensors_refresh", .cmd_func = cmd_sensors_refresh, .cmd_help_string = "Display sensors short version with refresh\n", .cmd_params = NULL},
{ .cmd_name = "clocks", .cmd_func = cmd_clocks, .cmd_help_string = "Display info about clocks\n", .cmd_params = NULL},
{ .cmd_name = "pts", .cmd_func = cmd_pts, .cmd_help_string = "Run PTS basic checks\n", .cmd_params = NULL},
{ .cmd_name = "csv", .cmd_func = cmd_csv, .cmd_help_string = "Display all sensors in csv format\n", .cmd_params = NULL},
{ .cmd_name = NULL }
};
......@@ -85,7 +88,8 @@ int cmd_help(char *params)
int cmd_exit(char *params)
{
printf("Exiting...\n");
if (!script_mode)
printf("Exiting...\n");
close_gpios();
exit(0);
......@@ -230,8 +234,7 @@ int main(int argc, char **argv)
char *curr_script_cmd = NULL;
int opt;
printf("DIOT diagnostic tool\n\n");
script_mode = 0;
while ((opt = getopt(argc, argv, "he:")) != -1) {
switch(opt)
{
......@@ -242,12 +245,17 @@ int main(int argc, char **argv)
break;
case 'e':
next_script_cmd = script_commands = strdup(optarg);
script_mode = 1;
break;
default:
break;
}
}
if (!script_mode)
printf("DIOT diagnostic tool\n\n");
ret = open_gpios();
if (!script_commands)
......
......@@ -667,16 +667,16 @@ static void print_short_temp_hline(int n)
}
static void print_short_vcp_single_sensor(char *short_name, char *sensor_name,
struct hw_sensor *hw_sensors_list)
struct hw_sensor *hw_sensors_list, int csv)
{
struct hw_sensor *sensor_p;
sensor_p = find_hw_sensor(sensor_name, hw_sensors_list);
if (sensor_p) {
if (isnan(sensor_p->read_val))
if (!csv && isnan(sensor_p->read_val))
printf("%6s |%7s |", "N/A", "N/A");
else {
else if (!csv) {
if (isnan(sensor_p->read_val))
printf("%6s |%7s |", "N/A", "N/A");
else {
......@@ -687,6 +687,9 @@ static void print_short_vcp_single_sensor(char *short_name, char *sensor_name,
sensor_p->alarm ? COLOR_OFF : "");
}
}
else {
printf("%6.2f,", sensor_p->read_val);
}
} else {
diot_error_add("BUG: sensor %s not on the sensors list! %s\n",
short_name, sensor_name);
......@@ -695,42 +698,58 @@ static void print_short_vcp_single_sensor(char *short_name, char *sensor_name,
}
static void print_short_vcp(struct short_vcp *vcp_list,
struct hw_sensor *hw_sensors_list)
struct hw_sensor *hw_sensors_list, int csv)
{
struct short_vcp *vcp_to_print = vcp_list;
for (; vcp_to_print->short_name; vcp_to_print++) {
printf("%14s |", vcp_to_print->short_name);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->voltage_sensor_name,
hw_sensors_list);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->current_sensor_name,
hw_sensors_list);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->power_sensor_name,
hw_sensors_list);
printf("\n");
if (!csv) {
for (; vcp_to_print->short_name; vcp_to_print++) {
printf("%14s |", vcp_to_print->short_name);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->voltage_sensor_name,
hw_sensors_list, csv);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->current_sensor_name,
hw_sensors_list, csv);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->power_sensor_name,
hw_sensors_list, csv);
printf("\n");
}
} else {
/* CSV format, reduced info */
for (; vcp_to_print->short_name; vcp_to_print++) {
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->voltage_sensor_name,
hw_sensors_list, csv);
print_short_vcp_single_sensor(vcp_to_print->short_name,
vcp_to_print->current_sensor_name,
hw_sensors_list, csv);
}
}
}
static void print_short_temp_print_values(struct sensor_short *sensors_print_list,
struct hw_sensor *hw_sensors_list)
struct hw_sensor *hw_sensors_list, int csv)
{
struct sensor_short *sensor_to_read = sensors_print_list;
struct hw_sensor *sensor_p;
char sep = csv ? ',' : '|';
for (; sensor_to_read->short_name; sensor_to_read++) {
sensor_p = find_hw_sensor(sensor_to_read->sensor_name, hw_sensors_list);
if (sensor_p) {
if (isnan(sensor_p->read_val))
printf("%6s |", "N/A");
else
printf("%6s %c", "N/A", sep);
else if (!csv) {
printf("%s%6.1f%s |", sensor_p->alarm ? COLOR_RED : "",
sensor_p->read_val,
sensor_p->alarm ? COLOR_OFF : "");
} else {
printf("%6.1f,", sensor_p->read_val);
}
} else {
diot_error_add("BUG: sensor %s not on the sensors list!\n",
sensor_to_read->short_name);
......@@ -769,18 +788,22 @@ static double get_max_temp(struct sensor_short *sensors_print_list,
}
static void print_short_max_temp(struct sensor_short *sensors_print_list,
struct hw_sensor *hw_sensors_list)
struct hw_sensor *hw_sensors_list, int csv)
{
double max_val = NAN;
int alarm = 0;
char sep = csv ? ',' : '|';
max_val = get_max_temp(sensors_print_list, hw_sensors_list, &alarm);
if (isnan(max_val))
printf("%6s |", "N/A");
else
printf("%6s %c", "N/A", sep);
else if (!csv) {
printf("%s%6.1f%s |", alarm ? COLOR_RED : "", max_val,
alarm ? COLOR_OFF : "");
} else {
printf("%6.1f,", max_val);
}
}
......@@ -815,12 +838,12 @@ static void print_short_temp(void)
printf("\n");
/* Print sensors' values */
print_short_temp_print_values(temp_sensors_list, hw_sensors_temp_list);
print_short_max_temp(temp_sensors_irps1_list, hw_sensors_temp_list);
print_short_max_temp(temp_sensors_irps2_list, hw_sensors_temp_list);
print_short_max_temp(temp_sensors_psu1_list, hw_sensors_temp_list);
print_short_max_temp(temp_sensors_psu2_list, hw_sensors_temp_list);
print_short_max_temp(temp_sensors_monimod_list, hw_sensors_temp_list);
print_short_temp_print_values(temp_sensors_list, hw_sensors_temp_list, 0);
print_short_max_temp(temp_sensors_irps1_list, hw_sensors_temp_list, 0);
print_short_max_temp(temp_sensors_irps2_list, hw_sensors_temp_list, 0);
print_short_max_temp(temp_sensors_psu1_list, hw_sensors_temp_list, 0);
print_short_max_temp(temp_sensors_psu2_list, hw_sensors_temp_list, 0);
print_short_max_temp(temp_sensors_monimod_list, hw_sensors_temp_list, 0);
printf("\n");
/* Print line */
......@@ -831,6 +854,16 @@ static void print_short_temp(void)
printf("\n");
}
static void print_csv_temp(void)
{
print_short_temp_print_values(temp_sensors_list, hw_sensors_temp_list, 1);
print_short_max_temp(temp_sensors_irps1_list, hw_sensors_temp_list, 1);
print_short_max_temp(temp_sensors_irps2_list, hw_sensors_temp_list, 1);
print_short_max_temp(temp_sensors_psu1_list, hw_sensors_temp_list, 1);
print_short_max_temp(temp_sensors_psu2_list, hw_sensors_temp_list, 1);
print_short_max_temp(temp_sensors_monimod_list, hw_sensors_temp_list, 1);
}
static void print_irps_short(void)
{
printf("Voltage/Current/Power readouts:\n");
......@@ -838,18 +871,18 @@ static void print_irps_short(void)
printf("IRPS1 | Voltage (V) | Current (A) | Power (W) |\n");
printf(" | read | status | read | status | read | status |\n");
printf("---------------+-------+--------+-------+--------+-------+--------+\n");
print_short_vcp(irps1_entries, hw_sensors_vcp_list);
print_short_vcp(irps1_entries, hw_sensors_vcp_list, 0);
printf("---------------+----------------+----------------+----------------+\n");
printf("IRPS2 | Voltage (V) | Current (A) | Power (W) |\n");
printf(" | read | status | read | status | read | status |\n");
printf("---------------+-------+--------+-------+--------+-------+--------+\n");
print_short_vcp(irps2_entries, hw_sensors_vcp_list);
print_short_vcp(irps2_entries, hw_sensors_vcp_list, 0);
printf("---------------+----------------+----------------+----------------+\n");
printf("PSU | Voltage (V) | Current (A) | Power (W) |\n");
printf(" | read | status | read | status | read | status |\n");
printf("---------------+-------+--------+-------+--------+-------+--------+\n");
print_short_vcp(psu1_entries, hw_sensors_vcp_list);
print_short_vcp(psu2_entries, hw_sensors_vcp_list);
print_short_vcp(psu1_entries, hw_sensors_vcp_list, 0);
print_short_vcp(psu2_entries, hw_sensors_vcp_list, 0);
printf("---------------+-------+--------+-------+--------+-------+--------+\n");
printf("\n");
}
......@@ -932,6 +965,20 @@ int cmd_sensors(char *params)
return 0;
}
int cmd_csv(char *params)
{
sensors_init(NULL);
read_all_sensors();
print_csv_temp();
print_short_vcp(irps1_entries, hw_sensors_vcp_list, 1);
print_short_vcp(irps2_entries, hw_sensors_vcp_list, 1);
sensors_cleanup();
printf("\n");
return 0;
}
int pts_sensors(void)
{
int errors_temp = 0;
......
......@@ -13,5 +13,6 @@ int cmd_sensors(char *params);
int cmd_sensors_expert(char *params);
int cmd_sensors_refresh(char *params);
int pts_sensors(void);
int cmd_csv(char *params);
#endif /* __DIOT_UTIL_SENSORS_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment