OP25 feature update

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
I am looking to convert my working traditional rx.py based configuration over to the new multi_rx.py JSON format on a Raspberry Pi 3B. I have looked at many examples by cannot fined anything close using a single dongle on a P25 Phase 1 system with raw UDP audio streamed to my PC. The below configuration has worked for years. I have attached my attempt of a JSON file although I am sure it has issues. Can some suggest what I may be missing?

Command line
./rx.py --args 'rtl' --gains 'lna:45' -S 256000 -f 800e6 -D cqpsk -n -g 100 -x 4.0 -l http:0.0.0.0:8080 -q 0 -o 25000 -T ./realtime.tsv -V -2 -w -W 10.1.1.3 -u 23180 -v 2 2> /var/log/scanner.log

realtime.tsv
"Sysname" "Control Channel List" "Offset" "NAC" "Modulation" "TGID Tags File" "Whitelist" "Blacklist" "Center Frequency"
"MARCS Cuyahoga " "774.78125,773.83125,774.28125,774.53125" "-25" "0x340" "CQPSK" "trs_6643.tsv" "" "trs_6643_bl.tsv" ""
 

Attachments

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
I am looking to convert my working traditional rx.py based configuration over to the new multi_rx.py JSON format on a Raspberry Pi 3B. I have looked at many examples by cannot fined anything close using a single dongle on a P25 Phase 1 system with raw UDP audio streamed to my PC. The below configuration has worked for years. I have attached my attempt of a JSON file although I am sure it has issues. Can some suggest what I may be missing?

Command line
./rx.py --args 'rtl' --gains 'lna:45' -S 256000 -f 800e6 -D cqpsk -n -g 100 -x 4.0 -l http:0.0.0.0:8080 -q 0 -o 25000 -T ./realtime.tsv -V -2 -w -W 10.1.1.3 -u 23180 -v 2 2> /var/log/scanner.log

realtime.tsv
"Sysname" "Control Channel List" "Offset" "NAC" "Modulation" "TGID Tags File" "Whitelist" "Blacklist" "Center Frequency"
"MARCS Cuyahoga " "774.78125,773.83125,774.28125,774.53125" "-25" "0x340" "CQPSK" "trs_6643.tsv" "" "trs_6643_bl.tsv" ""
Try this. It's about as close to your original as I can make it. Local audio disabled, terminal set to http, RTL device set to tunable.
Do you really need a 25khz offset?
 

Attachments

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
Try this. It's about as close to your original as I can make it. Local audio disabled, terminal set to http, RTL device set to tunable.
Do you really need a 25khz offset?
Thanks SO MUCH , that actually go it to work. The 25khz offset was just something that I always had in my configuration. as long as I don't need it, I'll eliminate it.
Anyhow, its working now for Ohio MARCS P25. I attached a copy of the configuration for anyone else reading this that may be curious.
 

Attachments

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
Is there a possibility for UDP streaming of call data into a future multi_rx.py edition?
Currently, I am customizing trunking.py to send call data to a windows application where I can post-process, replay, and archive the calls.
From what I can tell, tk_p25.py takes the place of trunking.py

Most of the sending happens from this function below. I have attached a current working copy as an example
def send_data(self, datatosend):
mymessage = datatosend
byt = mymessage.encode()
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(('10.1.1.3',25180))
sock.send(byt)

The types of data that I use are:
<NEW_CALL> Start of transmission​
<CURRENT_CALL> Existing call with UID updates​
<END_OF_TRANSMISSION>​
Emergency Button pressed​
Group Adds and Group Removes (I keep the forwarded calls in their original group folder, not the forwarded one)​
<CC_TIMEOUT> I use this to gauge the quality of the signal based on how many timeouts per block of time​

20:55:53.807<VOICE_GRANT><TGID>13611<UID>1892487<ENC>0<EMERG>0<END>
20:55:53.865<VOICE_GRANT><TGID>13611<UID>1892487<ENC>0<EMERG>0<END>
20:55:55.547<HEARTBEAT>
20:55:55.561<CLEARHOLD>
20:55:55.569<NEW_CALL><TGID>51591<UID>0<TAG>OSP Turnpike West<SYSTEM>All MARCS Cuyahoga Tower - Cuyahoga County (Ohio MARCS-IP: Multi-Agency Radio Communications) <ENC>0<END>
20:55:55.581<HEARTBEAT>
20:55:55.970<CURRENT_CALL><TGID>51591<UID>9004824<TAG>OSP Turnpike West<SYSTEM>All MARCS Cuyahoga Tower - Cuyahoga County (Ohio MARCS-IP: Multi-Agency Radio Communications) <ENC>0<END>
20:55:56.727<END_OF_TRANSMISSION>
20:55:56.760<HEARTBEAT>
 

Attachments

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
All the pcm audio passes through op25_audio::send_audio() in the c++ library code.
tk_p25.py does replace trunking.py for P25, but there are other trunking modules too (tk_smartnet, tk_trbo) for alternate protocols.
 

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
Actually, I was looking for the control channel data written to a UDP stream instead of a file .
Running at log level 5 gives me most of what I am interested in seeing. I coded that information in parallel to the corresponding log entry in trunking.py and streamed it out via UDP to my PC.
The ability to stream the control channel data would be awesome. Streaming the log data would be beneficial too.

08/04/20 15:18:52.610027 voice update: tg(56129), freq(855187500), slot(-), prio(3)
08/04/20 15:18:52.610196 do_metadata state=0: [56129] CPD 1st District
08/04/20 15:18:52.193314 duid15, tg(56132)
08/04/20 15:19:11.349247 new tgid=56723 ValleyView73 BrooklynHts23 CuyHts29 NwbrgHts51 prio 3
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
Actually, I was looking for the control channel data written to a UDP stream instead of a file .
Running at log level 5 gives me most of what I am interested in seeing. I coded that information in parallel to the corresponding log entry in trunking.py and streamed it out via UDP to my PC.
The ability to stream the control channel data would be awesome. Streaming the log data would be beneficial too.

08/04/20 15:18:52.610027 voice update: tg(56129), freq(855187500), slot(-), prio(3)
08/04/20 15:18:52.610196 do_metadata state=0: [56129] CPD 1st District
08/04/20 15:18:52.193314 duid15, tg(56132)
08/04/20 15:19:11.349247 new tgid=56723 ValleyView73 BrooklynHts23 CuyHts29 NwbrgHts51 prio 3
By "control channel data" do you mean Tags and TGIDs or do you really mean the control channel data (P25 protocol)?
If it's tags you're after, look at the icemeta.py thread and/or the meta_update() call from trunking.
 

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
The Tag and TGIDs with icemeta.py and the meta_update() call from trunking are definitely the direction I want to go.
Is there any way of sending out the UID (srcaddr) updates through the Icecast? I know it could be more updates since each call could have several UIDs attached to it.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
The Tag and TGIDs with icemeta.py and the meta_update() call from trunking are definitely the direction I want to go.
Is there any way of sending out the UID (srcaddr) updates through the Icecast? I know it could be more updates since each call could have several UIDs attached to it.
Icecast only appears to allow one string of data to be sent. How you format it is application-dependent so you can build the string however you want and send it how ever often you want.
 

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
That ended up worked out well for me. You did a fantastic job on those modules.
As always, thanks again for all you have done on this project.
 

marklt1

Member
Joined
Mar 5, 2005
Messages
36
Location
Streetsboro, OH
Is there any API or web call to change the LNA value for a RTL-SDR dynamically like there is for the fine tuning while it is running?
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
That would be very cool..
One little wrinkle is that the gain values are a string that gets passed to the underlying driver. Devices like the RTL only require "LNA:xx" where 'xx' is the gain, but others such as the Airspy have multiple parameters in a string of the form "LNA:15,MIX:15,IF:15". It would be simple enough to pass the string down to the driver and have it set, but fancier controls such as sliders or increment/decrement buttons would require the app to have knowledge of the underlying hardware.
 

HankFrank

Member
Premium Subscriber
Joined
Nov 6, 2009
Messages
108
Location
Central VA
Does anyone have a sample of a simple working config for a single RTL dongle on a Smartnet system? I kind of have it working... But it seems like the program won’t leave the control channel to tune to the voice frequency when one is active.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
2,321
Location
Talbot Co, MD
Does anyone have a sample of a simple working config for a single RTL dongle on a Smartnet system? I kind of have it working... But it seems like the program won’t leave the control channel to tune to the voice frequency when one is active.
Sorry, this is not possible unless you are using sdr hardware that can capture the entire system spectrum at one time. The smartnet implementation requires one channel dedicated to monitor the control channel, and at least one more to handle voice traffic.
 
Top