高级会员

- 积分
- 504
- 金钱
- 504
- 注册时间
- 2012-4-26
- 在线时间
- 17 小时
|

楼主 |
发表于 2015-9-30 11:32:19
|
显示全部楼层
void Data_Setup0(void)
{
uint8_t *(*CopyRoutine)(uint16_t);
RESULT Result;
uint32_t Request_No = pInformation->USBbRequest;
uint32_t Related_Endpoint, Reserved;
uint32_t wOffset, Status;
CopyRoutine = NULL;
wOffset = 0;
/*GET DESCRIPTOR*/
if (Request_No == GET_DESCRIPTOR)
{
if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
{
uint8_t wValue1 = pInformation->USBwValue1;
if (wValue1 == DEVICE_DESCRIPTOR)
{
CopyRoutine = pProperty->GetDeviceDescriptor; //获取设备描述符
}
else if (wValue1 == CONFIG_DESCRIPTOR)
{
//pDescr=(uint8_t *)(&My_FS_CfgDescr[0]);
//len=32;
CopyRoutine = pProperty->GetConfigDescriptor;
}
else if (wValue1 == STRING_DESCRIPTOR)
{
CopyRoutine = pProperty->GetStringDescriptor;
} /* End of GET_DESCRIPTOR */
}
}
................
.................
.................
if (CopyRoutine)
{
pInformation->Ctrl_Info.Usb_wOffset = wOffset;
pInformation->Ctrl_Info.CopyData = CopyRoutine;
(*CopyRoutine)(0);
Result = USB_SUCCESS;
}
............
............
就是上面红色部分,CopyRoutine是返回指针值得指针型函数, CopyRoutine = pProperty->GetDeviceDescriptor;这句话的意思是CopyRoutine 指向设备描述缓冲区地址。
不明白 (*CopyRoutine)(0);这句话的意思,调试时发现运行了这句话后pInformation->Ctrl_Info.Usb_wLength 会被赋值。
|
|