繁体   English   中英

如何检测USB设备的“过电流”事件?

[英]How to detect “Over Current” event of an USB device?

我必须检测USB设备的“电流过大”事件。

我正在使用Linux系统和C / C ++语言进行开发。

我怎么做?

您可以使用uevents 这是一些教程 为了观看uevents您必须绑定特定的NETLINK_KOBJECT_UEVENT

int create_socket()
{
    int                sock   = -1;
    int                result = 0;
    struct sockaddr_nl snl;

    memset(&snl, 0x00, sizeof(struct sockaddr_nl));
    snl.nl_family = AF_NETLINK;
    snl.nl_pid    = getpid();
    snl.nl_groups = -1;

    sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
    if (sock != -1)
    {
        result = bind(sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));
        if (result < 0)
        {
            dbg("bind failed, exit\n");
            close(sock);
            sock = -1;
        }
    }
    else
        dbg("error getting socket, exit\n");
    return sock;
}

int main() {
...    
    sock = create_socket();
    while(sock != -1)
    {
        buflen = recv(sock, &buffer, sizeof(buffer), 0);
        // parse buffer for event description
        ...
    }
}

可以肯定的事件之一将指示过电流状态。

它可以帮助您查看特定根端口/主机控制器的源代码。

例如: http : //www.spinics.net/lists/linux-usb/msg49451.html说明了使用特定主机控制器驱动程序的过电流检测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM