diff options
Diffstat (limited to 'src/cansend.c')
-rw-r--r-- | src/cansend.c | 178 |
1 files changed, 90 insertions, 88 deletions
diff --git a/src/cansend.c b/src/cansend.c index 07a1019..fb534e9 100644 --- a/src/cansend.c +++ b/src/cansend.c @@ -23,26 +23,26 @@ extern int optind, opterr, optopt; static void print_usage(char *prg) { - fprintf(stderr, "Usage: %s <can-interface> [Options] <can-msg>\n" - "<can-msg> can consist of up to 8 bytes given as a space separated list\n" - "Options:\n" - " -i, --identifier=ID CAN Identifier (default = 1)\n" - " -r --rtr send remote request\n" - " -e --extended send extended frame\n" - " -f, --family=FAMILY Protocol family (default PF_CAN = %d)\n" - " -t, --type=TYPE Socket type, see man 2 socket (default SOCK_RAW = %d)\n" - " -p, --protocol=PROTO CAN protocol (default CAN_RAW = %d)\n" - " -l send message infinite times\n" - " --loop=COUNT send message COUNT times\n" - " -v, --verbose be verbose\n" - " -h, --help this help\n" - " --version print version information and exit\n", - prg, PF_CAN, SOCK_RAW, CAN_RAW); -} - -enum -{ - VERSION_OPTION = CHAR_MAX + 1, + fprintf(stderr, + "Usage: %s <can-interface> [Options] <can-msg>\n" + "<can-msg> can consist of up to 8 bytes given as a space separated list\n" + "Options:\n" + " -i, --identifier=ID CAN Identifier (default = 1)\n" + " -r --rtr send remote request\n" + " -e --extended send extended frame\n" + " -f, --family=FAMILY Protocol family (default PF_CAN = %d)\n" + " -t, --type=TYPE Socket type, see man 2 socket (default SOCK_RAW = %d)\n" + " -p, --protocol=PROTO CAN protocol (default CAN_RAW = %d)\n" + " -l COUNT send message COUNT times, infinite if omitted\n" + " --loop=COUNT \n" + " -v, --verbose be verbose\n" + " -h, --help this help\n" + " --version print version information and exit\n", + prg, PF_CAN, SOCK_RAW, CAN_RAW); +} + +enum { + VERSION_OPTION = CHAR_MAX + 1, }; int main(int argc, char **argv) @@ -55,93 +55,95 @@ int main(int argc, char **argv) int loopcount = 1, infinite = 0; struct ifreq ifr; - struct option long_options[] = { - { "help", no_argument, 0, 'h' }, - { "identifier", required_argument, 0, 'i'}, - { "rtr", no_argument, 0, 'r'}, - { "extended", no_argument, 0, 'e'}, - { "family", required_argument, 0, 'f' }, - { "protocol", required_argument, 0, 'p' }, - { "type", required_argument, 0, 't' }, - { "version", no_argument, 0, VERSION_OPTION}, - { "verbose", no_argument, 0, 'v'}, - { "loop", required_argument, 0, 'l'}, - { 0, 0, 0, 0}, + struct option long_options[] = { + { "help", no_argument, 0, 'h' }, + { "identifier", required_argument, 0, 'i' }, + { "rtr", no_argument, 0, 'r' }, + { "extended", no_argument, 0, 'e' }, + { "family", required_argument, 0, 'f' }, + { "protocol", required_argument, 0, 'p' }, + { "type", required_argument, 0, 't' }, + { "version", no_argument, 0, VERSION_OPTION}, + { "verbose", no_argument, 0, 'v'}, + { "loop", optional_argument, 0, 'l'}, + { 0, 0, 0, 0 }, }; frame.can_id = 1; - while ((opt = getopt_long(argc, argv, "hf:t:p:vi:lre", long_options, NULL)) != -1) { + while ((opt = getopt_long(argc, argv, "hf:t:p:vi:l::re", long_options, NULL)) != -1) { switch (opt) { - case 'h': - print_usage(basename(argv[0])); - exit(0); - - case 'f': - family = strtoul(optarg, NULL, 0); - break; - - case 't': - type = strtoul(optarg, NULL, 0); - break; - - case 'p': - proto = strtoul(optarg, NULL, 0); - break; - - case 'v': - verbose = 1; - break; - - case 'l': - if(optarg) - loopcount = strtoul(optarg, NULL, 0); - else - infinite = 1; - break; - case 'i': - frame.can_id = strtoul(optarg, NULL, 0); - break; - - case 'r': - rtr = 1; - break; - - case 'e': - extended = 1; - break; - - case VERSION_OPTION: - printf("cansend %s\n",VERSION); - exit(0); - - default: - fprintf(stderr, "Unknown option %c\n", opt); - break; + case 'h': + print_usage(basename(argv[0])); + exit(0); + + case 'f': + family = strtoul(optarg, NULL, 0); + break; + + case 't': + type = strtoul(optarg, NULL, 0); + break; + + case 'p': + proto = strtoul(optarg, NULL, 0); + break; + + case 'v': + verbose = 1; + break; + + case 'l': + if (optarg) + loopcount = strtoul(optarg, NULL, 0); + else + infinite = 1; + break; + case 'i': + frame.can_id = strtoul(optarg, NULL, 0); + break; + + case 'r': + rtr = 1; + break; + + case 'e': + extended = 1; + break; + + case VERSION_OPTION: + printf("cansend %s\n", VERSION); + exit(0); + + default: + fprintf(stderr, "Unknown option %c\n", opt); + break; } } if (optind == argc) { print_usage(basename(argv[0])); exit(0); - } - + } + if (argv[optind] == NULL) { fprintf(stderr, "No Interface supplied\n"); exit(-1); } - if(verbose) + if (verbose) printf("interface = %s, family = %d, type = %d, proto = %d\n", argv[optind], family, type, proto); - if ((s = socket(family, type, proto)) < 0) { + + s = socket(family, type, proto); + if (s < 0) { perror("socket"); return 1; } addr.can_family = family; strcpy(ifr.ifr_name, argv[optind]); - if( ioctl(s, SIOCGIFINDEX, &ifr) ) { + if (ioctl(s, SIOCGIFINDEX, &ifr)) { perror("ioctl"); return 1; } @@ -168,16 +170,16 @@ int main(int argc, char **argv) frame.can_id |= CAN_EFF_FLAG; if (verbose) { - printf("id: %d ",frame.can_id); - printf("dlc: %d\n",frame.can_dlc); - for(i = 0; i < frame.can_dlc; i++) - printf("0x%02x ",frame.data[i]); + printf("id: %d ", frame.can_id); + printf("dlc: %d\n", frame.can_dlc); + for (i = 0; i < frame.can_dlc; i++) + printf("0x%02x ", frame.data[i]); printf("\n"); } while (infinite || loopcount--) { ret = write(s, &frame, sizeof(frame)); - if( ret == -1 ) { + if (ret == -1) { perror("write"); break; } |