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.
Hy, i'm starting to program on stm32f407 and I have some problem using USB.
I manage to make simple application with wizard. But now, i want to make for example an HID Application with more than one endpoint. For example, i want ARM to send data to PC as a keyboard and mouse.
How can i make multiple endpoint and more complex HID report descriptor.
I use keil 4.54 and rl-arm library.
Thanks for your help. I found help and manual not clear on this point.
Ah, thanks. I wasn't aware that usb_config.c includes usb_lib.c
As of override of standard/class request handlers, maybe these routines are callbacks for this purpose.
\Keil\ARM\RV31\INC\usb_lib.c #if (USBD_HID_ENABLE) ... #else BOOL USBD_ReqGetDescriptor_HID (U8 **pD, U32 *len) { return (__FALSE); } BOOL USBD_EndPoint0_Setup_HID_ReqToIF (void) { return (__FALSE); } BOOL USBD_EndPoint0_Out_HID_ReqToIF (void) { return (__FALSE); } #endif /* (USBD_HID_ENABLE) */
To write custom handlers using these callbacks, this SETUP data should be required.
\Keil\ARM\RL\USB\INC\usb_def.h /* USB Default Control Pipe Setup Packet */ typedef __packed struct _USB_SETUP_PACKET { REQUEST_TYPE bmRequestType; /* bmRequestType */ U8 bRequest; /* bRequest */ __packed union { U16 wValue; /* wValue */ __packed struct { U8 wValueL; U8 wValueH; }; }; __packed union { U16 wIndex; /* wIndex */ __packed struct { U8 wIndexL; U8 wIndexH; }; }; U16 wLength; /* wLength */ } USB_SETUP_PACKET; \Keil\ARM\RL\USB\INC\usbd_core.h extern USB_SETUP_PACKET USBD_SetupPacket;
Tsuneo