int canfilt_fl;
+int query_fl;
+
int can_wait_sec = 5;
char *can_dev_name = "/dev/can0";
printf(" -f, --flags <num> CAN filter flags\n");
printf(" -w, --wait <num> number of seconds to wait in select call\n");
printf(" -p, --prefix <str> string prefix for output\n");
+ printf(" -q, --query query driver features\n");
printf(" -V, --version show version\n");
printf(" -h, --help this usage screen\n");
}
{ "flags", 1, 0, 'f' },
{ "wait", 1, 0, 'w' },
{ "prefix",1, 0, 'p' },
+ { "query" ,0 ,0, 'q' },
{ "version",0,0, 'V' },
{ "help", 0, 0, 'h' },
{ 0, 0, 0, 0}
int n,ret;
unsigned long i=0;
+ #ifdef CAN_MSG_VERSION_2
+ struct canmsg_t readmsg={0,0,5,{0,0},0,{0,}};
+ #else /* CAN_MSG_VERSION_2 */
struct canmsg_t readmsg={0,0,5,0,0,{0,}};
+ #endif /* CAN_MSG_VERSION_2 */
struct sigaction act;
- while ((opt = getopt_long(argc, argv, "d:m:i:f:w:p:Vh",
+ while ((opt = getopt_long(argc, argv, "d:m:i:f:w:p:qVh",
&long_opts[0], NULL)) != EOF) switch (opt) {
case 'd':
can_dev_name=optarg;
case 'p':
prt_prefix_in = optarg;
break;
+ case 'q':
+ query_fl=1;
+ break;
case 'V':
fputs("LinCAN utilities v0.2\n", stdout);
exit(0);
exit(1);
}
+ if (query_fl) {
+ n=ioctl(fd, CAN_DRV_QUERY, CAN_DRV_QRY_BRANCH);
+ printf("CAN driver branch: %c%c%c%c\n",(n>>24)&0xff,(n>>16)&0xff,(n>>8)&0xff,n&0xff);
+ n=ioctl(fd, CAN_DRV_QUERY, CAN_DRV_QRY_VERSION);
+ printf("CAN driver version: %d.%d.%d\n",(n>>16)&0xff,(n>>8)&0xff,n&0xff);
+ n=ioctl(fd, CAN_DRV_QUERY, CAN_DRV_QRY_MSGFORMAT);
+ printf("CAN message format: %08x\n",n);
+ close(fd);
+ return 0;
+ }
+
if (canfilt_fl) {
ret = ioctl(fd, CANQUE_FILTER, &canfilt);
if(ret<0) {
while (1) {
readmsg.flags=0;
readmsg.cob=0;
- readmsg.timestamp=0;
#if 1
ret=can_fd_wait(fd, can_wait_sec);
printf("%scan_fd_wait returned %d\n", prt_prefix, ret);