andyreagan.com

Software Defined Radio

I bought an RTL-SDR module with their little antennae kit for fun (link, amazon). On my macbook I was recieving FM within a few minutes via SDR++, recieved some spotty fire and police stuff right away too. Moved antennae outside and that was good enough to allow receiving 460.4 fire stuff with a working squelch setting.

See also:

SDR variants

The airspy would capture more bandwidth, in cases where the RTL-SDR needs two units for bandwidth.

Python resources

PySDR

this is a book

this actually uses pyrtlsdr

pretty incredible resource.

It doesn't have examples of fully working notification-type systems… but I think it has enough that if I could generate the spectrum graph from the RTL-SDR then I could go about turning it into an audio file for processing.

python-hrpt

Decoding images from a NOAA satellite, pretty incredible: https://github.com/radio-satellites/python-hrpt.

P25 signals

Really good description of how P25 works: https://www.mathworks.com/help/comm/ug/p25-spectrum-sensing-with-synthesized-and-captured-data.html Example python code to see if it's present from "raw" recordings: https://github.com/777arc/PySDR/issues/18#issuecomment-2015779302

trunk-recorder

By Luke Berndt

Github: https://github.com/robotastic/trunk-recorder. Recommended for decoding P25 by the author of the PySDR book (in a github issue).

The author also hosts OpenMHZ, gave a great talk on all this stuff: http://lukeberndt.com/2024/shmoocon-2024/. Second Rachel By The Bay reference in one day (her rant on web cruft hit top of HN same day)!

This didn't compile for me because a boost issue, the author fixed it pretty quick and I got it to compile with some extra flags on cmake:

cmake ../source \
  -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3) \
  -DCMAKE_CXX_COMPILER=$(which clang++) \
  -DCMAKE_C_COMPILER=$(which clang) \
  -DCMAKE_CXX_FLAGS="-isystem $(xcrun --show-sdk-path)/usr/include/c++/v1" \
  -DCMAKE_OSX_SYSROOT=$(xcrun --show-sdk-path)

sdrtrunk

Trying sdrtrunk https://github.com/DSheirer/sdrtrunk/wiki/Getting-Started. I got it downloaded, and up and running. It failed to recognize the tuner:

2025-01-03 09:10:23.821 INFO  i.g.d.s.t.m.TunerManager - Tuner: USB Tuner - RTL-2832 USB Bus:1 Port:1 - Added / Starting ...  [481MB/1GB 24%]
2025-01-03 09:10:23.823 INFO  i.g.d.s.t.m.DiscoveredTuner - Tuner Error - Stopping - RTL-2832 USB Bus:1 Port:1 Error: Can't set configuration (ie reset) on the USB tuner - LIBUSB_ERROR_NO_DEVICE  [481MB/1GB 24%]
2025-01-03 09:10:23.823 INFO  i.g.d.s.t.m.DiscoveredTuner - Stopping Tuner: RTL-2832 USB Bus:1 Port:1  [481MB/1GB 24%]
2025-01-03 09:10:23.823 ERROR i.g.d.s.t.m.DiscoveredUSBTuner - Unable to start tuner [RTL-2832] - error: Can't set configuration (ie reset) on the USB tuner - LIBUSB_ERROR_NO_DEVICE  [481MB/1GB 24%]
2025-01-03 09:10:28.782 INFO  i.g.d.s.t.ui.TunerEditor - Restarting RTL-2832 tuner  [533MB/1GB 27%]
2025-01-03 09:10:28.783 INFO  i.g.d.s.t.m.DiscoveredTuner - Tuner Error - Stopping - RTL-2832 USB Bus:1 Port:1 Error: Can't set configuration (ie reset) on the USB tuner - LIBUSB_ERROR_NO_DEVICE  [533MB/1GB 27%]
2025-01-03 09:10:28.783 INFO  i.g.d.s.t.m.DiscoveredTuner - Stopping Tuner: RTL-2832 USB Bus:1 Port:1  [533MB/1GB 27%]
2025-01-03 09:10:28.787 ERROR i.g.d.s.t.m.DiscoveredUSBTuner - Unable to start tuner [RTL-2832] - error: Can't set configuration (ie reset) on the USB tuner - LIBUSB_ERROR_NO_DEVICE  [533MB/1GB 27%]
2025-01-03 09:15:05.752 INFO  i.g.d.s.t.ui.TunerEditor - Disabling RTL-2832 tuner  [1GB/1GB 52%]
2025-01-03 09:15:06.885 INFO  i.g.d.s.t.ui.TunerEditor - Enabling RTL-2832 tuner  [1GB/1GB 53%]
2025-01-03 09:15:06.885 INFO  i.g.d.s.t.m.DiscoveredTuner - Tuner Error - Stopping - RTL-2832 USB Bus:1 Port:1 Error: Can't set configuration (ie reset) on the USB tuner - LIBUSB_ERROR_NO_DEVICE  [1GB/1GB 53%]

Since it works in SDR++, I'm not sure what else to try. I did put the rules file in place (and confirm I can view it without sudo):

% ls /etc/udev/rules.d/
rtl-sdr.rules

If I was to try it again, I'd try building the program to make sure that the Java resources are correct. Looks like in bin is has the -arm version of usb4java but maybe I should have the -aarch version?

SDR++

I got this up and running really easily!

Radioreferece

CoMIRS stuff:

https://www.radioreference.com/db/sid/7127

cache

System Name: Commonwealth Of Massachusetts Interoperable Radio System (CoMIRS) Location: Regional, MA County: 8 Counties System Type: Project 25 Phase II System Voice: APCO-25 Common Air Interface Exclusive System ID: Sysid: D14 WACN: BEE00 Last Updated: October 23, 2024, 11:11 am UTC [Updated System Description Text] System Notes Massachusetts State Police operate two radio systems, an analog trunked system, heard east of the Connecticut River, and Mount Greylock, and a newly implemented digital system, which is slowly growing to cover the entire commonwealth.

Cities like Cambridge, Worcester, Boston, and special systems such as MassPort can only be heard on their respective closest systems

Talkgroups which begin with "6 - - - -" (i.e. 65102), and are five digits, are dynamic talkgroups that are assigned when another linked system's user has connected with the CoMIRS radio system. They are never permanent, despite how frequently they may occur.

Site Name County Frequencies
026 (1A) Warwick Franklin 851.200, 851.375c, 852.3125c, 852.475, 853.475c, 853.6375c

Red (c) are control channel capable frequencies

And for franklin county:

DEC HEX Mode Alpha Tag Description Tag
3699 e73 D FranklinCty PD FRCOG - Police Simulcast Law Dispatch
2300 8fc D FC-New Salem PD New Salem PD Simulcast Law Dispatch
2302 8fe D FC-MtToby PD1 Mount Toby 1 Simulcast Law Dispatch
2304 900 D FC-MtToby PD2 Mount Toby 2 Simulcast Law Dispatch
2306 902 D FC-ShelburnePD1 Shelburne PD - Simulcast Law Dispatch
3697 e71 D FranklinCty FD FRCOG - Fire Simulcast Fire Dispatch
2310 906 D FC-Fire Tones FRCOG - Fire Tones Fire Dispatch
3701 e75 D FC-Fire Ops 3 Fire Ops 3 Fire-Tac
3703 e77 D FC-Fire Ops 4 Fire Ops 4 Fire-Tac
3705 e79 D FC-Fire Ops 5 Fire Ops 5 Fire-Tac
3707 e7b D FC-Fire Ops 6 Fire Ops 6 Fire-Tac
3709 e7d D FC-Fire Ops 7 Fire Ops 7 Fire-Tac

Franklin county:

https://www.radioreference.com/db/browse/ctid/1218 cache

Frequency License Type Tone Alpha Tag Description Mode Tag
460.400 WQDL962 RM 173.8 PL Frnk Cnty FD Fire Countywide Operations FMN Fire Dispatch
453.100 RM RM 206.5 PL BoMt Fire Borden Mountain Tower Fire WMLEC Tie FMN Fire-Talk
453.150 RM RM 206.5 PL Mt.Grace FD Mount Grace Tower Fire WMLEC Tie FMN Fire-Talk
460.1875 RM RM 156.7 PL Mt Toby FD Mount Toby Fire Tower FMN Fire-Tac
453.1125 M M 156.7 PL Frnkln TAC-1 Franklin County TAC-1 FMN Multi-Tac
453.8875 M M 156.7 PL Frnkln TAC-2 Franklin County TAC-2 FMN Multi-Tac
453.9125 M M 156.7 PL Frnkln TAC-3 Franklin County TAC-3 FMN Multi-Tac
458.0375 M M 156.7 PL Frnkln TAC-4 Franklin County TAC-4 FMN Multi-Tac
458.1125 M M 156.7 PL Frnkln TAC-5 Franklin County TAC-5 FMN Multi-Tac
458.9125 M M 156.7 PL Frnkln TAC-6 Franklin County TAC-6 FMN Multi-Tac

Shutesbury:

Frequency License Type Tone Alpha Tag Description Mode Tag
155.745 WPNT575 RM 146.2 PL Shutsbry DPW Public Works FMN Public Works

Scan New England

CoMIRS

CoMIRS - Commonwealth of Massachusetts Interoperability Radio System

Motorola P25 Phase I (FDMA)/Phase II (TDMA) hybrid system. System ID: D14 WACN: BEE00 NAC: Multiple - NAC Varies by Site Massachusetts P25 trunked system. For the Massachusetts State Police Analog system primary page, click here To convert the P25 talkgroup to see if it matches an "analog" talk group, multiply the TG by 16. (i.e. 2209*16=35344) Sites have had analog emissions designators added to their FCC licenses, and may be mixed use. To see a list of ALL TALK GROUPS used on the CoMIRS system, including on the campus sites (Cambridge, Worcester, etc.), please Click Here

For "Warwick" frequencies:

Frequency Usage Latest Confirmation
853.6375 Control Channel 2023.03.07 cg
853.4750 Control Channel 2023.03.07 cg
852.3125 Control Channel 2023.03.07 cg
851.3750 Control Channel 2023.03.07 cg
851.2000 Voice 2023.03.07 cg

Franklin County talk groups:

  • Operations channels are available to police and fire agencies.
  • The 22xx and 23xx Talk Groups may be inactive as they were used for system capacity testing.
Talkgroup ID Encrypted Notes Confirmation/ReConfirmation
3697 No Franklin County Fire Simulcast w/ 460.4000 2024.03.31 W1KNE
3699 No Franklin County Police Simulcast w/ 460.3500 2024.03.31 W1KNE
3701 No Operations 3 2023.04.21 cg
3703 No Operations 4 2023.04.21 cg
3705 No Operations 5 2023.04.21 cg
3707 No Operations 6 2023.04.21 cg
3709 No Operations 7 2023.04.21 cg
2577 No Greenfield Fire 2022.11.05 W1KNE
2579 No Greenfield PD patch w/ 460.5250 2022.11.05 W1KNE
2585 No Orange Fire 2022.06.04 W1KNE
2587 No Orange PD - Patched with analog TG 2023.04.15 sawyer1002
2583 No Montague Police 2023.04.15 sawyer1002
2581 No TF Fire (Part of Montague) 2023.04.15 sawyer1002
2298 No Franklin Cty Montague patch w/ 453.4875 2020.02.24 cg
2300 No Franklin Cnty New Salem 1 patch w/ 453.2875  
2302 No Franklin Cty Toby 1 patch w/ 460.1875 2020.02.24 cg
2304 No Franklin Cty Toby 2 patch w/ 460.6000 2020.03.02 ghoward02
2306 No Franklin Cty Shelburne 1 patch w/ 453.4750 2020.02.24 cg
2314 No Franklin Cty Colrain 1 patch w/ 453.4250 2020.03.09 ghoward02
2316 No Franklin Cty Erving 1 patch w/ 453.2625 2020.03.09 ghoward02
2317 No Franklin Cty Charlemont patch w/ 460.5500 2020.03.15 ghoward02

For the analog, it would be 3697*16 = 59152 So it's actually the analog system, not digital.

Analog system

This page is for the legacy analog system. This system is slowly being replaced by CoMIRS (Mass. State Police P25 System) Along with the two trunks, Massachusetts State Police use several conventional frequencies, including the former low band channels. System ID: 0D14 P25 voice channels use N144 (Hex), 324 (Dec). Users should attempt to program the Simulcast sites for reception of most Talkgroups IntelliRepeaters are used for limited coverage/fill in of coverage sites and not all Talkgroups maybe heard. This page gets built by viewers like you. Please submit data and corrections.

Zone 15 Warwick IntelliRepeater Mount Grace, Warwick. (Franklin County) Licenses WPMG792

Frequency Note Confirmation/Reconfirmation
854.0875 CC & Voice 2023.03.07 cg
854.6125 CC & Voice 2023.03.07 cg
856.9875 Voice and P25 2023.03.07 cg
857.9125 Voice and P25 2023.03.07 cg
859.7125 Voice and P25 2023.03.07 cg
859.9875 Voice  

Franklin County Towns part of the FRCOG radio system. These TGs may be patched with their CoMIRS counterpart.

Talkgroup ID Encrypted Notes Confirmation/ReConfirmation
FC FD Simulcast 1 59152 No Franklin County Fire Simulcast w/ 460.4000 2023.08.09 GaryS
FC PD Simulcast 1 59184 No Franklin County Police Simulcast w/ 460.3500 2024.03.31 W1KNE
Franklin County 59216 No Operations 3 2022.06.01 ecps92
Franklin County 59248 No Operations 4 2023.04.15 sawyer100
Franklin County 59280 No Operations 5 2023.04.15 sawyer100
Franklin County 59312 No Operations 6 2023.04.15 sawyer100
Franklin County 59344 No Operations 7 2023.04.15 sawyer100
Greenfield FD 41232 No Greenfield Fire 2023.04.15 sawyer100
Greenfield PD 41264 No Greenfield PD patch w/ 460.5250 2023.04.15 sawyer100
Orange FD 41360 No Orange Fire 2022.06.07 ecps92
Orange PD 41392 No Orange PD - Patched with analog TG 36656 2024.11.11 GraniteScanner
Montague Police 41328 No Montague Police 2023.04.15 sawyer100
Turner's Falls Fire 41296 No TF Fire (Part of Montague) 2023,04.15 sawyer100

TwoToneDetect

Backlinks: Software Heroes: Episode 1

Python tool to detect tones from an audio source and send notifications, by Andy Knitt. See more on the blog.

I wanted to see the code, looks like it's fundamentally just two python scripts. From version 70, it's based on Python 2.7. It's not open source, the author notes in the forum that he provided the source code at some point, and on the download site:

TwoToneDetect is free for personal and noncommercial use by public safety agencies and organizations. If you’d like to use the program for commercial purposes, please contact me.

Version 70 includes pushover but apparently that has been removed (since now IaR is paying the bills?). Since it's free for personal use, I wanted to see if I can adapt the scripts for my own use and just to learn about radio. It's possible as follows:

strings TwoToneDetect70 | grep -i python
looks like 2.7
git clone https://github.com/extremecoders-re/pyinstxtractor
~/.pyenv/versions/2.7.18/bin/python pyinstxtractor/pyinstxtractor.py TwoToneDetect70
~/.pyenv/versions/2.7.18/bin/pip install uncompyle6
cd TwoToneDetect70_extracted
~/.pyenv/versions/2.7.18/bin/uncompyle6 TwoToneDetect70.pyc > TwoToneDetect70.py
~/.pyenv/versions/2.7.18/bin/uncompyle6 out00-PYZ.pyz_extracted/TTD70.pyc > out00-PYZ.pyz_extracted/TTD70.py

If you look in the TwoToneDetect70_extracted folder, this software actually includes GNU Readline, so technically the source codes needs to be provided (and the software needs to be licensed under GPL). I won't go so far to push these scripts to github, but you can follow the above steps if you want.

TODO Setup a Pushover version off the 800 digital locally

Use one of the P25 decoders and a python script to send alerts to pushover for myself. Could configure later to more home automations.

IaR source code

The terms and conditions on IaR's site expressly forbid inspecting the binary, but I figured I'd ask if they'd provide the source code. Good chance that their code, just a new version of the above, contains the same library and they should provide the source code.

But instead my request resulted with a threat…and while I can't actually check whether their code contains GPL due to the license, I suspect it does. Perhaps someone should check, like the FSF. Here's the exchange:

./static/sdr/iar-ttd-source-code-threats.pdf

ADS-B

Setup:

  • XRDS -RF KMR400 SMA to N Cable 6ft, N-Male to SMA-Male Connector Low Loss Extension Cable 50 Ohm SMA Cable for 3G/4G/5G/LTE/ADS-B/Ham/GPS/WiFi/RF Radio to Antenna Use Purchased Dec 27 2024 for $15.99, amazon link
  • 5.5dBi 1090/978 N-Type Female Antenna - 26-inch by ADSBexchange Purchased Dec 27 2024 for $44.95, amazon link
  • FlightAware Band Pass Signal Filter, Dual 978-1090 MHz, Dec 27 2024
  • FlightAware Pro Stick, with bandpass total is $77.78 USD, Dec 27 2024

Goals:

  • Dashboard so I can see what's coming off the antennae
  • Feed various online services for fun

Attic placement sounds like it generally works well, but outside is best. Maybe worth optimizing the antennae location once I have the software up and running to my liking.

1090 vs 978

All of the equipment I got tracks both, and with a local airport nearby I wanted to try out the 978.

You would think I could just switch (tuning the SDR to each frequency every few seconds), but the software doesn't seem to support this well.

TODO setup feed to FlightAware

Set this up on the old Linux macbook.

Last modified: April 29, 2025