Tenemos un dispositivo integrado que se conecta a la PC a través de USB, y tiene múltiples puertos seriales virtuales (CDC-ACM).Dispositivo de comunicaciones USB con múltiples puertos serie, que trabaja en todas las plataformas
Tenemos esto funcionando en Windows. En el dispositivo integrado, tenemos múltiples interfaces CDC-ACM. Los descriptores USB lo declaran como un dispositivo compuesto (clase = 0xEF, subclase = 2, protocolo = 1) y tiene un "Descriptor de asociación de interfaz" para cada puerto serie virtual. En Windows, utilizamos un archivo INF que instala usbser.sys para cada interfaz de control CDC-ACM (MI_00, MI_02, etc.).
Sin embargo, como hemos visto, este método no parece funcionar para Mac. Descubrí que puedo hacer que funcione para Mac y Linux, cambiándolo a una clase de "Comunicaciones" (clase = 2, subclase = 0, protocolo = 0) y eliminando los IAD. (Para Linux, probando con Ubuntu, encontré que esto funcionaba con el kernel de Ubuntu Linux 2.6.35-28 o posterior. Con kernels anteriores, solo funcionaba el primer puerto serie). Pero entonces, este método no funciona para Windows.
¿Qué método se puede usar para hacer un dispositivo USB con múltiples puertos serie virtuales, que funciona en Windows, Mac y Linux? Creo que preferiría una solución que use el estándar CDC-ACM tanto como sea posible, y evite la opción de escribir tus propios controladores tanto como sea posible.
Gracias por esa opción "fuera de la caja". Es una mayor carga de implementación en el dispositivo integrado, pero sin duda funcionaría sin problemas en las PC. –