在ubuntu 20上发现开发者手机的hdc在修改udev规则无法使用,颇为不便。修复方式如下。

// ==0 Represents new equipment and is what we need,<0  my need
int HdcHostUSB::OpenDeviceMyNeed(HUSB hUSB)
{
    libusb_device *device = hUSB->device;
    int ret = -1;
    int OpenRet = libusb_open(device, &hUSB->devHandle);
    if (OpenRet != LIBUSB_SUCCESS) {
        WRITE_LOG(LOG_DEBUG, "libusb_open fail xret %d", OpenRet);
        return -100;
    }
    while (modRunning) {
        libusb_device_handle *handle = hUSB->devHandle;
        libusb_set_auto_detach_kernel_driver(handle, 1);//修复开发者手机linux无法使用的问题
        struct libusb_device_descriptor desc;
        if (CheckDescriptor(hUSB, desc)) {
            break;
        }
        if (CheckActiveConfig(device, hUSB, desc)) {
            break;
        }
        // USB filter rules are set according to specific device pedding device
        ret = libusb_claim_interface(handle, hUSB->interfaceNumber);
        WRITE_LOG(LOG_DEBUG, "libusb_claim_interface ret %d, interfaceNumber %d",
            ret, hUSB->interfaceNumber);
        break;
    }
    if (ret) {
        // not my need device, release the device
        libusb_close(hUSB->devHandle);
        hUSB->devHandle = nullptr;
    }
    return ret;
}

下载地址

 

libusb_set_auto_detach_kernel_driver(handle, 1); 启用auto detach就可以识别了,目前只验证了ubuntu20,其他系统没有验证,发文做记录以方便遇到相同问题的开发者。

效果如下:

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐