extern "C" {\r
#endif\r
\r
- /* Preprocessor checks and defines: */\r
+ /* Macros: */\r
#if !defined(HID_STATETABLE_STACK_DEPTH) || defined(__DOXYGEN__)\r
/** Constant indicating the maximum stack depth of the state table. A larger state table\r
* allows for more PUSH/POP report items to be nested, but consumes more memory. By default\r
#define HID_MAX_REPORT_IDS 10\r
#endif\r
\r
+ /** Returns the value a given HID report item (once its value has been fetched via \ref USB_GetHIDReportItemInfo())\r
+ * left-aligned to the given data type. This allows for signed data to be interpreted correctly, by shifting the data\r
+ * leftwards until the data's sign bit is in the correct position.\r
+ *\r
+ * \param[in] reportitem HID Report Item whose retrieved value is to be aligned\r
+ * \param[in] type Data type to align the HID report item's value to\r
+ *\r
+ * \return Left-aligned data of the given report item's pre-retrived value for the given datatype\r
+ */\r
+ #define HID_ALIGN_DATA(reportitem, type) ((type)(reportitem->Value << (sizeof(type) - reportitem->Attributes.BitSize)))\r
+\r
/* Public Interface - May be used in end-application: */\r
/* Enums: */ \r
/** Enum for the possible error codes in the return value of the \ref USB_ProcessHIDReport() function */\r
{\r
uint16_t Page; /**< Usage page of the report item. */\r
uint16_t Usage; /**< Usage of the report item. */\r
- HID_MinMax_t MinMax; /**< Usage minimum and maximum of the report item. */\r
} HID_Usage_t;\r
\r
/** Type define for a COLLECTION object. Contains the collection attributes and a reference to the\r
HID_ReportItem_Attributes_t Attributes; /**< Report item attributes. */\r
\r
uint32_t Value; /**< Current value of the report item. */\r
+ uint32_t PreviousValue; /**< Previous value of the report item. */ \r
} HID_ReportItem_t;\r
\r
/** Type define for a report item size information structure */\r
/** Extracts the given report item's value out of the given HID report and places it into the Value\r
* member of the report item's \ref HID_ReportItem_t structure.\r
*\r
+ * When called, this copies the report item's Value element to it's PreviousValue element for easy\r
+ * checking to see if an item's value has changed before processing a report.\r
+ *\r
* \param[in] ReportData Buffer containing an IN or FEATURE report from an attached device\r
* \param[in,out] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array\r
*\r
* buffer. The report buffer is assumed to have the appropriate bits cleared before calling\r
* this function (i.e., the buffer should be explicitly cleared before report values are added).\r
*\r
+ * When called, this copies the report item's Value element to it's PreviousValue element for easy\r
+ * checking to see if an item's value has changed before sending a report.\r
+ *\r
* If the device has multiple HID reports, the first byte in the report is set to the report ID of the given item.\r
*\r
* \param[out] ReportData Buffer holding the current OUT or FEATURE report data\r
* \param[in] ReportItem Pointer to the report item of interest in a \ref HID_ReportInfo_t ReportItem array\r
*/\r
- void USB_SetHIDReportItemInfo(uint8_t* ReportData, const HID_ReportItem_t* ReportItem)\r
+ void USB_SetHIDReportItemInfo(uint8_t* ReportData, HID_ReportItem_t* const ReportItem)\r
ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);\r
\r
/** Retrieves the size of a given HID report in bytes from it's Report ID.\r