• Linux 内核 usb_control_msg 接口


    usb_control_msg 函数就像 usb_bulk_msg 函数, 除了它允许一个驱动发送和结束 USB 控制信息:

    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);

    这个函数的参数几乎和 usb_bulk_msg 的相同, 有几个这样的不同: struct usb_device *dev

    指向发送控制消息去的 USB 设备的指针. unsigned int pipe

    控制消息要发送到的 USB 设备的特定端点. 这个值在 usb_sndctrlpipe 或者 usb_rcvctrlpipe 函数中被创建.

        u8 request

    这个控制消息的 USB 请求值.

        u8 requesttype

    这个控制消息的 USB 请求类型.

        u16 value

    这个控制消息的 USB 消息值.

        u16 index

    这个控制消息的 USB 消息索引值. void *data

    如果是一个 OUT 端点, 是一个指向要发送到设备的数据的指针. 如果是一个 IN 端点, 是一个在被从设备读取后数据被放置的地方的指针.

        u16 size

    被 data 参数指向的缓冲的大小. int timeout

    时间量, 以嘀哒计, 应当在超时前等待的. 如果这个值是 0, 这个函数将等待消息 结束.

    如果函数是成功的, 它返回被传送到或从这个设备的字节数. 如果它不成功, 它返回一个 负错误码.

    参数 request, requesttype, value, 和 index 都直接映射到 USB 规范给一个 USB 控 制消息如何被定义. 对于更多的关于这些参数的有效值的信息和它们如何被使用, 见 USB 规范的第 9 章.

    象 usb_bulk_msg 函数, 函数 usb_control_msg 不能被从中断上下文或者持有自旋锁中 被调用. 还有, 这个函数不能被任何其他函数取消, 所以当使用它时要小心; 确认你的驱 动的 disconnect 函数了解足够多, 在允许它自己被从内存卸载之前完成等待调用.

  • 相关阅读:
    UVa 820 因特网带宽(最大流)
    UVa 1001 奶酪里的老鼠(Dijkstra或Floyd)
    UVa 821 网页跳跃(Floyd)
    UVa 11624 大火蔓延的迷宫
    UVa 10881 蚂蚁
    UVa 11300 分金币
    UVa 11729 突击战
    《额尔古纳河右岸》读书笔记
    HDU 1083 Courses(二分图匹配模板)
    UVa 10618 跳舞机
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147392.html
Copyright © 2020-2023  润新知