Advertisement
Guest User

Untitled

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