I am trying to use the OP25 blocks for a C++ program. I have everything running fine as a .GRC. I also have a makefile to bundle everything up into a library.
I am confused which C++ blocks I should be using - should it be op25_fsk4_demod_ff.cc connected to op25_decoder_ff.cc ?
op25_decoder_ff.h get exported to /usr/include/ however only op25_decoder_bf.cc is included in the Makefile.am
There is no op25_fsk_demod_fb.cc so I am not sure how I would connect the decoder_bf block in.
What are the correct C++ blocks to use to replicate the "OP25 FSK4 Demod" & "OP25 Deocder" Python Blocks?
Are there any C++ programs I could use as an example?
Thanks for any pointers!
- Luke
I just found Steve's earlier posts explaining that op25_decoder_ff.cc was depreciated and to stick a slicer in front of the bf version. I also realized that the OP25 GRC blocks came from Baz. I was able to figure out how hook everything together by looking at that.
After setting the return from general_work in op25_decoder_bf to n, so it only gives output when samples are received, I am able to record P25 CAI voice channels off of a SmartNet system using C++.
I would like to be able to record multiple channels at the same time using multiple instances of OP25. The problem is that I don't think I have enough CPU. I am monitoring 8Mhz of spectrum because the channels are pretty spread out.
Are there any performance tweaks I could try to improve CPU utilization? Are there any Static variables or other things that would make running multiple instances of OP25 or libmbe tough?
- Luke
--- In op25-dev@yahoogroups.com, "trinmole" <lukekb@...> wrote:
I am trying to use the OP25 blocks for a C++ program. I have everything running fine as a .GRC. I also have a makefile to bundle everything up into a library.
I am confused which C++ blocks I should be using - should it be op25_fsk4_demod_ff.cc connected to op25_decoder_ff.cc ?
op25_decoder_ff.h get exported to /usr/include/ however only op25_decoder_bf.cc is included in the Makefile.am
There is no op25_fsk_demod_fb.cc so I am not sure how I would connect the decoder_bf block in.
What are the correct C++ blocks to use to replicate the "OP25 FSK4 Demod" & "OP25 Deocder" Python Blocks?
Are there any C++ programs I could use as an example?
Thanks for any pointers!
- Luke
FWIW, for multi-channel simultaneous reception, another option to look at is usrp_rx.py, more info is here http://op25.osmocom.org/trac/wiki.png/wiki/RepeaterPage
Max
--- In op25-dev@yahoogroups.com, "trinmole" <lukekb@...> wrote:
I just found Steve's earlier posts explaining that op25_decoder_ff.cc was depreciated and to stick a slicer in front of the bf version. I also realized that the OP25 GRC blocks came from Baz. I was able to figure out how hook everything together by looking at that.
After setting the return from general_work in op25_decoder_bf to n, so it only gives output when samples are received, I am able to record P25 CAI voice channels off of a SmartNet system using C++.
I would like to be able to record multiple channels at the same time using multiple instances of OP25. The problem is that I don't think I have enough CPU. I am monitoring 8Mhz of spectrum because the channels are pretty spread out.
Are there any performance tweaks I could try to improve CPU utilization? Are there any Static variables or other things that would make running multiple instances of OP25 or libmbe tough?
- Luke
--- In op25-dev@yahoogroups.com, "trinmole" <lukekb@> wrote:
I am trying to use the OP25 blocks for a C++ program. I have everything running fine as a .GRC. I also have a makefile to bundle everything up into a library.
I am confused which C++ blocks I should be using - should it be op25_fsk4_demod_ff.cc connected to op25_decoder_ff.cc ?
op25_decoder_ff.h get exported to /usr/include/ however only op25_decoder_bf.cc is included in the Makefile.am
There is no op25_fsk_demod_fb.cc so I am not sure how I would connect the decoder_bf block in.
What are the correct C++ blocks to use to replicate the "OP25 FSK4 Demod" & "OP25 Deocder" Python Blocks?
Are there any C++ programs I could use as an example?
Thanks for any pointers!
- Luke
There is an effort to clean up code on going at the moment - the main reason being 3.7 compatibility but there's some unnecessary complexity and a lot of cruft that needs to be removed. As far as I can recall the code should be re-entrant - the static and global (if any) data are almost always const - and Pavel's imbe decoder was modified to remove static state.
You'll need something like an analysis filterblock at the head of the chain and then maybe a squelch to avoid processing where no signal is present for a given channel. The area in which I live is finally about to go digital and a Government Wireless Network installed at a cost of - amazingly - 452m$. So that means trunking and I am keen to improve things and get trunking support working properly. As always time is a precious resource but I've lots I want to get done and the prospect of having signals to receive makes it much more attractive use of my time.
Stevie
--- In op25-dev@yahoogroups.com, Steve Glass <stevie.glass@...> wrote:
So that means trunking and I am keen to improve things and get trunking support working properly.
Hi Stevie
Couldn't agree more about trunking - haven't spent enough time on it either, but I've just added a small addition to this effort in case you should find it useful [repeater/src/python/tsbk.py].
A trunking receiver needs to populate a frequency ID map from received "IDEN UPDATE" packets (TSBK's) that are sent out repetitively on the control channel. Once having this info it looks for GRANT and GRANT UPDATE commands (which specify the voice channel freq. map entry ID and offset plus the talk group ID). Then assuming the talk group ID is not in an exclude list we tune the receiver to the voice channel...
The python code expects to receive TSBK data which has already been decoded via the trellis 2/1 process (Mossmann's code has this) and wants to see the CRC16 which it checks for validity. Right now it populates the frequency ID map but for most of the rest of the trunking commands it just prints out a dump of the received packet.
In the fully general case such as in a multisystem receiving facility where multiple trunk CCs are fed to this code, there would of course need to be some way to create separate tsbk objects on a per control channel basis...
Best
Max
Hi Max,
I've already got trellis decode for TSBKs in the git repository for p25lib and now working on trying to get everything 3.7 compliant. One thing I'd like is to integrate the repeater and decoder into the one library and also to get GRC all good. Quite a backlog but its all good - if we can get trunking working before it goes live with me then I'd be delighted.
Steve