Интерфейс USB на Xiaomi Mi A1 (и других)

#android #usb #communication

Вопрос:

У меня есть приложение на Android, которое использует USB-связь с внешним устройством. Хотя обычно приложение работает нормально, на некоторых телефонах это не так (например, Xiaomi Mi A1). Подключенное устройство видно, я могу получить видео и PID, но не могу общаться. Проблема в том, что это устройство отображается как устройство CDC, и телефоны, с которыми оно не взаимодействует, не возвращают интерфейс CDC (Класс устройств связи). Например, на пикселе 4:

 private @Nullable UsbInterface[] getInterfaceList() {
    if (mInterfaces == null) {
        int configurationCount = mConfigurations.length;
        int interfaceCount = 0;
        for (int i = 0; i < configurationCount; i  ) {
            UsbConfiguration configuration = mConfigurations[i];
            interfaceCount  = configuration.getInterfaceCount();
        }

        mInterfaces = new UsbInterface[interfaceCount];
        int offset = 0;
        for (int i = 0; i < configurationCount; i  ) {
            UsbConfiguration configuration = mConfigurations[i];
            interfaceCount = configuration.getInterfaceCount();
            for (int j = 0; j < interfaceCount; j  ) {
                mInterfaces[offset  ] = configuration.getInterface(j);
            }
        }
    }
 

возвращает 2 интерфейса:

 int USB_CLASS_COMM = 2;
int USB_CLASS_CDC_DATA = 0x0a;
 

но на Xiaomi Mi A1 он возвращает только
int USB_CLASS_COMM = 2;

а без USB_CLASS_CDC_DATA приложение не сможет подключиться к устройству.

Хотя кажется, что это не зависит от версии Android, кажется, что это зависит от телефона.

Мой вопрос в том, виноват ли в этом телефон — у него просто нет этого интерфейса? Или он действительно есть, но каким-то образом он должен быть включен?