24

Insignia NS-PCY5BMA Bluetooth 4.0, Macintosh Yosemite 10.10.2, and Handoff

Posted on 19th May 2015

Insignia NS-PCY5BMAWith the release of Yosemite and iOS 8.1, came a new way to connect the many Apple devices that one person can have. This method known as Continuity and Handoff allows a phone call to be answered on a Macintosh computer and transferred to an iPhone along with access to continuing to edit an email from one device to another. These are just a couple of examples of Apple’s new feature set. See Apple’s explanation here.

The feature is designed to work only with newer model Macs and can leave some of us, including Hackintoshers, out of the mix. The requirements call for Bluetooth 4.0 and certain WiFi chipsets to natively enable the feature. Some work from the community has given us the “Continuity Activation Enabler” for older Macs and can even work for some Hackintoshes that have a Bluetooth 4.0 adaptor that is natively support Out of the Box in Yosemite. A cheap Bluetooth adaptor can be found in a lot of places online, but local availability of a solution can be limited.

Best Buy sells at least one Bluetooth 4.0 dongle under their in-house brand Insignia model NS-PCY5BMA. Luckily for us, it sports the Broadcom BCM20702A0 chipset which OS X Yosemite supports, but just not in the Insignia flavor. To enable Handoff, we must get a working Bluetooth 4.0 adaptor at the start. The Insignia one can be used after it is enabled in OS X. What we will look at today is how to get OS X to recognize this adaptor, and then activate the Handoff feature. This guide should work for any adaptor that has the BCM20702A0, but is not recognized under the Bluetooth section in the System Information window.

UPDATE: If you applied this fix in 10.10.2 and then upgraded to 10.10.3 or higher, then you will want to also reference this updated post.

The example we will use today, is a custom-built Hackintosh running an Intel i7-4770k (Haswell) processor while using Clover as the boot loader.  The processor and other specs are not particularly valuable in this guide except for these items:

  • Insignia NS-PCY5BMA Bluetooth 4.0 USB Adaptor (Dongle)
  • AirPort Extreme 0x14E4, 0x8D BCM43xx (Modified HP Wireless card flashed to look like an Apple model)
  • Yosemite 10.10.2
  • Activated and functioning iCloud and iMessages

It is important that you have a working iCloud and Messages on a Hackintosh for Handoff to work. On a real Mac, this should not be an issue. For guidance on getting iMessages to work on a Hack, you can reference my article from here for this example’s setup.

On this Hackintosh, we must first enable the Bluetooth adaptor through the native bluetooth kext, run the Continuity Activation Tool (CAT), and then tell Clover to patch the Bluetooth Kext to activate Handoff.

Step 1 – Modify IOBluetoothFamily.kext

The system recognizes the dongle only as a BCM

BCM20702A0 is under USB and your Product and Vendor ID are here as well.

To get the builtin Kext for the Broadcom BCM20702A0 to recognize the Insignia dongle, we need to add the devices Product and Vendor ID to the kext file. The kext that we need to modify is /System/Library/Extensions/IOBluetoothFamily.kext. Make a copy of it and place it on the Desktop. Once it is copied, right click on it and select “Show Package Contents” to reveal the folder “Contents”. Open the “Contents” folder and then the “Plugins” folder. In there you will see another Kext called “BroadcomBluetoothHostControllerUSBTransport.kext”.  Right click on that and select “Show Package Contents” and then navigate to “Contents”.

You should now see the “Info.plist” which is where we will make our edits. Open this with TextEdit (You may need to right click and select Other to pick TextEdit) and add the following code:


<key>PID 569 0x0239 VID 6655 0x19FF</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport</string>
<key>Dongles</key>
<dict>
<key>Best Buy</key>
<string>NP4.0</string>
<key>Insignia</key>
<string>BT V4.0</string>
</dict>
<key>IOClass</key>
<string>BroadcomBluetoothHostControllerUSBTransport</string>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>idProduct</key>
<integer>569</integer>
<key>idVendor</key>
<integer>6655</integer>
</dict>

Bluetooth should now show the adaptor and it's settings.

Bluetooth should now show the adaptor and it’s settings.

This will work for the Insignia model that we have here, but the same edit should work for most that use the same chipset. You just need to find the Product ID and Vendor ID and convert it from Hex to Integer. In our example the Product ID in hex is 0x0239. To convert it to an integer, go to this converter and input the Product ID minus the 0x. 0239 should come out as 569. Do the same for the Vendor id which 19ff becomes 6655 (again, omitting the 0x at the beginning).

Once you have the proper IDs in the Info.plist file, you can save it then close all windows. Now, you will need to use a Kext installer to replace the original IOBluetoohFamily.kext that still exists in your /System/Library/Extensions folder.

If the edits are correct, you should be able to reboot the computer and see the Device in the System Information window under Bluetooth.

Step 2 – Activate Handoff for Bluetooth 4.0 Dongles

Even after adding the product and vendor IDs in IOBluetoothFamliy.kext, Handoff will probably still not work on both a real Mac and Hackintosh. This is because Apple does not technically support Handoff through 3rd party adaptors, but can force it to. If you are on a real Mac, you should only need to use the “Continuity Activation Tool” or CAT to do this. It takes care of most things for you to get the adaptors to work with older Macs. We will not cover CAT in great detail here, but you will need the official download from Github which also has some directions on how to use it. We will still need it for out example machine because it helps us activate the WiFi portion of the requirements that Apple wants to have Handoff enabled. Without getting into too much detail about why the Wifi needs patched, it just only works out of the box with newer Wifi adaptors that are shipping with the newer products.

What is nice about CAT, is that it can tell use quickly what requirements we need or need patched. Run it and select 2 to run the diagnostic. If there is an issue with the WiFi, you will see it noted in there. It is not unlikely that you will find more then one thing that it needs to patch depending on what WiFi and Bluetooth hardware you are running. For older macs, you will want to run this with the dongle removed and only insert it when it prompts you to.

On a Hack, dongle detection will not work. All the other patches may still apply.

Step 3 – Activate Handoff on Non-Apple Hardware

On a Hack, CAT can do everything but force the Bluetooth to activate the Handoff feature. We will have to manually get this to patch and will do so using the Clover boot loader.

Enable Hand-Off in Clover Configurator.

Enable Handoff in Clover Configurator.

Clover has many advantages over Chimera, one of which is it’s ability to patch on load, leaving the main filesystem in tact and hopefully preventing software updates from breaking the system. I will try to do most everything that I can in Clover so that it is consolidated in one spot and easier to fix if something does break. For iMessages to work in Yosemite, Clover was the only option at the time so it may be a requirement at this point.

To patch the system to force-enable Handoff, we must add an entry to patch IOBluetoothFamily.kext. Using Clover Configurator, goto the “Kernel and Kext Patches” section and add an entry for the following:

Name: IOBluetoothFamily
Find* [HEX]: 4885C0745C0FB748
Replace* [HEX]: 41BE0F000000EB59
Comment: Enable Handoff

Hand-Off is Enabled.

Handoff is Enabled.

Export your configuration and reboot your system. If all is well, you should now see the Handoff Supported line in System Information as a Yes now.

Step 4 – Enable Handoff in the System

Enable Handoff in General

Enable Handoff in General

With Handoff enabled on the Bluetooth adaptor, we now need to check and make sure that the system knows that is needs to enable the feature, We will need to go to Preferences and then to General and make sure that the “Allow Handoff between this Mac and your iCloud devices” is checked.

Step 5 – Sign Out of iCloud then Sign In

Hand-Off Icon in the Dock Area.

Handoff Icon in the Dock Area.

Now that we are showing that Handoff is enabled, we need to sign out and then back into iCloud to make sure the connection to your other devices happens. If all is well, you should now be able to see the Handoff icon pop up when you open a Handoff capable app such as iMessages around your dock. The icon will pop up when you have that app open on your phone or tablet.

You should now have fully functional Handoff feature on your Hackintosh!

Conclusion and Recap

To get Handoff to work on non-Apple hardware, we must make sure that we find a compatible Bluetooth 4.0 adapter. In some cases, such as with the Insignia NS-PCY5BMA, we will have to modify the kext to recognize the Device and Vendor ID. Then, we can hack the system to activate the Handoff function through 3rd party USB adapters and even older WiFi cards.

It is important that you have a fully functioning iCloud and iMessages system prior as the Handoff function will need that in order to integrate the exchange with your other devices via your Apple ID.

Another function closer to having all the features of a real mac!

Discussion

  1. carlos

    copied and pasted the new code but i did not work. is there a way you can upload a kext? or send it to me?

  2. carlos

    got it! i was pasting the code in the wrong place! thank you very much for posting this!

  3. Ryan

    So… where is the right place?

    • carlosluis520@hotmail.com

      i pasted it all the way to the end.

  4. Ryan

    I found it. Firstly, the code goes just above this, not at the bottom:

    !—-Insert Code here —!

    NSHumanReadableCopyright

    Secondly, I had to get Bluetooth Explorer from the Apple Developer Site. It is in the dmg file that is downloaded when you download the Hardware IO Tools for XCode dmg. Here is a link to the dev site:

    https://developer.apple.com/downloads/

    And here is a link to a description of how to change the active adapter:

    http://www.geekguides.co.uk/414/how-to-select-a-bluetooth-adapter-in-os-x/

  5. Ryan

    Hmm, maybe it doesn’t matter then and it was the Bluetooth Explorer part that made the difference.

  6. snowolfe

    Man – copied it – I STILL get a freaking 0x4 (copied and pasted what you have above) – no worky.

    NOTE – i used the decimal numbers as you have (again copied and pasted) and SOMEHOW – my hex numbers are COMPLETELY freaking different from what YOU have in your screenshot..?? Ideas?

    • Do you mean in Clover Configurator?

  7. snowolfe

    Actually not sure – copied out kextt – copied and pasted code – copied back – made sure that yes, I could overwrite and permissions the same – pure mac – not hackintosh – and have this as i guess you would say important lines

    Manufacturer: Broadcom
    Transport: USB
    Chipset: 2070B0
    Firmware Version: v42 c847
    Vendor ID: 0x05AC
    Product ID: 0x821A
    HCI Version: 0x4
    HCI Revision: 0x34F
    LMP Version: 0x4
    LMP Subversion: 0x422A

  8. carlos

    I tested the bluetooth kext i used on 10.10.5 and installed it on 10.11.3 using kext wizard. After a reboot my Insignia bluetooth dongle worked properly. if anyone is interested in the kext let me know.

  9. For El Capitain, use this entry in place of the one above:

    <key>PID 569 0x0239 VID 6655 0x19FF</key>
    <dict>
         <key>CFBundleIdentifier</key>
         <string>com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport</string>
         <key>Dongles</key>
         <dict>
             <key>Best Buy</key>
             <string>NP4.0</string>
             <key>Insignia</key>
             <string>BT V4.0</string>
         </dict>
         <key>IOClass</key>
         <string>BroadcomBluetoothHostControllerUSBTransport</string>
         <key>IOProviderClass</key>
         <string>IOUSBHostDevice</string>
         <key>idProduct</key>
         <integer>569</integer>
         <key>idVendor</key>
         <integer>6655</integer>
    </dict>

    Thanks to Guito Mendez @guito_mendez for finding out that IOUSBDevice changed to IOUSBHostDevice in 10.11.x.

    • JR

      I see getting a “Can’t copy source file”. I followed the instructions and re-did it 3 times lol. Running El Capitan

      • Ken Lowrie

        I see the same issue. I’ve tried a half dozen times, rebooting, moving the modified file around to different locations, etc., and it just doesn’t work. I’m beginning to think that the “Kext Installer” just doesn’t support El Capitan after all… :(

      • El Capitan has a new feature from Apple called ‘System Integrity Protection’ – it prevents anything being written to the System folder – that is what is stopping Kext Utility from working – you have to temporarily disable SIP

        Follow these steps to disable SIP:

        Restart your Mac.
        Before OS X starts up, hold down Command-R and keep it held down until you see an Apple icon and a progress bar. Release. This boots you into Recovery.
        From the Utilities menu, select Terminal.
        At the prompt type exactly the following and then press Return: csrutil disable
        Terminal should display a message that SIP was disabled.
        From the  menu, select Restart.

        Don’t forget to turn SIP back on after you’ve updated your file!

        • Ken Lowrie

          Thank you! That did the trick. Once I did this I was able to update the kernel extension, and now I’m my trackpad actually works properly on my Mac Pro.

  10. Ken Lowrie

    I can’t get kext utility to work. I’m on 10.11.5, and it fails every time on the BackUp and Install of the IOBluetoothFamily.kext file… Doesn’t give any additional information other that “failed.” Has anyone else seen this?

    Here’s the full text from the run:

    Start working: 2016-06-14 16:43:43 -0500

    Task: Install “IOBluetoothFamily.kext (arches) x86_64
    BroadcomBluetoothHostControllerUSBTransport.kext (arches) x86_64
    CSRBluetoothHostControllerUSBTransport.kext (arches) x86_64
    CSRHIDTransitionDriver.kext (arches) x86_64
    IOBluetoothHostControllerUARTTransport.kext (arches) x86_64
    IOBluetoothHostControllerUSBTransport.kext (arches) x86_64
    IOBluetoothSerialManager.kext (arches) x86_64
    IOBluetoothUSBDFU.kext (arches) x86_64”
    to “/System/Library/Extensions”

    Found existing “/System/Library/Extensions/IOBluetoothFamily.kext”

    BackUp : “IOBluetoothFamily.kext” to “IOBluetoothFamily.kext.bak” … Error.

    Install: “IOBluetoothFamily.kext” … Can’t copy source file.
    Updating the system cache files ……………… Done
    — Build time = 34 sec.

    Syncing disk cache … Done.

    All done.
    Have a nice … day(night)
    Enjoy …

    • Ken Lowrie

      As John stated above, it is the SIP that’s preventing Kext Utility from running on El Capitan. As a side note, I had to use the Bluetooth Explorer from the developer tools in order to activate the new BT dongle so I could pair it with my trackpad. But all is working now. Thanks!

  11. Dan

    I’m on Sierra and this hasnt been working for me. Anyone else having trouble? I could use a hand if anyone has some tips.

  12. TheotherRyan

    This worked for me on multiple machines. I’m on 10.11.6. I’ll be doing a Sierra install and I’ll update to let you know what I come up with. Thanks @seanharsh!

    • Awesome! I would be interested in what has changed with Sierra. I have not used the Bluetooth for some time.

Leave a Reply