commit
5ba9daf7ed
60
cansend.c
60
cansend.c
|
|
@ -56,29 +56,35 @@
|
||||||
|
|
||||||
#include "lib.h"
|
#include "lib.h"
|
||||||
|
|
||||||
void print_usage(char *prg)
|
static void print_usage(char *prg)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s - send CAN-frames via CAN_RAW sockets.\n", prg);
|
fprintf(stderr,
|
||||||
fprintf(stderr, "\nUsage: %s <device> <can_frame>.\n", prg);
|
"%s - send CAN-frames via CAN_RAW sockets.\n"
|
||||||
fprintf(stderr, "\n<can_frame>:\n");
|
"\n"
|
||||||
fprintf(stderr, " <can_id>#{data} for Classical CAN 2.0 data frames\n");
|
"Usage: %s <device> <can_frame>.\n"
|
||||||
fprintf(stderr, " <can_id>#R{len} for Classical CAN 2.0 data frames\n");
|
"\n"
|
||||||
fprintf(stderr, " <can_id>#{data}_{dlc} for Classical CAN 2.0 data frames\n");
|
"<can_frame>:\n"
|
||||||
fprintf(stderr, " <can_id>#R{len}_{dlc} for Classical CAN 2.0 data frames\n");
|
" <can_id>#{data} for Classical CAN 2.0 data frames\n"
|
||||||
fprintf(stderr, " <can_id>##<flags>{data} for CAN FD frames\n\n");
|
" <can_id>#R{len} for Classical CAN 2.0 data frames\n"
|
||||||
fprintf(stderr, "<can_id>:\n"
|
" <can_id>#{data}_{dlc} for Classical CAN 2.0 data frames\n"
|
||||||
" 3 (SFF) or 8 (EFF) hex chars\n");
|
" <can_id>#R{len}_{dlc} for Classical CAN 2.0 data frames\n"
|
||||||
fprintf(stderr, "{data}:\n"
|
" <can_id>##<flags>{data} for CAN FD frames\n\n"
|
||||||
" 0..8 (0..64 CAN FD) ASCII hex-values (optionally separated by '.')\n");
|
"<can_id>:\n"
|
||||||
fprintf(stderr, "{len}:\n"
|
" 3 (SFF) or 8 (EFF) hex chars\n"
|
||||||
" an optional 0..8 value as RTR frames can contain a valid dlc field\n");
|
"{data}:\n"
|
||||||
fprintf(stderr, "_{dlc}:\n"
|
" 0..8 (0..64 CAN FD) ASCII hex-values (optionally separated by '.')\n"
|
||||||
" an optional 9..F data length code value when payload length is 8\n");
|
"{len}:\n"
|
||||||
fprintf(stderr, "<flags>:\n"
|
" an optional 0..8 value as RTR frames can contain a valid dlc field\n"
|
||||||
" a single ASCII Hex value (0 .. F) which defines canfd_frame.flags\n\n");
|
"_{dlc}:\n"
|
||||||
fprintf(stderr, "Examples:\n");
|
" an optional 9..F data length code value when payload length is 8\n"
|
||||||
fprintf(stderr, " 5A1#11.2233.44556677.88 / 123#DEADBEEF / 5AA# / 123##1 / 213##311223344 /\n"
|
"<flags>:\n"
|
||||||
" 1F334455#1122334455667788_B / 123#R / 00000123#R3 / 333#R8_E\n\n");
|
" a single ASCII Hex value (0 .. F) which defines canfd_frame.flags\n"
|
||||||
|
"\n"
|
||||||
|
"Examples:\n"
|
||||||
|
" 5A1#11.2233.44556677.88 / 123#DEADBEEF / 5AA# / 123##1 / 213##311223344 /\n"
|
||||||
|
" 1F334455#1122334455667788_B / 123#R / 00000123#R3 / 333#R8_E\n"
|
||||||
|
"\n",
|
||||||
|
prg, prg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
|
@ -147,10 +153,12 @@ int main(int argc, char **argv)
|
||||||
frame.len = can_fd_dlc2len(can_fd_len2dlc(frame.len));
|
frame.len = can_fd_dlc2len(can_fd_len2dlc(frame.len));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* disable default receive filter on this RAW socket */
|
/*
|
||||||
/* This is obsolete as we do not read from the socket at all, but for */
|
* disable default receive filter on this RAW socket This is
|
||||||
/* this reason we can remove the receive list in the Kernel to save a */
|
* obsolete as we do not read from the socket at all, but for
|
||||||
/* little (really a very little!) CPU usage. */
|
* this reason we can remove the receive list in the Kernel to
|
||||||
|
* save a little (really a very little!) CPU usage.
|
||||||
|
*/
|
||||||
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
|
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
|
||||||
|
|
||||||
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue