我必须检测USB设备的“过电流”事件。
我正在Linux系统和C/C++语言中进行开发。
我该怎么做?
发布于 2011-09-20 23:23:20
您可以使用uevents。这是一些tutorial。为了观看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
...
}
}可以肯定的是,其中一个事件将指示过电流状态。
发布于 2011-09-20 21:46:13
查看特定根端口/主机控制器的源代码可能会对您有所帮助。
例如:http://www.spinics.net/lists/linux-usb/msg49451.html使用特定的主机控制器驱动程序解释过电流检测。
https://stackoverflow.com/questions/7485544
复制相似问题