今天调试了一下STM32端点零输出,在原JoyStick例程中的Joystick_Data_Setup函数中加入了处理SET_REPOTR的判断和相应的处理函数,具体的函数参照香主博客。现在有两个疑问:
1.关于pInformation->Ctrl_Info.Usb_wLength = (*CopyRoutine)(0);
看到博文说,此处要改上如上的样子,改成如此后,还需要强制类型转换,对于此,我没做处理,即按照原例程中(*CopyRoutine)(0)写法,然后测试通过。问:此处修改是否必要?强制转换是如*(*CopyRoutine)(0)一般吗?直接加u16会有警告;
2.用BUSHOUND抓取数据,SET_REPORT后会有DATA OUT,一个字节的,可以用来控制LED灯。我在函数中处理如下:
void Joystick_Status_In(void)
{
if (Request == SET_REPORT)
{
if(SetReportBuffer[8]&0x01)
{
LED_Num=1;
}
else
{
LED_Num=0;
}
if(SetReportBuffer[8]&0x02)
{
LED_Caps=1;
}
else
{
LED_Caps=0;
}
Request = 0;
}
}
此处,我不太明确接收的数据存放在什么地方,是设定的SetReportBuffer吗?如下测试发现,只要按下大写或者数据锁定键,都会造成外部变量LED_Num变化,不明所以。问:SET_REPORT后的DATA OUT 存放在哪?要用它做判定。
这部分内容现学,很多不太清楚,请各位帮忙解释一下,不胜感激! |