forked from mfulz_github/qmk_firmware
Add new error condition to the HID Report Parser for when a report is parsed but no unfiltered items are encountered (i.e. nothing of interest in the device report). Make all host HID "WithParser" demos print the new error condition.
This commit is contained in:
parent
576f40f5ae
commit
849b9535e7
|
@ -56,11 +56,13 @@
|
||||||
#define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)
|
#define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)
|
||||||
|
|
||||||
/** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying
|
/** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying
|
||||||
* storage media (Dataflash) using a different native block size.
|
* storage media (Dataflash) using a different native block size. Do not change this value.
|
||||||
*/
|
*/
|
||||||
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
||||||
|
|
||||||
/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */
|
/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not
|
||||||
|
* change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size.
|
||||||
|
*/
|
||||||
#define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
|
#define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
|
|
|
@ -56,11 +56,13 @@
|
||||||
#define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)
|
#define VIRTUAL_MEMORY_BYTES ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)
|
||||||
|
|
||||||
/** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying
|
/** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying
|
||||||
* storage media (Dataflash) using a different native block size.
|
* storage media (Dataflash) using a different native block size. Do not change this value.
|
||||||
*/
|
*/
|
||||||
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
||||||
|
|
||||||
/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. */
|
/** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not
|
||||||
|
* change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size.
|
||||||
|
*/
|
||||||
#define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
|
#define VIRTUAL_MEMORY_BLOCKS (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
|
|
|
@ -106,7 +106,7 @@ int main(void)
|
||||||
|
|
||||||
if (USB_HID_Host_SetReportProtocol(&Keyboard_HID_Interface) != 0)
|
if (USB_HID_Host_SetReportProtocol(&Keyboard_HID_Interface) != 0)
|
||||||
{
|
{
|
||||||
printf("Could not Set Report Protocol Mode.\r\n");
|
printf("Error Setting Report Protocol Mode or Not a Valid Keyboard.\r\n");
|
||||||
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||||
USB_HostState = HOST_STATE_WaitForDeviceRemoval;
|
USB_HostState = HOST_STATE_WaitForDeviceRemoval;
|
||||||
break;
|
break;
|
||||||
|
@ -114,7 +114,7 @@ int main(void)
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_NO_LEDS);
|
LEDs_SetAllLEDs(LEDS_NO_LEDS);
|
||||||
|
|
||||||
printf("HID Device Enumerated.\r\n");
|
printf("Keyboard Enumerated.\r\n");
|
||||||
USB_HostState = HOST_STATE_Configured;
|
USB_HostState = HOST_STATE_Configured;
|
||||||
break;
|
break;
|
||||||
case HOST_STATE_Configured:
|
case HOST_STATE_Configured:
|
||||||
|
|
|
@ -106,7 +106,7 @@ int main(void)
|
||||||
|
|
||||||
if (USB_HID_Host_SetReportProtocol(&Mouse_HID_Interface) != 0)
|
if (USB_HID_Host_SetReportProtocol(&Mouse_HID_Interface) != 0)
|
||||||
{
|
{
|
||||||
printf("Could not Set Report Protocol Mode.\r\n");
|
printf("Error Setting Report Protocol Mode or Not a Valid Mouse.\r\n");
|
||||||
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||||
USB_HostState = HOST_STATE_WaitForDeviceRemoval;
|
USB_HostState = HOST_STATE_WaitForDeviceRemoval;
|
||||||
break;
|
break;
|
||||||
|
@ -114,7 +114,7 @@ int main(void)
|
||||||
|
|
||||||
LEDs_SetAllLEDs(LEDS_NO_LEDS);
|
LEDs_SetAllLEDs(LEDS_NO_LEDS);
|
||||||
|
|
||||||
printf("HID Device Enumerated.\r\n");
|
printf("Mouse Enumerated.\r\n");
|
||||||
USB_HostState = HOST_STATE_Configured;
|
USB_HostState = HOST_STATE_Configured;
|
||||||
break;
|
break;
|
||||||
case HOST_STATE_Configured:
|
case HOST_STATE_Configured:
|
||||||
|
|
|
@ -172,7 +172,11 @@ void Keyboard_HID_Task(void)
|
||||||
if ((ErrorCode = GetHIDReportData()) != ParseSuccessful)
|
if ((ErrorCode = GetHIDReportData()) != ParseSuccessful)
|
||||||
{
|
{
|
||||||
puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n"));
|
puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n"));
|
||||||
printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
|
|
||||||
|
if (!(HIDReportInfo->TotalReportItems))
|
||||||
|
puts_P(PSTR("Not a valid Keyboard." ESC_FG_WHITE));
|
||||||
|
else
|
||||||
|
printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
|
||||||
|
|
||||||
/* Indicate error via status LEDs */
|
/* Indicate error via status LEDs */
|
||||||
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||||
|
@ -200,7 +204,7 @@ void Keyboard_HID_Task(void)
|
||||||
((ReportSizeFeatureBits >> 3) + ((ReportSizeFeatureBits & 0x07) != 0)));
|
((ReportSizeFeatureBits >> 3) + ((ReportSizeFeatureBits & 0x07) != 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
puts_P(PSTR("HID Device Enumerated.\r\n"));
|
puts_P(PSTR("Keyboard Enumerated.\r\n"));
|
||||||
|
|
||||||
USB_HostState = HOST_STATE_Configured;
|
USB_HostState = HOST_STATE_Configured;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -171,8 +171,12 @@ void Mouse_HID_Task(void)
|
||||||
/* Get and process the device's first HID report descriptor */
|
/* Get and process the device's first HID report descriptor */
|
||||||
if ((ErrorCode = GetHIDReportData()) != ParseSuccessful)
|
if ((ErrorCode = GetHIDReportData()) != ParseSuccessful)
|
||||||
{
|
{
|
||||||
printf_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n"
|
puts_P(PSTR(ESC_FG_RED "Report Parse Error.\r\n"));
|
||||||
" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
|
|
||||||
|
if (!(HIDReportInfo->TotalReportItems))
|
||||||
|
puts_P(PSTR("Not a valid Mouse." ESC_FG_WHITE));
|
||||||
|
else
|
||||||
|
printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
|
||||||
|
|
||||||
/* Indicate error via status LEDs */
|
/* Indicate error via status LEDs */
|
||||||
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||||
|
@ -200,7 +204,7 @@ void Mouse_HID_Task(void)
|
||||||
((ReportSizeFeatureBits >> 3) + ((ReportSizeFeatureBits & 0x07) != 0)));
|
((ReportSizeFeatureBits >> 3) + ((ReportSizeFeatureBits & 0x07) != 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
puts_P(PSTR("HID Device Enumerated.\r\n"));
|
puts_P(PSTR("Mouse Enumerated.\r\n"));
|
||||||
|
|
||||||
USB_HostState = HOST_STATE_Configured;
|
USB_HostState = HOST_STATE_Configured;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -296,6 +296,9 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, uint16_t ReportSize, HID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(ParserData->TotalReportItems))
|
||||||
|
return HID_PARSE_NoUnfilteredReportItems;
|
||||||
|
|
||||||
return HID_PARSE_Successful;
|
return HID_PARSE_Successful;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,6 +144,7 @@
|
||||||
HID_PARSE_InsufficientCollectionPaths = 5, /**< More than \ref HID_MAX_COLLECTIONS collections in the report. */
|
HID_PARSE_InsufficientCollectionPaths = 5, /**< More than \ref HID_MAX_COLLECTIONS collections in the report. */
|
||||||
HID_PARSE_UsageStackOverflow = 6, /**< More than \ref HID_USAGE_STACK_DEPTH usages listed in a row. */
|
HID_PARSE_UsageStackOverflow = 6, /**< More than \ref HID_USAGE_STACK_DEPTH usages listed in a row. */
|
||||||
HID_PARSE_InsufficientReportIDItems = 7, /**< More than \ref HID_MAX_REPORT_IDS report IDs in the device. */
|
HID_PARSE_InsufficientReportIDItems = 7, /**< More than \ref HID_MAX_REPORT_IDS report IDs in the device. */
|
||||||
|
HID_PARSE_NoUnfilteredReportItems = 8, /**< All report items from the device were filtered by the filtering callback routine. */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Type Defines: */
|
/* Type Defines: */
|
||||||
|
|
Loading…
Reference in New Issue