int main() { int ret, file, cmd; char *msg = malloc(MSG_SIZE); file = open("/dev/pen0", 0); if (file < 0) { printf("error in open file\n"); exit(-1); } printf("Enter command:\n1. LED OFF\n2. LED ON\n3. Read USB Interrup\ninput: "); scanf("%d", &cmd); if (cmd == 1) { ret = usbdev_ioctl(file, 0, USB_LOW, msg); } else if (cmd == 2) { ret = usbdev_ioctl(file, 0, USB_HIGH, msg); } else if (cmd == 3) { ret = usbdev_ioctl(file, 0, USB_READ, msg); printf("Data read: \"%s\"\n", msg); } else printf("Wrong command\n"); if (!ret) printf("Successfull\n"); else printf("Error: ret %d\n", ret); }
static int do_test(struct testdev *dev) { int ret = 0; int fd, i; int status; if (dev->test > TEST_CASES) { fprintf(stderr, "unsupported test case %d\n", dev->test); return -1; } if ((fd = open(dev->name, O_RDWR)) < 0) { perror("can't open dev file r/w"); return -1; } restart: for (i = 0; i < TEST_CASES; i++) { if (dev->test != -1 && dev->test != i) continue; dev->param.test_num = i; status = usbdev_ioctl (fd, dev->ifnum, USBTEST_REQUEST, &dev->param); if (status < 0 && errno == EOPNOTSUPP) continue; /* NOTE: each thread emits complete lines; no fragments! */ if (status < 0) { char buf [80]; int err = errno; if (strerror_r (errno, buf, sizeof buf)) { snprintf (buf, sizeof buf, "error %d", err); errno = err; } printf ("%s test %d --> %d (%s)\n", dev->name, i, errno, buf); ret = errno; goto exit; } else printf ("%s test %d, %4d.%.06d secs\n", dev->name, i, (int) dev->param.duration.tv_sec, (int) dev->param.duration.tv_usec); fflush (stdout); } if (dev->forever) goto restart; exit: close(fd); return ret; }
static void *handle_testdev (void *arg) { struct testdev *dev = arg; int fd, i; int status; if ((fd = open (dev->name, O_RDWR)) < 0) { perror ("can't open dev file r/w"); return 0; } restart: for (i = 0; i < TEST_CASES; i++) { if (dev->test != -1 && dev->test != i) continue; dev->param.test_num = i; status = usbdev_ioctl (fd, dev->ifnum, USBTEST_REQUEST, &dev->param); if (status < 0 && errno == EOPNOTSUPP) continue; /* FIXME need a "syslog it" option for background testing */ /* NOTE: each thread emits complete lines; no fragments! */ if (status < 0) { char buf [80]; int err = errno; if (strerror_r (errno, buf, sizeof buf)) { snprintf (buf, sizeof buf, "error %d", err); errno = err; } printf ("%s test %d --> %d (%s)\n", dev->name, i, errno, buf); } else printf ("%s test %d, %4d.%.06d secs\n", dev->name, i, (int) dev->param.duration.tv_sec, (int) dev->param.duration.tv_usec); fflush (stdout); } if (dev->forever) goto restart; close (fd); return arg; }