}
可见核心函数只支持设备描述符、配置描述符以及字符串描述符。最终该函数将调用: Result=
(*pProperty->Class_Data_Setup)(pInformation->USBbRequest); 调用用户的类特殊实现来获取报告描述符,同时HID类描述符也是通过这种方式取得的。
7、主机从中断端点读取鼠标操作数据 主机会轮询设备,设备数据的准备在主函数中,用Joystick_Send(JoyState())函数来实现。
Mouse_Buffer[1] = X; Mouse_Buffer[2] = Y;
/*copy mouse position info in ENDP1 Tx Packet Memory Area*/ UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP1), 4); /* enable endpoint for transmission */ SetEPTxValid(ENDP1);
使能端点1的发送,当主机的IN令牌包来的时候,SIE将数据返回给主机。同时产生CTR中断。
在中断处理程序中,执行下列代码: if ((wEPVal & EP_CTR_TX) != 0) {
/* clear int flag */
_ClearEP_CTR_TX(EPindex); (*pEpInt_IN[EPindex-1])();
} /* if((wEPVal & EP_CTR_TX) != 0) */
这是在函数指针数组中调用函数,跟踪进入:发现这个函数什么也没有做。 经过对程序执行过程的跟踪和分析,我现在对USB设备HID类的工作有了大概的了解,对ST的USB库的工作也有了初步的概念。把所有文件的源代码粗略地浏览了一遍,心里大概有了些底。但现在我还不准备阅读源代码,我先把例程在智林开发板上移植好,再详细的阅读一遍源代码。