USBAPI.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #ifndef __USBAPI__
  2. #define __USBAPI__
  3. #if defined(USBCON)
  4. //================================================================================
  5. //================================================================================
  6. // USB
  7. class USBDevice_
  8. {
  9. public:
  10. USBDevice_();
  11. bool configured();
  12. void attach();
  13. void detach(); // Serial port goes down too...
  14. void poll();
  15. };
  16. extern USBDevice_ USBDevice;
  17. //================================================================================
  18. //================================================================================
  19. // Serial over CDC (Serial1 is the physical port)
  20. class Serial_ : public Stream
  21. {
  22. private:
  23. ring_buffer *_cdc_rx_buffer;
  24. public:
  25. void begin(uint16_t baud_count);
  26. void end(void);
  27. virtual int available(void);
  28. virtual void accept(void);
  29. virtual int peek(void);
  30. virtual int read(void);
  31. virtual void flush(void);
  32. virtual size_t write(uint8_t);
  33. using Print::write; // pull in write(str) and write(buf, size) from Print
  34. operator bool();
  35. };
  36. extern Serial_ Serial;
  37. //================================================================================
  38. //================================================================================
  39. // Mouse
  40. #define MOUSE_LEFT 1
  41. #define MOUSE_RIGHT 2
  42. #define MOUSE_MIDDLE 4
  43. #define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)
  44. class Mouse_
  45. {
  46. private:
  47. uint8_t _buttons;
  48. void buttons(uint8_t b);
  49. public:
  50. Mouse_(void);
  51. void begin(void);
  52. void end(void);
  53. void click(uint8_t b = MOUSE_LEFT);
  54. void move(signed char x, signed char y, signed char wheel = 0);
  55. void press(uint8_t b = MOUSE_LEFT); // press LEFT by default
  56. void release(uint8_t b = MOUSE_LEFT); // release LEFT by default
  57. bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default
  58. };
  59. extern Mouse_ Mouse;
  60. //================================================================================
  61. //================================================================================
  62. // Keyboard
  63. #define KEY_LEFT_CTRL 0x80
  64. #define KEY_LEFT_SHIFT 0x81
  65. #define KEY_LEFT_ALT 0x82
  66. #define KEY_LEFT_GUI 0x83
  67. #define KEY_RIGHT_CTRL 0x84
  68. #define KEY_RIGHT_SHIFT 0x85
  69. #define KEY_RIGHT_ALT 0x86
  70. #define KEY_RIGHT_GUI 0x87
  71. #define KEY_UP_ARROW 0xDA
  72. #define KEY_DOWN_ARROW 0xD9
  73. #define KEY_LEFT_ARROW 0xD8
  74. #define KEY_RIGHT_ARROW 0xD7
  75. #define KEY_BACKSPACE 0xB2
  76. #define KEY_TAB 0xB3
  77. #define KEY_RETURN 0xB0
  78. #define KEY_ESC 0xB1
  79. #define KEY_INSERT 0xD1
  80. #define KEY_DELETE 0xD4
  81. #define KEY_PAGE_UP 0xD3
  82. #define KEY_PAGE_DOWN 0xD6
  83. #define KEY_HOME 0xD2
  84. #define KEY_END 0xD5
  85. #define KEY_CAPS_LOCK 0xC1
  86. #define KEY_F1 0xC2
  87. #define KEY_F2 0xC3
  88. #define KEY_F3 0xC4
  89. #define KEY_F4 0xC5
  90. #define KEY_F5 0xC6
  91. #define KEY_F6 0xC7
  92. #define KEY_F7 0xC8
  93. #define KEY_F8 0xC9
  94. #define KEY_F9 0xCA
  95. #define KEY_F10 0xCB
  96. #define KEY_F11 0xCC
  97. #define KEY_F12 0xCD
  98. // Low level key report: up to 6 keys and shift, ctrl etc at once
  99. typedef struct
  100. {
  101. uint8_t modifiers;
  102. uint8_t reserved;
  103. uint8_t keys[6];
  104. } KeyReport;
  105. class Keyboard_ : public Print
  106. {
  107. private:
  108. KeyReport _keyReport;
  109. void sendReport(KeyReport* keys);
  110. public:
  111. Keyboard_(void);
  112. void begin(void);
  113. void end(void);
  114. virtual size_t write(uint8_t k);
  115. virtual size_t press(uint8_t k);
  116. virtual size_t release(uint8_t k);
  117. virtual void releaseAll(void);
  118. };
  119. extern Keyboard_ Keyboard;
  120. //================================================================================
  121. //================================================================================
  122. // Low level API
  123. typedef struct
  124. {
  125. uint8_t bmRequestType;
  126. uint8_t bRequest;
  127. uint8_t wValueL;
  128. uint8_t wValueH;
  129. uint16_t wIndex;
  130. uint16_t wLength;
  131. } Setup;
  132. //================================================================================
  133. //================================================================================
  134. // HID 'Driver'
  135. int HID_GetInterface(uint8_t* interfaceNum);
  136. int HID_GetDescriptor(int i);
  137. bool HID_Setup(Setup& setup);
  138. void HID_SendReport(uint8_t id, const void* data, int len);
  139. //================================================================================
  140. //================================================================================
  141. // MSC 'Driver'
  142. int MSC_GetInterface(uint8_t* interfaceNum);
  143. int MSC_GetDescriptor(int i);
  144. bool MSC_Setup(Setup& setup);
  145. bool MSC_Data(uint8_t rx,uint8_t tx);
  146. //================================================================================
  147. //================================================================================
  148. // CSC 'Driver'
  149. int CDC_GetInterface(uint8_t* interfaceNum);
  150. int CDC_GetDescriptor(int i);
  151. bool CDC_Setup(Setup& setup);
  152. //================================================================================
  153. //================================================================================
  154. #define TRANSFER_PGM 0x80
  155. #define TRANSFER_RELEASE 0x40
  156. #define TRANSFER_ZERO 0x20
  157. int USB_SendControl(uint8_t flags, const void* d, int len);
  158. int USB_RecvControl(void* d, int len);
  159. uint8_t USB_Available(uint8_t ep);
  160. int USB_Send(uint8_t ep, const void* data, int len); // blocking
  161. int USB_Recv(uint8_t ep, void* data, int len); // non-blocking
  162. int USB_Recv(uint8_t ep); // non-blocking
  163. void USB_Flush(uint8_t ep);
  164. #endif
  165. #endif /* if defined(USBCON) */