# Linear HUSBZB-1 USB to Serial driver



## trumee (Aug 19, 2017)

Hi,

I have a Linear HUSBZB-1,  USB to Serial Zwave/Zigbee usb controller which is based on USB CP210x UART bridge controller (http://cateee.net/lkddb/web-lkddb/USB_SERIAL_CP210X.html).

FreeBSD shows the device as

```
kernel: ugen0.5: <Silicon Labs HubZ Smart Home Controller> at usbus0
kernel: ugen0.5: <vendor 0x0658 product 0x0200> at usbus0
root: Unknown USB device: vendor 0x10c4 product 0x8a2a bus uhub1
```

Also,

```
#usbconfig -d ugen0.5 dump_all_config_desc
ugen0.5: <Silicon Labs HubZ Smart Home Controller> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)


 Configuration index 0

    bLength = 0x0009
    bDescriptorType = 0x0002
    wTotalLength = 0x0037
    bNumInterfaces = 0x0002
    bConfigurationValue = 0x0001
    iConfiguration = 0x0000  <no string>
    bmAttributes = 0x0080
    bMaxPower = 0x0032

    Interface 0
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0000
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x00ff  <Vendor specific>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0003  <HubZ Z-Wave Com Port>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0081  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0001  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0040
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000


    Interface 1
      bLength = 0x0009
      bDescriptorType = 0x0004
      bInterfaceNumber = 0x0001
      bAlternateSetting = 0x0000
      bNumEndpoints = 0x0002
      bInterfaceClass = 0x00ff  <Vendor specific>
      bInterfaceSubClass = 0x0000
      bInterfaceProtocol = 0x0000
      iInterface = 0x0004  <HubZ ZigBee Com Port>

     Endpoint 0
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0082  <IN>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0020
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000

     Endpoint 1
        bLength = 0x0007
        bDescriptorType = 0x0005
        bEndpointAddress = 0x0002  <OUT>
        bmAttributes = 0x0002  <BULK>
        wMaxPacketSize = 0x0020
        bInterval = 0x0000
        bRefresh = 0x0000
        bSynchAddress = 0x0000
```
It seems that uslcom driver should pick it up. Unfortunately, it doesnt. Is it possible to get this working in FreeBSD11.1?

Linux lsusb shows

```
Bus 001 Device 002: ID 10c4:8a2a Cygnal Integrated Products, Inc.
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x10c4 Cygnal Integrated Products, Inc.
  idProduct          0x8a2a
  bcdDevice            1.00
  iManufacturer           1 Silicon Labs
  iProduct                2 HubZ Smart Home Controller
  iSerial                 5 C0F00927
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           55
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              3 HubZ Z-Wave Com Port
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      iInterface              4 HubZ ZigBee Com Port
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               0
Device Status:     0x0000
  (Bus Powered)
```


----------



## trumee (Aug 19, 2017)

I have some success. 

Added the following in /usr/src/sys/dev/usb/usbdevs

```
product SILABS  HUBZ            0x8a2a  HubZ Smart Home Controller
```

and in /usr/src/sys/dev/usb/serial/uslcom.c Line 315

```
USLCOM_DEV(SILABS, HUBZ),
```

Compile module at /usr/src/sys/modules/usb/uslcom and it is recognized


```
Aug 19 13:22:56 kernel: uslcom0 numa-domain 0 on uhub1
Aug 19 13:22:56 kernel: uslcom0: <HubZ Z-Wave Com Port> on usbus0
Aug 19 13:22:56 kernel: uslcom1 numa-domain 0 on uhub1
Aug 19 13:22:56 kernel: uslcom1: <HubZ ZigBee Com Port> on usbus0

crw-rw----  1 uucp  dialer  0x477 Aug 19 13:22 /dev/cuaU0
crw-rw----  1 uucp  dialer  0x478 Aug 19 13:22 /dev/cuaU0.init
crw-rw----  1 uucp  dialer  0x479 Aug 19 13:22 /dev/cuaU0.lock
crw-rw----  1 uucp  dialer  0x47d Aug 19 13:22 /dev/cuaU1
crw-rw----  1 uucp  dialer  0x47e Aug 19 13:22 /dev/cuaU1.init
crw-rw----  1 uucp  dialer  0x47f Aug 19 13:22 /dev/cuaU1.lock
```


----------



## Winter (Jan 9, 2018)

trumee said:


> I have some success.
> 
> Added the following in /usr/src/sys/dev/usb/usbdevs
> 
> ...



This is great, I was able to recompile the module on my freenas server and successfully recognise the device.

I was able to pair a Zigbee device, still trying to figure out why it wont respond.


----------



## Winter (Feb 3, 2018)

What's the process to get this patched into the kernel?


----------



## Phishfry (Feb 3, 2018)

File a PR with details and attach a proper patch and see what happens. Maybe nudge HPS@ as he is the usb guru.
https://www.freebsd.org/support/bugreports.html


----------



## Winter (Feb 3, 2018)

Bug reported:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225641


----------



## Winter (Feb 16, 2018)

And merged! Wow that was quick. Hopefully the next freenas 11 release will already have the patch included


----------

