| /* |
| * Copyright 2015 Google Inc. |
| * All rights reserved. |
| * diagutil -- Linux-based Hardware Diagnostic Utilities |
| */ |
| |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <string.h> |
| |
| #define DIAGS_VERSION "2.0" |
| |
| /* External Functions */ |
| int ioread(int argc, char **argv); |
| int iowrite(int argc, char **argv); |
| int iowrite_only(int argc, char *argv[]); |
| int gpio_out(int argc, char *argv[]); |
| int gpio_disable_out(int argc, char *argv[]); |
| int gpio_stat(int argc, char *argv[]); |
| int gpio_dump(int argc, char *argv[]); |
| int check_reset_button(int argc, char *argv[]); |
| int cpu_reset(int argc, char *argv[]); |
| int set_red_led(int argc, char *argv[]); |
| int set_blue_led(int argc, char *argv[]); |
| int set_led_dim(int argc, char *argv[]); |
| int set_poe(int argc, char *argv[]); |
| int send_if_to_if(int argc, char *argv[]); |
| int send_if(int argc, char *argv[]); |
| int send_if_to_mac(int argc, char *argv[]); |
| int test_both_ports(int argc, char *argv[]); |
| int loopback_test(int argc, char *argv[]); |
| int phy_read(int argc, char *argv[]); |
| int phy_write(int argc, char *argv[]); |
| |
| /* Define the command structure */ |
| typedef struct { |
| const char *name; |
| int (*funcp)(int, char **); |
| } tCOMMAND; |
| |
| void printVersion() { printf("%s\n", DIAGS_VERSION); } |
| |
| int version(int argc, char *argv[]) { |
| // This is to avoid unused params warning |
| if ((argc != 1) || (argv[0] == NULL)) { |
| printf("Invalid command parameter\n"); |
| } |
| printVersion(); |
| return 0; |
| } |
| |
| /* Table of supported commands */ |
| tCOMMAND command_list[] = { |
| {"ioread", ioread}, |
| {"iowrite", iowrite}, |
| {"iowrite_only", iowrite_only}, |
| {"", NULL}, |
| {"gpio_out", gpio_out}, |
| {"gpio_stat", gpio_stat}, |
| {"gpio_disable_out", gpio_disable_out}, |
| {"gpio_dump", gpio_dump}, |
| {"check_reset_button", check_reset_button}, |
| {"cpu_reset", cpu_reset}, |
| {"set_red_led", set_red_led}, |
| {"set_blue_led", set_blue_led}, |
| {"set_led_dim", set_led_dim}, |
| {"set_poe", set_poe}, |
| {"", NULL}, |
| {"phy_read", phy_read}, |
| {"phy_write", phy_write}, |
| {"send_if_to_if", send_if_to_if}, |
| {"send_if", send_if}, |
| {"send_if_to_mac", send_if_to_mac}, |
| {"test_both_ports", test_both_ports}, |
| {"loopback_test", loopback_test}, |
| {"", NULL}, |
| {"version", version}, |
| {"", NULL}, |
| {NULL, NULL}, |
| }; |
| |
| static void usage(void) { |
| int i; |
| |
| printf("Supported commands:\n"); |
| |
| for (i = 0; command_list[i].name != NULL; ++i) { |
| printf("\t%s\n", command_list[i].name); |
| } |
| |
| return; |
| } |
| |
| int main(int argc, char *argv[]) { |
| int i; |
| |
| if (argc > 1) { |
| /* Search the command list for a match */ |
| for (i = 0; command_list[i].name != NULL; ++i) { |
| if (strcmp(argv[1], command_list[i].name) == 0) { |
| return command_list[i].funcp(argc - 1, &argv[1]); |
| } |
| } |
| } |
| |
| /* no command or bad command */ |
| usage(); |
| |
| return 0; |
| } |