Motorola Smartnet II trunking logging scanner for Gnuradio
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
src
AUTHORS
COPYING
ChangeLog
INSTALL
Makefile.am
Makefile.common
Makefile.in
Makefile.swig
Makefile.swig.gen.t
NEWS
README
aclocal.m4
bootstrap
config.guess
config.h.in
config.sub
configure.ac
depcomp
install-sh
ltmain.sh
missing
py-compile

README

#
# 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 
bistromat@hotmail.com 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.