Как обеспечить DEXT для интерфейса USB ACM, имеющего два дескриптора интерфейса (Control/Data)?
Интерфейс USB ACM имеет два дескриптора интерфейса: интерфейс управления ACM и интерфейс данных ACM. Управление ACM имеет EP прерывания, а интерфейс данных имеет EP BULK IN/OUT.
ACM Control используется для отправки и чтения данных прерывания с устройства, в настоящее время DEXT загружен с подклассом IOUserUSBSerial и записью tty, созданной для связи (/dev/cu.usbmodem1481). И реализация работает, способная обрабатывать методы HW Instance.
class UserUsbACMControl: public public IOUserUSBSerial
{
}
Данные ACM используются для записи и чтения данных, таких как AT-команды Req и Response с устройства, в настоящее время DEXT загружается с подклассом IOUserUSBSerial и записью tty, созданной для связи (/dev/cu.usbmodem1482). И реализация работает AT Req и response.
class UserUsbACMData: public public IOUserUSBSerial
{
}
Теперь проблема заключается в создании двух записей tty, возможно ли иметь одну запись TTY, где приложения открывают порт и обмениваются данными? Поскольку для функциональности ACM существуют два дескриптора интерфейса, как мы можем продолжить реализацию DEXT?
В драйверах kext драйверы данных загружаются как IOSerialDriverSync, а драйвер управления загружается как IOService, а при выполнении сопоставления служб (IOService::serviceMatching) вызываются пользовательские методы драйверов управления.
В случае разборки и проверки встроенных в Apple драйверов ECM DEXT, в них есть данные ECM/ ECM. ECM попытался открыть интерфейс данных, найдя дескрипторы, и смог отправить BULK USB Pipes, используя класс IOUSBHostPipes.
ECM - IOUserNetworkEthernet (info.plist)
Данные ECM - IOUserService (info.plist)