]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/utils/readburst.c
Structured comments updated.
[lincan.git] / lincan / utils / readburst.c
index ca6725702e91fee1c4ddd3c6de6a9c04aabf5759..c0e3ba1293ed2b026e0852ef323bf6e70571b6b1 100644 (file)
@@ -24,6 +24,8 @@ struct canfilt_t canfilt = {
 
 int canfilt_fl;
 
+int query_fl;
+
 int can_wait_sec = 5;
 
 char *can_dev_name = "/dev/can0";
@@ -67,6 +69,7 @@ usage(void)
   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");
 }
@@ -81,6 +84,7 @@ int main(int argc, char *argv[])
                { "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}
@@ -97,7 +101,7 @@ int main(int argc, char *argv[])
        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;
@@ -120,6 +124,9 @@ int main(int argc, char *argv[])
                case 'p':
                        prt_prefix_in = optarg;
                        break;
+               case 'q':
+                       query_fl=1;
+                       break;
                case 'V':
                        fputs("LinCAN utilities v0.2\n", stdout);
                        exit(0);
@@ -143,6 +150,17 @@ int main(int argc, char *argv[])
                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) {