* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
#endif\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
if (HIDReportEcho.ReportID)\r
*ReportID = HIDReportEcho.ReportID;\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;\r
\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
uint8_t JoyStatus_LCL = Joystick_GetStatus();\r
uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
\r
bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfaceInfo);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_MouseReport_Data_t* MouseReport = (USB_MouseReport_Data_t*)ReportData;\r
\r
extern USB_ClassInfo_HID_Device_t Mouse_HID_Device_Interface;\r
\r
/* Function Prototypes: */\r
+ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
+ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
+ const void* ReportData, const uint16_t ReportSize);\r
+\r
void EVENT_USB_Device_Connect(void);\r
void EVENT_USB_Device_Disconnect(void);\r
void EVENT_USB_Device_ConfigurationChanged(void);\r
.HIDInterfaceProtocol = HID_BOOT_MOUSE_PROTOCOL,\r
},\r
};\r
- \r
+\r
\r
/** Event handler for the USB_DeviceAttached event. This indicates that a device has been attached to the host, and\r
* starts the library USB task to begin the enumeration and USB management process.\r
\r
uint16_t ReportINSize = 0;\r
uint8_t ReportID = (USB_ControlRequest.wValue & 0xFF);\r
+ uint8_t ReportType = (USB_ControlRequest.wValue >> 8) - 1;\r
\r
memset(HIDInterfaceInfo->Config.PrevReportINBuffer, 0, HIDInterfaceInfo->Config.PrevReportINBufferSize);\r
\r
- CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID,\r
+ CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportType,\r
HIDInterfaceInfo->Config.PrevReportINBuffer, &ReportINSize);\r
\r
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);\r
\r
memset(ReportINData, 0, sizeof(ReportINData));\r
\r
- bool ForceSend = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData, &ReportINSize);\r
+ bool ForceSend = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, REPORT_ITEM_TYPE_In,\r
+ ReportINData, &ReportINSize);\r
bool StatesChanged = false;\r
bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));\r
\r
* \param[in,out] ReportID If preset to a non-zero value, this is the report ID being requested by the host. If zero, this should\r
* be set to the report ID of the generated HID input report (if any). If multiple reports are not sent via the\r
* given HID interface, this parameter should be ignored.\r
- * \param[out] ReportData Pointer to a buffer where the generated HID report should be stored.\r
+ * \param[in] ReportType Type of HID report to generate, either \ref REPORT_ITEM_TYPE_In or \ref REPORT_ITEM_TYPE_Feature\r
+ * \param[out] ReportData Pointer to a buffer where the generated HID report should be stored\r
* \param[out] ReportSize Number of bytes in the generated input report, or zero if no report is to be sent\r
*\r
* \return Boolean true to force the sending of the report even if it is identical to the previous report and still within\r
* the idle period (useful for devices which report relative movement), false otherwise\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)\r
- ATTR_NON_NULL_PTR_ARG(3) ATTR_NON_NULL_PTR_ARG(4);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize) ATTR_NON_NULL_PTR_ARG(1)\r
+ ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(4) ATTR_NON_NULL_PTR_ARG(5);\r
\r
/** HID class driver callback for the user processing of a received HID OUT report. This callback may fire in response to\r
* either HID class control requests from the host, or by the normal HID endpoint polling procedure. Inside this callback\r
* - The SCSI_Request_Sense_Response_t and SCSI_Inquiry_Response_t type defines are now part of the Mass Storage Class\r
* driver common defines, rather than being defined in the Host mode Class driver section only\r
* - The USB_MODE_HOST token is now defined even when host mode is not available\r
+ * - The CALLBACK_HID_Device_CreateHIDReport() HID Device Class driver callback now has a new ReportType parameter to\r
+ * indicate the report type to generate\r
*\r
* <b>Fixed:</b>\r
* - Added missing CDC_Host_CreateBlockingStream() function code to the CDC Host Class driver\r
*\r
* \section Sec_MigrationXXXXXX Migrating from 091122 to XXXXXX\r
* \r
- * <b>There is no migration information for this version.</b>\r
+ * <b>Device Mode</b>\r
+ * - The CALLBACK_HID_Device_CreateHIDReport() HID Device Class driver callback now has a new ReportType parameter to\r
+ * indicate the report type to generate. Existing applications may simply add and ignore this additional parameter.\r
*\r
* \section Sec_Migration091122 Migrating from 090924 to 091122\r
* \r
* \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent\r
*/\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize)\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize)\r
{\r
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;\r
\r
void EVENT_USB_Device_StartOfFrame(void);\r
\r
bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, uint8_t* const ReportID,\r
- void* ReportData, uint16_t* ReportSize);\r
+ const uint8_t ReportType, void* ReportData, uint16_t* ReportSize);\r
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, const uint8_t ReportID, \r
const void* ReportData, const uint16_t ReportSize);\r
\r