Tuesday, August 2, 2011

USB CDC-ACM is really meant for USB Modem

Many users use USB CDC-ACM for virtual com port usage. It
is supported under Windows by the usbser.sys driver and
also works under Linux and Mac OS X and probably other OS
as well.

In reality, CDC-ACM is really meant for modems.
http://www.usb.org/developers/devclass_docs/usbcdc11.pdf

"3.6.2 Abstract Control Model
With an Abstract Control Model, the USB device understands standard
V.25ter (AT) commands. The device contains a Datapump and micro-controller
that handles the AT commands and relay controls. The device uses both a
Data Class interface and a Communication Class interface."

Microsoft states that usbser.sys is really meant for
USB modems.
http://social.msdn.microsoft.com/Forums/en-ZA/wdk/thread/993f5ce0-3ed1-45a9-a9fa-5d02626164d6

"usbser.sys is only good enough of a virtual serial port implementation to
enable it to be used as a modem".

Apple even insists that it is for network device (a USB modem is
a networking device) and insists to bring up the network configure
dialog. Here is an heated debate thread in Apple USB mailing list.
http://lists.apple.com/archives/usb/2011/Jun/msg00009.html

And Linux will issue a warning about a USB CDC-ACM device
if it is not a modem.
http://lxr.linux.no/#linux+v3.0/drivers/usb/class/cdc-acm.c

917 case USB_CDC_CALL_MANAGEMENT_TYPE:
918 call_management_function = buffer[3];
919 call_interface_num = buffer[4];
920 if ( (quirks & NOT_A_MODEM) == 0 &&
(call_management_function & 3) != 3)
921 dev_err(&intf->dev, "This device
cannot do calls on its own. It is not a modem.\n");
922 break;

No comments: