介绍完上述若干概念和回调函数,再看SET_REPORT的实现就很容易了。
SET_REPORT是一个数据出过程,因此需要实现一个Class_Data_Setup回调函数,示例如下:
- RESULT HID_Data_Setup(u8 RequestNo)
- {
- u8 *(*CopyRoutine)(u16 length);
- CopyRoutine = NULL;
- if (pInformation->USBbmRequestType == CLASS_REQUEST|INTERFACE_RECIPIENT
- && RequestNo == SET_REPORT)
- CopyRoutine = My_Data_Request;
- if (CopyRoutine == NULL)
- return USB_UNSUPPORT;
- pInformation->Ctrl_Info.CopyData = CopyRoutine;
- pInformation->Ctrl_Info.Usb_wOffset = 0;
- pInformation->Usb_wLength = (*CopyRoutine)(0);
- return USB_SUCCESS;
- } // End of HID_Data_Setup()
- u8 My_Buffer[10];
- u8 *My_Data_Request(u16 length)
- {
- if (length == 0)
- return (u8*)10; // 假定你的REPORT长度和Buffer长度为10
- return My_Buffer;
- }
|