基于OHCI的USB主机开发 —— OHCI(控制端口读数据)

简介:
根据 USB 的规范,在系统初始化的时候需要从控制端口发送命令,其中有一些命令是包含数据的,对于这些命令,需要调用本函数来完成。函数内主要调用 AM9200 提供的 OHCI 接口: AT91F_CreateEd() AT91F_CreateGenTd() 来完成 ED TD 的参数设置:
/**

  从控制端点读取数据

 * @param pSetup Setup 包指针,用来设置数据长度和传输方向

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

 */

short  ctrlCmdGet( unsigned   int  pSetup,  unsigned   short  len,  unsigned   char  *pData)

{

     unsigned   char  direction;

   

     // 初始化控制端点的 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[3],     // TDQTailPointer

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

       0,                          // ToggleCarry

       0x0);                         // NextED

   

    direction = TD_IN;

   

     // 控制端点的第一个 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

       direction,                   // Direction

       1,                         // Buffer Rounding

       ( unsigned   int ) pData,        // Current Buffer Pointer

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

       len);                         // Buffer Length

 

     // 控制端点的第三个 TD ,用于得到命令的状态

    AT91F_CreateGenTd(

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

       3,                          // Data Toggle

       TD_DELAY_INT,                  // DelayInterrupt

       ~direction,                  // Direction

       1,                          // Buffer Rounding

       0x0,                           // Current Buffer Pointer

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

       0x0);                         // Buffer Length

 

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

    AT91F_CreateGenTd(

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

       3,                          // Data Toggle

       TD_DELAY_INT,                  // DelayInterrupt

       ~direction,                  // Direction

       1,                          // Buffer Rounding

       0x0,                           // Current Buffer Pointer

       ( unsigned   int ) 0,             // Next TD

       0x0);                         // Buffer Length

   

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

    ohciCtrlXfer(&controlEd);

   

     // 设置相关信息,以便中断程序中判断命令是否结束

    usbRunCmd(USB_CMD_TYPE_CTRL_READ, 3);

   

     return  0;

}





本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/247245,如需转载请自行联系原作者
目录
相关文章
高通平台开发系列讲解(USB篇)USB端口的说明及切换方法
高通平台开发系列讲解(USB篇)USB端口的说明及切换方法
347 0
高通平台开发系列讲解(USB篇)USB端口的说明及切换方法
|
4月前
|
安全 Linux 网络安全
Linux【安全 01】云服务器主机安全加固(修改SSHD端口、禁用登陆失败的IP地址、使用密钥登录)
Linux【安全 01】云服务器主机安全加固(修改SSHD端口、禁用登陆失败的IP地址、使用密钥登录)
183 1
|
5月前
|
Python
python 扫描局域网主机、爆破端口
python 扫描局域网主机、爆破端口
45 0
|
8月前
|
网络协议 Shell 网络安全
iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射
iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射
175 0
|
SQL 负载均衡 应用服务中间件
nginx安装 、分发实现多域名访问同一主机不同端口
nginx安装 、分发实现多域名访问同一主机不同端口
823 0
nginx安装 、分发实现多域名访问同一主机不同端口
|
安全 网络协议 网络安全
【工具】nmap的详细利用-主机发现-端口扫描-系统服务识别扫描-脚本利用
本文适合初学者以及想要进阶的小伙伴们,我们将从最简单的出发,一步步实现工具的精通,此外本文配有视频讲解,让您的理解更近一步。
376 0
|
网络协议 安全 Linux
腾讯云主机上部署端口敲门Knock服务
腾讯云主机上部署端口敲门Knock服务
326 0
腾讯云主机上部署端口敲门Knock服务
|
4月前
|
Ubuntu 关系型数据库 MySQL
百度搜索:蓝易云【ubuntu20.4服务器安装mysql社区版并开放3306端口】
现在,你已经在Ubuntu 20.04服务器上成功安装了MySQL社区版,并且已经开放了3306端口,可以通过该端口访问MySQL服务器了。请确保在生产环境中设置安全措施,例如设置强密码、限制访问等,以保护数据库的安全性。
96 2
|
3月前
|
Java Nacos Docker
在集成nacos时,端口9848报错但服务器的这个端口是开放的
在集成nacos时,端口9848报错但服务器的这个端口是开放的【1月更文挑战第14天】【1月更文挑战第67篇】
228 1
|
6月前
|
网络安全 数据安全/隐私保护
百度搜索:蓝易云【多个端口怎么运行SSH服务器?】
记得替换 `username`为你的用户名,`your_server_ip`为你的服务器IP地址。根据需要,可以添加其他端口并进行相应的配置。
86 0