A bit late, but here is the first beta of the Option HSDPA driver for FreeBSD 8. It’s more or less completely rewritten and there are some visible changes to the interface.

Because ucom(4) has matured it can now be utilized instead of mucking around directly with the TTY layer. This results in that the device names in /dev has changed and are now longer called /dev/HSO*, instead they follow the standard ucom names of cuaU*.

The new USB stack attach USB devices per USB interface instead of per USB device, so it’s possible to get both a cuaU0 and cuaU1 device (instead of just cuaU0.0 and cuaU0.1). The number of found serial ports can be read through sysctl.

The packet interface is now exposed as a raw interface instead of emulating an Ethernet device (I seriously wonder why I did that…).

The driver switches automatically from install-cd mode to modem mode, there is no longer any need for manual switching through devd. Please remove the option-icon.conf file from your /usr/local/etc/devd directory.
This can be disabled by setting hw.usb.uhso.auto_switch to 0

And last, I’ve renamed the driver to uhso to reflect its USB nature.

Download: uhso-20091122.tar.gz – Add support for iCON 505, fix probing of devices with dynamic number of interfaces, add new custom attach messages based on the port type.

Download: uhsoctl-beta-20090820.tar.gz – uhsoctl connection utility, similar to old hsoctl

Download: uhso-beta-20090812.tar.gz – Minor bug fix and reworked sysctl nodes.

Download: uhso-beta-20090723.tar.gz – No longer PTP interface (completely useless), fixed (hopefully) CDC notification on modem port, added several new device IDs. Thanks to Iain Hibbert for this!

Download: uhso-beta-20090722.tar.gz – Bug fixes that should improve RX speed.

Download: uhso-beta-20090720.tar.gz

If you own an Option device, please leave a comment (or send a mail) with its full name and USB device ID.

I’m particularly interested in the following devices iCON 031, iCON 210, iCON 315, iCON 322, iCON 401, iCON 431, iCON 451, iCON 452, iCON 505.

If you’re running FreeBSD 8 and own an Option device, please mail me the output of

usbconfig -u X -a Y dump_device_desc
usbconfig -u X -a Y dump_all_config_desc

where X and Y (5 and 2 below) can be obtained through usbconfig

# usbconfig
...
ugen5.2: <Globetrotter HSDPA Modem Option N.V.> at usbus5, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

This driver has been tested with a Globesurfer iCON 7.2, iCON 255, iCON 505

Quick setup for manual connection
uhsoctl works as before!

Look up the serial ports

# sysctl dev.uhso
dev.uhso.0.netif: uhso0
dev.uhso.0.type: Network/Serial
dev.uhso.0.ports: 2
dev.uhso.0.port.control.tty: cuaU0.0
dev.uhso.0.port.control.desc: Control
dev.uhso.0.port.application.tty: cuaU0.1
dev.uhso.0.port.application.desc: Application
...
dev.uhso.1.type: Serial
dev.uhso.1.ports: 1
dev.uhso.1.port.diagnostic.tty: cuaU1
dev.uhso.1.port.diagnostic.desc: Diagnostic

Open /dev/cuaU0.0 in a terminal application, for example minicom. Issue the following commands to establish a connection.

AT+CPIN="1234" # Your PIN
OK

AT_OWANCALL=1,1,1
OK

AT_OWANDATA=1
_OWANDATA: 1, 95.209.79.126, 0.0.0.0, 80.251.201.177, 80.251.201.178, 0.0.0.0, 0.0.0.0, 72000

If you haven’t configured a PDP context with your providers APN, please see the hso page.

Configure the interface and set a default route

# ifconfig uhso0 95.209.79.126
# route add default -interface uhso0
15 Responses to “uhso(4): Option HSDPA driver for FreeBSD 8”
  1. Nikola says:

    Hi;

    I have Option iCON225 3G USB stick. I tried to use it with pfSense as my WAN interface. Default configuration of my 3G stick is to work as NDIS interface. I get three interfaces on my pfsense machine, they are cuaU0.0(control interface), cuaU0.1(application interface), cuaU2(diagnostic interface). First two I can access with minicom or similar software and exchange AT commands. This configuration (NDIS interface) on stick looks like this AT_OIFC=2,1,1,0. Configured as it is work fine with uhso driver and uhsoctl connection tool. But, there is always but, pfsense is configured to work with standard modem interface throw configuring ppp connection (AT*99#). So, to get standard modem interface I’ve changed modem configuration to AT_OIFC=3,1,1,0. Now, it support NDIS and standard modem interface. On pfSense machine this is reckognized as another serial interface cuaU3. Uhsoctl still works fine. But when system or I try to communicate with modem on modem interface cuaU3 system froze. Does uhso driver support standard modem interface, and if it does, did someone use iCON225 stick configured as modem throw ppp connection?

    By, Nikola

  2. e0je says:

    Fredrik,

    I bought an option 225 but my system still locks up and leaves me to have to reboot. Is there some sort of conflicts in my kernel that I need to remove?

    I want my USB modem to be recognized under freebsd so i can use the smstools3 port as a sms gateway….

    It locks up when every i try to send data to the device.

  3. e0je says:

    ugen4.1: at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    bLength = 0×0012
    bDescriptorType = 0×0001
    bcdUSB = 0×0200
    bDeviceClass = 0×0009
    bDeviceSubClass = 0×0000
    bDeviceProtocol = 0×0001
    bMaxPacketSize0 = 0×0040
    idVendor = 0×0000
    idProduct = 0×0000
    bcdDevice = 0×0100
    iManufacturer = 0×0001
    iProduct = 0×0002
    iSerialNumber = 0×0000
    bNumConfigurations = 0×0001

    usbconfig -u 4 -a 1 dump_all_config_desc
    ugen4.1: at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    Configuration index 0

    bLength = 0×0009
    bDescriptorType = 0×0002
    wTotalLength = 0×0019
    bNumInterfaces = 0×0001
    bConfigurationValue = 0×0001
    iConfiguration = 0×0000
    bmAttributes = 0×0040
    bMaxPower = 0×0000

    Interface 0
    bLength = 0×0009
    bDescriptorType = 0×0004
    bInterfaceNumber = 0×0000
    bAlternateSetting = 0×0000
    bNumEndpoints = 0×0001
    bInterfaceClass = 0×0009
    bInterfaceSubClass = 0×0000
    bInterfaceProtocol = 0×0000
    iInterface = 0×0000

    Endpoint 0
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0081
    bmAttributes = 0×0003
    wMaxPacketSize = 0×0008
    bInterval = 0×00ff
    bRefresh = 0×0000
    bSynchAddress = 0×0000
    ——

    anyone have any luck getting this to work with smstools3 ? when i try to sendsms to /dev/cuaU3 my system locks up and I have to reboot.

  4. e0je says:

    Resolved… I had a bad USB controller, replaced with a new PCI Controller and card is detected :) thanks Fredrik

  5. e0je says:

    any ideas?

  6. e0je says:

    btw i’m using module from ports uhso-20100416 and uname -a is FreeBSD bsd.sprintbusiness.net 8.1-STABLE FreeBSD 8.1-STABLE #1: Sat Aug 21 15:40:01 PDT 2010 xxxx@bsd.xxxxxx:/usr/obj/usr/src/sys/GENERIC amd64

  7. e0je says:

    I have an option icon 322 and dmesg gives the following output when its inserted,

    usb_alloc_device: set address 2 failed (USB_ERR_IOERROR, ignored)
    usb_alloc_device: getting device descriptor at addr 2 failed, USB_ERR_IOERROR
    usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_IOERROR, ignored)
    usbd_req_re_enumerate: getting device descriptor at addr 2 failed, USB_ERR_IOERROR
    usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_IOERROR, ignored)
    usbd_req_re_enumerate: getting device descriptor at addr 2 failed, USB_ERR_IOERROR
    ugen0.2: at usbus0 (disconnected)
    uhub_reattach_port: could not allocate new device

    Any ideas how i can get this to work? thanks

  8. mariusz says:

    and tthis

    lap# sysctl dev.uhso
    dev.uhso.0.%desc: Network
    dev.uhso.0.%driver: uhso
    dev.uhso.0.%location: port=1 interface=0
    dev.uhso.0.%pnpinfo: vendor=0×0af0 product=0xc031 devclass=0xff devsubclass=0xff sernum=”serial_number” release=0×0100 intclass=0xff intsubclass=0xff
    dev.uhso.0.%parent: uhub0
    dev.uhso.0.netif: uhso0
    dev.uhso.0.type: Network/Serial
    dev.uhso.0.ports: 2
    dev.uhso.0.port.control.tty: cuaU0.0
    dev.uhso.0.port.control.desc: Control
    dev.uhso.0.port.application.tty: cuaU0.1
    dev.uhso.0.port.application.desc: Application
    dev.uhso.1.%desc: Diagnostic
    dev.uhso.1.%driver: uhso
    dev.uhso.1.%location: port=1 interface=1
    dev.uhso.1.%pnpinfo: vendor=0×0af0 product=0xc031 devclass=0xff devsubclass=0xff sernum=”serial_number” release=0×0100 intclass=0xff intsubclass=0xff
    dev.uhso.1.%parent: uhub0
    dev.uhso.1.type: Serial
    dev.uhso.1.ports: 1
    dev.uhso.1.port.diagnostic.tty: cuaU2
    dev.uhso.1.port.diagnostic.desc: Diagnostic
    dev.uhso.2.%desc: Modem
    dev.uhso.2.%driver: uhso
    dev.uhso.2.%location: port=1 interface=2
    dev.uhso.2.%pnpinfo: vendor=0×0af0 product=0xc031 devclass=0xff devsubclass=0xff sernum=”serial_number” release=0×0100 intclass=0xff intsubclass=0xff
    dev.uhso.2.%parent: uhub0
    dev.uhso.2.type: Serial
    dev.uhso.2.ports: 1
    dev.uhso.2.port.modem.tty: cuaU3
    dev.uhso.2.port.modem.desc: Modem

  9. mariusz says:

    Helo,
    A have a problem with Option ICON 031,
    Modem don’t work ,
    I’m using FreeBSD 8.0-RELEASE. I still can not connect to the internet
    Please, help me!

    lap# usbconfig -u 0 -a 2 dump_device_desc
    ugen0.2: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

    bLength = 0×0012
    bDescriptorType = 0×0001
    bcdUSB = 0×0110
    bDeviceClass = 0×0000
    bDeviceSubClass = 0×0000
    bDeviceProtocol = 0×0000
    bMaxPacketSize0 = 0×0040
    idVendor = 0×0af0
    idProduct = 0xc031
    bcdDevice = 0×0100
    iManufacturer = 0×0001
    iProduct = 0×0002
    iSerialNumber = 0×0003
    bNumConfigurations = 0×0001

    lap# usbconfig -u 0 -a 2 dump_all_config_desc
    ugen0.2: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

    Configuration index 0

    bLength = 0×0009
    bDescriptorType = 0×0002
    wTotalLength = 0×0020
    bNumInterfaces = 0×0001
    bConfigurationValue = 0×0001
    iConfiguration = 0×0004
    bmAttributes = 0×00c0
    bMaxPower = 0×0032

    Interface 0
    bLength = 0×0009
    bDescriptorType = 0×0004
    bInterfaceNumber = 0×0000
    bAlternateSetting = 0×0000
    bNumEndpoints = 0×0002
    bInterfaceClass = 0×0008
    bInterfaceSubClass = 0×0006
    bInterfaceProtocol = 0×0050
    iInterface = 0×0005

    Endpoint 0
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0081
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Endpoint 1
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0002
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Thanks,
    MAriusz

  10. haripour says:

    I’m so sorry. I used copy/paste that’s not work. The trully output is,

    #usbconfig
    …..
    ugen2.4: at usbus2, cfg=0 md=HOST spd-HIGH (480Mbps) pwr=ON

    #usconfig -u 2 -a 4 dump_device_desc
    ugen2.4: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    bLength = 0×0012
    bDescriptorType = 0×0001
    …..

    Thanks,
    Hari

  11. haripour says:

    I’m a newuser in FreeBSD. I’m using FreeBSD 8.0-RELEASE. I still can not connect to the internet. Below is the output of usbconfig command. How can I solved this problem?

    #usbconfig
    ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
    ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
    ugen2.1: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
    ugen2.2: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
    ugen2.3: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
    ugen1.2: at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
    ugen2.4: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    #usbconfig -u 2 -a 4 dump_device_desc
    ugen2.4: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    bLength = 0×0012
    bDescriptorType = 0×0001
    bcdUSB = 0×0200
    bDeviceClass = 0×00ff
    bDeviceSubClass = 0×00ff
    bDeviceProtocol = 0×00ff
    bMaxPacketSize0 = 0×0040
    idVendor = 0×0af0
    idProduct = 0×7501
    bcdDevice = 0×0000
    iManufacturer = 0×0002
    iProduct = 0×0001
    iSerialNumber = 0×0000
    bNumConfigurations = 0×0001

    #usbconfig -u 2 -a 4 dump_all_config_desc
    ugen2.4: at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON

    Configuration index 0

    bLength = 0×0009
    bDescriptorType = 0×0002
    wTotalLength = 0×0020
    bNumInterfaces = 0×0001
    bConfigurationValue = 0×0001
    iConfiguration = 0×0000
    bmAttributes = 0×0080
    bMaxPower = 0×00fa

    Interface 0
    bLength = 0×0009
    bDescriptorType = 0×0004
    bInterfaceNumber = 0×0000
    bAlternateSetting = 0×0000
    bNumEndpoints = 0×0002
    bInterfaceClass = 0×0008
    bInterfaceSubClass = 0×0006
    bInterfaceProtocol = 0×0050
    iInterface = 0×0000

    Endpoint 0
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0001
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0200
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Endpoint 1
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0081
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0200
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Thankyou very much,

    Regards,
    Hari

  12. odalis says:

    I bought the globesurfer for my icon 452 (Datajack) and the globesurfer isnt recongnizing it. please help.

  13. edd says:

    Hi Fredrik,

    I followed your advice and removed u3g from kernel.
    Now everything works . Thanks again :)

  14. edd says:

    Hi , not working for me :(
    FreeBSD zzz 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Tue Jan 5 16:02:27 UTC 2010 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386

    usbconfig:
    ugen3.2: at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

    usbconfig -u X -a Y dump_device_desc
    bLength = 0×0012
    bDescriptorType = 0×0001
    bcdUSB = 0×0110
    bDeviceClass = 0×00ff
    bDeviceSubClass = 0×00ff
    bDeviceProtocol = 0×00ff
    bMaxPacketSize0 = 0×0040
    idVendor = 0×0af0
    idProduct = 0×6971
    bcdDevice = 0×0000
    iManufacturer = 0×0001
    iProduct = 0×0002
    iSerialNumber = 0×0004
    bNumConfigurations = 0×0001

    usbconfig -u X -a Y dump_all_config_desc
    ugen3.2: at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

    Configuration index 0

    bLength = 0×0009
    bDescriptorType = 0×0002
    wTotalLength = 0×0041
    bNumInterfaces = 0×0002
    bConfigurationValue = 0×0001
    iConfiguration = 0×0000
    bmAttributes = 0×00a0
    bMaxPower = 0×00fa

    Interface 0
    bLength = 0×0009
    bDescriptorType = 0×0004
    bInterfaceNumber = 0×0000
    bAlternateSetting = 0×0000
    bNumEndpoints = 0×0003
    bInterfaceClass = 0×00ff
    bInterfaceSubClass = 0×00ff
    bInterfaceProtocol = 0×00ff
    iInterface = 0×0003

    Endpoint 0
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0083
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Endpoint 1
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0003
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Endpoint 2
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0085
    bmAttributes = 0×0003
    wMaxPacketSize = 0×0010
    bInterval = 0×0080
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Additional Descriptor

    bLength = 0×03
    bDescriptorType = 0×24
    bDescriptorSubType = 0×03
    RAW dump:
    0×00 | 0×03, 0×24, 0×03

    Interface 1
    bLength = 0×0009
    bDescriptorType = 0×0004
    bInterfaceNumber = 0×0001
    bAlternateSetting = 0×0000
    bNumEndpoints = 0×0002
    bInterfaceClass = 0×00ff
    bInterfaceSubClass = 0×00ff
    bInterfaceProtocol = 0×00ff
    iInterface = 0×0003

    Endpoint 0
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0084
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    Endpoint 1
    bLength = 0×0007
    bDescriptorType = 0×0005
    bEndpointAddress = 0×0004
    bmAttributes = 0×0002
    wMaxPacketSize = 0×0040
    bInterval = 0×0000
    bRefresh = 0×0000
    bSynchAddress = 0×0000

    There is no uhso0 interface , when trying: uhsoctl uhso0 i get:
    Segmentation fault (core dumped)

  15. stefreak says:

    Thank you very much, this driver works like a charm. It’s great!

    http://sprunge.us/bOKd

    Greetings,
    Steffen

  16.