博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于OHCI的USB主机开发 —— OHCI(控制端口写数据)
阅读量:7251 次
发布时间:2019-06-29

本文共 1567 字,大约阅读时间需要 5 分钟。

USB
设备初始化枚举过程中,需要发送一些设置命令到
USB
设备上,需要调用本函数来完成。函数的处理跟控制端口读数据差不多,只不过
TD
的数据传输方向设置不一样:
/**

 
通过控制端口发送设置数据的命令

 * @param pSetup Setup
包指针

 * @param *pData 
数据缓冲区指针

 */

short
 ctrlCmdSet(
unsigned
 
int
 pSetup, 
unsigned
 
char
 *pData)

{

    
//
初始化控制端点的
ED

    AT91F_CreateEd(

       (
unsigned
 
int
) &controlEd, 
// ED Address

       64,                           
// Max packet

       0,                         
// TD format

       0,                         
// Skip

       0,                         
// Speed

       0x0,                          
// Direction

       0,                           
// Endpoint

       usbDevInfo.
addr
,             
// Func Address

       (
unsigned
 
int
) &genTd[2],    
// TDQTailPointer

       (
unsigned
 
int
) &genTd[0],    
// TDQHeadPointer

       0,                         
// ToggleCarry

       0x0);                        
// NextED

   

    
//
控制端点的第一个
TD
,用于发送
Setup

    AT91F_CreateGenTd(

       (
unsigned
 
int
) &genTd[0],    
// TD Address

       2,                        
// Data Toggle

       TD_DELAY_INT,                
// DelayInterrupt

       TD_SETUP,                    
// Direction

       1,                        
// Buffer Rounding

       (
unsigned
 
int
) pSetup,      
// Current Buffer Pointer

       (
unsigned
 
int
) &genTd[1],    
// Next TD

       8);                       
// Buffer Length

 

    
//
控制端点的第二个
TD
,用于发送数据

    AT91F_CreateGenTd(

       (
unsigned
 
int
) &genTd[1],    
// TD Address

       3,                        
// Data Toggle

       TD_DELAY_INT,                
// DelayInterrupt

       TD_IN,                      
// Direction

       1,                        
// Buffer Rounding

       (
unsigned
 
int
) pData,       
// Current Buffer Pointer

       (
unsigned
 
int
) &genTd[2],    
// Next TD

       0);                          
// Buffer Length

 

    
//
标志
TD
队列结束的最后一个
TD
,设置为空

    AT91F_CreateGenTd(

       (
unsigned
 
int
) &genTd[2],    
// TD Address

       3,                         
// Data Toggle

       TD_DELAY_INT,                 
// DelayInterrupt

       TD_OUT,                     
// Direction

       1,                         
// Buffer Rounding

       0x0,                          
// Current Buffer Pointer

       (
unsigned
 
int
) 0,            
// Next TD

       0x0);                        
// Buffer Length

   

    
//
调用底层接口把数据发送出去

    ohciCtrlXfer(&controlEd);

 

    usbRunCmd(USB_CMD_TYPE_CTRL_WRITE, 2);

   

    
return
 0;

}
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/247246,如需转载请自行联系原作者
你可能感兴趣的文章
SqlServer 使用脚本创建分发服务及事务复制的可更新订阅
查看>>
什么是Floating (浮动)规则?
查看>>
分布式文件系统-FastDFS
查看>>
HTML5 rotate 做仪表盘
查看>>
为什么说荆州松滋刘氏采穴堂是刘开七、刘广传的后裔
查看>>
React中使用Ant Table组件
查看>>
第四篇 快速、轻量、可扩展、易于使用的EmEditor
查看>>
MySQL删除小写记录
查看>>
用shell脚本收集查询IP信息的网站
查看>>
shiro整合oauth
查看>>
超级网管员——网络管理
查看>>
AjaxControltoolkit(工具包)安装步骤说明
查看>>
利用组策略进行的一次Windows主机安全整改
查看>>
Ruby语法学习笔记(1)
查看>>
Windows Phone 7 使用选择器(Chooser)
查看>>
QOS 之 WRED
查看>>
ASP.NET MVC5 知识点整理
查看>>
CCNP 640-892知识点中文精简解释
查看>>
listview适配器与加载过程详解
查看>>
SDN控制器列表
查看>>