We use a CDC interface, we use this just as a serial port and any higher level protocol is just faked. It claims to be an ACM device responding to the AT command set.
This mostly works well on most OSs we're interested in, I inherited the project like this and as it worked, so I never changed it. But we have found one OS which insists on talking AT commands to it, which causes a few issues.
Is there a way to declare a device as just a serial port which will work with the inbox drivers of Mac OS, Windows and Linux? Looking over the CDC docs I can't say its obvious. I tried cutting out the CDC control interface and just leaving the data interface and that didn't work.