isotp[send|recv]: change command line option for padding bytes
Allow to specify the TX and RX padding content separately. Due to the optional values it is possible to provide either TX or RX values which enables and set the given values. -p 55:AA => TX padding 0x55, RX padding 0xAA -p 55 => TX padding 0x55 -p 55: => TX padding 0x55 -p :AA => RX padding 0xAA Additionally the comment for the -P <mode> option was updated to point out the checking mode of the padding in the received PDUs (rx padding). Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>pull/1/head
parent
523f3d8fc0
commit
a51be177d8
23
isotprecv.c
23
isotprecv.c
|
|
@ -64,8 +64,8 @@ void print_usage(char *prg)
|
|||
fprintf(stderr, "Options: -s <can_id> (source can_id. Use 8 digits for extended IDs)\n");
|
||||
fprintf(stderr, " -d <can_id> (destination can_id. Use 8 digits for extended IDs)\n");
|
||||
fprintf(stderr, " -x <addr>[:<rxaddr>] (extended addressing / opt. separate rxaddr)\n");
|
||||
fprintf(stderr, " -p <byte> (set and enable padding byte)\n");
|
||||
fprintf(stderr, " -P <mode> (check padding in SF/CF. (l)ength (c)ontent (a)ll)\n");
|
||||
fprintf(stderr, " -p [tx]:[rx] (set and enable tx/rx padding bytes)\n");
|
||||
fprintf(stderr, " -P <mode> (check rx padding for (l)ength (c)ontent (a)ll)\n");
|
||||
fprintf(stderr, " -b <bs> (blocksize. 0 = off)\n");
|
||||
fprintf(stderr, " -m <val> (STmin in ms/ns. See spec.)\n");
|
||||
fprintf(stderr, " -f <time ns> (force rx stmin value in nanosecs)\n");
|
||||
|
|
@ -128,9 +128,24 @@ int main(int argc, char **argv)
|
|||
}
|
||||
|
||||
case 'p':
|
||||
opts.flags |= CAN_ISOTP_RX_PADDING;
|
||||
opts.rxpad_content = strtoul(optarg, (char **)NULL, 16) & 0xFF;
|
||||
{
|
||||
int elements = sscanf(optarg, "%hhx:%hhx",
|
||||
&opts.txpad_content,
|
||||
&opts.rxpad_content);
|
||||
|
||||
if (elements == 1)
|
||||
opts.flags |= CAN_ISOTP_TX_PADDING;
|
||||
else if (elements == 2)
|
||||
opts.flags |= (CAN_ISOTP_TX_PADDING | CAN_ISOTP_RX_PADDING);
|
||||
else if (sscanf(optarg, ":%hhx", &opts.rxpad_content) == 1)
|
||||
opts.flags |= CAN_ISOTP_RX_PADDING;
|
||||
else {
|
||||
printf("incorrect padding values '%s'.\n", optarg);
|
||||
print_usage(basename(argv[0]));
|
||||
exit(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'P':
|
||||
if (optarg[0] == 'l')
|
||||
|
|
|
|||
23
isotpsend.c
23
isotpsend.c
|
|
@ -64,8 +64,8 @@ void print_usage(char *prg)
|
|||
fprintf(stderr, "Options: -s <can_id> (source can_id. Use 8 digits for extended IDs)\n");
|
||||
fprintf(stderr, " -d <can_id> (destination can_id. Use 8 digits for extended IDs)\n");
|
||||
fprintf(stderr, " -x <addr>[:<rxaddr>] (extended addressing / opt. separate rxaddr)\n");
|
||||
fprintf(stderr, " -p <byte> (set and enable padding byte)\n");
|
||||
fprintf(stderr, " -P <mode> (check padding in FC. (l)ength (c)ontent (a)ll)\n");
|
||||
fprintf(stderr, " -p [tx]:[rx] (set and enable tx/rx padding bytes)\n");
|
||||
fprintf(stderr, " -P <mode> (check rx padding for (l)ength (c)ontent (a)ll)\n");
|
||||
fprintf(stderr, " -t <time ns> (frame transmit time (N_As) in nanosecs)\n");
|
||||
fprintf(stderr, " -f <time ns> (ignore FC and force local tx stmin value in nanosecs)\n");
|
||||
fprintf(stderr, " -D <len> (send a fixed PDU with len bytes - no STDIN data)\n");
|
||||
|
|
@ -125,9 +125,24 @@ int main(int argc, char **argv)
|
|||
}
|
||||
|
||||
case 'p':
|
||||
opts.flags |= CAN_ISOTP_TX_PADDING;
|
||||
opts.txpad_content = strtoul(optarg, (char **)NULL, 16) & 0xFF;
|
||||
{
|
||||
int elements = sscanf(optarg, "%hhx:%hhx",
|
||||
&opts.txpad_content,
|
||||
&opts.rxpad_content);
|
||||
|
||||
if (elements == 1)
|
||||
opts.flags |= CAN_ISOTP_TX_PADDING;
|
||||
else if (elements == 2)
|
||||
opts.flags |= (CAN_ISOTP_TX_PADDING | CAN_ISOTP_RX_PADDING);
|
||||
else if (sscanf(optarg, ":%hhx", &opts.rxpad_content) == 1)
|
||||
opts.flags |= CAN_ISOTP_RX_PADDING;
|
||||
else {
|
||||
printf("incorrect padding values '%s'.\n", optarg);
|
||||
print_usage(basename(argv[0]));
|
||||
exit(0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'P':
|
||||
if (optarg[0] == 'l')
|
||||
|
|
|
|||
Loading…
Reference in New Issue