新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2015-12-16
- 在线时间
- 8 小时
|
17金钱
本帖最后由 疯疯 于 2016-1-12 18:35 编辑
1.原子哥的发送数据函数不明白,“Joystick_Send(0,0,0,0); //发送松开命令给电脑”进入函数定义后发现
void Joystick_Send(u8 buf0,u8 buf1,u8 buf2,u8 buf3)
{
uint8_t Mouse_Buffer[4] = {0, 0, 0, 0};
Mouse_Buffer[0]=buf0;
Mouse_Buffer[1]=buf1;
Mouse_Buffer[2]=buf2;
Mouse_Buffer[3]=buf3;
USB_SIL_Write(EP1_IN, Mouse_Buffer, 4); /* Copy mouse position info in ENDP1 Tx Packet Memory Area*/
SetEPTxValid(ENDP1); /* Enable endpoint for transmission */
} 这里我理解的是向端点1发送数据而不是向电脑,应该还得有一个设置输出端点啊,可是怎么没发现啊?为什么只有输入端点1,却没有输出端点 ,怎么传数据啊?不明白这一个端点是怎么工作的,因为我没有找到这个输出端点这个函数。
2.看资料说端点0的收发是必打开的,可是我怎么找不到在哪里设置的啊!
void EP1_IN_Callback(void)
{
PrevXferComplete = 1; /* Set the transfer complete token to inform upper layer that the current transfer has been complete 回调函数,告诉上一层,当前的发送已完成*
}
3.若改为键盘,是否需要增加一个输出端点?
4.端点收发的收据字节长度问题,原子哥的鼠标是设置了左中右滚轮四个字节,所以需要修改端点描述符最大字节长度,这个我明白,但是不明白这个端点设置是否与键盘的报告描述符
有关系???我理解的是没有关系。
5.为了测试数据是否正常,原子哥的主函数中设置了一个死循环给电脑不停发数据,然后用busbund抓数据,发现没有数据,只有上电时的枚举过程,截图如下。最后附上修改的原子哥
的程序。
主函数死循环入下(初始化部分省落)while(1)
{
Joystick_Send(0,0,0,0); //发送松开命令给电脑
delay_ms(100);
}
6.我对这个自定义HID设备不太理解,我做的这个键盘不是标准键盘,是属于自定义HID设备的范畴么???因为我看键盘报告描述符描述的都是一些标准键盘的数据。
非常着急,已经困这里很久了,实在不知道下一步如何进行了,希望大神们不吝赐教啊!
|
最佳答案
查看完整内容[请看2#楼]
我看set idle和set report两条类相关命令都没有实现,怎么可能枚举成功呢?
除非有现成的基于原子mini的键盘例程,否则也远水解不了近渴。
端点长度是在端点描述符中描述的,连同配置描述符、接口描述符一起返回的,但是键盘返回的数据格式是在报告描述符中描述的。
键盘不需要专门的输出端点,HID输出端点是可选的,一般用控制端点0。
键盘是标准的HID设备,自定义设备的类型是FF。
后续你可以仔细看一下HID官方协议,以及ST ...
|