LPCOpen Platform
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
HIDParser.h
Go to the documentation of this file.
1 /*
2  * @brief USB Human Interface Device (HID) Class report descriptor parser
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * Copyright(C) Dean Camera, 2011, 2012
7  * All rights reserved.
8  *
9  * @par
10  * Software that is described herein is for illustrative purposes only
11  * which provides customers with programming information regarding the
12  * LPC products. This software is supplied "AS IS" without any warranties of
13  * any kind, and NXP Semiconductors and its licensor disclaim any and
14  * all warranties, express or implied, including all implied warranties of
15  * merchantability, fitness for a particular purpose and non-infringement of
16  * intellectual property rights. NXP Semiconductors assumes no responsibility
17  * or liability for the use of the software, conveys no license or rights under any
18  * patent, copyright, mask work right, or any other intellectual property rights in
19  * or to any products. NXP Semiconductors reserves the right to make changes
20  * in the software without notification. NXP Semiconductors also makes no
21  * representation or warranty that such application will be suitable for the
22  * specified use without further testing or modification.
23  *
24  * @par
25  * Permission to use, copy, modify, and distribute this software and its
26  * documentation is hereby granted, under NXP Semiconductors' and its
27  * licensor's relevant copyrights in the software, without fee, provided that it
28  * is used in conjunction with NXP Semiconductors microcontrollers. This
29  * copyright, permission, and disclaimer notice must appear in all copies of
30  * this code.
31  */
32 
60 #ifndef __HIDPARSER_H__
61 #define __HIDPARSER_H__
62 
63  /* Includes: */
64  #include "../../../../Common/Common.h"
65 
66  #include "HIDReportData.h"
67  #include "HIDClassCommon.h"
68 
69  /* Enable C linkage for C++ Compilers: */
70  #if defined(__cplusplus)
71  extern "C" {
72  #endif
73 
74  /* Macros: */
75  #if !defined(HID_STATETABLE_STACK_DEPTH) || defined(__DOXYGEN__)
76 
82  #define HID_STATETABLE_STACK_DEPTH 2
83  #endif
84 
85  #if !defined(HID_USAGE_STACK_DEPTH) || defined(__DOXYGEN__)
86 
93  #define HID_USAGE_STACK_DEPTH 8
94  #endif
95 
96  #if !defined(HID_MAX_COLLECTIONS) || defined(__DOXYGEN__)
97 
103  #define HID_MAX_COLLECTIONS 10
104  #endif
105 
106  #if !defined(HID_MAX_REPORTITEMS) || defined(__DOXYGEN__)
107 
113  #define HID_MAX_REPORTITEMS 20
114  #endif
115 
116  #if !defined(HID_MAX_REPORT_IDS) || defined(__DOXYGEN__)
117 
124  #define HID_MAX_REPORT_IDS 10
125  #endif
126 
136  #define HID_ALIGN_DATA(ReportItem, Type) ((Type)(ReportItem->Value << ((8 * sizeof(Type)) - ReportItem->Attributes.BitSize)))
137 
138  /* Public Interface - May be used in end-application: */
139  /* Enums: */
142  {
152  };
153 
154  /* Type Defines: */
159  typedef struct
160  {
163  } HID_MinMax_t;
164 
169  typedef struct
170  {
172  uint8_t Exponent;
173  } HID_Unit_t;
174 
179  typedef struct
180  {
181  uint16_t Page;
182  uint16_t Usage;
183  } HID_Usage_t;
184 
190  typedef struct HID_CollectionPath
191  {
192  uint8_t Type;
194  struct HID_CollectionPath* Parent;
196 
201  typedef struct
202  {
203  uint8_t BitSize;
210 
215  typedef struct
216  {
217  uint16_t BitOffset;
218  uint8_t ItemType;
219  uint16_t ItemFlags;
220  uint8_t ReportID;
225  uint32_t Value;
230 
235  typedef struct
236  {
237  uint8_t ReportID;
238  uint16_t ReportSizeBits[3];
242 
247  typedef struct
248  {
259  bool UsingReportIDs;
263 
264  /* Function Prototypes: */
274  uint8_t USB_ProcessHIDReport(const uint8_t* ReportData,
275  uint16_t ReportSize,
277 
291  bool USB_GetHIDReportItemInfo(const uint8_t* ReportData,
292  HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
293 
307  void USB_SetHIDReportItemInfo(uint8_t* ReportData,
308  HID_ReportItem_t* const ReportItem) ATTR_NON_NULL_PTR_ARG(1);
309 
319  uint16_t USB_GetHIDReportSize(HID_ReportInfo_t* const ParserData,
320  const uint8_t ReportID,
321  const uint8_t ReportType) ATTR_CONST ATTR_NON_NULL_PTR_ARG(1);
322 
338 
339  /* Private Interface - For use in library only: */
340  #if !defined(__DOXYGEN__)
341  /* Type Defines: */
342  typedef struct
343  {
345  uint8_t ReportCount;
346  uint8_t ReportID;
347  } HID_StateTable_t;
348  #endif
349 
350  /* Disable C linkage for C++ Compilers: */
351  #if defined(__cplusplus)
352  }
353  #endif
354 
355 #endif
356