I have been trying now for several days to configure a USB OUT Endpoint as an addition to an existing PE Demo HID.
So far I have failed to send any data via the Endpoint or via the Control Channel (EP0) to the processor.
I am using KDS 3.0.0 with SDK 1.3.0 on Windows 10 platform building for MK20DX256VLK10 processor.
Attached is my project file in a zip archive.
This is my workflow.
Firstly I generate the basic PE configuration for the processor with the USB HID Demo (Thermometer).
This works fine and with the USB Analyser I can see the USB device is detected and sends the periodic 2 byte temperature reports.
From the PC I am using the hidapi library to access the HID device (using QT Creator & C++).
I can open the HID device hidHandle = hid_open( 0x04D8, 0xFC40, NULL ); and it is OK.
If I do a read of the device I get the 2 byte temperature report OK. hid_read ( hidHandle, TestReport,3 ) ;
If I do a write to the device I always get -1 (error) hid_write ( hidHandle, TestReport, 3 ) ;
Also if I try to send or read from the Control port this also always gives me an error.
hid_get_feature_report ( hidHandle, TestReport, 3 );
hid_send_feature_report ( hidHandle, TestReport, 3 ) ;
I expect when I do the get and send feature report to see the following requestIDs activated in the callback function ;
but I never see the callback called for these request IDs when I try to do a get/send from the PC.
On the processor side I have added an additional endpoint using PE to give an EP1 OUT using INTERRUPT.
I am now struggling to understand how I can get the processor to receive and reply to SET/GET_REPORT_REQUESTs.
Any advice you can give me to make progress on this would be very much appreciated.
p.s. one modification I tried with the stack code is in usb_framework.c as described in this discussion
I added the line to set the data parameter. (The thread said this is fixed in SDK 1.3.0 but in my file the data assignment was still not there, or maybe the problem is fixed in a different way).
|448||/* class or vendor request */|
|449||size = event->len + USB_SETUP_PKT_SIZE;|
|data = event->buffer_ptr; // DLK added this bug fix|
|450||error = usb_fw_ptr->request_notify_callback(|
Original Attachment has been moved to: USB_K20TEST.zip
In this post, there was also some advices about handling these requests: How can I configure an USB HID Keyboard Output Endpoint with KDS processor expert ? Indeed, in KSDK 1.3, the previous bug was fixed and it worked well.
Could you please validate if this can solve your issue?
Apologies for my late response, I missed your reply to my original query.
I now have an Out Endpoint configured in my software. The important thing was to add the (void)USB_Class_HID_Recv_Data( ); call to both the application_callback and class_callback functions as per the Send_Data() function. Also configure the additional out endpoint correctly in the descriptor tables. Also the size of the report descriptors is important and must line up on the host and device sides.
Once everything is in place the USB out endpoint works fine.
Thanks again for getting back to me on this, I am now making progress with our project and USB is working OK.