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.

"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.

"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.

And Linux will issue a warning about a USB CDC-ACM device
if it is not a modem.

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: