Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

552 lines
19 KiB

  1. /*++
  2. *
  3. * Component: hidserv.dll
  4. * File: hidaudio.h
  5. * Purpose: main application header
  6. *
  7. * Copyright (C) Microsoft Corporation 1997,1998. All rights reserved.
  8. *
  9. * WGJ
  10. --*/
  11. #ifndef _HIDSERV_H_
  12. #define _HIDSERV_H_
  13. ////
  14. /// Defines
  15. //
  16. #define STRICT
  17. #ifndef GLOBALS
  18. #define GLOBALS extern
  19. #define EQU ; / ## /
  20. #else
  21. #define EQU =
  22. #endif //GLOBALS
  23. #define HIDSERV_USAGE_PAGE 0x0c
  24. // default step size is 4% of max volume.
  25. #define DEFAULT_STEP ((int)(65535/25))
  26. #define MAX_BUTTON_LIST 10
  27. // APP messages
  28. #define WM_HIDSERV_START (WM_APP+301)
  29. #define WM_HIDSERV_STOP (WM_APP+302)
  30. #define WM_HIDSERV_REPORT_DISPATCH (WM_APP+304)
  31. #define WM_HIDSERV_SERVICE_REQUEST (WM_APP+305)
  32. #define WM_HIDSERV_INPUT_CLIENT (WM_APP+306)
  33. #define WM_HIDSERV_MEDIAFOCUS_CLIENT (WM_APP+307)
  34. #define WM_HIDSERV_SETMEDIAFOCUS (WM_APP+308)
  35. #define WM_HIDSERV_MEDIAFOCUS_NOTIFY (WM_APP+309)
  36. #define WM_HIDSERV_PNP_HID (WM_APP+310)
  37. #if WIN95_BUILD
  38. #define WM_HIDSERV_STOP_DEVICE (WM_APP+311)
  39. #endif // WIN95_BUILD
  40. #define WM_CUSTOM_USAGE (WM_APP+313)
  41. // CInput Messages
  42. //
  43. #define WM_CI_USAGE (WM_APP+314)
  44. #define WM_CI_MEDIA_FOCUS (WM_APP+315)
  45. #define WM_CI_DEVICE_CHANGE (WM_APP+316)
  46. #define TIMERID_BASE 3
  47. #define TIMERID_TOP 18
  48. #define TIMERID_VOLUMEUP 3
  49. #define TIMERID_VOLUMEDN 4
  50. #define TIMERID_BASSUP 5
  51. #define TIMERID_BASSDN 6
  52. #define TIMERID_TREBLEUP 7
  53. #define TIMERID_TREBLEDN 8
  54. #define TIMERID_APPBACK 9
  55. #define TIMERID_APPFORWARD 10
  56. #define TIMERID_PREVTRACK 11
  57. #define TIMERID_NEXTTRACK 12
  58. #define TIMERID_VOLUMEUP_VK 13
  59. #define TIMERID_VOLUMEDN_VK 14
  60. #define TIMERID_KEYPAD_LPAREN 15
  61. #define TIMERID_KEYPAD_RPAREN 16
  62. #define TIMERID_KEYPAD_AT 17
  63. #define TIMERID_KEYPAD_EQUAL 18
  64. #define MAX_MEDIA_TYPES 33
  65. #define MAX_CLIENTS 16
  66. #define MAX_USAGE_LIST 32
  67. #define MAX_PENDING_BUTTONS 16
  68. #define MakeLongUsage(c,u) ((ULONG)(c<<16) | (u))
  69. #define SET_SERVICE_STATE(Status) if(hService){ ServiceStatus.dwCurrentState = Status; \
  70. SetServiceStatus(hService, &ServiceStatus);}
  71. ////
  72. /// Includes
  73. //
  74. #include <windows.h>
  75. #include <windowsx.h>
  76. #include <winuser.h>
  77. #include <shellapi.h>
  78. #include <mmsystem.h>
  79. #include <math.h>
  80. #include <basetyps.h>
  81. #include <wtypes.h>
  82. #include <setupapi.h>
  83. #include <hidsdi.h>
  84. #include <dbt.h>
  85. #include <regstr.h>
  86. #include <stdlib.h>
  87. #ifdef __cplusplus
  88. extern "C" {
  89. #endif /* __cplusplus */
  90. // Local includes
  91. #include "hid.h"
  92. #include "list.h"
  93. #include "dbg.h"
  94. //
  95. // Calculate the address of the base of the structure given its type, and an
  96. // address of a field within the structure.
  97. //
  98. #define ContainingRecord(address, type, field) ((type *)( \
  99. (PCHAR)(address) - \
  100. (PCHAR)(&((type *)0)->field)))
  101. // Data Types
  102. //
  103. typedef unsigned long CI_CLIENT_ID;
  104. typedef UINT_PTR OOC_STATE;
  105. typedef struct _Pending_Button{
  106. USAGE Collection;
  107. USAGE Page;
  108. USAGE Usage;
  109. } PENDING_BUTTON, *PPENDING_BUTTON;
  110. typedef LONG (WINAPI *WINSTATIONSENDWINDOWMESSAGE)
  111. (HANDLE hServer,
  112. ULONG sessionID,
  113. ULONG timeOut,
  114. ULONG hWnd,
  115. ULONG Msg,
  116. WPARAM wParam,
  117. LPARAM lParam,
  118. LONG *pResponse);
  119. ////
  120. /// Globals
  121. //
  122. // Linked list of current hid devices
  123. GLOBALS LIST_NODE HidDeviceList;
  124. GLOBALS BOOL PnpEnabled EQU FALSE;
  125. GLOBALS HDEVNOTIFY hNotifyArrival EQU 0;
  126. // This timeout (150ms) is selected to allow the control to cover the range
  127. // (25 steps) in about 5 sec..
  128. GLOBALS UINT INITIAL_WAIT EQU 500;
  129. GLOBALS UINT REPEAT_INTERVAL EQU 150;
  130. // The instance and hwnd for the main thread.
  131. GLOBALS HANDLE hInstance EQU 0;
  132. GLOBALS HWND hWndHidServ EQU 0;
  133. // how many threads are active?
  134. GLOBALS ULONG cThreadRef EQU 0;
  135. // Access to OOC state data is mutex protected.
  136. GLOBALS OOC_STATE OOC_State[TIMERID_TOP-TIMERID_BASE+1];
  137. GLOBALS HANDLE hMutexOOC EQU 0;
  138. GLOBALS PENDING_BUTTON PendingButtonList[MAX_PENDING_BUTTONS];
  139. // NT Service data
  140. GLOBALS SERVICE_STATUS_HANDLE hService EQU 0;
  141. GLOBALS TCHAR HidservServiceName[] EQU TEXT("HidServ");
  142. GLOBALS SERVICE_STATUS ServiceStatus;
  143. // The event signalling that there is input to send.
  144. GLOBALS HANDLE hInputEvent;
  145. GLOBALS HANDLE hDesktopSwitch;
  146. GLOBALS HANDLE hInputDoneEvent;
  147. GLOBALS BOOLEAN InputIsAppCommand;
  148. GLOBALS BOOLEAN InputIsChar;
  149. GLOBALS UCHAR InputVKey;
  150. GLOBALS SHORT InputDown;
  151. GLOBALS USHORT InputAppCommand;
  152. GLOBALS BOOL InputThreadEnabled;
  153. GLOBALS DWORD InputThreadId;
  154. GLOBALS DWORD MessagePumpThreadId;
  155. GLOBALS ULONG InputSessionId;
  156. GLOBALS BOOLEAN InputSessionLocked;
  157. GLOBALS HINSTANCE WinStaDll;
  158. GLOBALS WINSTATIONSENDWINDOWMESSAGE WinStaProc;
  159. /*
  160. WinStationSendWindowMessage(
  161. SERVERNAME_CURRENT, // global server handle
  162. InputSessionId, // session id
  163. 5, // wait in seconds
  164. NULL, // handle of destination window
  165. Down ? WM_KEYDOWN : WM_KEYUP,
  166. Vkey, // wParam
  167. 1, // lParam - input is char
  168. NULL); // No response
  169. */
  170. #define CrossSessionWindowMessage(m, w, l) \
  171. if (WinStaProc) { LONG response; \
  172. WinStaProc (NULL, InputSessionId, 5, HandleToUlong(hWndHidServ), (m), (w), (l), &response); }
  173. #define OOC(_x_) OOC_State[_x_ - TIMERID_BASE]
  174. ////
  175. /// Prototypes
  176. //
  177. //hidaudio.c
  178. DWORD
  179. WINAPI
  180. HidServMain(
  181. HANDLE InitDoneEvent
  182. );
  183. DWORD
  184. WINAPI
  185. ThreadMain(
  186. HWND hwnd,
  187. HINSTANCE hInst,
  188. LPSTR szCmd,
  189. int nShow
  190. );
  191. BOOL
  192. HidServInit(
  193. void
  194. );
  195. void
  196. HidServExit(
  197. void
  198. );
  199. DWORD
  200. WINAPI
  201. HidThreadProc(
  202. PHID_DEVICE HidDevice
  203. );
  204. DWORD
  205. WINAPI
  206. HidThreadInputProc(
  207. PVOID Ignore
  208. );
  209. DWORD
  210. WINAPI
  211. HidMessagePump(
  212. PVOID Ignore
  213. );
  214. VOID
  215. HidFreeDevice(PHID_DEVICE HidDevice);
  216. BOOL
  217. UsageInList(
  218. PUSAGE_AND_PAGE pUsage,
  219. PUSAGE_AND_PAGE pUsageList
  220. );
  221. void
  222. CustomUsageDispatch(
  223. USAGE Collection,
  224. USAGE Usage,
  225. LONG Data
  226. );
  227. void
  228. HidServReportDispatch(
  229. PHID_DEVICE HidDevice
  230. );
  231. VOID
  232. VolumeTimerHandler(
  233. WPARAM TimerID
  234. );
  235. void
  236. HidServUpdate(
  237. DWORD LongUsage,
  238. DWORD Value
  239. );
  240. BOOL
  241. DeviceChangeHandler(
  242. WPARAM wParam,
  243. LPARAM lParam
  244. );
  245. LRESULT CALLBACK HidServProc(
  246. HWND hwnd,
  247. UINT msg,
  248. WPARAM wparam,
  249. LPARAM lparam
  250. );
  251. //
  252. // Media Types
  253. #define CInput_MediaType_None (0x00000000) // actually ALL media types, but with low priority
  254. #define CInput_MediaType_Software (0x00000001) // Virtual, or software devices (player does not use a hrdware medium)
  255. #define CInput_MediaType_System (0x00000002) // The "system" device, Windows itself is a media type
  256. #define CInput_MediaType_CD (0x00000004)
  257. #define CInput_MediaType_DVD (0x00000008)
  258. #define CInput_MediaType_TV (0x00000010)
  259. #define CInput_MediaType_WWW (0x00000020)
  260. #define CInput_MediaType_Telephone (0x00000040)
  261. #define CInput_MediaType_ProgramGuide (0x00000080)
  262. #define CInput_MediaType_VideoPhone (0x00000100)
  263. #define CInput_MediaType_Games (0x00000200)
  264. #define CInput_MediaType_Messages (0x00000400)
  265. #define CInput_MediaType_VCR (0x00000800)
  266. #define CInput_MediaType_Tuner (0x00001000)
  267. #define CInput_MediaType_Tape (0x00002000)
  268. #define CInput_MediaType_Cable (0x00004000)
  269. #define CInput_MediaType_Satellite (0x00008000)
  270. #define CInput_MediaType_Security (0x00010000)
  271. #define CInput_MediaType_Home (0x00020000)
  272. #define CInput_MediaType_Call (0x00040000)
  273. #define CInput_MediaType_Speakers (0x00080000)
  274. #define CInput_MediaType_All (0xffffffff)
  275. #define CInputUsage_NULL ((USAGE) 0x0000)
  276. #define CInputUsage_RANGE ((USAGE) 0xFFFF)
  277. //
  278. // Collections
  279. #define CInputCollection_Consumer_Control ((USAGE) 0x0001)
  280. #define CInputCollection_Numeric_Key_Pad ((USAGE) 0x0002)
  281. #define CInputCollection_Function_Buttons ((USAGE) 0x0036)
  282. #define CInputCollection_Selection ((USAGE) 0x0080)
  283. #define CInputCollection_Media_Selection ((USAGE) 0x0087)
  284. #define CInputCollection_Select_Disc ((USAGE) 0x00BA)
  285. #define CInputCollection_Playback_Speed ((USAGE) 0x00F1)
  286. //
  287. // Media Selection
  288. #define CInput_Media_Select_Computer ((USAGE) 0x0088)
  289. #define CInput_Media_Select_TV ((USAGE) 0x0089)
  290. #define CInput_Media_Select_WWW ((USAGE) 0x008A)
  291. #define CInput_Media_Select_DVD ((USAGE) 0x008B)
  292. #define CInput_Media_Select_Telephone ((USAGE) 0x008C)
  293. #define CInput_Media_Select_Program_Guide ((USAGE) 0x008D)
  294. #define CInput_Media_Select_Video_Phone ((USAGE) 0x008E)
  295. #define CInput_Media_Select_Games ((USAGE) 0x008F)
  296. #define CInput_Media_Select_Messages ((USAGE) 0x0090)
  297. #define CInput_Media_Select_CD ((USAGE) 0x0091)
  298. #define CInput_Media_Select_VCR ((USAGE) 0x0092)
  299. #define CInput_Media_Select_Tuner ((USAGE) 0x0093)
  300. #define CInput_Media_Select_Tape ((USAGE) 0x0096)
  301. #define CInput_Media_Select_Cable ((USAGE) 0x0097)
  302. #define CInput_Media_Select_Satellite ((USAGE) 0x0098)
  303. #define CInput_Media_Select_Security ((USAGE) 0x0099)
  304. #define CInput_Media_Select_Home ((USAGE) 0x009A)
  305. #define CInput_Media_Select_Call ((USAGE) 0x009B)
  306. ////////////////////////////////////
  307. // General Usages
  308. //
  309. #define CInputUsage_Plus_10 ((USAGE) 0x0020)
  310. #define CInputUsage_Plus_100 ((USAGE) 0x0021)
  311. #define CInputUsage_AM_PM ((USAGE) 0x0022)
  312. // device control
  313. #define CInputUsage_Power ((USAGE) 0x0030)
  314. #define CInputUsage_Reset ((USAGE) 0x0031)
  315. #define CInputUsage_Sleep ((USAGE) 0x0032)
  316. #define CInputUsage_Sleep_After ((USAGE) 0x0033)
  317. #define CInputUsage_Sleep_Mode ((USAGE) 0x0034)
  318. #define CInputUsage_Illumination ((USAGE) 0x0035)
  319. // menu
  320. #define CInputUsage_Menu ((USAGE) 0x0040)
  321. #define CInputUsage_Menu_Pick ((USAGE) 0x0041)
  322. #define CInputUsage_Menu_Up ((USAGE) 0x0042)
  323. #define CInputUsage_Menu_Down ((USAGE) 0x0043)
  324. #define CInputUsage_Menu_Left ((USAGE) 0x0044)
  325. #define CInputUsage_Menu_Right ((USAGE) 0x0045)
  326. #define CInputUsage_Menu_Escape ((USAGE) 0x0046)
  327. #define CInputUsage_Menu_Value_Increase ((USAGE) 0x0047)
  328. #define CInputUsage_Menu_Value_Decrease ((USAGE) 0x0048)
  329. // video display
  330. #define CInputUsage_Data_On_Screen ((USAGE) 0x0060)
  331. #define CInputUsage_Closed_Caption ((USAGE) 0x0061)
  332. #define CInputUsage_Closed_Caption_Select ((USAGE) 0x0062)
  333. #define CInputUsage_VCR_TV ((USAGE) 0x0063)
  334. #define CInputUsage_Broadcast_Mode ((USAGE) 0x0064)
  335. #define CInputUsage_Snapshot ((USAGE) 0x0065)
  336. #define CInputUsage_Still ((USAGE) 0x0066)
  337. // broadcast/cable
  338. #define CInputUsage_Assign_Selection ((USAGE) 0x0081)
  339. #define CInputUsage_Mode_Step ((USAGE) 0x0082)
  340. #define CInputUsage_Recall_Last ((USAGE) 0x0083)
  341. #define CInputUsage_Enter_Channel ((USAGE) 0x0084)
  342. #define CInputUsage_Order_Movie ((USAGE) 0x0085)
  343. #define CInputUsage_Channel ((USAGE) 0x0086)
  344. // app control
  345. #define CInputUsage_Quit ((USAGE) 0x0094)
  346. #define CInputUsage_Help ((USAGE) 0x0095)
  347. // channel
  348. #define CInputUsage_Channel_Increment ((USAGE) 0x009C)
  349. #define CInputUsage_Channel_Decrement ((USAGE) 0x009D)
  350. // vcr control
  351. #define CInputUsage_VCR_Plus ((USAGE) 0x00A0)
  352. #define CInputUsage_Once ((USAGE) 0x00A1)
  353. #define CInputUsage_Daily ((USAGE) 0x00A2)
  354. #define CInputUsage_Weekly ((USAGE) 0x00A3)
  355. #define CInputUsage_Monthly ((USAGE) 0x00A4)
  356. // transport control
  357. #define CInputUsage_Play ((USAGE) 0x00B0)
  358. #define CInputUsage_Pause ((USAGE) 0x00B1)
  359. #define CInputUsage_Record ((USAGE) 0x00B2)
  360. #define CInputUsage_Fast_Forward ((USAGE) 0x00B3)
  361. #define CInputUsage_Rewind ((USAGE) 0x00B4)
  362. #define CInputUsage_Scan_Next_Track ((USAGE) 0x00B5)
  363. #define CInputUsage_Scan_Previous_Track ((USAGE) 0x00B6)
  364. #define CInputUsage_Stop ((USAGE) 0x00B7)
  365. #define CInputUsage_Eject ((USAGE) 0x00B8)
  366. #define CInputUsage_Random_Play ((USAGE) 0x00B9)
  367. // advanced transport control
  368. #define CInputUsage_Enter_Disc ((USAGE) 0x00BB)
  369. #define CInputUsage_Repeat ((USAGE) 0x00BC)
  370. #define CInputUsage_Tracking ((USAGE) 0x00BD)
  371. #define CInputUsage_Track_Normal ((USAGE) 0x00BE)
  372. #define CInputUsage_Slow_Tracking ((USAGE) 0x00BF)
  373. #define CInputUsage_Frame_Forward ((USAGE) 0x00C0)
  374. #define CInputUsage_Frame_Back ((USAGE) 0x00C1)
  375. #define CInputUsage_Mark ((USAGE) 0x00C2)
  376. #define CInputUsage_Clear_Mark ((USAGE) 0x00C3)
  377. #define CInputUsage_Repeat_From_Mark ((USAGE) 0x00C4)
  378. #define CInputUsage_Return_To_Mark ((USAGE) 0x00C5)
  379. #define CInputUsage_Search_Mark_Forward ((USAGE) 0x00C6)
  380. #define CInputUsage_Search_Mark_Backwards ((USAGE) 0x00C7)
  381. #define CInputUsage_Counter_Reset ((USAGE) 0x00C8)
  382. #define CInputUsage_Show_Counter ((USAGE) 0x00C9)
  383. #define CInputUsage_Tracking_Increment ((USAGE) 0x00CA)
  384. #define CInputUsage_Tracking_Decrement ((USAGE) 0x00CB)
  385. #define CInputUsage_Stop_Eject ((USAGE) 0x00CC)
  386. #define CInputUsage_Play_Pause ((USAGE) 0x00CD)
  387. #define CInputUsage_Play_Skip ((USAGE) 0x00CE)
  388. // audio
  389. #define CInputUsage_Volume ((USAGE) 0x00E0)
  390. #define CInputUsage_Balance ((USAGE) 0x00E1)
  391. #define CInputUsage_Mute ((USAGE) 0x00E2)
  392. #define CInputUsage_Bass ((USAGE) 0x00E3)
  393. #define CInputUsage_Treble ((USAGE) 0x00E4)
  394. #define CInputUsage_Bass_Boost ((USAGE) 0x00E5)
  395. #define CInputUsage_Surround_Mode ((USAGE) 0x00E6)
  396. #define CInputUsage_Loudness ((USAGE) 0x00E7)
  397. #define CInputUsage_MPX ((USAGE) 0x00E8)
  398. #define CInputUsage_Volume_Increment ((USAGE) 0x00E9)
  399. #define CInputUsage_Volume_Decrement ((USAGE) 0x00EA)
  400. // advanced vcr control
  401. #define CInputUsage_Speed_Select ((USAGE) 0x00F0)
  402. #define CInputUsage_Standard_Play ((USAGE) 0x00F2)
  403. #define CInputUsage_Long_Play ((USAGE) 0x00F3)
  404. #define CInputUsage_Extended_Play ((USAGE) 0x00F4)
  405. #define CInputUsage_Slow ((USAGE) 0x00F5)
  406. // advanced device control
  407. #define CInputUsage_Fan_Enable ((USAGE) 0x0100)
  408. #define CInputUsage_Fan_Speed ((USAGE) 0x0101)
  409. #define CInputUsage_Light_Enable ((USAGE) 0x0102)
  410. #define CInputUsage_Illumination_Level ((USAGE) 0x0103)
  411. #define CInputUsage_Climate_Control_Enable ((USAGE) 0x0104)
  412. #define CInputUsage_Room_Temperature ((USAGE) 0x0105)
  413. #define CInputUsage_Security_Enable ((USAGE) 0x0106)
  414. #define CInputUsage_Fire_Alarm ((USAGE) 0x0107)
  415. #define CInputUsage_Police_Alarm ((USAGE) 0x0108)
  416. // suppl. audio
  417. #define CInputUsage_Balance_Right ((USAGE) 0x0150)
  418. #define CInputUsage_Balance_Left ((USAGE) 0x0151)
  419. #define CInputUsage_Bass_Increment ((USAGE) 0x0152)
  420. #define CInputUsage_Bass_Decrement ((USAGE) 0x0153)
  421. #define CInputUsage_Treble_Increment ((USAGE) 0x0154)
  422. #define CInputUsage_Treble_Decrement ((USAGE) 0x0155)
  423. #define CInputUsage_MS_Bass_Up ((USAGE) 0x0169)
  424. #define CInputUsage_MS_Bass_Down ((USAGE) 0x0169)
  425. #define CInputUsage_MS_Bass_Page ((USAGE) 0xff00)
  426. // App Launch
  427. #define CInputUsage_Launch_Configuration ((USAGE) 0x0183)
  428. #define CInputUsage_Launch_Email ((USAGE) 0x018A)
  429. #define CInputUsage_Launch_Calculator ((USAGE) 0x0192)
  430. #define CInputUsage_Launch_Browser ((USAGE) 0x0194)
  431. // App Commands
  432. #define CInputUsage_App_Help ((USAGE) 0x0095)
  433. #define CInputUsage_App_Spell_Check ((USAGE) 0x01AB)
  434. #define CInputUsage_App_New ((USAGE) 0x0201)
  435. #define CInputUsage_App_Open ((USAGE) 0x0202)
  436. #define CInputUsage_App_Close ((USAGE) 0x0203)
  437. #define CInputUsage_App_Save ((USAGE) 0x0207)
  438. #define CInputUsage_App_Print ((USAGE) 0x0208)
  439. #define CInputUsage_App_Undo ((USAGE) 0x021A)
  440. #define CInputUsage_App_Copy ((USAGE) 0x021B)
  441. #define CInputUsage_App_Cut ((USAGE) 0x021C)
  442. #define CInputUsage_App_Paste ((USAGE) 0x021D)
  443. #define CInputUsage_App_Find ((USAGE) 0x021F)
  444. #define CInputUsage_App_Search ((USAGE) 0x0221)
  445. #define CInputUsage_App_Home ((USAGE) 0x0223)
  446. #define CInputUsage_App_Back ((USAGE) 0x0224)
  447. #define CInputUsage_App_Forward ((USAGE) 0x0225)
  448. #define CInputUsage_App_Stop ((USAGE) 0x0226)
  449. #define CInputUsage_App_Refresh ((USAGE) 0x0227)
  450. #define CInputUsage_App_Previous ((USAGE) 0x0228)
  451. #define CInputUsage_App_Next ((USAGE) 0x0229)
  452. #define CInputUsage_App_Bookmarks ((USAGE) 0x022A)
  453. #define CInputUsage_App_Redo ((USAGE) 0x0279)
  454. #define CInputUsage_App_Reply_To_Mail ((USAGE) 0x0289)
  455. #define CInputUsage_App_Forward_Mail ((USAGE) 0x028B)
  456. #define CInputUsage_App_Send_Mail ((USAGE) 0x028C)
  457. // Keyboard/Keypad
  458. #define CInputUsage_Keypad_Equals ((USAGE) 0x0067)
  459. #define CInputUsage_Keypad_LParen ((USAGE) 0x00B6)
  460. #define CInputUsage_Keypad_RParen ((USAGE) 0x00B7)
  461. #define CInputUsage_Keypad_At ((USAGE) 0x00CE)
  462. #ifdef __cplusplus
  463. }
  464. #endif /* __cplusplus */
  465. #endif // _HIDSERV_H_