RocketFish/Broadcom Bluetooth Adapter on Linux(Ubuntu)

If you purchased a RocketFish USB Bluetooth adapter, you are probably suffering from the same problem that many other users have, namely, the RocketFish USB Bluetooth adapter appears to be configured by the HID module with no apparent Bluetooth support.

Note: It appears that this fix is no longer required for Ubuntu Karmic (9.10). Ubuntu Karmic contains version 5.10 of the bluez package (as of this writing). Further, the execution of hid2hci appears to have been migrated to the udev configuration. Please reference /lib/udev/rules.d/70-hid2hci.rules. If anyone has any further issues, please describe them in the comments and I will be happy to provide any insight that I can.

When you connect your bluetooth adapter to your PC, you will likely see messages such as the following in the output of dmesg or in /var/log/messages:

==> /var/log/messages <==
Aug 11 21:57:51 kernel: [ 6311.724033] usb 6-1: new full speed USB device using ohci_hcd and address 26
Aug 11 21:57:51 kernel: [ 6311.898616] usb 6-1: configuration #1 chosen from 1 choice
Aug 11 21:57:51 kernel: [ 6311.900265] hub 6-1:1.0: USB hub found
Aug 11 21:57:51 kernel: [ 6311.902095] hub 6-1:1.0: 3 ports detected
Aug 11 21:57:52 kernel: [ 6312.196134] usb 6-1.2: new full speed USB device using ohci_hcd and address 27
Aug 11 21:57:52 kernel: [ 6312.314605] usb 6-1.2: configuration #1 chosen from 1 choice
Aug 11 21:57:52 kernel: [ 6312.322099] input: Broadcom Corp BCM2045B3 ROM as /devices/pci0000:00/0000:00:13.1/usb6/6-1/6-1.2/6-1.2:1.0/input/input29
Aug 11 21:57:52 kernel: [ 6312.354383] generic-usb 0003:0A5C:4502.0018: input,hidraw1: USB HID v1.11 Keyboard [Broadcom Corp BCM2045B3 ROM] on usb-0000:00:13.1-1.2/input0
Aug 11 21:57:52 kernel: [ 6312.436151] usb 6-1.3: new full speed USB device using ohci_hcd and address 28
Aug 11 21:57:52 kernel: [ 6312.549415] usb 6-1.3: configuration #1 chosen from 1 choice
Aug 11 21:57:52 kernel: [ 6312.559002] input: Broadcom Corp BCM2045B3 ROM as /devices/pci0000:00/0000:00:13.1/usb6/6-1/6-1.3/6-1.3:1.0/input/input30
Aug 11 21:57:52 kernel: [ 6312.585659] generic-usb 0003:0A5C:4503.0019: input,hidraw2: USB HID v1.11 Mouse [Broadcom Corp BCM2045B3 ROM] on usb-0000:00:13.1-1.3/input0

In order to use the bluetooth capabilities of this device, you must force the dongle into HCI mode. Unfortunately, the current version of the bluez utilities (specifically the hid2hci utility) available in Ubuntu Jaunty do not recognize this device, nor do they allow you to force the utilities to function on your device. In order to force this dongle into HCI mode, you will need to download the latest version of the bluez utilities, but first, you must install several development packages on your system (handled easily by the Synaptics package manager)

  • Launch the Synaptics package manager (alternatively, you may simply use apt-get install <package name> from command line) and install the following packages:
    • libdbus-1-dev
    • libglib2.0-dev
    • libusb-dev
  • Download the latest version of the bluez package from http://www.bluez.org/download. At the time of writing, the latest package was 4.47.
  • Uncompress the package using the tar utility: tar -xzvf bluez-<version>.tar.gz
  • Change into the new package directory: cd bluez-<version>
  • Configure the package with the configure script: ./configure
  • Change into the tools directory: cd tools
  • Execute the make command to make the hid2hci utility: make LDFLAGS+=-lusb hid2hci

If you receive the following output when you attempt to compile the hid2hci tool...

  CC     hid2hci.o
hid2hci.c:39: error: static declaration of ‘usb_get_busses’ follows non-static declaration
/usr/include/usb.h:332: error: previous declaration of ‘usb_get_busses’ was here
make: *** [hid2hci.o] Error 1

edit the file hid2hci.c with your favorite text editor. Change line 38 from

#ifdef NEED_USB_GET_BUSSES

to

#if 0

Once you have successfully compiled the hid2hci utility, you can use it to switch your dongle into HCI mode. Unlike previous versions of the hid2hci tool, the hid2hci tool in version 4.47 of the bluez package allows you to specify your device on the command line. This eliminates the need to modify the hid2hci.c file any further. Before your can execute the hid2hci tool, however, you must obtain the Vendor ID and Product ID of this devices. Fortunately, this information has already been provided in the output of the dmesg command above on the following line:

Aug 11 21:57:52 kernel: [ 6312.354383] generic-usb 0003:0A5C:4502.0018: input,hidraw1: USB HID v1.11 Keyboard [Broadcom Corp BCM2045B3 ROM] on usb-0000:00:13.1-1.2/input0

Alternatively, you may use the lsusb command to identify all Broadcom chipsets.

root# lsusb | grep -i broadcom

Bus 006 Device 032: ID 0a5c:4503 Broadcom Corp.
Bus 006 Device 031: ID 0a5c:4502 Broadcom Corp.
Bus 006 Device 030: ID 0a5c:4500 Broadcom Corp.

The first value following the "ID" is the Vendor ID and the value following the colon is the Product ID. Now that we have our device information, we may use the hid2hci tool to configure our device:

sudo ./hid2hci -v <vendor id> -p <product id> -r hci -m dell

In the case of the device above, that command would be:

sudo ./hid2hci -v 0a5c -p 4502 -r hci -m dell

Once you have executed that command, you should see some output in /var/log/syslog similar to the following

Aug 11 22:21:15 kernel: [ 7715.474541] usb 6-1.1: new full speed USB device using ohci_hcd and address 33
Aug 11 22:21:15 kernel: [ 7715.587661] usb 6-1.1: configuration #1 chosen from 1 choice
Aug 11 22:21:15 bluetoothd[10827]: HCI dev 0 registered
Aug 11 22:21:15 bluetoothd[10827]: HCI dev 0 up
Aug 11 22:21:15 bluetoothd[10827]: Starting security manager 0
Aug 11 22:21:15 bluetoothd[10827]: Can't read class of adapter on /org/bluez/10827/hci0: Unknown error 18446744073709551611 (-5)
Aug 11 22:21:15 bluetoothd[10827]: Getting name failed with status 0x0c
Aug 11 22:21:15 bluetoothd[10827]: Can't read class of device on hci0: Input/output error (5)

If for some reason you do not see the above output, you can attempt to run the hid2hci command against the other Product IDs. Once you have identified the correct Product ID, you only need to run the hid2hci tool against that single Product ID in the future. Finally, once you have placed your dongle into HCI mode, you can reset the hci0 device with the following command:

sudo hciconfig hci0 reset

After a few moments, you should see the following output in /var/log/syslog:

Aug 11 22:24:52 bluetoothd[10827]: HCI dev 0 down
Aug 11 22:24:52 bluetoothd[10827]: Adapter /org/bluez/10827/hci0 has been disabled
Aug 11 22:24:52 bluetoothd[10827]: Stopping security manager 0
Aug 11 22:24:52 bluetoothd[10827]: HCI dev 0 up
Aug 11 22:24:52 bluetoothd[10827]: Starting security manager 0
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.SerialProxyManager on path /org/bluez/10827/hci0
Aug 11 22:24:52 bluetoothd[10827]: rfcomm_bind: Address already in use (98)
Aug 11 22:24:52 bluetoothd[10827]: audio-headset: Operation not permitted (1)
Aug 11 22:24:52 bluetoothd[10827]: l2cap_bind: Address already in use (98)
Aug 11 22:24:52 bluetoothd[10827]: audio-a2dp: Operation not permitted (1)
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.NetworkPeer on path /org/bluez/10827/hci0
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.NetworkHub on path /org/bluez/10827/hci0
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.NetworkRouter on path /org/bluez/10827/hci0
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.Service on path /org/bluez/10827/hci0
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.Serial on path /org/bluez/10827/hci0/dev_00_1C_EF_3C_6D_B4
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.Headset on path /org/bluez/10827/hci0/dev_00_1C_EF_3C_6D_B4
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.AudioSink on path /org/bluez/10827/hci0/dev_00_1C_EF_3C_6D_B4
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.Control on path /org/bluez/10827/hci0/dev_00_1C_EF_3C_6D_B4
Aug 11 22:24:52 bluetoothd[10827]: Registered interface org.bluez.Input on path /org/bluez/10827/hci0/dev_00_1C_EF_3C_6D_B4
Aug 11 22:24:52 bluetoothd[10827]: Adapter /org/bluez/10827/hci0 has been enabled

Once you see that output, your bluetooth device should be ready to go. Please note, if you disconnect your bluetooth device for any reason, you will simply have to execute the hid2hci command followed by the hciconfig command to get your dongle working again.

No votes yet

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Hi there, I am running Ubuntu 9.10 and have everything working except for the scroll wheel on the mouse. I have found multiple fixes, but they all say "does not work under Karmic 9.10". I have yet to find a fix. Can you provide any insight? I am worried that if I try a fix that is not meant for Karmic that I will break is already working. Thanks in advance!

Are you using your bluetooth adapter with a bluetooth mouse? Unfortunately I do not have a bluetooth mouse. To be honest, I eventually abandoned the Rocketfish adapter due to other compatability issues. With this adapter, I was able to transfer files and register any device, but ran into issues using things like A2DP and input recording. Unfortunately, I never tracked the issues down, but it is possible that you've run into the same sort of compatability issues. Another possible option is the hal configuration for the mouse once connected. You may want to review /var/log/Xorg.0.log to see how it registers the mouse. You may be able to steal some bits about the configuration from the genius pentablet page here: http://www.shotmentality.com/content/bgoines78/genius_pen_tablet_f610_li... . You may need to add some additional keys such as Emulate3Buttons and ZAxisMapping in an fdi configuration similar to the one found in the article here: https://wiki.ubuntu.com/X/Config/Input . The specific bits that you would be interested in are here:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.mouse">
        <merge key="input.x11_driver" type="string">mouse</merge>
        <merge key="input.x11_options.Emulate3Buttons" type="string">no</merge>
        <merge key="input.x11_options.ZAxisMapping" type="integer">4 5</merge>
    </match>
  </device>
</deviceinfo>

What's going on if I get to the hid2hci -v 0a5c -p 4502 -r hci -m dell line and it tells me "invalid option -- 'v' " ?

Hmm, is it possible that it is executing the binary found in your path instead of the one that you have compiled? Try executing the command by preceding it with ./. For example:

./hid2hci -v 0a5c -p 4502 -r hci -m dell

I think that the command should be executed this way in any case, so I will update the article to reflect that. In the meantime, let me know if this fixes the problem for you.

Thank you!  Your's is the solution to my own rocketfish dongle saga!  Bravo!!

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <pre> <table> <tr> <td> <th> <span>
  • Lines and paragraphs break automatically.

More information about formatting options