- r= ioctl(0, HIDIOCGRAWPHYS(PATH_MAX), buf);
- if (r<0) perror("HIDIOCGRAWPHYS");
- else printf("%d %.*s\n", r, r,buf);
+ {
+ struct {
+ struct hidraw_report_descriptor d;
+ unsigned char buf[descsz];
+ } d;
+ d.d.size = descsz;
+ r= ioctl(0, HIDIOCGRDESC, &d);
+ if (r) ERR("HIDIOCGRDESC");
+
+ dumphex(stdout, d.d.value, d.d.size);
+ }
+ putchar('\n');
+ break;
+
+ case 'i':;
+ struct hidraw_devinfo di;
+ r= ioctl(0, HIDIOCGRAWINFO, &di);
+ if (r) ERR("HIDIOCGRAWINFO");
+ printf("%08"PRIx32" %04"PRIx16" %04"PRIx16"\n",
+ di.bustype, di.vendor, di.product);
+ break;
+
+ case 'n':;
+ unsigned char buf[PATH_MAX];
+ r= ioctl(0, HIDIOCGRAWNAME(PATH_MAX), buf);
+ if (r<0) ERR("HIDIOCGRAWNAME");
+ printf("%d %.*s\n", r, r,buf);
+ break;
+
+ case 'p':
+ r= ioctl(0, HIDIOCGRAWPHYS(PATH_MAX), buf);
+ if (r<0) ERR("HIDIOCGRAWPHYS");
+ printf("%d %.*s\n", r, r,buf);
+ break;
+
+ default:
+ badusage("unknown option");
+ }
+
+ next_opt:;
+ if (ferror(stdout) || fflush(stdout))
+ diee("write/flush stdout");
+ }