From 94a34dc4df7eb6f9595924fae8d2eac497555782 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 17 May 2018 21:55:02 -0400 Subject: [PATCH] configuration updates --- op25/gr-op25_repeater/apps/http.py | 37 ++++++++++- op25/gr-op25_repeater/www/config/default.json | 66 +++++++++++++++++++ .../www/www-static/index.html | 2 - op25/gr-op25_repeater/www/www-static/main.js | 33 ++++------ 4 files changed, 115 insertions(+), 23 deletions(-) create mode 100644 op25/gr-op25_repeater/www/config/default.json diff --git a/op25/gr-op25_repeater/apps/http.py b/op25/gr-op25_repeater/apps/http.py index 38ecba4..b0f00ad 100755 --- a/op25/gr-op25_repeater/apps/http.py +++ b/op25/gr-op25_repeater/apps/http.py @@ -35,6 +35,7 @@ from gnuradio import gr from waitress.server import create_server from optparse import OptionParser from multi_rx import byteify +from tsvfile import load_tsv, make_config my_input_q = None my_output_q = None @@ -42,6 +43,7 @@ my_recv_q = None my_port = None my_backend = None CFG_DIR = '../www/config/' +TSV_DIR = './' """ fake http and ajax server module @@ -80,18 +82,49 @@ def valid_tsv(filename): return False return True +def tsv_config(filename): + DEFAULT_CFG = '../www/config/default.json' + filename = '%s%s' % (TSV_DIR, filename) + filename = filename.replace('[TSV]', '.tsv') + if not valid_tsv(filename): + return None + cfg = make_config(load_tsv(filename)) + default_cfg = json.loads(open(DEFAULT_CFG).read()) + + result = default_cfg + channels = [ {'active': True, + 'blacklist': cfg[nac]['blacklist'], + 'whitelist': cfg[nac]['whitelist'], + 'cclist': cfg[nac]['cclist'], + 'demod_type': 'cqpsk', + 'destination': 'udp://127.0.0.1:23456', + 'filter_type': 'rc', + 'frequency': 500000000, + 'if_rate': 24000, + 'nac': nac, + 'name': cfg[nac]['sysname'], + 'phase2_tdma': False, + 'plot': "", + 'tgids': cfg[nac]['tgid_map'], + 'trunked': True + } + for nac in cfg.keys() ] + result['channels'] = channels + return {'json_type':'config_data', 'data': result} + def do_request(d): global my_backend - TSV_DIR = './' if d['command'].startswith('rx-'): msg = gr.message().make_from_string(json.dumps(d), -2, 0, 0) if not my_backend.input_q.full_p(): my_backend.input_q.insert_tail(msg) return None elif d['command'] == 'config-load': + if '[TSV]' in d['data']: + return tsv_config(d['data']) filename = '%s%s.json' % (CFG_DIR, d['data']) if not os.access(filename, os.R_OK): - return + return None js_msg = json.loads(open(filename).read()) return {'json_type':'config_data', 'data': js_msg} elif d['command'] == 'config-list': diff --git a/op25/gr-op25_repeater/www/config/default.json b/op25/gr-op25_repeater/www/config/default.json new file mode 100644 index 0000000..a5031cc --- /dev/null +++ b/op25/gr-op25_repeater/www/config/default.json @@ -0,0 +1,66 @@ +{ + "backend-rx":{ + "antenna":"", + "audio":false, + "audio-if":false, + "audio-input":"", + "audio-output":"default", + "calibration":0, + "costas-alpha":0.04, + "decim-amt":1, + "excess-bw":0.2, + "fine-tune":0, + "gain":null, + "gain-mu":0.025, + "gains":"", + "hamlib-model":null, + "ifile":"", + "input":"", + "logfile-workers":null, + "pause":false, + "raw-symbols":"", + "seek":0, + "tone-detect":false, + "udp-player":false, + "vocoder":false, + "wireshark":false, + "wireshark-host":"127.0.0.1" + }, + "channels":[ + { + "active":true, + "blacklist":[ + "" + ], + "cclist":[ + 0 + ], + "demod_type":"cqpsk", + "destination":"udp://127.0.0.1:23456", + "filter_type":"rc", + "frequency":500000000, + "if_rate":24000, + "nac":null, + "name":"Channel1", + "phase2_tdma":false, + "plot":"", + "tgids":[], + "trunked":false, + "whitelist":[ + "" + ] + } + ], + "devices":[ + { + "active":true, + "args":"rtl", + "frequency":500000000, + "gains":"lna:45", + "name":"Device1", + "offset":0, + "ppm":0, + "rate":1000000 + } + ] +} diff --git a/op25/gr-op25_repeater/www/www-static/index.html b/op25/gr-op25_repeater/www/www-static/index.html index 0d754e1..63cd1b1 100644 --- a/op25/gr-op25_repeater/www/www-static/index.html +++ b/op25/gr-op25_repeater/www/www-static/index.html @@ -328,7 +328,6 @@ Tags TG ID TG Text - Priority   @@ -336,7 +335,6 @@   -   diff --git a/op25/gr-op25_repeater/www/www-static/main.js b/op25/gr-op25_repeater/www/www-static/main.js index 15f421c..ddae571 100644 --- a/op25/gr-op25_repeater/www/www-static/main.js +++ b/op25/gr-op25_repeater/www/www-static/main.js @@ -117,7 +117,10 @@ function edit_d(d, to_ui) { } new_d[k] = new_l.join(","); } else { - new_d[k] = d[k].join(","); + if ((!d[k]) || (!d[k].length)) + new_d[k] = []; + else + new_d[k] = d[k].join(","); } } else if (k in freqs) { new_d[k] = edit_freq(d[k], to_ui); @@ -596,35 +599,25 @@ function read_write_sel(sel_node, def) { function read_write(elist, def) { var result = {}; - var s = "len: " + elist.length + "; "; - for (var e in elist) { - s += elist[e].tagName + "; "; - } for (var e in elist) { var ele = elist[e]; if (ele.nodeName == 'INPUT') { if (ele.type == 'text') - if (def) { + if (def) ele.value = def[ele.name]; - s += ele.name + "=" + ele.value + "; "; - } else + else result[ele.name] = ele.value; else if (ele.type == 'checkbox') - if (def) { + if (def) ele.checked = def[ele.name]; - s += "checkbox " + ele.name + "; "; - } else result[ele.name] = ele.checked; } else if (ele.nodeName == 'SELECT') { - if (def) { + if (def) read_write_sel(ele, def); - s += "select " + ele.name + "; "; - } else result[ele.name] = read_write_sel(ele, def); } - } if (!def) return result; @@ -648,19 +641,21 @@ function rollup_row(which, row, def) { var tgtable = trrow.querySelector("table.tgtable"); var tgrow = trrow.querySelector("tr.tgrow"); if (def) { - for (var i=0; i