Re: Tips on programming usb devices?

hello Iain. Thank you again for your assistance in getting this
Novatel modem working. I now have a working driver which, when activated
through the modem interface, fires up the ethernet portion of the device
and seems to work quite well. I'd like to commit this driver,aand probably
the scripts to activate it, to -current, but I have a few style questions
which I'd like to ask of you and of the NetBSD community in hopes of
getting some clarification on which approach might be best for getting a
good stable driver into the tree.
For those of you who haven't been following the thread, I'm working on
a driver for the Novatel 551L USB modem. I believe this device is based on
the Qualcomm Gobi 3,000 chip set and features a multi-interface USB device.
The first 4 interfaces present themselves as general communications ports,
of which the first permits standard serial connections through which modem
Hayes style AT commands can be sent to control the modem's behavior. The
other 3 ports are available and, I believe, work, but I don't know how to
use them. The last 2 interfaces look like a cdce(4) ethernet device, which
once the modem is activated, responds to dhcp client requests and allows IP
traffic to flow in and out through the device.
The driver I have, which runs under NetBSD-5, is essentially a mash up
of the u3g(4) and cdce(4) drivers. It attaches the first four interfaces
as serial ports using the ucom(4) driver and presents an ethernet interface
to the system for the last two interfaces. The Linux folks have chosen to
extend their cdce kernel driver to allow it to attach serial ports on
selected devices. Because I was learning how to do USB programming on this
project, I elected to implement a stand-alone driver. The new driver,
which I'm calling ugobi(4), can support other devices of this nature, I'm
thinking of devices like the LG Vl600 or the Pantech 290. I can think of
three ways to approach this issue, which is where I'd like feedback. Here
are my thoughts:
1. Keep the ugobi(4) driver as it is and commit it as a new USB driver,
complete with manual page and sample scripts showing how to activate the
modem through the At modem interface. Then, as more folks encounter these
modems, they can easily add them to this driver.
2. Extend the cdce(4) driver to look for flags in device specific entries
telling it to attach serial ports in addition to the ethernet interface.
this seems somehow unclean to me, though it was my original idea to do this
when I started this project.
3. Extend the umodem(4) driver to attach the unclaimed interfaces of these
modems as serial ports. This seems like the cleanest approach from a code
development perspective, but could cause a little confusion in practical
usage, as it could be more challenging to match up which serial ports go
with which ethernet interfaces. (Approach 1 doesn't have this problem
because the name of the base driver shows up on the same line as all the
sub-devices when the thing probes, see below.)
4. Another approach I haven't thought of?
Thoughts?
-thanks
-Brian
Here's the output from dmesg for the new device.
ugobi0 at uhub3 port 4
ugobi0: Novatel Wireless, Inc. Novatel Wireless 4G, rev 2.00/0.15, addr 2
ucom0 at ugobi0 portno 0: uGobi Serial Device
ucom1 at ugobi0 portno 1: uGobi Serial Device
ucom2 at ugobi0 portno 2: uGobi Serial Device
ucom3 at ugobi0 portno 3: uGobi Serial Device
ugobi0: faking address
ugobi0: address 2a:dc:14:00:00:00