boatbod / op25

Fork of osmocom OP25 by boatbod
319 stars 100 forks source link

Help Using ./multi_rx.py And Setting Up .json File #156

Closed OP25Rookie closed 2 years ago

OP25Rookie commented 2 years ago

Hello, I'm actually using the Osmocom version and wondering how to setup the .json file to use 2 airspys on a P25 system. My script is:

./multi_rx.py -c hillsboroughwest.json -T hillsboroughwest.tsv -U -l http:127.0.0.1:8080 2> stderr.2

In the .json file, how do I tell what the device ID number should be in "args": "airspy=???" and what the syntax should be for the other parameters. My hillsboroughwest.json is:

{ "channels": [ { "demod_type": "cqpsk", "destination": "udp://127.0.0.1:56124", "excess_bw": 0.2, "filter_type": "rc", "frequency": 772000000, "if_rate": 24000, "name": "p25 control channel", "plot": "symbol", "decode": "p25_decoder:role=cc:dev=airspycc:nac=0xa", "symbol_rate": 4800 }, { "demod_type": "cqpsk", "destination": "udp://127.0.0.1:23456", "excess_bw": 0.2, "filter_type": "rc", "frequency": 772000000, "if_rate": 24000, "name": "p25 voice channel", "plot": "symbol", "decode": "p25_decoder:role=vc:dev=airspyvc", "symbol_rate": 4800 } ], "devices": [ { "args": "airspy=002", "frequency": 772000000, "gains": "LNA:10,MIX:10,IF:10", "name": "airspycc", "offset": 0, "ppm": 54, "rate": 1000000, "tunable": false }, { "args": "airspy=003", "frequency": 772000000, "gains": "LNA:10,MIX:10,IF:10", "name": "airspyvc", "offset": 0, "ppm": 54, "rate": 1000000, "tunable": false } ] }

The mods on RadioReference won't let me sign up on the forums and am wondering if anyone has any advice via my direct e-mail: trunktracker@tampabay.rr.com . Thanks in advance.

boatbod commented 2 years ago

Unfortunately I can't really help you with Osmocom op25. It used to work similarly to my fork of the repo but these days the codebase has diverged significantly.

On boatbod op25 the following configuration would work for a two-airspy (two stream) single P25 system. Instead of "airspy"="0" and "airspy=1" (for instances) you can substitute the airspy serial numbers so that you fix the relationship between physical device and logical use. [code] { "channels": [ { "name": "Voice_ch1", "device": "sdr0", "trunking_sysname": "P25 System", "meta_stream_name": "stream_0", "demod_type": "cqpsk", "cqpsk_tracking": true, "tracking_threshold": 120, "tracking_feedback": 0.75, "destination": "udp://127.0.0.1:23456", "excess_bw": 0.2, "filter_type": "rc", "if_rate": 24000, "plot": "", "symbol_rate": 4800, "enable_analog": "off", "blacklist": "", "whitelist": "stream0.wlist" }, { "name": "Voice_ch2", "device": "sdr1", "trunking_sysname": "P25 System", "meta_stream_name": "stream_1", "demod_type": "cqpsk", "cqpsk_tracking": true, "tracking_threshold": 120, "tracking_feedback": 0.75, "destination": "udp://127.0.0.1:23466", "excess_bw": 0.2, "filter_type": "rc", "if_rate": 24000, "plot": "", "symbol_rate": 4800, "enable_analog": "off", "blacklist": "", "whitelist": "stream1.wlist" } ], "devices": [ { "args": "airspy=0", "frequency": 772000000, "gains": "LNA:15,MIX:15,IF:5", "gain_mode": false, "name": "sdr0", "offset": 0, "ppm": 0.30, "rate": 3000000, "usable_bw_pct": 0.95, "tunable": true }, { "args": "airspy=1", "frequency": 772000000, "gains": "LNA:15,MIX:15,IF:5", "gain_mode": false, "name": "sdr1", "offset": 0, "ppm": 0.30, "rate": 3000000, "usable_bw_pct": 0.95, "tunable": true } ], "trunking": { "module": "tk_p25.py", "chans": [ { "nac": "0x0", "sysname": "P25 System", "control_channel_list": "773.84375,774.84375", "whitelist": "", "blacklist": "", "tgid_tags_file": "trunk-tags.tsv", "rid_tags_file": "trunk-rids.tsv", "tdma_cc": false, "crypt_behavior": 2 } ] }, "metadata": { "module": "icemeta.py", "streams": [ { "stream_name": "stream_0", "meta_format_idle": "[idle]", "meta_format_tgid": "[%TGID%]", "meta_format_tag": "[%TGID%] %TAG%", "icecastServerAddress": "192.168.1.24:8000", "icecastMountpoint": "op25_stream_0", "icecastMountExt": ".xspf", "icecastPass": "hackme1", "delay": 0.0 }, { "stream_name": "stream_1", "meta_format_idle": "[idle]", "meta_format_tgid": "[%TGID%]", "meta_format_tag": "[%TGID%] %TAG%", "icecastServerAddress": "192.168.1.24:8000", "icecastMountpoint": "op25_stream_1", "icecastMountExt": ".xspf", "icecastPass": "hackme2", "delay": 0.0 } ] }, "audio": { "module": "sockaudio.py", "instances": [ { "instance_name": "audio0", "device_name": "default", "udp_port": 23456, "audio_gain": 1.0, "number_channels": 1 }, { "instance_name": "audio1", "device_name": "default", "udp_port": 23466, "audio_gain": 1.0, "number_channels": 1 } ] }, "terminal": { "module": "terminal.py", "terminal_type": "http:127.0.0.1:8080", "curses_plot_interval": 0.1, "http_plot_interval": 1.0, "http_plot_directory": "../www/images", "tuning_step_large": 1200, "tuning_step_small": 100 } } [/code]