X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/4cf24de229090b1ab6279570a564d224e13dd706..2827b727d2910a3b48f9de7d67b3a67f59e256c7:/lincan/utils/sendburst.c diff --git a/lincan/utils/sendburst.c b/lincan/utils/sendburst.c index 084a4b2..2890813 100644 --- a/lincan/utils/sendburst.c +++ b/lincan/utils/sendburst.c @@ -1,43 +1,133 @@ #include +#include #include #include +#include #include #include - #include "../include/can.h" -int main(void) - { +int canmsg_flags = 0; +unsigned long canmsg_id = 5; +int block = 10; +int count = 0; + +int can_wait_sec = 1; +int o_sync_fl = 0; + +char *can_dev_name = "/dev/can0"; + +#define PRT_PREFIX_SIZE 40 +char prt_prefix[PRT_PREFIX_SIZE]; + +char *prt_prefix_in = "CAN %s : "; + + +static void +usage(void) +{ + printf("usage: sendburst\n"); + printf(" -d, --device name of CAN device [/dev/can0]\n"); + printf(" -i, --id ID of generated messages\n"); + printf(" -f, --flags CAN filter flags\n"); + printf(" -s, --sync open in synchronous mode\n"); + printf(" -w, --wait number of seconds to wait between messages\n"); + printf(" -b, --block number of messages in block\n"); + printf(" -c, --count number of sent blocks of messages\n"); + printf(" -p, --prefix string prefix for output\n"); + printf(" -V, --version show version\n"); + printf(" -h, --help this usage screen\n"); +} + +int main(int argc, char *argv[]) +{ + static struct option long_opts[] = { + { "uldev", 1, 0, 'd' }, + { "id", 1, 0, 'i' }, + { "flags", 1, 0, 'f' }, + { "sync", 0, 0, 's' }, + { "wait", 1, 0, 'w' }, + { "block", 1, 0, 'b' }, + { "count", 1, 0, 'c' }, + { "prefix",1, 0, 'p' }, + { "version",0,0, 'V' }, + { "help", 0, 0, 'h' }, + { 0, 0, 0, 0} + }; + int opt; + + #ifdef CAN_MSG_VERSION_2 + struct canmsg_t sendmsg={0,0,5,{0,0},8,{1,2,3,4,5,6,7,8}}; + #else /* CAN_MSG_VERSION_2 */ struct canmsg_t sendmsg={0,0,5,0,8,{1,2,3,4,5,6,7,8}}; + #endif /* CAN_MSG_VERSION_2 */ int fd, ret,i,j; - if ((fd=open("/dev/can0",O_RDWR)) < 0 ) - { + while ((opt = getopt_long(argc, argv, "d:i:f:sw:b:c:p:Vh", + &long_opts[0], NULL)) != EOF) switch (opt) { + case 'd': + can_dev_name=optarg; + break; + case 'i': + canmsg_id = strtol(optarg,NULL,0); + break; + case 'f': + canmsg_flags = strtol(optarg,NULL,0); + break; + case 's': + o_sync_fl = 1; + break; + case 'w': + can_wait_sec = strtol(optarg,NULL,0); + break; + case 'b': + block = strtol(optarg,NULL,0); + break; + case 'c': + count = strtol(optarg,NULL,0); + break; + case 'p': + prt_prefix_in = optarg; + break; + case 'V': + fputs("LinCAN utilities v0.2\n", stdout); + exit(0); + case 'h': + default: + usage(); + exit(opt == 'h' ? 0 : 1); + } + + if ((fd=open(can_dev_name, O_RDWR | (o_sync_fl? O_SYNC:0))) < 0) { perror("open"); - printf("Error opening /dev/can0\n"); - exit(1); - } + printf("Error opening %s\n", can_dev_name); + exit(1); + } + + snprintf(prt_prefix, PRT_PREFIX_SIZE, prt_prefix_in, can_dev_name); + j=0; - while (1) - { - for(i=0;i<10;i++) - { + while (1) { + for(i=0;i