main.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <thread.h>
  4. #include "usb.h"
  5. #include "usbfs.h"
  6. #include "serial.h"
  7. #include "ucons.h"
  8. #include "prolific.h"
  9. #include "ftdi.h"
  10. #include "silabs.h"
  11. enum {
  12. Arglen = 80,
  13. };
  14. typedef struct Parg Parg;
  15. /* keep in sync with serial.c */
  16. static void
  17. usage(void)
  18. {
  19. fprint(2, "usage: %s [-dD] [-N nb] [-m mtpt] [-s srv] [dev...]\n", argv0);
  20. threadexitsall("usage");
  21. }
  22. static int
  23. matchserial(char *info, void*)
  24. {
  25. if(uconsmatch(info) == 0 || plmatch(info) == 0 ||
  26. ftmatch(nil, info) == 0 || slmatch(info) == 0)
  27. return 0;
  28. return -1;
  29. }
  30. void
  31. threadmain(int argc, char **argv)
  32. {
  33. char *mnt, *srv, *as, *ae;
  34. char args[Arglen];
  35. mnt = "/dev";
  36. srv = nil;
  37. quotefmtinstall();
  38. ae = args + sizeof args;
  39. as = seprint(args, ae, "serial");
  40. ARGBEGIN{
  41. case 'D':
  42. usbfsdebug++;
  43. break;
  44. case 'd':
  45. usbdebug++;
  46. as = seprint(as, ae, " -d");
  47. break;
  48. case 'N':
  49. as = seprint(as, ae, " -N %s", EARGF(usage()));
  50. break;
  51. case 'm':
  52. mnt = EARGF(usage());
  53. break;
  54. case 's':
  55. srv = EARGF(usage());
  56. break;
  57. default:
  58. usage();
  59. break;
  60. }ARGEND;
  61. rfork(RFNOTEG);
  62. fmtinstall('U', Ufmt);
  63. threadsetgrp(threadid());
  64. usbfsinit(srv, mnt, &usbdirfs, MAFTER|MCREATE);
  65. startdevs(args, argv, argc, matchserial, nil, serialmain);
  66. threadexits(nil);
  67. }