USBFSIOCTL呼び出しを使用してインターフェイスの代替設定を設定しようとしています。
以下は私のコードスニペットです。
int interface = 3;
struct usbdevfs_ioctl command;
struct usbdevfs_getdriver getdrv;
getdrv.interface = interface;
ret = ioctl(fd, USBDEVFS_GETDRIVER, &getdrv);
if (ret < 0)
{
print((" get driver failed %d %d", ret, errno));
}
command.ifno = interface;
command.ioctl_code = USBDEVFS_DISCONNECT;
command.data = NULL;
ret = ioctl(fd, USBDEVFS_IOCTL, &command);
if (ret < 0)
{
print((" detach driver failed %d %d", ret, errno));
}
ret = ioctl(fd, USBDEVFS_CLAIMINTERFACE, &interface);
if (ret < 0)
{
print(("claim interface failed %d %d", ret, errno));
}
si.interface = 3;
si.altsetting = setZerobandwidth;
ret = ioctl(fd, USBDEVFS_SETINTERFACE, &si);
if (ret < 0)
{
print(("set interface ioctl failed %d %d", ret, errno));
}
ret = ioctl(fd, USBDEVFS_RELEASEINTERFACE, &interface);
if (ret < 0)
{
print(("release interface ioctl failed %d %d", ret, errno));
}
command.ifno = interface;
command.ioctl_code = USBDEVFS_CONNECT;
command.data = NULL;
ret = ioctl(fd, USBDEVFS_IOCTL, &command);
if (ret < 0)
{
print(("attach driver ioctl failed %d %d", ret, errno));
}
ただし、ret = ioctl(fd, USBDEVFS_SETINTERFACE, &si)
正常に動作していますが、インターフェイスを解放すると、ret = ioctl(fd, USBDEVFS_RELEASEINTERFACE, &interface);
代替設定が最初のaltsettingにリセットされます。
libusb API Docに従って、libusb_release_interfaceは代替設定を最初の代替設定にリセットします。私が従う必要のあるIOCTL呼び出しについて教えてください。
alt setting
から恒久的に変更することはできませんuser space
。これは、から永続的に変更できますkernal space
。
エンドポイントの使用を閉じることをお勧めします。閉じると、カーネルはそれをゼロ帯域幅インターフェイスに設定します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加