op25 is basically an SDR based radio scanner that can decode and manage trunked radio communication. For more information, see http://osmocom.org/projects/op25/wiki.
This procedure will install the boatbod fork. It must be installed after the gr-osmosdr step on Part 1 of these procedures.
APCO Project 25 is the digital communications standard used by many police and emergency services throughout the world. Most notably the US, Canada and Australia deploy systems based on P25. Compared to existing analog systems, P25 offers improved spectrum use, coverage and flexibility. Provision is made to ensure the confidentiality of traffic, to allow the use of trunking and the provision of data in addition to voice services.
Some services are encrypted. This software does not provide decryption.
op25 can also be set up to stream online. Online streaming is not covered here.
Please note that the default branch will install a version for GNU radio 3.10. Click here for installation on a GNU radio 3.8 system.
sudo apt-get install libitpp8v5 libitpp-dev libpcap0.8-dev libbladerf2 libfreesrp0 libhidapi-libusb0 libgnuradio-iqbalance3.9.0 sudo apt-get install gnuplot-x11
cd ~/ git clone https://github.com/boatbod/op25 cd op25 mkdir build cd build cmake ../ make -j 4 sudo make install sudo ldconfig
cd ~/op25/op25/gr-op25_repeater/apps
# For SDRplay: ./rx.py --args 'driver=sdrplay,soapy=0' -N 'IFGR:28,RFGR:2' -S 2500000 -x 1 -f 855.2875e6 -o 1e3 -q -1 # For HackRF ./rx.py --args 'hackrf' -g 65 -N 'RF:14,IF:32,BB:26' -S 1000000 -x 1 -f 855.2875e6 -o 50e3 -q -1
# For SDRplay: ./rx.py --args 'driver=sdrplay,soapy=0' -N 'IFGR:28,RFGR:2' -S 2500000 -x 1 -f 855.2875e6 -o 1e3 -q -1 -d 600 # For HackRF: ./rx.py --args 'hackrf' -g 65 -N 'RF:14,IF:32,BB:26' -S 1000000 -x 1 -f 855.2875e6 -o 50e3 -q -1 -d 600
NAC 0x799 WACN 0x92493 SYSID 0x796 855.287500/810.287500 tsbks 10
Sysname | Control Channel List | Offset | NAC | Modulation | TGID Tags File | Whitelist | Blacklist | Center Frequency |
Washtenaw County | 855.2875,852.8625,853.250,855.0875 | 0 | 0x799 | cqpsk | washtenaw.tsv |
2191 | Washtenaw County Ann Arbor Dispatch [Alternate] | 1 |
2237 | Huron Valley Ambulance: Dispatch | 3 |
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'driver=sdrplay,soapy=0' -N 'IFGR:28,RFGR:1' -S 2500000 -x 1 -f 855.2875e6 -o 5e3 -q -1 -d -200 -T michigantrunk.tsv -V -2 -O pulse -U 2> stderr-stream0.2 # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'hackrf' -g 65 -N 'RF:14,IF:32,BB:26' -S 1000000 -x 1 -f 855.2875e6 -o 50e3 -q -1 -d 1200 -T michigantrunk.tsv -V -2 -U 2> stderr-stream0.2Add -O pulse to the command line if your audio is garbled. You may have to experiment to get all of the SDR apps to work.
sudo apt-get install ffmpeg sudo apt-get install liquidsoap
apt list -a liquidsoap Listing... Done liquidsoap/testing,now 1.4.3-3 arm64 [installed]
sudo mkdir /usr/share/liquidsoap/1.4.3 sudo ln -s /usr/share/liquidsoap/libs /usr/share/liquidsoap/1.4.3/
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'driver=sdrplay,soapy=0' -N 'IFGR:28,RFGR:1' -S 2000000 -x 1 -f 855.2875e6 -o 5e3 -q -1 -d -200 -T michigantrunk.tsv -V -2 -w 2> stderr-stream0.2 # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'hackrf' -g 65 -N 'RF:14,IF:32,BB:26' -S 1000000 -x 1 -f 855.2875e6 -o 50e3 -q -1 -d 1200 -T michigantrunk.tsv -V -2 -w 2> stderr-stream0.2
cd ~/op25/op25/gr-op25_repeater/apps ./op25.liq
cd ~/op25/op25/gr-op25_repeater/apps tail -f stderr-stream0.2
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'driver=sdrplay,soapy=0' -N 'IFGR:28,RFGR:1' -S 2000000 -x 1 -f 855.2875e6 -o 5e3 -q -1 -d -200 -T michigantrunk.tsv -V -2 -v 1 -w -l 'http:0.0.0.0:8080' # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./rx.py --args 'hackrf' -g 65 -N 'RF:14,IF:32,BB:26' -S 1000000 -x 1 -f 855.2875e6 -o 50e3 -q -1 -d 1200 -T michigantrunk.tsv -V -2 -v 1 -w -l 'http:0.0.0.0:8080'
cd ~/op25/op25/gr-op25_repeater/apps ./op25.liq
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -c dmr_cfg.json -v 10 2> stderr-stream-dmr # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -c dmr_cfg_hackrf.json -v 10 2> stderr-stream-dmr
cd ~/op25/op25/gr-op25_repeater/apps tail -f stderr-stream-dmr | grep DSTADDR
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -c dmr_cfg_ext_audio.json -v 10 2> stderr-stream-dmr # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -c dmr_cfg_hackrf_ext_audio.json -v 10 2> stderr-stream-dmr
cd ~/op25/op25/gr-op25_repeater/apps ./op25-2_channel.liq
cd ~/op25/op25/gr-op25_repeater/apps tail -f stderr-stream-dmr | grep DSTADDR
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -v 4 -c smartnet_test.json 2> stderr.2 # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -v 4 -c smartnet_hackrf.json 2> stderr.2
cd ~/op25/op25/gr-op25_repeater/apps tail -f stderr.2
# For SDRplay: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -v 4 -c smartnet_test_http.json # For HackRF: cd ~/op25/op25/gr-op25_repeater/apps ./multi_rx.py -v 4 -c smartnet_hackrf_http.json
cd ~/op25/op25/gr-op25_repeater/apps ./op25.liq