STM32 USB HID的GET_REPORT 与 SET_REPORT请求
来源:互联网 发布:qq安全中心软件下载 编辑:程序博客网 时间:2024/05/16 13:38
1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加如下代码:
/*** GET_PROTOCOL ***/
else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_PROTOCOL)
{
CopyRoutine = CustomHID_GetProtocolValue;
} /* 以上代码为原有例程中的代码 */
/*** GET_REPORT ***/ /* 以下代码支持GET_REPORT */
else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_REPORT)
{
CopyRoutine = CustomHID_GetReport;
}
2)再增加一个函数:
uint8_t *CustomHID_GetReport(uint16_t Length)
{
if (Length == 0)
{
return 10;
}
return &Report_Buffer[pInformation->Ctrl_Info.Usb_wOffset];
}
3)保证在IN Token到来之前,Report_Buffer中包含有效的数据。
上述过程十分简单,但有时不能保证在IN Token到来之前,Report_Buffer中包含有效的数据,即要发送的数据还没有准备好;这时就希望先设置一个标志,让IN Token返回NAK,让CustomHID_Data_Setup()这个函数返回,待数据准备好之后再继续前述的数据拷贝过程。
这个要求使用STM32的USB开发库也是很容易实现的:
1)在usb_prop.c的函数CustomHID_Data_Setup()中,GET_PROTOCOL之后增加的代码变为这样:
/*** GET_REPORT ***/
else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_REPORT)
{
if (数据未准备好)
return USB_NOT_READY;
CopyRoutine = CustomHID_GetReport;
}
这样,STM32将以NAK回应PC端的IN请求。
2)同样增加一个函数CustomHID_GetReport。
3)在数据准备好之后(注意准备数据的时间不能太长,否则PC端会做超时处理),执行下述操作:
pInformation->Ctrl_Info.CopyData = CustomHID_GetReport;
pInformation->Ctrl_Info.Usb_wOffset = 0;
CustomHID_GetReport(0);
pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize;
DataStageIn();
- STM32 USB HID的GET_REPORT 与 SET_REPORT请求
- STM32 自定义HID USB设备的实现
- STM32 USB HID 键盘
- stm32 usb hid
- usb hid通信 STM32
- 基于STM32处理器的USB HID模拟鼠标键盘(1) - USB HID基础
- -00-开始【USB-HID在STM32上的实现】
- STM32——USB详细使用说明 附件HID的双向通信
- stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备
- USB的HID类
- STM32 USB-HID通信移植步骤
- STM32 USB-HID通信移植步骤
- STM32 USB-HID通信移植步骤
- STM32 USB-HID通信移植步骤
- STM32 USB-HID通信移植步骤
- STM32 USB-HID通信移植步骤
- STM32 USB HID设备驱动分析
- STM32 USB-HID通信移植步骤
- Qt入门之信号与槽机制
- 搭建《unix网络编程》那本书所需的环境 + 可能遇到的问题
- eclipse(juno)、svn插件、maven本地、maven插件安装
- Android Gallery效果
- 机器视觉开源处理库汇总
- STM32 USB HID的GET_REPORT 与 SET_REPORT请求
- C语言 - printf的占位符(%) 异常
- linux c 之signal 和sigaction区别 (转载)
- java下载文件
- VC++ 产生error MSB6006的错误解决方法
- Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
- 云南警方称翻版“我爸是李刚”当事人未放狠话
- 用DELPHI 开发压缩、解压、自解压、加密
- 安卓4.1系统7寸大彩屏考勤终端