psaux.c 915 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Interface to raw PS/2 aux port.
  3. * Used by user-level mouse daemon.
  4. */
  5. #include "u.h"
  6. #include "../port/lib.h"
  7. #include "mem.h"
  8. #include "dat.h"
  9. #include "fns.h"
  10. #include "../port/error.h"
  11. #include "io.h"
  12. #define Image IMAGE
  13. #include <draw.h>
  14. #include <memdraw.h>
  15. #include <cursor.h>
  16. #include "screen.h"
  17. /*
  18. * BUG: we ignore shift here.
  19. * we need a more general solution,
  20. * one that will also work for serial mice.
  21. */
  22. Queue *psauxq;
  23. static void
  24. psauxputc(int c, int)
  25. {
  26. uchar uc;
  27. uc = c;
  28. qproduce(psauxq, &uc, 1);
  29. }
  30. static long
  31. psauxread(Chan*, void *a, long n, vlong)
  32. {
  33. return qread(psauxq, a, n);
  34. }
  35. static long
  36. psauxwrite(Chan*, void *a, long n, vlong)
  37. {
  38. return i8042auxcmds(a, n);
  39. }
  40. void
  41. psauxlink(void)
  42. {
  43. psauxq = qopen(1024, 0, 0, 0);
  44. if(psauxq == nil)
  45. panic("psauxlink");
  46. qnoblock(psauxq, 1);
  47. i8042auxenable(psauxputc);
  48. addarchfile("psaux", DMEXCL|0660, psauxread, psauxwrite);
  49. }