From c59d21e737c560627fbaff57099fa1b215aa7aa7 Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Mon, 17 Sep 2007 13:27:12 +0000 Subject: git-svn-id: https://iocaste.extern.pengutronix.de/svn/canutils/trunks/canutils-1.2-trunk@69 5fd5a299-6ef2-0310-aa18-8b01d7c39d8c --- src/canconfig.c | 177 ++++++++++---------------------------------------------- 1 file changed, 30 insertions(+), 147 deletions(-) (limited to 'src/canconfig.c') diff --git a/src/canconfig.c b/src/canconfig.c index d481ce2..3ce0fb7 100644 --- a/src/canconfig.c +++ b/src/canconfig.c @@ -34,7 +34,8 @@ #include #include -#include +#include +#include #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -43,53 +44,7 @@ int s; struct ifreq ifr; -struct speed_map { - unsigned short speed; - unsigned short value; -}; - -static const struct speed_map speeds[] = { - {CAN_BAUD_10K, 10}, - {CAN_BAUD_20K, 20}, - {CAN_BAUD_50K, 50}, - {CAN_BAUD_100K, 100}, - {CAN_BAUD_125K, 125}, - {CAN_BAUD_250K, 250}, - {CAN_BAUD_500K, 500}, - {CAN_BAUD_800K, 800}, - {CAN_BAUD_1M, 1000}, -}; - -static const int NUM_SPEEDS = (sizeof(speeds) / sizeof(struct speed_map)); - -unsigned long can_baud_to_value(speed_t speed) -{ - int i = 0; - - do { - if (speed == speeds[i].speed) { - return speeds[i].value; - } - } while (++i < NUM_SPEEDS); - - return 0; -} - -speed_t can_value_to_baud(unsigned long value) -{ - int i = 0; - - do { - if (value == can_baud_to_value(speeds[i].speed)) { - return speeds[i].speed; - } - } while (++i < NUM_SPEEDS); - - return (speed_t)-1; -} - - -void help(void) +static void help(void) { fprintf(stderr, "usage:\n\t" "canconfig baudrate { BR | BTR }\n\t\t" @@ -106,104 +61,32 @@ void help(void) } -void do_show_baudrate(int argc, char* argv[]) +static void do_show_baudrate(int argc, char* argv[]) { - struct can_baudrate *br = (struct can_baudrate *)&ifr.ifr_ifru; - int i, value; + uint32_t *baudrate = (uint32_t *)&ifr.ifr_ifru; + int i; i = ioctl(s, SIOCGCANBAUDRATE, &ifr); + if (i < 0) { perror("ioctl"); exit(EXIT_FAILURE); } - switch (br->baudrate) { - case CAN_BAUD_BTR_SJA1000: - fprintf(stdout, "%s: sja1000 brp=%d sjw=%d tseg1=%d tseg2=%d sam=%d\n", - ifr.ifr_name, - br->btr.sja1000.brp, - br->btr.sja1000.sjw, - br->btr.sja1000.tseg1, - br->btr.sja1000.tseg2, - br->btr.sja1000.sam); - break; - case CAN_BAUD_BTR_C_CAN: - fprintf(stdout, "%s: C-Can brp=%d sjw=%d tseg1=%d tseg2=%d\n", - ifr.ifr_name, - br->btr.c_can.brp, - br->btr.c_can.sjw, - br->btr.c_can.tseg1, - br->btr.c_can.tseg2); - break; - case CAN_BAUD_BTR_NIOS: - fprintf(stdout, "%s: nios prescale=%d timea=%d timeb=%d\n", - ifr.ifr_name, - br->btr.nios.prescale, - br->btr.nios.timea, - br->btr.nios.timeb); - break; - default: - value = can_baud_to_value(br->baudrate); - if (value != 0) - fprintf(stdout, - "%s: baudrate %d\n", ifr.ifr_name, value); - else - fprintf(stdout, "baudrate not recognized. update canconfig?\n"); - break; - } + fprintf(stdout, + "%s: baudrate %d\n", ifr.ifr_name, *baudrate); } -void do_set_baudrate(int argc, char* argv[]) +static void do_set_baudrate(int argc, char* argv[]) { - struct can_baudrate *br = (struct can_baudrate *)&ifr.ifr_ifru; - speed_t baudrate; - int value, i; - - if (!strcmp(argv[3], "btr_sja1000")) { - struct can_baudrate_sja1000 *br_sja1000 = &br->btr.sja1000; - - if (argc < 9) - help(); - - br->baudrate = CAN_BAUD_BTR_SJA1000; - br_sja1000->brp = strtol(argv[4], NULL, 0); - br_sja1000->sjw = strtol(argv[5], NULL, 0); - br_sja1000->tseg1 = strtol(argv[6], NULL, 0); - br_sja1000->tseg2 = strtol(argv[7], NULL, 0); - br_sja1000->sam = strtol(argv[8], NULL, 0); - - } else if (!strcmp(argv[3], "btr_c_can")) { - struct can_baudrate_c_can *br_c_can = &br->btr.c_can; - - if (argc < 8) - help(); - - br->baudrate = CAN_BAUD_BTR_C_CAN; - br_c_can->brp = strtol(argv[4], NULL, 0); - br_c_can->sjw = strtol(argv[5], NULL, 0); - br_c_can->tseg1 = strtol(argv[6], NULL, 0); - br_c_can->tseg2 = strtol(argv[7], NULL, 0); - - } else if (!strcmp(argv[3], "btr_nios")) { - struct can_baudrate_nios *br_nios = &br->btr.nios; - - if (argc < 7) - help(); - - br->baudrate = CAN_BAUD_BTR_NIOS; - br_nios->prescale = strtol(argv[4], NULL, 0); - br_nios->timea = strtol(argv[5], NULL, 0); - br_nios->timeb = strtol(argv[6], NULL, 0); + uint32_t *baudrate = (uint32_t *)&ifr.ifr_ifru; + int i; - } else { - value = atoi(argv[3]); - baudrate = can_value_to_baud(value); - if ( baudrate == -1) { - fprintf(stderr, "invalid baudrate\n"); - exit(EXIT_FAILURE); - } - br->baudrate = baudrate; + *baudrate = (uint32_t)strtoul(argv[3], NULL, 0); + if (*baudrate == 0) { + fprintf(stderr, "invalid baudrate\n"); + exit(EXIT_FAILURE); } i = ioctl(s, SIOCSCANBAUDRATE, &ifr); @@ -214,7 +97,7 @@ void do_set_baudrate(int argc, char* argv[]) } -void cmd_baudrate(int argc, char *argv[]) +static void cmd_baudrate(int argc, char *argv[]) { if (argc >= 4) { do_set_baudrate(argc, argv); @@ -224,17 +107,16 @@ void cmd_baudrate(int argc, char *argv[]) exit(EXIT_SUCCESS); } - -void cmd_mode(int argc, char *argv[]) +static void cmd_mode(int argc, char *argv[]) { - union can_settings *settings = (union can_settings *)&ifr.ifr_ifru; + can_mode_t *mode = (can_mode_t *)&ifr.ifr_ifru; int i; if (argc < 4 ) help(); if (!strcmp(argv[3], "start")) { - settings->mode = CAN_MODE_START; + *mode = CAN_MODE_START; } else { help(); } @@ -249,7 +131,8 @@ void cmd_mode(int argc, char *argv[]) } -void do_show_state(int argc, char *argv[]) +#if 0 +static void do_show_state(int argc, char *argv[]) { union can_settings *settings = (union can_settings *)&ifr.ifr_ifru; enum CAN_STATE state; @@ -283,29 +166,29 @@ void do_show_state(int argc, char *argv[]) } -void cmd_state(int argc, char *argv[]) +static void cmd_state(int argc, char *argv[]) { do_show_state(argc, argv); exit(EXIT_SUCCESS); } +#endif -void cmd_show_interface(int argc, char *argv[]) +static void cmd_show_interface(int argc, char *argv[]) { do_show_baudrate(argc, argv); - do_show_state(argc, argv); +/* do_show_state(argc, argv); */ exit(EXIT_SUCCESS); } - int main(int argc, char *argv[]) { if ((argc < 2) || !strcmp(argv[1], "--help")) help(); - if ((s = socket(AF_CAN, SOCK_RAW, 0)) < 0) { + if ((s = socket(AF_CAN, SOCK_RAW, CAN_RAW)) < 0) { perror("socket"); exit(EXIT_FAILURE); } @@ -319,10 +202,10 @@ int main(int argc, char *argv[]) cmd_baudrate(argc, argv); if (!strcmp(argv[2], "mode")) cmd_mode(argc, argv); - if (!strcmp(argv[2], "state")) - cmd_state(argc, argv); +/* if (!strcmp(argv[2], "state")) */ +/* cmd_state(argc, argv); */ help(); - return 0; + exit(EXIT_SUCCESS); } -- cgit v1.2.3