Running an RTL SDR USB Dongle On Your Mac The Easy Way With Cocoa RTL Server

I’ve had a few of the RTL radio tuner dongles for a while. These are USB devices that were originally made for use as TV tuners overseas, but it turns out that you can access the I/Q data stream, and turn them into an SDR (Software Defined Radio). They can be tuned roughly over a range of 25 to 1700 MHz, and sometimes even higher, depending on the tuner IC chip inside the particular dongle.

I previously posted about how to get the RTL dongle working on the Mac here: An SDR for $17 – The R820T USB RTL-SDR DVB-T Dongle and here: An SDR for $17 – The R820T USB RTL-SDR DVB-T Dongle – Part 2. These posts were from 2013, and I did the installation on a Mac running OS X 10.6, using some pre-built libraries.

Fast forward to the present day. I got a new Mac running OS X 10.11 El Capitan, and I wanted to be able to use the RTL dongles with my favorite SDR software on the Mac, SdrDx. Enter Cocoa RTL Server.

Cocoa RTL Server is a stand alone app that interfaces with an RTL dongle. It does not require you to build or install any drivers or libraries. It just works. It’s based off of an open source app called SoftShell, that I heavily extended. Cocoa RTL Server also acts like a networked SDR, following the RF Space protocol. That means it works with SdrDx, as well as any other SDR app on the Mac that supports RF Space SDRs like the netSDR. You can download a copy of the app from the Cocoa RTL Server page. Source code is included, however I am not offering any support for the project or final app.

Here’s a screenshot of the app running:

Getting up and running is easy:

1. Plug in your RTL device
2. Run CocoaRTLServer 2.0
3. Select the device from the popup menu (usually it is already selected)
4. Change the rtl_tcp or tx_tcp port values if needed
5. Click Open
6. Configure your SDR app (set the correct TCP port) and run it

I’ve run it under Mac OS X 10.6, 10.10 and 10.11, It should run under 10.7-10.9 as well. It only works with RTL devices with an E4000 or R820T tuner IC.

Using SdrDx, I can tune a large portion of the FM broadcast band, click to view full size:



In this case I am tuned to 97.9 MHz. To the left of the signal meter, you can see it has decoded the station ID from the RDS data. Yes, SdrDx decodes RDS.

If you look at the lower right corner, you see the scope display of the demodulated FM audio. There are markers for the portions of interest:
You can see the main audio above the green marker to the left.
The stereo pilot at 19 kHz (red marker).
The stereo subcarrier (aquamarine)
The RDS data (orange)
The 67 kHz SCA subcarrier (purple)
The 92 kHz SCA subcarrier (yellow)

Cocoa RTL Server also includes a server that emulates rtl_tcp, so it works with Cocoa1090 which decodes aircraft transponders that transmit on 1090 MHz. It should also work with any other app that gets data from rtl_tcp. Here’s a screenshot of Cocoa1090 running:



Using an SDR-14 or SDR-IQ with Mac OS X 10.11 El Capitan (Also applies to 10.10 Yosemite)

If you use an SDR-14 or SDR-IQ with Mac OS X 10.10 or 10.11, you may run into issues due to Apple’s built in FTDI USB driver, which prevents the FTDI D2XX library from accessing it. Previously you could just unload the driver when you wanted to run your SDR software, but Mac OS X 10.11 El Capitan compounds the problem by making that impossible under normal conditions. This is part of Apple’s System Integrity Protection (SIP), also known as “rootless” mode.

SIP prevents any user, even those with system administrator (“root”) privileges, modifying a number of operating system directories and files.

Unfortunately this also prevents you from stopping the use of Apple’s built in FTDI driver, which you must do in order to run applications that use FTDI’s D2XX library. In our case, to stop the use of Apple’s built in driver, we need to install a codeless kernel extension (kext). This extension claims priority over Apple’s built in driver, but doesn’t actually do anything, leaving the device available for the D2XX library to access it. It should also work under 10.9 Mavericks, making it unnecessary to unload the Apple kext each time you want to use your SDR.

Before continuing, please note that you perform all these steps at your own risk. Guaranteed to blow up your Mac. blah blah blah.

To disable SIP on Mac OS X 10.11 El Capitan:
1. Restart your Mac.
2. As soon as you hear the startup chime, hold down Command-R and keep it held down until you see the Apple icon and a progress bar.
3. After you have booted into Recovery Mode, select Terminal from the Utilities menu.
4. At the prompt type: csrutil disable
5. You should see a message saying that SIP was disabled.
6. Select Restart from the Apple menu.

If you’re running Mac OS X 10.10 Yosemite, you can disable kernel extension code signing:

1. Open the Terminal application
2. Type the following: kext-dev-mode=1
3. Press return and enter your administrator password
4. Reboot.

The next step is to install a codeless kernel extension. It won’t actually do anything, other then prevent the built in Apple FTDI USB driver from being used with the SDR. You can download unsigned codeless kernel extension (kext) files, along with a copy of the SDR-xx Server app, here: http://radiohobbyist.org/blog/mypics/SDR_14_IQ_Mac_OSX.zip

Under El Capitan and Yosemite, it needs to be installed in /Library/Extensions./
If you need to load an unsigned kext in Mavericks, it should be in /System/Library/Extensions/

For El Capitan and Yosemite, we would type the following at the Terminal prompt (assuming you’re in the directory containing the kext file):
sudo cp -r SDR14USBFTDICodelessKext.kext /Library/Extensions

In Mavericks:
sudo cp -r SDR14USBFTDICodelessKext.kext /System/Library/Extensions

For an SDR-IQ, you would use the file SDRIQUSBFTDICodelessKext.kext instead, as it has a different USB PID (Product ID).

You should then be able to plug in your SDR-14 or SDR-IQ, and see it is found by the SDR-xx Server app. Note that to run SDR-XX Server, libftd2xx.1.0.4.dylib needs to be installed in /usr/local/lib
cp libftd2xx.1.0.4.dylib /usr/local/lib

You can then run SdrDx or another SDR app that expects a networked SDR.

I can’t provide individual assistance with getting this to work, but feel free to post questions as comments, and maybe I or someone else can provide an answer.

Winter 2015-2016 Snowfall

Saturday December 19, 2015:
Trace snow.

December Total: Trace

2015-2016 Season Total: Trace

Monday January 4, 2016:
Flurries.

Tuesday January 12, 2016:
0.3″

Sunday January 17, 2016:
0.2″

Wednesday January 20, 2016:
0.3″

Friday January 22, 2016 – Saturday January 23, 2016:
28.0″

January Total: 28.8″

Friday February 5, 2016:
A dusting of snow while temperature were above freezing.

Tuesday February 9, 2016:
7.5″ as of 11:00 AM. Fairly wet and heavy snow. Above freezing for much of the time it fell.
Then 2.8″ in the evening for a total of 10.3″.
Some earlier pictures:




Friday February 12, 2016:
1.0″ of very light and puffy snow, I was able to clear the driveway with the leaf blower.

Monday February 15, 2016:
1.0″ of snow, later changing to sleet and some light freezing rain.

Thursday February 25, 2016:
Snow flurries.

Friday February 26, 2016:
Snow flurries.

February Total: 12.3″

Friday March 4, 2016:
1.6″ of snow.

Sunday March 6, 2016:
A dusting of snow.

Saturday March 19, 2016:
0.5″ of snow.

March Total: 2.16″

Sunday April 3, 2016:
A dusting of snow during a strong wind event.

Friday April 8, 2016:
Snow flurries.

Saturday April 9, 2016:
0.5″ of snow, also some graupel.

April Total: 0.5″

2015-2016 Season Total: 43.7″