gr-smartnet icon indicating copy to clipboard operation
gr-smartnet copied to clipboard

Motorola Smartnet II trunking logging scanner for Gnuradio

Copyright 2005, 2006 Free Software Foundation, Inc.

This file is part of GNU Radio

GNU Radio is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 3, or (at your option)

any later version.

GNU Radio is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with GNU Radio; see the file COPYING. If not, write to

the Free Software Foundation, Inc., 51 Franklin Street,

Boston, MA 02110-1301, USA.

This package implements a trunk-tracking scanner for GNU Radio. It is a work-in-progress, but it is already possible to listen to and follow conversations on a Motorola Type II SmartNet trunked network. See the Python source, as well as the exampleusage.sh, for the gory details of how to operate it. User-friendly it is not, and I haven't really looked into how to work the framework into a GUI yet.

It also implements a trunk logger, which is capable of tracking up to ~12 (depending on your computer) simultaneous conversations on the trunk and logging these to disk as .wav files, with associated timestamps in .txt files. This allows you to continuously log timestamped conversations, with which you can, for instance, reconstruct a complete incident response from all parties involved.

As it currently stands, the program cannot decode APCO P25 or other encoded voice data. There is a separate project, OP25, to do this: http://sedition.org.au/op25/wiki/WikiStart My local repeater uses analog voice, so I don't have P25 data here. If your local repeater uses P25, please let me know at [email protected] so I can work with you to add P25 support.

The default values are reasonable for the USRP with the DBS RX receiver. You will probably want to play with the squelch setting as well as the talkgroup list. Using a talkgroup list gives you pretty-printing of who you're listening to, instead of just a talkgroup ID number. The included file sf_talkgroups.csv is the RadioReference.com listing for San Francisco. There is also a frequency list, which correlates channel assignments with frequencies. This is a somewhat arcane subject, and Motorola has been known to use at least four different channel assignment maps. The most common map is given as a default, which gives reasonable results for most trunks.

You'll have to find out what frequency the control channel is on; it's easy enough to listen for with usrp_nbfm_rx.py, or look it up online. If you find yourself getting lots of CRC errors and poor tracking, play with the -E option to find a frequency offset that works for you. Usually the USRP is off a few kHz in the 800MHz band. Again, usrp_nbfm_rx.py will help you find what the offset is using the FFT display. The demodulator incorporates a carrier-tracking PLL in order to allow some leeway in frequency error, but it doesn't give you more than 5kHz leeway in either direction. This will probably improve later on. In addition, sometimes the PLL appears to get "lost", and upon starting the program you won't receive any output. Just restart to fix.

This receiver tracks by sampling the entire band (requires decimation of 20 or lower) and frequency-translating up and down in order to select individual channels. This might seem like madness, but is required for the logging receiver to work.

To use the logger, just execute smartnet2logger.py. For example:

./smartnet2logging.py -R A -g 35 -f 866.9625M -c 867.5M

This would execute the logger using RX subdev A, gain 35dB, control channel at 866.9625MHz, and a band center of 867.5MHz. Choosing a band center is best done by looking up the channel allocations, or using usrp_fft.py to scan the band. Eventually I suppose I could calculate band center from the frequency assignments being heard on the control channel. I'm not there yet.

By default, log data is saved to src/python/log. If you want that changed, feel free to change it using the -D option. The directory must already exist.

This package requires that gnuradio-core is already installed. It also depends on some GNU Radio prerequisites, such as boost.

To build the examples from the tarball use the normal recipe:

$ ./configure $ make $ make check

If you're building from CVS, you'll need to use this sequence, since CVS doesn't contain configure or the generated Makefiles.

$ ./bootstrap $ ./configure $ make $ make check

The doc directory is not built by default. This is to avoid spurious build problems on systems that don't have xmlto installed. If you have xmlto and its dependencies installed, you can build the html version of the howto article by cd'ing to doc and invoking make.