Mode S (ADS-B) aircraft transponder decoder for macOS
Click on the image below to see it full sized:
Cocoa1090 is a Mode S (ADS-B) aircraft transponder decoder for Mac OS X, written for use with RTL-SDR devices (RTL based USB tuner dongles), as well as the RF Space netSDR.
Starting with version 0.3.0 I have switched away from using the Google Maps API, and instead use some vector maps, because Google made changes that broke the code. Not as pretty, but it works. I do not plan on swiching back to Google maps.
Download a copy of Cocoa1090 beta version 0.4.1 here: https://www.blackcatsystems.com/download/Cocoa1090.zip (64 bit app)
I've run it under Mac OS X 10.6 and 10.11-10.13, It should run under 10.7 through 10.10, and may run under 10.5.
Cocoa1090 requires that rtl_tcp be installed and running. rtl_tcp performs the actual interfacing to the RTL tuner, and serves I/Q data to Cocoa1090. Cocoa1090 also works with the RF Space netSDR.
Instructions on installing RTL-SDR, which includes rtl_tcp, can be found here: https://www.hfunderground.com/wiki/RTL-SDR
On Yosemite, I found that you can just use MacPorts to download and build the package: sudo port install rtl-sdr
Please note that I cannot provide any support for installing or using RTL-SDR.
Or you can use my new Cocoa RTL Server app.
After you have installed RTL-SDR, and run rtl_test to verify it works, you need to start rtl_tcp.
The easiest way is to go to Finder, navigate to the rtl-sdr folder you downloaded, then double click on rtl_tcp to start the tcp server.
Using a terminal window: Start rtl_tcp by opening a terminal window and typing:
./rtl_tcpAlternately, you can start it with
./rtl_tcp -g 9999This sets the gain to the maximum value, I find this sometimes improves the decode rate.
(Note: you can quit rtl_tcp when you're all done by first quitting Cocoa1090, then wait a few seconds, then hit control-C while in the rtl_tcp terminal window. Then close the window.) Then start Cocoa1090. It should connect to rtl_tcp, an error message will be displayed if it cannot. Normally the default I/Q source address of 127.0.0.1 and port 1234 will work correctly. You can change this in the Cocoa1090 preferences. There is also a value for the UDP output port, this is for future use. Note that after making any changes to these values, you must quit and restart Cocoa1090.
Cocoa1090 displays several columns of data, for the decoded information from the ADS-B frames:
ICAO - the hex value of the ICAO assigned address for the plane TAIL - the tail number of the plane, based on the ICAO address, read from the icao.txt file. A dash is displayed if the tail number cannot be found in the file. FLIGHT - the flight number ALTITUDE - in feet SPEED - in knots LAT - latitude LON - longitude TRACK - bearing in degrees MESSAGES - the total number of messages received from this plane SEEN - how long (in seconds) since a message from this plane was received. That is, how long since it as been seen (or heard from). PLANE - the make and model of the plane, from the icao.txt file
The bottom of the window displays the status of the program, along with one option that may be enabled:
Preamble - the number of preambles of ADS-B frames detected Demod - the number of ADS-B frames demodulated Good CRC - the number of ADS-B frames with a valid CRC Bad CRC - the number of ADS-B frames with a bad CRC Fixed - the number of ADS-B frames with a bad CRC that were fixed (made good), followed by two numbers showing how many had 1 bad bit, and how many had 2 Frames/sec - the number of good (valid plus fixed) frames per second. This can be used as a relative indicator of activity levels, and is useful when adjusting or comparing antennas, etc
The Fix 2 check box can be checked if you wish to try and fix packets with two bad bits. This uses a lot more CPU time, and often produces bad frames. I generally leave it off (unchecked).
Cocoa1090 looks for a file called extra_icao.txt when it starts. If it finds it, it loads in plane data from this file. This can be used to supplement plane data in the app. The format of this file is text, with one plane entry per line. Each line has four tab delimited fields, such as:
A318EA N299WN B737 B737-7H4/W
The first field is the ICAO number in hex The second field is the tail (registration) number of the plane The third field is the plane model (not currently used, but must be present) The fourth field is the detailed plane information
Email your comments and questions to firstname.lastname@example.org
Last modified May 10, 2018