hiddev.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. /**************************************************************************************************
  2. Phyplus Microelectronics Limited confidential and proprietary.
  3. All rights reserved.
  4. IMPORTANT: All rights of this software belong to Phyplus Microelectronics
  5. Limited ("Phyplus"). Your use of this Software is limited to those
  6. specific rights granted under the terms of the business contract, the
  7. confidential agreement, the non-disclosure agreement and any other forms
  8. of agreements as a customer or a partner of Phyplus. You may not use this
  9. Software unless you agree to abide by the terms of these agreements.
  10. You acknowledge that the Software may not be modified, copied,
  11. distributed or disclosed unless embedded on a Phyplus Bluetooth Low Energy
  12. (BLE) integrated circuit, either as a product or is integrated into your
  13. products. Other than for the aforementioned purposes, you may not use,
  14. reproduce, copy, prepare derivative works of, modify, distribute, perform,
  15. display or sell this Software and/or its documentation for any purposes.
  16. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  17. PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  18. INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  19. NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
  20. PHYPLUS OR ITS SUBSIDIARIES BE LIABLE OR OBLIGATED UNDER CONTRACT,
  21. NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
  22. LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
  23. INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
  24. OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
  25. OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
  26. (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
  27. **************************************************************************************************/
  28. #ifndef HIDDEV_H
  29. #define HIDDEV_H
  30. #ifdef __cplusplus
  31. extern "C"
  32. {
  33. #endif
  34. /*********************************************************************
  35. * INCLUDES
  36. */
  37. /*********************************************************************
  38. * MACROS
  39. */
  40. /*********************************************************************
  41. * CONSTANTS
  42. */
  43. // HID Device Parameters
  44. #define HIDDEV_ERASE_ALLBONDS 0 // Erase all of the bonded devices. Write Only. No Size.
  45. // HID read/write operation
  46. #define HID_DEV_OPER_WRITE 0 // Write operation
  47. #define HID_DEV_OPER_READ 1 // Read operation
  48. #define HID_DEV_OPER_ENABLE 2 // Notification enabled for report ID
  49. #define HID_DEV_OPER_DISABLE 3 // Notifications disabled for report ID
  50. // HID callback events
  51. #define HID_DEV_SUSPEND_EVT 0 // HID suspend
  52. #define HID_DEV_EXIT_SUSPEND_EVT 1 // HID exit suspend
  53. #define HID_DEV_SET_BOOT_EVT 2 // HID set boot mode
  54. #define HID_DEV_SET_REPORT_EVT 3 // HID set report mode
  55. /* HID Report type */
  56. #define HID_REPORT_TYPE_INPUT 1
  57. #define HID_REPORT_TYPE_OUTPUT 2
  58. #define HID_REPORT_TYPE_FEATURE 3
  59. /* HID information flags */
  60. #define HID_FLAGS_REMOTE_WAKE 0x01 // RemoteWake
  61. #define HID_FLAGS_NORMALLY_CONNECTABLE 0x02 // NormallyConnectable
  62. /* Control point commands */
  63. #define HID_CMD_SUSPEND 0x00 // Suspend
  64. #define HID_CMD_EXIT_SUSPEND 0x01 // Exit Suspend
  65. /* HID protocol mode values */
  66. #define HID_PROTOCOL_MODE_BOOT 0x00 // Boot Protocol Mode
  67. #define HID_PROTOCOL_MODE_REPORT 0x01 // Report Protocol Mode
  68. /* Attribute value lengths */
  69. #define HID_PROTOCOL_MODE_LEN 1 // HID Protocol Mode
  70. #define HID_INFORMATION_LEN 4 // HID Information
  71. #define HID_REPORT_REF_LEN 2 // HID Report Reference Descriptor
  72. #define HID_EXT_REPORT_REF_LEN 2 // External Report Reference Descriptor
  73. // HID Keyboard/Keypad Usage IDs (subset of the codes available in the USB HID Usage Tables spec)
  74. #define HID_KEYBOARD_RESERVED 0 // 0x00 - No event inidicated
  75. #define HID_KEYBOARD_A 4 // 0x04 - Keyboard a and A
  76. #define HID_KEYBOARD_B 5 // 0x05 - Keyboard b and B
  77. #define HID_KEYBOARD_C 6 // 0x06 - Keyboard c and C
  78. #define HID_KEYBOARD_D 7 // 0x07 - Keyboard d and D
  79. #define HID_KEYBOARD_E 8 // 0x08 - Keyboard e and E
  80. #define HID_KEYBOARD_F 9 // 0x09 - Keyboard f and F
  81. #define HID_KEYBOARD_G 10 // 0x0A - Keyboard g and G
  82. #define HID_KEYBOARD_H 11 // 0x0B - Keyboard h and H
  83. #define HID_KEYBOARD_I 12 // 0x0C - Keyboard i and I
  84. #define HID_KEYBOARD_J 13 // 0x0D - Keyboard j and J
  85. #define HID_KEYBOARD_K 14 // 0x0E - Keyboard k and K
  86. #define HID_KEYBOARD_L 15 // 0x0F - Keyboard l and L
  87. #define HID_KEYBOARD_M 16 // 0x10 - Keyboard m and M
  88. #define HID_KEYBOARD_N 17 // 0x11 - Keyboard n and N
  89. #define HID_KEYBOARD_O 18 // 0x12 - Keyboard o and O
  90. #define HID_KEYBOARD_P 19 // 0x13 - Keyboard p and p
  91. #define HID_KEYBOARD_Q 20 // 0x14 - Keyboard q and Q
  92. #define HID_KEYBOARD_R 21 // 0x15 - Keyboard r and R
  93. #define HID_KEYBOARD_S 22 // 0x16 - Keyboard s and S
  94. #define HID_KEYBOARD_T 23 // 0x17 - Keyboard t and T
  95. #define HID_KEYBOARD_U 24 // 0x18 - Keyboard u and U
  96. #define HID_KEYBOARD_V 25 // 0x19 - Keyboard v and V
  97. #define HID_KEYBOARD_W 26 // 0x1A - Keyboard w and W
  98. #define HID_KEYBOARD_X 27 // 0x1B - Keyboard x and X
  99. #define HID_KEYBOARD_Y 28 // 0x1C - Keyboard y and Y
  100. #define HID_KEYBOARD_Z 29 // 0x1D - Keyboard z and Z
  101. #define HID_KEYBOARD_1 30 // 0x1E - Keyboard 1 and !
  102. #define HID_KEYBOARD_2 31 // 0x1F - Keyboard 2 and @
  103. #define HID_KEYBOARD_3 32 // 0x20 - Keyboard 3 and #
  104. #define HID_KEYBOARD_4 33 // 0x21 - Keyboard 4 and %
  105. #define HID_KEYBOARD_5 34 // 0x22 - Keyboard 5 and %
  106. #define HID_KEYBOARD_6 35 // 0x23 - Keyboard 6 and ^
  107. #define HID_KEYBOARD_7 36 // 0x24 - Keyboard 7 and &
  108. #define HID_KEYBOARD_8 37 // 0x25 - Keyboard 8 and *
  109. #define HID_KEYBOARD_9 38 // 0x26 - Keyboard 9 and (
  110. #define HID_KEYBOARD_0 39 // 0x27 - Keyboard 0 and )
  111. #define HID_KEYBOARD_RETURN 40 // 0x28 - Keyboard Return (ENTER)
  112. #define HID_KEYBOARD_ESCAPE 41 // 0x29 - Keyboard ESCAPE
  113. #define HID_KEYBOARD_DELETE 42 // 0x2A - Keyboard DELETE (Backspace)
  114. #define HID_KEYBOARD_TAB 43 // 0x2B - Keyboard Tab
  115. #define HID_KEYBOARD_SPACEBAR 44 // 0x2C - Keyboard Spacebar
  116. #define HID_KEYBOARD_MINUS 45 // 0x2D - Keyboard - and (underscore)
  117. #define HID_KEYBOARD_EQUAL 46 // 0x2E - Keyboard = and +
  118. #define HID_KEYBOARD_LEFT_BRKT 47 // 0x2F - Keyboard [ and {
  119. #define HID_KEYBOARD_RIGHT_BRKT 48 // 0x30 - Keyboard ] and }
  120. #define HID_KEYBOARD_BACK_SLASH 49 // 0x31 - Keyboard \ and |
  121. #define HID_KEYBOARD_SEMI_COLON 51 // 0x33 - Keyboard ; and :
  122. #define HID_KEYBOARD_SGL_QUOTE 52 // 0x34 - Keyboard ' and "
  123. #define HID_KEYBOARD_GRV_ACCENT 53 // 0x35 - Keyboard Grave Accent and Tilde
  124. #define HID_KEYBOARD_COMMA 54 // 0x36 - Keyboard , and <
  125. #define HID_KEYBOARD_DOT 55 // 0x37 - Keyboard . and >
  126. #define HID_KEYBOARD_FWD_SLASH 56 // 0x38 - Keyboard / and ?
  127. #define HID_KEYBOARD_CAPS_LOCK 57 // 0x39 - Keyboard Caps Lock
  128. #define HID_KEYBOARD_F1 58 // 0x3A - Keyboard F1
  129. #define HID_KEYBOARD_F2 59 // 0x3B - Keyboard F2
  130. #define HID_KEYBOARD_F3 60 // 0x3C - Keyboard F3
  131. #define HID_KEYBOARD_F4 61 // 0x3D - Keyboard F4
  132. #define HID_KEYBOARD_F5 62 // 0x3E - Keyboard F5
  133. #define HID_KEYBOARD_F6 63 // 0x3F - Keyboard F6
  134. #define HID_KEYBOARD_F7 64 // 0x40 - Keyboard F7
  135. #define HID_KEYBOARD_F8 65 // 0x41 - Keyboard F8
  136. #define HID_KEYBOARD_F9 66 // 0x42 - Keyboard F9
  137. #define HID_KEYBOARD_F10 67 // 0x43 - Keyboard F10
  138. #define HID_KEYBOARD_F11 68 // 0x44 - Keyboard F11
  139. #define HID_KEYBOARD_F12 69 // 0x45 - Keyboard F12
  140. #define HID_KEYBOARD_PRNT_SCREEN 70 // 0x46 - Keyboard Print Screen
  141. #define HID_KEYBOARD_SCROLL_LOCK 71 // 0x47 - Keyboard Scroll Lock
  142. #define HID_KEYBOARD_PAUSE 72 // 0x48 - Keyboard Pause
  143. #define HID_KEYBOARD_INSERT 73 // 0x49 - Keyboard Insert
  144. #define HID_KEYBOARD_HOME 74 // 0x4A - Keyboard Home
  145. #define HID_KEYBOARD_PAGE_UP 75 // 0x4B - Keyboard PageUp
  146. #define HID_KEYBOARD_DELETE_FWD 76 // 0x4C - Keyboard Delete Forward
  147. #define HID_KEYBOARD_END 77 // 0x4D - Keyboard End
  148. #define HID_KEYBOARD_PAGE_DOWN 78 // 0x4E - Keyboard PageDown
  149. #define HID_KEYBOARD_RIGHT_ARROW 79 // 0x4F - Keyboard RightArrow
  150. #define HID_KEYBOARD_LEFT_ARROW 80 // 0x50 - Keyboard LeftArrow
  151. #define HID_KEYBOARD_DOWN_ARROW 81 // 0x51 - Keyboard DownArrow
  152. #define HID_KEYBOARD_UP_ARROW 82 // 0x52 - Keyboard UpArrow
  153. #define HID_KEYBPAD_NUM_LOCK 83 // 0x53 - Keypad Num Lock and Clear
  154. #define HID_KEYBPAD_DIVIDE 84 // 0x54 - Keypad /
  155. #define HID_KEYBOARD_MULTIPLY 85 // 0x55 - Keypad *
  156. #define HID_KEYBOARD_SUBTRACT 86 // 0x56 - Keypad -
  157. #define HID_KEYBPAD_ADD 87 // 0x57 - Keypad +
  158. #define HID_KEYBPAD_ENTER 88 // 0x58 - Keypad ENTER
  159. #define HID_KEYBPAD_1 89 // 0x59 - Keypad 1 and End
  160. #define HID_KEYBPAD_2 90 // 0x5A - Keypad 2 and Down Arrow
  161. #define HID_KEYBPAD_3 91 // 0x5B - Keypad 3 and PageDn
  162. #define HID_KEYBPAD_4 92 // 0x5C - Keypad 4 and Lfet Arrow
  163. #define HID_KEYBPAD_5 93 // 0x5D - Keypad 5
  164. #define HID_KEYBPAD_6 94 // 0x5E - Keypad 6 and Right Arrow
  165. #define HID_KEYBPAD_7 95 // 0x5F - Keypad 7 and Home
  166. #define HID_KEYBPAD_8 96 // 0x60 - Keypad 8 and Up Arrow
  167. #define HID_KEYBPAD_9 97 // 0x61 - Keypad 9 and PageUp
  168. #define HID_KEYBPAD_0 98 // 0x62 - Keypad 0 and Insert
  169. #define HID_KEYBPAD_DOT 99 // 0x63 - Keypad . and Delete
  170. #define HID_KEYBOARD_MUTE 127 // 0x7F - Keyboard Mute
  171. #define HID_KEYBOARD_VOLUME_UP 128 // 0x80 - Keyboard Volume up
  172. #define HID_KEYBOARD_VOLUME_DOWN 129 // 0x81 - Keyboard Volume down
  173. #define HID_KEYBOARD_LEFT_CTRL 224 // 0xE0 - Keyboard LeftContorl
  174. #define HID_KEYBOARD_LEFT_SHIFT 225 // 0xE1 - Keyboard LeftShift
  175. #define HID_KEYBOARD_LEFT_ALT 226 // 0xE2 - Keyboard LeftAlt
  176. #define HID_KEYBOARD_LEFT_GUI 227 // 0xE3 - Keyboard LeftGUI
  177. #define HID_KEYBOARD_RIGHT_CTRL 228 // 0xE4 - Keyboard LeftContorl
  178. #define HID_KEYBOARD_RIGHT_SHIFT 229 // 0xE5 - Keyboard LeftShift
  179. #define HID_KEYBOARD_RIGHT_ALT 230 // 0xE6 - Keyboard LeftAlt
  180. #define HID_KEYBOARD_RIGHT_GUI 231 // 0xE7 - Keyboard RightGUI
  181. #define HID_MOUSE_BUTTON_LEFT 253
  182. #define HID_MOUSE_BUTTON_MIDDLE 254
  183. #define HID_MOUSE_BUTTON_RIGHT 255
  184. // HID Consumer Usage IDs (subset of the codes available in the USB HID Usage Tables spec)
  185. #define HID_CONSUMER_POWER 48 // 0x30 - Power
  186. #define HID_CONSUMER_RESET 49 // 0x31 - Reset
  187. #define HID_CONSUMER_SLEEP 50 // 0x32 - Sleep
  188. #define HID_CONSUMER_MENU 64 // 0x40 - Menu
  189. #define HID_CONSUMER_SELECTION 128 // 0x80 - Selection
  190. #define HID_CONSUMER_ASSIGN_SEL 129 // 0x81 - Assign Selection
  191. #define HID_CONSUMER_MODE_STEP 130 // 0x82 - Mode Step
  192. #define HID_CONSUMER_RECALL_LAST 131 // 0x83 - Recall Last
  193. #define HID_CONSUMER_QUIT 148 // 0x94 - Quit
  194. #define HID_CONSUMER_HELP 149 // 0x95 - Help
  195. #define HID_CONSUMER_CHANNEL_UP 156 // 0x9C - Channel Increment
  196. #define HID_CONSUMER_CHANNEL_DOWN 157 // 0x9D - Channel Decrement
  197. #define HID_CONSUMER_PLAY 176 // 0xB0 - Play
  198. #define HID_CONSUMER_PAUSE 177 // 0xB1 - Pause
  199. #define HID_CONSUMER_RECORD 178 // 0xB2 - Record
  200. #define HID_CONSUMER_FAST_FORWARD 179 // 0xB3 - Fast Forward
  201. #define HID_CONSUMER_REWIND 180 // 0xB4 - Rewind
  202. #define HID_CONSUMER_SCAN_NEXT_TRK 181 // 0xB5 - Scan Next Track
  203. #define HID_CONSUMER_SCAN_PREV_TRK 182 // 0xB6 - Scan Previous Track
  204. #define HID_CONSUMER_STOP 183 // 0xB7 - Stop
  205. #define HID_CONSUMER_EJECT 184 // 0xB8 - Eject
  206. #define HID_CONSUMER_RANDOM_PLAY 185 // 0xB9 - Random Play
  207. #define HID_CONSUMER_SELECT_DISC 186 // 0xBA - Select Disk
  208. #define HID_CONSUMER_ENTER_DISC 187 // 0xBB - Enter Disc
  209. #define HID_CONSUMER_REPEAT 188 // 0xBC - Repeat
  210. #define HID_CONSUMER_STOP_EJECT 204 // 0xCC - Stop/Eject
  211. #define HID_CONSUMER_PLAY_PAUSE 205 // 0xCD - Play/Pause
  212. #define HID_CONSUMER_PLAY_SKIP 206 // 0xCE - Play/Skip
  213. #define HID_CONSUMER_VOLUME 224 // 0xE0 - Volume
  214. #define HID_CONSUMER_BALANCE 225 // 0xE1 - Balance
  215. #define HID_CONSUMER_MUTE 226 // 0xE2 - Mute
  216. #define HID_CONSUMER_BASS 227 // 0xE3 - Bass
  217. #define HID_CONSUMER_VOLUME_UP 233 // 0xE9 - Volume Increment
  218. #define HID_CONSUMER_VOLUME_DOWN 234 // 0xEA - Volume Decrement
  219. /*********************************************************************
  220. * TYPEDEFS
  221. */
  222. // HID report mapping table
  223. typedef struct
  224. {
  225. uint16 handle; // Handle of report characteristic
  226. uint16 cccdHandle; // Handle of CCCD for report characteristic
  227. uint8 id; // Report ID
  228. uint8 type; // Report type
  229. uint8 mode; // Protocol mode (report or boot)
  230. } hidRptMap_t;
  231. // HID dev configuration structure
  232. typedef struct
  233. {
  234. uint32 idleTimeout; // Idle timeout in milliseconds
  235. uint8 hidFlags; // HID feature flags
  236. } hidDevCfg_t;
  237. /*********************************************************************
  238. * Global Variables
  239. */
  240. // These variables are defined in the service .c file that uses HID Dev
  241. // HID report map length
  242. extern uint8 hidReportMapLen;
  243. // HID protocol mode
  244. extern uint8 hidProtocolMode;
  245. /*********************************************************************
  246. * Profile Callbacks
  247. */
  248. // HID Report callback
  249. typedef uint8 (*hidDevReportCB_t)( uint8 id, uint8 type, uint16 uuid,
  250. uint8 oper, uint8 *pLen, uint8 *pData );
  251. // HID event callback
  252. typedef void (*hidDevEvtCB_t)( uint8 evt );
  253. // HID passcode callback
  254. typedef void (*hidDevPasscodeCB_t)( uint8 *deviceAddr, uint16 connectionHandle,
  255. uint8 uiInputs, uint8 uiOutputs );
  256. typedef struct
  257. {
  258. hidDevReportCB_t reportCB;
  259. hidDevEvtCB_t evtCB;
  260. hidDevPasscodeCB_t passcodeCB;
  261. } hidDevCB_t;
  262. extern void hidDevGapStateCB( gaprole_States_t newState );
  263. extern void hidDevPairStateCB( uint16 connHandle, uint8 state, uint8 status );
  264. extern void hidDevPasscodeCB( uint8 *deviceAddr, uint16 connectionHandle,
  265. uint8 uiInputs, uint8 uiOutputs );
  266. extern void HidDev_Init( uint8 task_id );
  267. extern uint16 HidDev_ProcessEvent( uint8 task_id, uint16 events );
  268. extern void HidDev_Register( hidDevCfg_t *pCfg, hidDevCB_t *pCBs );
  269. extern void HidDev_RegisterReports( uint8 numReports, hidRptMap_t *pRpt );
  270. extern void HidDev_Report( uint8 id, uint8 type, uint8 len, uint8 *pData );
  271. extern void HidDev_Close( void );
  272. extern bStatus_t HidDev_SetParameter( uint8 param, uint8 len, void *pValue );
  273. extern bStatus_t HidDev_GetParameter( uint8 param, void *pValue );
  274. extern void HidDev_PasscodeRsp( uint8 status, uint32 passcode );
  275. extern bStatus_t HidDev_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
  276. uint8 *pValue, uint8 *pLen, uint16 offset,
  277. uint8 maxLen);
  278. extern bStatus_t HidDev_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
  279. uint8 *pValue, uint8 len, uint16 offset);
  280. /*********************************************************************
  281. *********************************************************************/
  282. #ifdef __cplusplus
  283. }
  284. #endif
  285. #endif /* HIDDEV_H */