Giter Club home page Giter Club logo

trunk-recorder's Introduction

Trunk Recorder

Discord Β Β 

Sponsors

Do you find Trunk Recorder and OpenMHz useful? Become a Sponsor to help support continued development and operation! Thank you to everyone who has contributed!

πŸŽ‰ V5.0 Our Best Release Yet!!

Thanks to everyone who contributed, tested and helped collect cored dumps!

Overview

Need help? Got something working? Share it!

screenshot

Trunk Recorder is able to record the calls on trunked and conventional radio systems. It uses 1 or more Software Defined Radios (SDRs) to do this. The SDRs capture large swathes of RF and then use software to process what was received. GNU Radio is used to do this processing because it provides lots of convenient RF blocks that can be pieced together to allow for complex RF processing. The libraries from the amazing OP25 project are used for a lot of the P25 functionality. Multiple radio systems can be recorded at the same time.

Trunk Recorder currently supports the following:

  • Trunked P25 & SmartNet Systems
  • Conventional P25, DMR & analog systems, where each talkgroup has a dedicated RF channel
  • P25 Phase 1, P25 Phase 2 & Analog voice channels

Supported platforms

  • Ubuntu (18.04, 20.04, 21.04, 22.04, 23.04)
  • Raspberry Pi (Raspberry OS/Raspbian & Ubuntu 21.04, 22.04)
  • Arch Linux (2021.09.20)
  • Debian (9.x)
  • macOS

GNU Radio 3.7 - 3.10

SDRs

RTL-SDR dongles; HackRF; Ettus USRP B200, B210, B205; BladeRF; Airspy; SDRplay

Install

Linux

Raspberry Pi

MacOS

Setup

Playback & Sharing

By default, Trunk Recorder just dumps a lot of recorded files into a directory. Here are a couple of options to make it easier to browse through recordings and share them on the Internet.

Plugins

  • MQTT Status: Publishes the current status of a Trunk Recorder instance over MQTT
  • MQTT Statistics: Publishes statistics about a Trunk Recorder instance over MQTT
  • Decode rates logger: Logs trunking control channel decode rates to a CSV file, and includes a PHP file that outputs an SVG graph
  • Daily call log and live Web page: Creates a daily log of calls (instead of just individual JSON files) and includes an updating PHP Web page w/audio player
  • Prometheus exporter: Publishes statistics to a metrics endpoint via HTTP

Troubleshooting

If are having trouble, check out the FAQ and/or ask a question on the Discord Server

How Trunking Works

For those not familiar, trunking systems allow a large number of user groups to share a limited number of radio frequencies by temporarily, dynamically assigning radio frequencies to talkgroups (channels) on-demand. It is understood that most user groups actually use the radio very sporadically and don't need a dedicated frequency.

Most trunking system types (such as SmartNet and P25) set aside one of the radio frequencies as a "control channel" that manages and broadcasts radio frequency assignments. When someone presses the Push to Talk button on their radio, the radio sends a message to the system which then assigns a voice frequency and broadcasts a Channel Grant message about it on the control channel. This lets the radio know what frequency to transmit on and tells other radios set to the same talkgroup to listen.

In order to follow all of the transmissions, Trunk Recorder constantly listens to and decodes the control channel. When a frequency is granted to a talkgroup, Trunk Recorder creates a monitoring process which decodes the portion of the radio spectrum for that frequency from the SDR that is already pulling it in.

No message is transmitted on the control channel when a conversation on a talkgroup is over. The monitoring process keeps track of transmissions and if there has been no activity for a specified period, it ends the recording.

trunk-recorder's People

Contributors

aaknitt avatar amlethojalen avatar asmig avatar chuot avatar devicenull avatar dotsam avatar dreinhold avatar dygear avatar erictendian avatar galenguyer avatar geezer85 avatar gisforgirard avatar grutz avatar hatchetation avatar hayden-t avatar joegilkey avatar jquagga avatar kazazes avatar lachesis avatar leee avatar maxwelldps avatar nkwood avatar rabarar avatar robbiet480 avatar robotastic avatar rosecitytransit avatar taclane avatar tadscottsmith avatar toddejohnson avatar usa-reddragon avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

trunk-recorder's Issues

More info from recorders

Pass and track more information from both the Trunk Parsers and Call Recorders.
From channel grant parser, also record:

  • encrypt, tdma, emergency
  • Who is transmitting

For OP25 recorder

  • track the number of errors
  • who is transmitting

Display status of recorder on webpage.

The goal would be a way to display system information about the number of calls currently being recorded and information about the trunking system. This information would be sent out as JSON over a localhost port to a node.js server. Node.js would handle updating a dashboard and serve up the page locally. It would make it really easy to check on what is happening with the recorder while it is on your network.

Missing Dependency MacOS decoder_bf.h

n file included from /Users/r00t/trunk-recorder/main.cc:34:
/Users/r00t/trunk-recorder/p25_trunking.h:52:10: fatal error:
'op25/decoder_bf.h' file not found

include <op25/decoder_bf.h>

     ^

1 error generated.
make[2]: *** [CMakeFiles/recorder.dir/main.cc.o] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2

Custom filenames

-Instead of creating the JSON files, can the file names be written as "HHMMSS-talkgroup-unit-unit..."? I've noticed that the JSON files occasionally weren't being created (may be a resource issue), and I think I'm going to look for an app that can index calls by file name instead of JSON. If the files are created at the start of calls the unit numbers could be added in the post-call encoding script. I don't really care what frequency the system picked for a particular call. #64

P25 Phase 2 Recording

Enable recording of P25 Phase 2 transmission. It should be as simple as flip a flag on the OP25 block. In the future it would be nice to change the OP25 block to make it dynamic, allowing you to change a block back and forth from Phase 1 to Phase 2.

Separating Sequential Transmissions

Hi there,

This is an awesome piece of software! Very easy to get set up, and it works perfectly right out of the box. I have two questions:

  1. When several units on a talkgroup are chatting with each other and the transmissions are close to each other, multiple transmissions will get lumped into one recorded file. Is there any way to change this, so that each transmission is in its own file?

  2. The WAV files are quite large. Is there any way to add an optional compression stage, so they get converted to MP3?

Thanks!

Not able to build multi-system branch

Finaly trying multi-system, but it wont cleanly build on my system.

Any ideas..

[ 40%] Building CXX object op25_repeater/lib/CMakeFiles/gnuradio-op25_repeater.dir/p25_frame_assembler_impl.cc.o /home/dylan/radio/trunk-recorder/op25_repeater/lib/p25_frame_assembler_impl.cc:60:5: error: prototype for β€˜gr::op25_repeater::p25_frame_assembler::sptr gr::op25_repeater::p25_frame_assembler::make(int, const char*, int, int, bool, bool, bool, gr::msg_queue::sptr, bool, bool)’ does not match any in class β€˜gr::op25_repeater::p25_frame_assembler’ p25_frame_assembler::make(int sys_id, const char* udp_host, int port, int debug, bool do_imbe, bool do_output, bool do_msgq, gr::msg_queue::sptr ^ In file included from /home/dylan/radio/trunk-recorder/op25_repeater/lib/p25_frame_assembler_impl.h:24:0, from /home/dylan/radio/trunk-recorder/op25_repeater/lib/p25_frame_assembler_impl.cc:26: /home/dylan/target/include/op25_repeater/p25_frame_assembler.h:50:19: error: candidate is: static gr::op25_repeater::p25_frame_assembler::sptr gr::op25_repeater::p25_frame_assembler::make(const char*, int, int, bool, bool, bool, gr::msg_queue::sptr, bool, bool) static sptr make(const char* udp_host, int port, int debug, bool do_imbe, bool do_output, bool do_msgq, gr::msg_queue::sptr queue, bool do_audi ^ op25_repeater/lib/CMakeFiles/gnuradio-op25_repeater.dir/build.make:100: recipe for target 'op25_repeater/lib/CMakeFiles/gnuradio-op25_repeater.dir/p25_frame_assembler_impl.cc.o' failed make[2]: *** [op25_repeater/lib/CMakeFiles/gnuradio-op25_repeater.dir/p25_frame_assembler_impl.cc.o] Error 1

Build failure at linking step

I'm getting this at the end of the make step, with gr-op25 and gr-dsd installed:

gr-dsd: argilo/gr-dsd@d2f0270
gr-op25: git://op25.osmocom.org/op25.git commit 2051a96198c917647194ad7aceec1b0b879d0dff
Ubuntu: 14.04 LTS
gnuradio: 3.7.2.1-5ubuntu0.1

Linking CXX executable recorder
CMakeFiles/recorder.dir/dsd_recorder.cc.o: In function `dsd_recorder::dsd_recorder(double, double, long, long, int)':
dsd_recorder.cc:(.text+0xa3b): undefined reference to `dsd_make_block_ff(dsd_frame_mode, dsd_modulation_optimizations, int, bool, int, bool, int)'
CMakeFiles/recorder.dir/dsd_recorder.cc.o: In function `dsd_recorder::deactivate()':
dsd_recorder.cc:(.text+0x1f18): undefined reference to `dsd_block_ff::get_state()'
dsd_recorder.cc:(.text+0x2557): undefined reference to `dsd_block_ff::reset_state()'
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: In function `gr::blocks::nonstop_wavfile_sink_impl::open(char const*)':
nonstop_wavfile_sink_impl.cc:(.text+0x89c): undefined reference to `gr::blocks::wavheader_write(_IO_FILE*, unsigned int, int, int)'
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: In function `gr::blocks::nonstop_wavfile_sink_impl::close_wav()':
nonstop_wavfile_sink_impl.cc:(.text+0x9b7): undefined reference to `gr::blocks::wavheader_complete(_IO_FILE*, unsigned int)'
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: In function `gr::blocks::nonstop_wavfile_sink_impl::work(int, std::vector<void const*, std::allocator<void const*> >&, std::vector<void*, std::allocator<void*> >&)':
nonstop_wavfile_sink_impl.cc:(.text+0xd5f): undefined reference to `gr::blocks::wav_write_sample(_IO_FILE*, short, int)'
collect2: error: ld returned 1 exit status
make[2]: *** [recorder] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2

Error at "Linking CXX executable recorder" -> nonstop_wavfile_sink_impl.cc

Hello,

I'm trying to compile but I'm stuck in this step. I'm sure cmake finds GnuRadio:

cmake -DCMAKE_PREFIX_PATH=/opt/gnuradio/gnuradio/build/ -DCMAKE_CXX_FLAGS=-pthread
Checking for GNU Radio Module: RUNTIME
GNURADIO_RUNTIME_FOUND = TRUE
GNURADIO_ANALOG_FOUND = TRUE
GNURADIO_BLOCKS_FOUND = TRUE
....
-- Found GNURADIO_RUNTIME: /usr/local/lib/libgnuradio-runtime.so;/usr/local/lib/libgnuradio-runtime.so;/usr/local/lib/libgnuradio-pmt.so
-- Found CPPUNIT: /usr/lib/x86_64-linux-gnu/libcppunit.so;dl;dl
-- Found gnuradio-uhd: /usr/local/include, /usr/local/lib/libgnuradio-uhd.so
-- Pkg: , ,
-- Vars: /usr/local/include, /usr/local/lib/libgnuradio-osmosdr.so
-- Configuring Boost C++ Libraries...
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- thread
-- system
-- program_options
-- filesystem
-- log
-- chrono
-- date_time
-- atomic
-- log_setup
-- regex
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/DMR/trunk-recorder

But everytime I try "make", always same "Error 2":

[100%] Linking CXX executable recorder
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: En la funciΓ³n gr::blocks::nonstop_wavfile_sink_impl::close_wav()': nonstop_wavfile_sink_impl.cc:(.text+0x70): referencia agr::blocks::wavheader_complete(IO_FILE, unsigned int)' sin definir
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: En la funciΓ³n gr::blocks::nonstop_wavfile_sink_impl::do_update()': nonstop_wavfile_sink_impl.cc:(.text+0xcb): referencia agr::blocks::wavheader_complete(IO_FILE, unsigned int)' sin definir
CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: En la funciΓ³n gr::blocks::nonstop_wavfile_sink_impl::open(char const*)': nonstop_wavfile_sink_impl.cc:(.text+0x1af): referencia agr::blocks::wavheader_parse(IO_FILE, unsigned int&, int&, int&, int&, unsigned int&)' sin definir
nonstop_wavfile_sink_impl.cc:(.text+0x21e): referencia a gr::blocks::wavheader_write(_IO_FILE_, unsigned int, int, int)' sin definir CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: En la funciΓ³n gr::blocks::nonstop_wavfile_sink_impl::close()':
nonstop_wavfile_sink_impl.cc:(.text+0x2ce): referencia agr::blocks::wavheader_complete(_IO_FILE_, unsigned int)' sin definir CMakeFiles/recorder.dir/nonstop_wavfile_sink_impl.cc.o: En la funciΓ³n gr::blocks::nonstop_wavfile_sink_impl::work(int, std::vector<void const
, std::allocator<void const*> >&, std::vector<void*, std::allocator<void*> >&)':
nonstop_wavfile_sink_impl.cc:(.text+0xda8): referencia a `gr::blocks::wav_write_sample(IO_FILE, short, int)' sin definir
collect2: error: ld returned 1 exit status
make[2]: *_* [recorder] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2
root@a:/opt/DMR/trunk-recorder# _

I'm using Ubuntu 14.04 and Gnuradio 3.7:
_
root@a:/opt/DMR/trunk-recorder# gnuradio-config-info -v
v3.7.4git-273-g0ae33fc6
root@a:/opt/DMR/trunk-recorder# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
root@a:/opt/DMR/trunk-recorder#_

Please could you help me trying to identify the problem ? I also download and compile gr-dsd from https://github.com/robotastic/gr-dsd, as I saw on a previous issue, but still same error.

Thank you.

Build errors on Ubuntu 14.04

I'm running into this error when running the 'make' command.

Setup is Ubuntu 14.04, pybombs used to install gnruadio&friends.

Any suggestions?

node@computer:~/sdr/trunk-recorder$ make
[  6%] Building CXX object CMakeFiles/recorder.dir/main.cc.o
/home/node/sdr/trunk-recorder/main.cc: In function β€˜void monitor_messages()’:
/home/node/sdr/trunk-recorder/main.cc:481:15: error: reference to β€˜queue’ is ambiguous
         msg = queue->delete_head();
               ^
/home/node/sdr/trunk-recorder/main.cc:76:21: note: candidates are: gr::msg_queue::sptr queue
 gr::msg_queue::sptr queue;
                     ^
In file included from /usr/include/c++/4.8/queue:64:0,
                 from /usr/include/boost/assign/std/queue.hpp:21,
                 from /usr/include/boost/assign/std.hpp:23,
                 from /usr/include/boost/assign.hpp:19,
                 from /home/node/sdr/target/include/uhd/usrp/gpio_defs.hpp:22,
                 from /home/node/sdr/target/include/uhd/usrp/dboard_iface.hpp:25,
                 from /home/node/sdr/target/include/uhd/usrp/multi_usrp.hpp:45,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_block.h:28,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_source.h:26,
                 from /home/node/sdr/trunk-recorder/source.h:7,
                 from /home/node/sdr/trunk-recorder/main.cc:46:
/usr/include/c++/4.8/bits/stl_queue.h:93:11: note:                 template<class _Tp, class _Sequence> class std::queue
     class queue
           ^
/home/node/sdr/trunk-recorder/main.cc:471:12: warning: unused variable β€˜lastUnitCheckTime’ [-Wunused-variable]
     time_t lastUnitCheckTime = time(NULL);
            ^
/home/node/sdr/trunk-recorder/main.cc: In function β€˜bool monitor_system()’:
/home/node/sdr/trunk-recorder/main.cc:543:121: error: reference to β€˜queue’ is ambiguous
             smartnet_trunking = make_smartnet_trunking(control_channel_freq, source->get_center(), source->get_rate(),  queue);
                                                                                                                         ^
/home/node/sdr/trunk-recorder/main.cc:76:21: note: candidates are: gr::msg_queue::sptr queue
 gr::msg_queue::sptr queue;
                     ^
In file included from /usr/include/c++/4.8/queue:64:0,
                 from /usr/include/boost/assign/std/queue.hpp:21,
                 from /usr/include/boost/assign/std.hpp:23,
                 from /usr/include/boost/assign.hpp:19,
                 from /home/node/sdr/target/include/uhd/usrp/gpio_defs.hpp:22,
                 from /home/node/sdr/target/include/uhd/usrp/dboard_iface.hpp:25,
                 from /home/node/sdr/target/include/uhd/usrp/multi_usrp.hpp:45,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_block.h:28,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_source.h:26,
                 from /home/node/sdr/trunk-recorder/source.h:7,
                 from /home/node/sdr/trunk-recorder/main.cc:46:
/usr/include/c++/4.8/bits/stl_queue.h:93:11: note:                 template<class _Tp, class _Sequence> class std::queue
     class queue
           ^
/home/node/sdr/trunk-recorder/main.cc:549:111: error: reference to β€˜queue’ is ambiguous
             p25_trunking = make_p25_trunking(control_channel_freq, source->get_center(), source->get_rate(),  queue);
                                                                                                               ^
/home/node/sdr/trunk-recorder/main.cc:76:21: note: candidates are: gr::msg_queue::sptr queue
 gr::msg_queue::sptr queue;
                     ^
In file included from /usr/include/c++/4.8/queue:64:0,
                 from /usr/include/boost/assign/std/queue.hpp:21,
                 from /usr/include/boost/assign/std.hpp:23,
                 from /usr/include/boost/assign.hpp:19,
                 from /home/node/sdr/target/include/uhd/usrp/gpio_defs.hpp:22,
                 from /home/node/sdr/target/include/uhd/usrp/dboard_iface.hpp:25,
                 from /home/node/sdr/target/include/uhd/usrp/multi_usrp.hpp:45,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_block.h:28,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_source.h:26,
                 from /home/node/sdr/trunk-recorder/source.h:7,
                 from /home/node/sdr/trunk-recorder/main.cc:46:
/usr/include/c++/4.8/bits/stl_queue.h:93:11: note:                 template<class _Tp, class _Sequence> class std::queue
     class queue
           ^
/home/node/sdr/trunk-recorder/main.cc: In function β€˜int main()’:
/home/node/sdr/trunk-recorder/main.cc:565:5: error: reference to β€˜queue’ is ambiguous
     queue = gr::msg_queue::make(100);
     ^
/home/node/sdr/trunk-recorder/main.cc:76:21: note: candidates are: gr::msg_queue::sptr queue
 gr::msg_queue::sptr queue;
                     ^
In file included from /usr/include/c++/4.8/queue:64:0,
                 from /usr/include/boost/assign/std/queue.hpp:21,
                 from /usr/include/boost/assign/std.hpp:23,
                 from /usr/include/boost/assign.hpp:19,
                 from /home/node/sdr/target/include/uhd/usrp/gpio_defs.hpp:22,
                 from /home/node/sdr/target/include/uhd/usrp/dboard_iface.hpp:25,
                 from /home/node/sdr/target/include/uhd/usrp/multi_usrp.hpp:45,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_block.h:28,
                 from /home/node/sdr/target/include/gnuradio/uhd/usrp_source.h:26,
                 from /home/node/sdr/trunk-recorder/source.h:7,
                 from /home/node/sdr/trunk-recorder/main.cc:46:
/usr/include/c++/4.8/bits/stl_queue.h:93:11: note:                 template<class _Tp, class _Sequence> class std::queue
     class queue
           ^
make[2]: *** [CMakeFiles/recorder.dir/main.cc.o] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2
node@computer:~/sdr/trunk-recorder$

handle_message(){ not executing

(In trunk-recorder) Because our current error comes from main.cc conditional statement: -> if (msgs_decoded_per_second < 10 ) with a friend I did some looking into the main.cc code today and found (by adding BOOST_LOG_TRIVIAL(error) << "put debug string here" error messages) that:

messages are never getting handled...
in main.cc the computer is never executing the code inside the function:
void handle_message(std::vector messages){

i wonder why......

Retune when channel is out of band

The particular trunked system I like to follow uses channels that cove more than 10MHz of spectrum. Regardless of the center frequency I choose, I will always run into a channel that will get skipped because it is outside of the 10MHz I can get from my Airspy. I suppose I could use multiple RTL-SDR's, but even they would have to be carefully allocated in order to cover all possible channels.

I've been thinking that being able to dynamically retune the SDR to cover all channels being actively recorded would be very nice to have, and would also eliminate the need to specify the center frequency of the SDR.

When I try to figure out what would be hard to do, it seems to me it boils down to how disruptive it is to do the retune, and how much traffic would be missed as everything settles back down.

I also see that it would complicate the multiple SDR scenario, although it seems to me it would make figuring out where each should be centered easier, if cleverly done.

Smartnet skipping talkgroups

Is there a technical reason to skip talkgroup IDs 56016 and 8176.
In smartnet_parser.cc

if ( (address != 56016) && (address != 8176)) { // remove this later to make it more general

The comment makes it sound like it was something just for a specific system, and maybe should be removed?

OP25 Performance

OP25 has really bad performance when decoding audio. DSD does much better.

Missing dependencies MacOS

In file included from /Users/r00t/trunk-recorder/recorder.h:29:
/Users/r00t/trunk-recorder/dsd_block_ff.h:25:10: fatal error: 'dsd/dsd_api.h'
file not found

include <dsd/dsd_api.h>

     ^

1 error generated.
make[2]: *** [CMakeFiles/recorder.dir/main.cc.o] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2

Unable to setup Control Channel Monitor

Hi

I'm attempting to get this up and running with an rtlsdr dongle but am getting the aforementioned issue.

My config is as such:

{
    "sources": [{
        "center": 857800000.0,
        "rate": 2048000.0,
        "error": 1800,
        "ppm": 0,
        "gain": 42,
        "digitalRecorders": 4,
        "driver": "osmosdr",
        "device": ""
    }],
    "system": {
        "control_channels": [855462500],
        "type": "smartnet"
    },
    "talkgroupsFile": "ChanList.csv"
}

And when I try and run I get the following:

jonathan@tesla:~/trunk-recorder$ ./recorder 
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.git-202-g9e0861e1

[2016-05-07 17:26:56.251417] [0xbb603780] [info]    Control Channels: 
[2016-05-07 17:26:56.251560] [0xbb603780] [info]    8.55462e+08 
[2016-05-07 17:26:56.251583] [0xbb603780] [info]    
[2016-05-07 17:26:56.251605] [0xbb603780] [info]    Talkgroups File: ChanList.csv
[2016-05-07 17:26:56.251665] [0xbb603780] [info]    Center: 8.578e+08
[2016-05-07 17:26:56.251695] [0xbb603780] [info]    Rate: 2.048e+06
[2016-05-07 17:26:56.251733] [0xbb603780] [info]    Error: 1800
[2016-05-07 17:26:56.251760] [0xbb603780] [info]    PPM Error: 0
[2016-05-07 17:26:56.251785] [0xbb603780] [info]    Gain: 42
[2016-05-07 17:26:56.251806] [0xbb603780] [info]    IF Gain: 0
[2016-05-07 17:26:56.251825] [0xbb603780] [info]    BB Gain: 0
[2016-05-07 17:26:56.251845] [0xbb603780] [info]    Digital Recorders: 4
[2016-05-07 17:26:56.251865] [0xbb603780] [info]    Debug Recorders: 0
[2016-05-07 17:26:56.251884] [0xbb603780] [info]    Analog Recorders: 0
[2016-05-07 17:26:56.251902] [0xbb603780] [info]    driver: osmosdr
[2016-05-07 17:26:56.251921] [0xbb603780] [info]    Source Device not specified
gr-osmosdr v0.1.4-72-g164a09fc (0.1.5git) gnuradio 3.7.9.2
built-in source types: file fcd rtl rtl_tcp uhd hackrf bladerf rfspace airspy redpitaya 
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
[2016-05-07 17:26:57.542556] [0xbb603780] [info]    SOURCE TYPE OSMOSDR (osmosdr)
[2016-05-07 17:26:57.542609] [0xbb603780] [info]    Setting sample rate to: 2.048e+06
[R82XX] PLL not locked!
[2016-05-07 17:26:57.660386] [0xbb603780] [info]    Actual sample rate: 2.048e+06
[2016-05-07 17:26:57.660433] [0xbb603780] [info]    Tunning to 8.57802e+08hz
[2016-05-07 17:26:57.711636] [0xbb603780] [info]    Max HZ: 8.58824e+08
[2016-05-07 17:26:57.711683] [0xbb603780] [info]    Min HZ: 8.56776e+08
Using Volk machine: avx_64_mmx_orc
Project 25 IMBE Encoder/Decoder Fixed-Point implementation
Developed by Pavel Yazev E-mail: [email protected]
Version 1.0 (c) Copyright 2009
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see the file ``LICENSE'' for details.
[2016-05-07 17:26:57.745396] [0xbb603780] [info]    Loading Talkgroups...

[2016-05-07 17:26:57.746614] [0xbb603780] [info]    Read 135 talkgroups.
[2016-05-07 17:26:57.746656] [0xbb603780] [info]    Unable to setup Control Channel Monitor

Have you got any ideas of what I might be doing wrong?

Sample Rate Cannot Be a Multiple of 24k

When the sample rate is a multiple of 24k the program exits with:
"Something is probably wrong! Resampling rate too low in p25_trunking."

In p25_recorder.cc and p25_trunking.cc the software requires (arb_rate < 1) to avoid an exit(0).

When the sample rate is a multiple of 24k, arb_rate is one.

The program is working great for me after a change to (arb_rate <= 1).

CMake: Change project name from gr-osmosdr to smartnet-recorder

The project CMakeLists.txt contains:

project(gr-osmosdr CXX C)

This admittedly threw me for a bit of a loop when I got an error message that gr-osmosdr couldn't be build due some missing deps. Changing that to smartnet-recorder is probably a good idea. :)

I can't get talkgroups to compile (or the software to actually start recording)

My issue is that when i run ./recorder it shows the block of text directly below.....

$ ./recorder
linux; GNU C++ version 4.9.2; Boost_105500; UHD_003.009.000-1-g71985969

[2015-08-24 01:25:39.437629] [0x000007f0fa7f1540] [info]    Center: 8.52288e+08

[2015-08-24 01:25:39.438157] [0x000007f0fa7f1540] [info]    Rate: 8e+06

[2015-08-24 01:25:39.438368] [0x000007f0fa7f1540] [info]    Error: 1400

[2015-08-24 01:25:39.438563] [0x000007f0fa7f1540] [info]    Gain: 12

[2015-08-24 01:25:39.438720] [0x000007f0fa7f1540] [info]    IF Gain: 0

[2015-08-24 01:25:39.438874] [0x000007f0fa7f1540] [info]    BB Gain: 0

[2015-08-24 01:25:39.439042] [0x000007f0fa7f1540] [info]    Digital Recorders: 4

[2015-08-24 01:25:39.439192] [0x000007f0fa7f1540] [info]    Debug Recorders: 0

[2015-08-24 01:25:39.439341] [0x000007f0fa7f1540] [info]    Analog Recorders: 0

[2015-08-24 01:25:39.439508] [0x000007f0fa7f1540] [info]    driver: usrp

[2015-08-24 01:25:39.884282] [0x000007f0fa7f1540] [error]   LookupError: KeyError: No devices found for ----->
Empty Device Address

[2015-08-24 01:25:39.884670] [0x000007f0fa7f1540] [info]    Loading Talkgroups...

Error Opening TG File: 
Segmentation fault (core dumped)

This is the raw text data of my ChanList.csv file.

31553,7b41 ,D ,OPD Patrol 1,Patrol 1 - West Dispatch ,Law Dispatch ,Oakland Police ,2
31554,7b42 ,D ,OPD Patrol 2,Patrol 2 - Central Dispatch ,Law Dispatch ,Oakland Police ,3
31555,7b43 ,D ,OPD Patrol 3,Patrol 3 - East Dispatch ,Law Dispatch ,Oakland Police ,4
31556,7b44 ,D ,OPD Patrol 4,Patrol 4 - Car-to-Car ,Law Tac ,Oakland Police ,1
31557,7b45 ,D ,OPD Patrol 5,Patrol 5 - Car-to-Car ,Law Tac ,Oakland Police ,5
31558,7b46 ,D ,OPD Serv 1,Service 1 ,Law Dispatch ,Oakland Police ,6
31559,7b47 ,D ,OPD Serv 2,Service 2 ,Law Dispatch ,Oakland Police ,10
31561,7b49 ,D ,OPD Yth Svcs,Youth Services ,Law Tac ,Oakland Police ,9
31569,7b51 ,D ,OPD Tac 1,Tac 1 ,Law Tac ,Oakland Police ,7
31570,7b52 ,D ,OPD Tac 2,Tac 2 ,Law Tac ,Oakland Police ,8
31571,7b53 ,D ,OPD Tac 3,Tac 3 ,Law Tac ,Oakland Police ,11
31572,7b54 ,D ,OPD Tac 4,Tac 4 ,Law Tac ,Oakland Police ,12
31573,7b55 ,D ,OPD Tac 5,Tac 5 ,Law Tac ,Oakland Police ,13
31577,7b59 ,D ,OPD Tac 6,Tac 6 ,Law Tac ,Oakland Police ,17
31578,7b5a ,D ,OPD Tac 7,Tac 7 ,Law Tac ,Oakland Police ,16
31579,7b5b ,D ,OPD Tac 8,Tac 8 ,Law Tac ,Oakland Police ,15
31580,7b5c ,D ,OPD Tac 9,Tac 9 ,Law Tac ,Oakland Police ,18
31581,7b5d ,D ,OPD Tac 10,Tac 10 ,Law Tac ,Oakland Police ,14

Control Channel Message Decode Rate:

I am for ever getting this error
[0xb404f700] [error] Control Channel Message Decode Rate: 1/sec

I know this has to do with tuning but I'm not clever enough to work out what the correct tuning is.

This is my config.json
{ "sources": [{ "center": 85150000.0, "rate": 2399999.0, "squelch": -25, "error": -850, "gain": 45, "digitalRecorders": 2, "driver": "osmosdr" }], "system": { "control_channels": [85132500], "type": "p25", "modulation": "QPSK" }, "talkgroupsFile": "ChanList.csv" }

And this is what works with op25:
./scope.py --args rtl=0 -N LNA:46 -f 851.38100e6 -S 2400000 -q -1 -v 0 -o 5000 -V -T marrs-trunk.tsv

With the above command line I can pretty much fire up op25 on a warm rtl-sdr and start decoding with no adjustments. Not sure how to translate that to the config.json?

Any squelch control

I see some commented out code with a squelch block.
I get a good 3 seconds of static after each transmission (smartnet analog), looking for options

missing dependencies

While attempting to compile trunk-recorder on a vagrant 14.04 Ubuntu virtual machine I needed to also apt-get install libncurses5-dev and libboost-all-dev ( I installed the other boost libraries but it still said that boost was missing)

Error returned running cmake

I have installed gnuradio+your forked version of DSD, OP25(I already had and have been running a week now) and when i clone trunk-recorder, i put it into the directory ~/pybombs/src/trunk-recorder.
So I cd there and attempt to run " cmake -DCMAKE_PREFIX_PATH=/home/jordan/target " no quotes. and it gives me the following error:

checking for module 'gnuradio-uhd'
-- package 'gnuradio-uhd' not found
-- gnuradio-uhd not found.
-- Could NOT find GNURADIO_UHD (missing: GNURADIO_UHD_INCLUDE_DIRS)
-- Found UHD: /home/jordan/target/lib/libuhd.so
-- Configuring Boost C++ Libraries...
-- Could NOT find Boost
CMake Error at CMakeLists.txt:116 (message):
Boost required to build Smartnet-Recorder

I have the version of GNU Radio as of today

and im not actually sure if I have the latest version of OP25 or not, I installed it from 3rd party git repo because their main site is down. Here is the repo i installed op25 from: https://github.com/eddof13/op25

I am using Ubuntu 14.04.

Edit:
So I got around the error message by modifying CMakeLists:

From:
find_package(Boost COMPONENTS ${BOOST_REQUIRED_COMPONENTS})

To:
find_package(Boost)

this allowed it to create the makefiles, however when I run make, It gets to around 65pct and gives me the following error message:

  jordan@jordan-desktop:~/trunk-recorder$ make

Linking CXX executable recorder
/usr/bin/ld: CMakeFiles/recorder.dir/main.cc.o: undefined reference to symbol '_ZN5boost10filesystem6detail18create_directoriesERKNS0_4pathEPNS_6system10error_codeE'
//usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.54.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [recorder] Error 1
make[1]: *** [CMakeFiles/recorder.dir/all] Error 2
make: *** [all] Error 2

Control Channel Decode Error and No Recording

Hello:

I am receiving a mix of control channel error messages along with what appear to be comments about starting recordings. I am running on a Raspberry pi 3 with two RTL dongles.

I'm blind, and so haven't been able to use a graphical tool like gqrx to determine the correct offset. I have successfully used fmp24 and DSDPlus on Windows and used the -375 offset value I believe DSDPlus is providing to FMP24 for fine tuning, but whether I enter it as 375 or -375 I get the error. I also tried using kal to calibrate the RTL dongles, but that didn't seem to help either. These are Newelec dongles that have a 0.5PPM TCXO.

Some output from the program: http://pastebin.com/uyLhL8uW

config.json
{
"sources": [{
"center": 853350000.0,
"rate": 2048000.0,
"squelch": -50,
"error": 375,
"gain": 49,
"digitalRecorders": 1,
"driver": "osmosdr",
"device": "rtl=0"
},
{ "center": 851100000.0,
"rate": 2048000.0,
"squelch": -50,
"error": 330,
"gain": 49,
"digitalRecorders": 1,
"driver": "osmosdr",
"device": "rtl=1"
}
],
"system": {
"control_channels": [853875000],
"type": "p25",
"modulation": "QPSK",
"captureDir": "/home/pi/recordings/"
},
"talkgroupsFile": "Baltimore.csv"
}

I'm assuming this is a tuning issue. I also am getting recording files, but they are all 4KB and mostly have no sound.

I would appreciate any suggestions. Especially if anyone knows a reliable way to get the correct offset from the command line.

Little add to README.md

Hi
Please could you consider to include gnuradio-dev package in the building instructions for linux if gnuradio was installed from repos. Also a list with the files to copy to a final destination from the source folder.
Thanks!

UEO - Unidentified Error Object

It seems to be recording but there is an error message I can't figure out and when i check the recorded files they are empty... I didn't do anything to setup my R820T dongle and antenna, just plugged it in...

I've gotten the trunk-recorder configured thusly:

`linux; GNU C++ version 4.9.2; Boost_105500; UHD_003.009.000-1-g71985969

[2015-08-28 20:07:55.883588] [0x000007feb9a51b40] [info] Center: 8.53106e+08

[2015-08-28 20:07:55.884078] [0x000007feb9a51b40] [info] Rate: 1e+06

[2015-08-28 20:07:55.884284] [0x000007feb9a51b40] [info] Error: 0

[2015-08-28 20:07:55.884477] [0x000007feb9a51b40] [info] Gain: 40

[2015-08-28 20:07:55.884633] [0x000007feb9a51b40] [info] IF Gain: 0

[2015-08-28 20:07:55.884789] [0x000007feb9a51b40] [info] BB Gain: 0

[2015-08-28 20:07:55.884991] [0x000007feb9a51b40] [info] Digital Recorders: 1

[2015-08-28 20:07:55.885164] [0x000007feb9a51b40] [info] Debug Recorders: 0

[2015-08-28 20:07:55.885323] [0x000007feb9a51b40] [info] Analog Recorders: 0

[2015-08-28 20:07:55.885498] [0x000007feb9a51b40] [info] driver: osmosdr

gr-osmosdr v0.1.4-48-g86ad5842 (0.1.5git) gnuradio 3.7.8
built-in source types: file osmosdr fcd rtl rtl_tcp uhd hackrf bladerf rfspace
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
SOURCE TYPE OSMOSDR (osmosdr)
Setting sample rate to: 1e+06
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!
Tunning to 8.53106e+08hz
[2015-08-28 20:07:57.265120] [0x000007feb9a51b40] [info] Max HZ: 8.53606e+08

[2015-08-28 20:07:57.265350] [0x000007feb9a51b40] [info] Min HZ: 8.52606e+08

Using Volk machine: ssse3_64
Decoding only P25 Phase 1 frames.
Enabling only GFSK modulation optimizations.
[2015-08-28 20:07:57.403611] [0x000007feb9a51b40] [info] Control Channels:
[2015-08-28 20:07:57.403911] [0x000007feb9a51b40] [info] 8.53106e+08
[2015-08-28 20:07:57.404033] [0x000007feb9a51b40] [info]

[2015-08-28 20:07:57.404190] [0x000007feb9a51b40] [info] Talkgroups File: ChanList.csv

[2015-08-28 20:07:57.404380] [0x000007feb9a51b40] [info] Loading Talkgroups...

Prechannel Decim: 20 Rate: 50000 system_channel_rate: 48000
After GCD - Prechannel Decim: 20 Rate: 25 system_channel_rate: 24
FM Gain: 12 PI: 3.14159 Samples per sym: 10`

THIS IS THE ERROR MESSAGE:

[2015-08-28 20:11:01.764587] [0x000007feb9a51b40] [error] Control Channel Message Decode Rate: 1/sec

how should i go about debugging this??
Thanks robotastic!

Can't select RTL device for systems with multiple rtl dongles. (Includes fix)

RTL device string is incomplete it always defaults to device index 0. Which means you can't use more than 1 rtl device at a time.. or select another device if device 0 is being used by another program.

Following is a fix to allow device selection and use multiple rtl devices.
You can either use rtl="device index number" example: rtl=0,rtl=1,rtl=2,etc..
or you can use rtl="serial number" example: rtl=00000001,rtl=00000002, etc.. or what ever you programmed them to using rtl_eeprom from the rtl-sdr package. There is a config.json example at the bottom.

Fix for source.cc:

Source::Source(double c, double r, double e, std::string drv, std::string dev)

            if (driver == "osmosdr") {
            osmosdr::source::sptr osmo_src;
            osmo_src = osmosdr::source::make(dev);

            std::cout << "SOURCE TYPE OSMOSDR (osmosdr)" << std::endl;
            std::cout << "Setting sample rate to: " << rate << std::endl;
            osmo_src->set_sample_rate(rate);
            std::cout << "Tunning to " << center + error << "hz" << std::endl;
            osmo_src->set_center_freq(center + error,0);
            source_block = osmo_src;
    }

config.json example:

serial number
{"center": 859000000.0,
"rate":2400000.0,
"error":-43100,
"gain": 49,
"antenna": "TX/RX",
"digitalRecorders":4,
"analogRecorders":4,
"driver": "osmosdr",
"device": "rtl=00000004"}

or

device index
{"center": 859000000.0,
"rate":2400000.0,
"error":-43100,
"gain": 49,
"antenna": "TX/RX",
"digitalRecorders":4,
"analogRecorders":4,
"driver": "osmosdr",
"device": "rtl=2"}

Adding unit-to-unit calls

First of all, I would like to thank you for creating this app. There's a Windows program like it (Trunking Recorder) but it'll be nice running everything on one box and one Web site. Also, if anyone is interested, I documented what I had to do to get it working with a minimal install of GNU Radio that doesn't include GUI elements or UHD/USRP support on the GNU Radio mailing list.

As for adding unit-to-unit calls, I did record a bit of the control channel using DSDPlus on Windows and also save the log file, which shows a unit-to-unit call between 104 and 9341, and between 101 and 9866.
http://www.rosecitytransit.org/files/[email protected]
http://www.rosecitytransit.org/files/[email protected]

Lastly, the captureDir argument is a global option and doesn't work inside a system object like the Readme describes. And are you still running this off a laptop, because the two times I've tried using an old laptop as a server (including once for Trunking Recorder) they didn't last.

Empty .wav files..... acts like its recording, but it's not working

I've spent the past month working with this software and I'm fairly sure I've configured everything correctly, however the audio files it outputs are empty.... help?

The dependencies/instance of trunk recorder I'm using comes from this repository:
https://github.com/brendanvg/vagrantScanner
This is using Vagrant...In order to address problems I came across while compiling/building trunk-recorder I wrote this VagrantFile and bootsrap.sh (which is a script which compiles the software to a virtual machine so that people can share/collaborate on software without troubleshooting each computer's dependencies/config..)...
My virtualbox settings is set to Enable USB Controller USB 2.0 (EHCI) Controller, which points to Realtek RTL2838UHIDIR [0100].... I don't think this would be the problem...

The ChanList.csv I used is located in:
https://github.com/brendanvg/Oakland

My config.json file looks like:
{
"sources": [{
"center": 853266800,
"rate": 8000000.0,
"error": 0,
"gain": 60,
"antenna": "TX/RX",
"digitalRecorders": 1,
"driver": "osmosdr",
"device": ""
}],
"system": {
"control_channels": [853266800],
"type": "p25"
},
"talkgroupsFile": "ChanList.csv"
}

This is the Oakland specific data I'm working with: http://www.radioreference.com/apps/db/?sid=6077
but when looking at the spectrum in GQRX I found that 853266800 and 853105700 are a strong (seemingly digital signal) that are always on.... and I figured they might be "close enough" to be the two control channels specified in http://www.radioreference.com/apps/db/?sid=6077... -> 853.33750c and 853.46250c.....

After all this, it does write .wav files, but when I inspect them, they are empty (they're all 44bytes no matter the time I keep it on)
I keep the recording on between 30-60 sec....

Some things I can think of:
in GQRX it's important for my hardware gain to be set, but it doesn't seem like I have this option in this software...is there anyway it can be added as a config attribute? I tried setting gain to 60 and even 80 with still no result... what type of gain is this???

Am I on the wrong frequency? I've tried many, so I wouldn't say this is a for sure problem...but would it be possible for you to take a gqrx screenshot of what a control channel should look like (its frequency, amplitude....the info shown in the waterfall display in gqrx)....

Thanks for all the help! Let me know what you think of the Vagrant solution and if I can be of help in any other way.
Sincerely,
Brendanvg

Filename timereference appears to remain constant

While running the recorder with a small modification to run with analog systems it appeared that the filenames produced all had identical timestamps in their filenames. This was remedied by moving the time(NULL) statement to occur immediately before the filename generation (sprintf) commanding.

Does not seem to record on analog systems

Have it working with a local P25 system. Analog smartnet system seems to not be recording. with the following messages:

Not recording because of priority
[2015-04-10 22:21:11.938259] [0x8831b440] [error] Not recording call

[ osmosdr ] No Debug Recorders Available
[2015-04-10 22:21:17.212800] [0x8831b440] [error] Call created for: 33968 TDMA: 32767 Encrypted: true

TG Priority: 3 Available Recorders: 0

Not recording because of priority
[2015-04-10 22:21:17.212908] [0x8831b440] [error] Not recording call

Recorders SHOULD be available according to config:

{ "sources": [
{"center": 857000000.0,
"rate": 8000000.0,
"error": -4135,
"gain": 30,
"antenna": "TX/RX",
"analogRecorders": 5,
"driver": "osmosdr",
"ifGain": 50,
"bbGain": 50,
"device": ""}
],
"system": {
"control_channels": [856062500],
"type": "smartnet"
},
"talkgroupsFile": "MSP_TrunkTGs.csv"

Add "rebanded" option for SmartNet

The current smartnet parsing code is incorrect for rebanded systems -- the channel spacing needs to be changed from 25KHz to 12.5KHz in those cases.

It would be awesome if there was a way to configure the recorder to use the rebanded spacing.

rtl device is hardcoded in osmosdr connection

If you pass a device ID in config.json it has the rtl driver hard coded.
Using airspy works fine as the default, but you can't have another rtlsdr connected or else you cannot pick which one you want to use.

Looking for feedback on a couple options :

  1. Just removed the hard-coded rtl= and then require the user pass rtl=0001 as the device in config.json
  2. Add a new hybrid driver named osmosdr-airspy. and change the relevant checks

I am leaning towards 2 (this is how I have been doing it). The reason I'm looking at 2 is gain options are also different for airspy. It has IF, MAX, and LNA gain's available to set.
I have some code that also allows those to be set via config.json for another day..

Real-time audio enhancement

trunk-recorder is awesome. I have been using it on our trunked system in Johnson County, KS. Could you add audio so one can listen in real-time? Perhaps combine all the demodulator outputs via non-blocking squelches, a multi-input adder, and audio sink.

error: narrowing conversion on make

During the make, I get these errors as output. I installed the prereqs and followed the install guide in the readme. I am running on arch linux so I may be missing a package or library. This may be a local issue for me, not sure tho.

$ make
[ 1%] Building CXX object op25_repeater/lib/imbe_vocoder/CMakeFiles/imbe_vocoder.dir/pitch_est.cc.o
/home/eric/code/trunk-recorder/op25_repeater/lib/imbe_vocoder/pitch_est.cc:60:1: error: narrowing conversion of β€˜32970’ from β€˜int’ to β€˜Word16 {aka short int}’ inside { } [-Wnarrowing]
};
^
/home/eric/code/trunk-recorder/op25_repeater/lib/imbe_vocoder/pitch_est.cc:60:1: error: narrowing conversion of β€˜33226’ from β€˜int’ to β€˜Word16 {aka short int}’ inside { } [-Wnarrowing]
.......... [more almost identical lines]
/home/eric/code/trunk-recorder/op25_repeater/lib/imbe_vocoder/pitch_est.cc:60:1: error: narrowing conversion of β€˜39626’ from β€˜int’ to β€˜Word16 {aka short int}’ inside { } [-Wnarrowing]
make[2]: *** [op25_repeater/lib/imbe_vocoder/CMakeFiles/imbe_vocoder.dir/build.make:327: op25_repeater/lib/imbe_vocoder/CMakeFiles/imbe_vocoder.dir/pitch_est.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:220: op25_repeater/lib/imbe_vocoder/CMakeFiles/imbe_vocoder.dir/all] Error 2
make: *** [Makefile:128: all] Error 2

Analog calls are not clearing from the Recorder array when complete using multiple RTL-SDRs

I was noticing traffic that should have been recorded but it was not. This is on a second site which is using 2 RTL-SDR sticks to monitor. I do not see this issue with the same code on the main site using a single AirSpy.

Looking at the logs it was showing "No Analog Recorders Available", so I increased the available recorders to more than the voice channels (8).
And still was getting the error. After adding some debugging I can see the array is full of old calls that still show active. I am adding more debugging now to nail it down.

[2016-07-06 17:00:58.242711] [0x00007fb2ecf49780] [error]       Call created for: 720   TDMA: 0 Encrypted: false        Freq: 8.68375e+08
[2016-07-06 17:00:58.242757] [0x00007fb2ecf49780] [info]    [ osmosdr ] No Analog Recorders Available
[2016-07-06 17:00:58.242786] [0x00007fb2ecf49780] [info]    Recoder For TG 7024 On Freq 867.375Mhz is active true
[2016-07-06 17:00:58.242811] [0x00007fb2ecf49780] [info]    Recoder For TG 2224 On Freq 867.625Mhz is active true
[2016-07-06 17:00:58.242835] [0x00007fb2ecf49780] [info]    Recoder For TG 2224 On Freq 867.375Mhz is active true
[2016-07-06 17:00:58.242859] [0x00007fb2ecf49780] [info]    Recoder For TG 2224 On Freq 867.625Mhz is active true
[2016-07-06 17:00:58.242883] [0x00007fb2ecf49780] [info]    Recoder For TG 1712 On Freq 867.375Mhz is active true
[2016-07-06 17:00:58.242910] [0x00007fb2ecf49780] [info]    Recoder For TG 720 On Freq 867.375Mhz is active true
[2016-07-06 17:00:58.242933] [0x00007fb2ecf49780] [info]    Recoder For TG 2224 On Freq 867.625Mhz is active true
[2016-07-06 17:00:58.242957] [0x00007fb2ecf49780] [info]    Recoder For TG 7024 On Freq 867.375Mhz is active true
[2016-07-06 17:00:58.242976] [0x00007fb2ecf49780] [error]       Not recording call
[2016-07-06 17:01:00.018298] [0x00007fb2ecf49780] [error]       Control Channel Message Decode Rate: 39.6667/sec

That is a loop of the Recorder array when it says it has no open slots. You can see same talk group multiple times and same channel multiple times.

Empty wav files, OS X, Airspy

I'm using trunk-recorder on OS X Sierra. I'm using it with an Airspy. I'm using it to listen to the King County (WA) Pubilc Safety trunking system, which is a Motorola SmartNet system.

I am successfully decoding the control channel, I can see calls starting and stopping.

It is also creating wav and json files in the expected place, but none of the WAV files actually contain anything (I once -- ONCE -- got a WAV file that had a transmission in it).

I am unsure what to do except to start exploring the code and adding debug stuff to it.

Any ideas what to look at first?

[error] Recording not started because there was no source covering: 0

First: This code has gotten me the furthest in monitoring a Smartnet II trunked system. I could not get it to work AT ALL with gr-op25's scope.py, although a regular P25 trunked system on Harris gear works fine. Anyway..

Fresh Ubuntu 15.04 with gr-op25 built using Pybombs. USRP B210.

I was having the identical build issues as @devnulling in issue #27 so i changed the queue variable based on thier fork to get it to compile.

I can see that it is decoding the TG's correctly, but it does not seem to be picking up the frequency, or it is reading it as 0.

2016-04-07 03:37:55.067336] [0x00007f4e8c51f780] [error] Recording not started because there was no source covering: 0 For TG: 16496
I am not entirely certain how to troubleshoot from here. Is there more verbose logging to see if it is in decoding the packet or if it is actually 0??

My center and bandwidth is more than enough to capture every freq in the system.

Branch multi-system is not decoding smartnet control channel

I just cant get the multi-system branch to decode my smart-net control channel.

First issue it was segfaulting, @trunk-recorder/systems/smartnet_parser.cc line 59:
int command = atoi( x[2].c_str() );
The x vector did not always contain more that one array element.

I went back where he message is built and found in main.cc
trunk_messages = smartnet_parser->parse_message(msg->to_string().erase(0, 10));
Which was this in master
trunk_messages = smartnet_parser->parse_message(msg->to_string());
If I dropped the erase the segfaults went away, but I was still only decoding like 4 messages p/ sec.

Using the same config, just the new system layout.

Smartnet Radio ID Issue

I just noticed my last commit de5942c was grabbing the radio id from the last message.source.
The issue is message.source has its least significant byte removed (well set to 0) as that is the status byte when it's the channel id.
I have a patch I'll submit tomorrow, just wanted to open this if anyone one else is using the latest version and notices some duplicate radio ids on a smartnet system.

Is there a website that this program outputs?

I felt like there was a website implemented by this as i was reading the intructions here, is this true? if so, how does it work?

and if not, is there another program you recomment i can use to set up a website?

lots of 0 byte and 44 byte wav files, no actual recordings

I'm trying to get this working in my local area (Seattle, WA), which, according to this, uses a "Motorola Type II SmartZone". A little Googling tells me that SmartZone and SmartNet are effectively the same thing, so this should work? But I wouldn't be surprised if I got that wrong.

Anyway, what I do know: I can tune my RTLSDRs using GGRX and similar to the frequencies listed on the radioreference.com page and can clearly see something on the control channel, and hear people talking on some of the other frequencies. I set up trunk recorder with two of the SDRs using the config below. I have also tried setting the errors to positive instead of negative, it doesn't seem to seem to affect much.

{
  "sources": [
    {
      "center": 852177000,
      "rate": 2048000,
      "error": -10725,
      "gain": 50,
      "digitalRecorders": 2,
      "analogRecorders": 2,
      "driver": "osmosdr",
      "device": "4",
      "serialNumber": "00000004"
    },
    {
      "center": 854685500,
      "rate": 2048000,
      "error": -25747,
      "gain": 50,
      "digitalRecorders": 2,
      "analogRecorders": 2,
      "driver": "osmosdr",
      "device": "0",
      "serialNumber": "00000000"
    }
  ],
  "system": {
    "control_channels": [851412500],
    "type": "smartnet"
  },
  "talkgroupsFile": "talkgroups.csv"
}

Any help/ideas/things to try?

Errors with HackRF

I have this software working perfectly with an RTL-SDR, using this config.json file:

{
        "sources": [
                {
                        "center": 857000000,
                        "rate": 2000000,
                        "error": 0,
                        "ppm": -2,
                        "gain": 30,
                        "digitalRecorders": 5,
                        "driver": "osmosdr",
                        "device": "rtl=00001"
                }
        ],
        "system": {
                "control_channels": [857287500,857787500,858787500,859787500],
                "type": "p25",
                "modulation": "QPSK"
        },
        "captureDir": "/home/ubuntu/radio/recordings",
        "talkgroupsFile": "ChanList.csv"
}

Now, I'm trying to use it with a HackRF One, but it's causing me quite a bit of grief. Here is my config.json file:

{
        "sources": [
                {
                        "center": 855000000,
                        "rate": 10000000,
                        "error": 0,
                        "ppm": -7,
                        "gain": 14,
                        "ifGain": 16,
                        "bbGain": 42,
                        "digitalRecorders": 5,
                        "driver": "osmosdr",
                        "device": "hackrf=7595cf"
                }
        ],
        "system": {
                "control_channels": [857287500,857787500,858787500,859787500],
                "type": "p25",
                "modulation": "QPSK"
        },
        "captureDir": "/home/ubuntu/radio/recordings",
        "talkgroupsFile": "ChanList.csv"
}

Everything looks like it's set properly. If I open up GQRX, it recognizes and works properly with the HackRF One. I found the PPM offset for it, tuned it all nicely. But when I try to run ./recorder with this, it keeps throwing the "Control Channel Message Decode Rate: 1/sec" error. Here's the output from when I start up the software:

linux; GNU C++ version 5.3.1 20151219; Boost_105800; UHD_003.009.002-0-unknown
[2016-10-14 21:49:05.797528] [0x00007fcfe88be8c0] [info]    Control Channels:
[2016-10-14 21:49:05.797623] [0x00007fcfe88be8c0] [info]    8.57288e+08
[2016-10-14 21:49:05.797643] [0x00007fcfe88be8c0] [info]    8.57788e+08
[2016-10-14 21:49:05.797658] [0x00007fcfe88be8c0] [info]    8.58788e+08
[2016-10-14 21:49:05.797672] [0x00007fcfe88be8c0] [info]    8.59788e+08
[2016-10-14 21:49:05.797679] [0x00007fcfe88be8c0] [info]
[2016-10-14 21:49:05.797710] [0x00007fcfe88be8c0] [info]    Capture Directory: /home/kotowick/radio/recordings
[2016-10-14 21:49:05.797721] [0x00007fcfe88be8c0] [info]    Config Directory: /home/kotowick/radio/trunk-recorder
[2016-10-14 21:49:05.797730] [0x00007fcfe88be8c0] [info]    Talkgroups File: ChanList.csv
[2016-10-14 21:49:05.797745] [0x00007fcfe88be8c0] [info]    Default Mode: digital
[2016-10-14 21:49:05.797782] [0x00007fcfe88be8c0] [info]    Center: 8.55e+08
[2016-10-14 21:49:05.797803] [0x00007fcfe88be8c0] [info]    Rate: 1e+07
[2016-10-14 21:49:05.797815] [0x00007fcfe88be8c0] [info]    Error: 0
[2016-10-14 21:49:05.797827] [0x00007fcfe88be8c0] [info]    PPM Error: -7
[2016-10-14 21:49:05.797846] [0x00007fcfe88be8c0] [info]    Gain: 14
[2016-10-14 21:49:05.797856] [0x00007fcfe88be8c0] [info]    IF Gain: 16
[2016-10-14 21:49:05.797866] [0x00007fcfe88be8c0] [info]    BB Gain: 42
[2016-10-14 21:49:05.797875] [0x00007fcfe88be8c0] [info]    Squelch: 0
[2016-10-14 21:49:05.797885] [0x00007fcfe88be8c0] [info]    Digital Recorders: 15
[2016-10-14 21:49:05.797901] [0x00007fcfe88be8c0] [info]    Debug Recorders: 0
[2016-10-14 21:49:05.797986] [0x00007fcfe88be8c0] [info]    Analog Recorders: 0
[2016-10-14 21:49:05.798003] [0x00007fcfe88be8c0] [info]    driver: osmosdr
[2016-10-14 21:49:05.798016] [0x00007fcfe88be8c0] [info]    Source Device: hackrf=7595cf,buflen=16384,buffers=8
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.9
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy redpitaya
Number of USB devices: 11
USB device 1d50:6089: 0000000000000000909864c8357595cf match
Using HackRF One with firmware git-b9d333a
Using 8 buffers of size 262144.
[2016-10-14 21:49:05.806338] [0x00007fcfe88be8c0] [info]    SOURCE TYPE OSMOSDR (osmosdr)
[2016-10-14 21:49:05.806361] [0x00007fcfe88be8c0] [info]    Setting sample rate to: 1e+07
[2016-10-14 21:49:05.807386] [0x00007fcfe88be8c0] [info]    Actual sample rate: 1e+07
[2016-10-14 21:49:05.807406] [0x00007fcfe88be8c0] [info]    Tunning to 8.55e+08hz
[2016-10-14 21:49:05.808007] [0x00007fcfe88be8c0] [info]    Max HZ: 8.6e+08
[2016-10-14 21:49:05.808026] [0x00007fcfe88be8c0] [info]    Min HZ: 8.5e+08
Using Volk machine: sse4_1_64_orc
Project 25 IMBE Encoder/Decoder Fixed-Point implementation
Developed by Pavel Yazev E-mail: [email protected]
Version 1.0 (c) Copyright 2009
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; see the file ``LICENSE'' for details.
[2016-10-14 21:49:05.869136] [0x00007fcfe88be8c0] [info]    Loading Talkgroups...

[2016-10-14 21:49:05.870520] [0x00007fcfe88be8c0] [info]    Read 259 talkgroups.
[2016-10-14 21:49:08.877637] [0x00007fcfe88be8c0] [error]       Control Channel Message Decode Rate: 1/sec
[2016-10-14 21:49:11.879736] [0x00007fcfe88be8c0] [error]       Control Channel Message Decode Rate: 1/sec
[2016-10-14 21:49:14.881129] [0x00007fcfe88be8c0] [error]       Control Channel Message Decode Rate: 1/sec

I've tried it with different firmware for the HackRF, but no luck (currently loaded firmware is built from source, directly from the most recent master branch commit on the repo). The REALLY weird thing is, twice over the past few days it has actually worked, but I cannot for the life of me reproduce the conditions that cause it to work. For some reason, I get the feeling that it has something to do with the HackRF not providing data to the trunk-recorder software properly (if I use an RTL-SDR to capture the control channel, and the HackRF for all the voice channels, all the audio file it saves are 44 bytes and corrupt).

When I run the hackrf_infocommand, it returns:

Found HackRF board 0:
USB descriptor string: 0000000000000000909864c8357595cf
Board ID Number: 2 (HackRF One)
Firmware Version: git-b9d333a
Part ID Number: 0xa000cb3c 0x004b435c
Serial Number: 0x00000000 0x00000000 0x909864c8 0x357595cf

Any thoughts on what could be causing this issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.