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