zoukankan      html  css  js  c++  java
  • usb_control_msg() -- 从设备读取各种信息

    et_port_status() --> usb_control_msg()
    usb_get_descriptor() --> usb_control_msg()
    /usr/src/linux-2.6.21.5/drivers/usb/core/message.c

    将request, requesttype, value, index, size加工成usb_ctrlrequest,然后调用usb_internal_control_msg()

    dev                     参数dev指向目标设备的usb_device数据结构
    pipe                    pipe是个32位无符号整数,其最高两位表示传输的类型(实时/中断/控制/批量),其余各位包括对方的端口号以及设备号,以及设备是否为全速(或者低度)。
    requesttype             requesttype其最高位表示传输的方向,最低5位则表明传输终极对象的类别(设备/接口/端口/其他)
    index, request, value   index则指明具体的单元,这就是终极的操作对象。针对这个操作对象,request说明了需要进行的具体操作,而value则是参数
    data, size              如果有更多的数据需要传递(读/写),则通过缓冲区data进行,其大小为size。 这些都是从用户空间传下来的参数,而传输的目的正是要把这些信息发送给目标设备
    timeout                 参数timeout表示愿意睡眠等待传输完成的时间
    ------------------------------------------------------
    int usb_control_msg(
        struct usb_device   *dev, unsigned int   pipe, 
        __u8 -request, __u8 requesttype, __u16   value,   
        __u16 index,   void *data,       __u16   size, 
        int   timeout)
    {
        struct usb_ctrlrequest *dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
        int ret;
        if (!dr)
            return -ENOMEM;
        dr->bRequestType= requesttype;
        dr->bRequest = request;
        dr->wValue = cpu_to_le16p(&value);
        dr->wIndex = cpu_to_le16p(&index);
        dr->wLength = cpu_to_le16p(&size);
        ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout);
        kfree(dr);
        return ret;
    }
    文章
  • 相关阅读:
    Codeforces 1009F Dominant Indices
    C++之++运算符重载问题
    Codeforces 1010D Mars rover
    这是一个开始
    MoreEffectiveC++Item35(异常)(条款9-15)
    C++隐式类类型转化
    MoreEffectiveC++Item35(操作符)(条款5-8)
    MoreEffectiveC++Item35(基础议题)(条款1-4)
    php+mysql网站无限级栏目分类-递归获取树形结构函数
    JavaScript简易动画
  • 原文地址:https://www.cnblogs.com/Ph-one/p/9023576.html
Copyright © 2011-2022 走看看