From 523f3d8fc0bd2d59e50062d019b62f5c39d11d55 Mon Sep 17 00:00:00 2001 From: Oliver Hartkopp Date: Wed, 19 Nov 2014 20:44:41 +0100 Subject: [PATCH] isotp[send|recv]: change command line option for extended addressing Enable to pass the optional second extended address with the '-x' option and do not pollute the command line options with just another '-X' option. Signed-off-by: Oliver Hartkopp --- isotprecv.c | 32 +++++++++++++++++--------------- isotpsend.c | 32 +++++++++++++++++--------------- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/isotprecv.c b/isotprecv.c index f4b8610..2e0e81b 100644 --- a/isotprecv.c +++ b/isotprecv.c @@ -63,8 +63,7 @@ void print_usage(char *prg) fprintf(stderr, "\nUsage: %s [options] \n", prg); fprintf(stderr, "Options: -s (source can_id. Use 8 digits for extended IDs)\n"); fprintf(stderr, " -d (destination can_id. Use 8 digits for extended IDs)\n"); - fprintf(stderr, " -x (extended addressing mode.)\n"); - fprintf(stderr, " -X (extended addressing mode (rx addr).)\n"); + fprintf(stderr, " -x [:] (extended addressing / opt. separate rxaddr)\n"); fprintf(stderr, " -p (set and enable padding byte)\n"); fprintf(stderr, " -P (check padding in SF/CF. (l)ength (c)ontent (a)ll)\n"); fprintf(stderr, " -b (blocksize. 0 = off)\n"); @@ -96,7 +95,7 @@ int main(int argc, char **argv) addr.can_addr.tp.tx_id = addr.can_addr.tp.rx_id = NO_CAN_ID; - while ((opt = getopt(argc, argv, "s:d:x:X:p:P:b:m:w:f:lL:?")) != -1) { + while ((opt = getopt(argc, argv, "s:d:x:p:P:b:m:w:f:lL:?")) != -1) { switch (opt) { case 's': addr.can_addr.tp.tx_id = strtoul(optarg, (char **)NULL, 16); @@ -111,14 +110,22 @@ int main(int argc, char **argv) break; case 'x': - opts.flags |= CAN_ISOTP_EXTEND_ADDR; - opts.ext_address = strtoul(optarg, (char **)NULL, 16) & 0xFF; - break; - - case 'X': - opts.flags |= CAN_ISOTP_RX_EXT_ADDR; - opts.rx_ext_address = strtoul(optarg, (char **)NULL, 16) & 0xFF; + { + int elements = sscanf(optarg, "%hhx:%hhx", + &opts.ext_address, + &opts.rx_ext_address); + + if (elements == 1) + opts.flags |= CAN_ISOTP_EXTEND_ADDR; + else if (elements == 2) + opts.flags |= (CAN_ISOTP_EXTEND_ADDR | CAN_ISOTP_RX_EXT_ADDR); + else { + printf("incorrect extended addr values '%s'.\n", optarg); + print_usage(basename(argv[0])); + exit(0); + } break; + } case 'p': opts.flags |= CAN_ISOTP_RX_PADDING; @@ -191,11 +198,6 @@ int main(int argc, char **argv) exit(1); } - if ((opts.flags & CAN_ISOTP_RX_EXT_ADDR) && (!(opts.flags & CAN_ISOTP_EXTEND_ADDR))) { - print_usage(basename(argv[0])); - exit(1); - } - if ((s = socket(PF_CAN, SOCK_DGRAM, CAN_ISOTP)) < 0) { perror("socket"); exit(1); diff --git a/isotpsend.c b/isotpsend.c index 2585bec..eb8de69 100644 --- a/isotpsend.c +++ b/isotpsend.c @@ -63,8 +63,7 @@ void print_usage(char *prg) fprintf(stderr, "\nUsage: %s [options] \n", prg); fprintf(stderr, "Options: -s (source can_id. Use 8 digits for extended IDs)\n"); fprintf(stderr, " -d (destination can_id. Use 8 digits for extended IDs)\n"); - fprintf(stderr, " -x (extended addressing mode)\n"); - fprintf(stderr, " -X (extended addressing mode - rx addr)\n"); + fprintf(stderr, " -x [:] (extended addressing / opt. separate rxaddr)\n"); fprintf(stderr, " -p (set and enable padding byte)\n"); fprintf(stderr, " -P (check padding in FC. (l)ength (c)ontent (a)ll)\n"); fprintf(stderr, " -t