We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I'm trying to change the input report to 100 but it doen't work. I read almost all the threads of Tsuneo, but i can not get it to work. When I use the "SimpleHIDwrite" and try to get the reports i get "Get Report Error: Data Error (Cyclic redundancy check) (17)".
This only happens when i tried to make the input_report > 64 Bytes, otherwise works perfect other thing is that i read that if the packet that you send is smaller is automatically reduced, but not to me :(. From USBcfg.h i have the nexts defines
#define USB_MAX_PACKET0 64 #define InReport_length 100
Here i will put my report descriptor:
const BYTE HID_ReportDescriptor[] = { HID_UsagePageVendor( 0x00 ), HID_Usage( 0x01 ), HID_Collection( HID_Application ), HID_LogicalMin( 0 ), HID_LogicalMaxS( 0xFF ), HID_ReportSize( 8 ), // bits HID_ReportCount( InReport_length ), // bytes HID_Usage( 0x01 ), HID_Input( HID_Data | HID_Variable | HID_Absolute ), HID_ReportCount( 4 ), // bytes HID_Usage( 0x01 ), HID_Output( HID_Data | HID_Variable | HID_Absolute ), HID_EndCollection, }; const WORD HID_ReportDescSize = sizeof(HID_ReportDescriptor);
This part is in USBconfigdescriptor[]
const BYTE USB_ConfigDescriptor[] = { ..... ..... USB_ENDPOINT_DESC_SIZE, /* bLength */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ USB_ENDPOINT_IN(1), /* bEndpointAddress */ USB_ENDPOINT_TYPE_INTERRUPT, /* bmAttributes */ WBVAL(0x0040), /* wMaxPacketSize */ 0x02, /* 2ms */ /* bInterval */ /* Terminator */ 0 /* bLength */ };
I think that the problem may be is in hiduser.c but i could't check it because i didn't find code for this
BOOL HID_GetReport (void) { int i; /* ReportID = SetupPacket.wValue.WB.L; */ switch (SetupPacket.wValue.WB.H) { case HID_REPORT_INPUT: GetInReport(); for(i=0;i< InReport_length ;i++) EP0Buf[i] = InReport[i]; /*Copy all the report to send*/ break; case HID_REPORT_OUTPUT: return (FALSE); /* Not Supported */ case HID_REPORT_FEATURE: /* EP0Buf[] = ...; */ /* break; */ return (FALSE); /* Not Supported */ } return (TRUE); }
where EP0Buf[] is define in USBcore.h
extern BYTE EP0Buf[USB_MAX_PACKET0];
Of course i realized that EP0Buf was smaller so i tried doing
extern BYTE EP0Buf[InReport_length];
but was the same Endpoint 1 is
void USB_EndPoint1 (DWORD event) { InEP_empty = TRUE; }
If you need more info to deduce my problem just tell me.. Thanks
Sorry, for my late response, It takes for a while to find my free time to check your modification on a working board.
Your modification for Get_Report( INPUT ) request handling is fine. The problem should be in other place.
In the report descriptor, you increased the byte size of input and output report. Did you modify - interrupt IN endpoint handler for input report - Get_Report( OUTPUT ) request handler for output report
Maybe, the bug lies in the interrupt IN endpoint handler.
Tsuneo
Auu, my bad, In above post, Get_Report( OUTPUT ) <-- Set_Report( OUTPUT )