possible fix for unsafe access in make_status_png
This commit is contained in:
parent
ed3334ca6c
commit
18c1cc0a54
|
@ -70,8 +70,6 @@ from gr_gnuplot import setup_correlation
|
||||||
from terminal import op25_terminal
|
from terminal import op25_terminal
|
||||||
from sockaudio import audio_thread
|
from sockaudio import audio_thread
|
||||||
|
|
||||||
from create_image import create_image
|
|
||||||
|
|
||||||
#speeds = [300, 600, 900, 1200, 1440, 1800, 1920, 2400, 2880, 3200, 3600, 3840, 4000, 4800, 6000, 6400, 7200, 8000, 9600, 14400, 19200]
|
#speeds = [300, 600, 900, 1200, 1440, 1800, 1920, 2400, 2880, 3200, 3600, 3840, 4000, 4800, 6000, 6400, 7200, 8000, 9600, 14400, 19200]
|
||||||
speeds = [4800, 6000]
|
speeds = [4800, 6000]
|
||||||
|
|
||||||
|
@ -679,23 +677,6 @@ class p25_rx_block (gr.top_block):
|
||||||
msg = gr.message().make_from_string(json.dumps(d), -4, 0, 0)
|
msg = gr.message().make_from_string(json.dumps(d), -4, 0, 0)
|
||||||
self.input_q.insert_tail(msg)
|
self.input_q.insert_tail(msg)
|
||||||
|
|
||||||
def make_status_png(self):
|
|
||||||
PNG_UPDATE_INTERVAL = 1.0
|
|
||||||
output_file = '../www/images/status.png'
|
|
||||||
tmp_output_file = '../www/images/tmp-status.png'
|
|
||||||
if time.time() < self.next_status_png:
|
|
||||||
return
|
|
||||||
self.next_status_png = time.time() + PNG_UPDATE_INTERVAL
|
|
||||||
if self.trunk_rx is None:
|
|
||||||
return ## possible race cond - just ignore
|
|
||||||
status_str = 'OP25-hls hacks (c) Copyright 2020, KA1RBI\n'
|
|
||||||
status_str += 'F %f TG %s %s at %s\n' % ( self.last_freq_params['freq'] / 1000000.0, self.last_freq_params['tgid'], self.last_freq_params['tag'], time.asctime())
|
|
||||||
status_str += self.trunk_rx.to_string()
|
|
||||||
status = status_str.split('\n')
|
|
||||||
status = [s for s in status if not s.startswith('tbl-id')]
|
|
||||||
create_image(status, imgfile=tmp_output_file, bgcolor="#c0c0c0", windowsize=(640,480))
|
|
||||||
os.rename(tmp_output_file, output_file)
|
|
||||||
|
|
||||||
def process_qmsg(self, msg):
|
def process_qmsg(self, msg):
|
||||||
# return true = end top block
|
# return true = end top block
|
||||||
RX_COMMANDS = 'skip lockout hold'.split()
|
RX_COMMANDS = 'skip lockout hold'.split()
|
||||||
|
@ -716,7 +697,6 @@ class p25_rx_block (gr.top_block):
|
||||||
msg = gr.message().make_from_string(js, -4, 0, 0)
|
msg = gr.message().make_from_string(js, -4, 0, 0)
|
||||||
self.input_q.insert_tail(msg)
|
self.input_q.insert_tail(msg)
|
||||||
self.process_ajax()
|
self.process_ajax()
|
||||||
self.make_status_png()
|
|
||||||
elif s == 'set_freq':
|
elif s == 'set_freq':
|
||||||
freq = msg.arg1()
|
freq = msg.arg1()
|
||||||
self.last_freq_params['freq'] = freq
|
self.last_freq_params['freq'] = freq
|
||||||
|
|
|
@ -21,12 +21,14 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
import collections
|
import collections
|
||||||
import json
|
import json
|
||||||
sys.path.append('tdma')
|
sys.path.append('tdma')
|
||||||
import lfsr
|
import lfsr
|
||||||
from tsvfile import make_config, load_tsv
|
from tsvfile import make_config, load_tsv
|
||||||
|
from create_image import create_image
|
||||||
|
|
||||||
def crc16(dat,len): # slow version
|
def crc16(dat,len): # slow version
|
||||||
poly = (1<<12) + (1<<5) + (1<<0)
|
poly = (1<<12) + (1<<5) + (1<<0)
|
||||||
|
@ -610,6 +612,8 @@ class rx_ctl (object):
|
||||||
if self.logfile_workers:
|
if self.logfile_workers:
|
||||||
self.input_rate = self.logfile_workers[0]['demod'].input_rate
|
self.input_rate = self.logfile_workers[0]['demod'].input_rate
|
||||||
self.enabled_nacs = None
|
self.enabled_nacs = None
|
||||||
|
self.next_status_png = time.time()
|
||||||
|
self.last_freq_params = {'freq' : 0.0, 'tgid' : None, 'tag' : "", 'tdma' : None}
|
||||||
|
|
||||||
if conf_file:
|
if conf_file:
|
||||||
if conf_file.endswith('.tsv'):
|
if conf_file.endswith('.tsv'):
|
||||||
|
@ -753,6 +757,21 @@ class rx_ctl (object):
|
||||||
'hold_mode': self.hold_mode}
|
'hold_mode': self.hold_mode}
|
||||||
return json.dumps(d)
|
return json.dumps(d)
|
||||||
|
|
||||||
|
def make_status_png(self):
|
||||||
|
PNG_UPDATE_INTERVAL = 1.0
|
||||||
|
output_file = '../www/images/status.png'
|
||||||
|
tmp_output_file = '../www/images/tmp-status.png'
|
||||||
|
if time.time() < self.next_status_png:
|
||||||
|
return
|
||||||
|
self.next_status_png = time.time() + PNG_UPDATE_INTERVAL
|
||||||
|
status_str = 'OP25-hls hacks (c) Copyright 2020, 2021, KA1RBI\n'
|
||||||
|
status_str += 'F %f TG %s %s at %s\n' % ( self.last_freq_params['freq'] / 1000000.0, self.last_freq_params['tgid'], self.last_freq_params['tag'], time.asctime())
|
||||||
|
status_str += self.to_string()
|
||||||
|
status = status_str.split('\n')
|
||||||
|
status = [s for s in status if not s.startswith('tbl-id')]
|
||||||
|
create_image(status, imgfile=tmp_output_file, bgcolor="#c0c0c0", windowsize=(640,480))
|
||||||
|
os.rename(tmp_output_file, output_file)
|
||||||
|
|
||||||
def dump_tgids(self):
|
def dump_tgids(self):
|
||||||
for nac in self.trunked_systems.keys():
|
for nac in self.trunked_systems.keys():
|
||||||
self.trunked_systems[nac].dump_tgids()
|
self.trunked_systems[nac].dump_tgids()
|
||||||
|
@ -843,6 +862,8 @@ class rx_ctl (object):
|
||||||
sys.stderr.write('type %d at %f state %d len %d/%d opcode %x [%x/%x]\n' %(mtype, time.time(), self.current_state, len(s1), len(s2), opcode, header,mbt_data))
|
sys.stderr.write('type %d at %f state %d len %d/%d opcode %x [%x/%x]\n' %(mtype, time.time(), self.current_state, len(s1), len(s2), opcode, header,mbt_data))
|
||||||
updated += self.trunked_systems[nac].decode_mbt_data(opcode, src, header << 16, mbt_data << 32)
|
updated += self.trunked_systems[nac].decode_mbt_data(opcode, src, header << 16, mbt_data << 32)
|
||||||
|
|
||||||
|
self.make_status_png()
|
||||||
|
|
||||||
if nac != self.current_nac:
|
if nac != self.current_nac:
|
||||||
if self.debug > 10: # this is occasionally expected if cycling between different tsys
|
if self.debug > 10: # this is occasionally expected if cycling between different tsys
|
||||||
cnac = self.current_nac
|
cnac = self.current_nac
|
||||||
|
@ -1151,7 +1172,7 @@ class rx_ctl (object):
|
||||||
self.current_tgid = None
|
self.current_tgid = None
|
||||||
|
|
||||||
if new_frequency is not None:
|
if new_frequency is not None:
|
||||||
self.set_frequency({
|
params = {
|
||||||
'freq': new_frequency,
|
'freq': new_frequency,
|
||||||
'tgid': self.current_tgid,
|
'tgid': self.current_tgid,
|
||||||
'offset': tsys.offset,
|
'offset': tsys.offset,
|
||||||
|
@ -1166,7 +1187,9 @@ class rx_ctl (object):
|
||||||
'grpaddr': tsys.current_grpaddr,
|
'grpaddr': tsys.current_grpaddr,
|
||||||
'alg': tsys.current_alg,
|
'alg': tsys.current_alg,
|
||||||
'algid': tsys.current_algid,
|
'algid': tsys.current_algid,
|
||||||
'keyid': tsys.current_keyid })
|
'keyid': tsys.current_keyid }
|
||||||
|
self.last_freq_params = params
|
||||||
|
self.set_frequency(params)
|
||||||
|
|
||||||
if new_state is not None:
|
if new_state is not None:
|
||||||
self.current_state = new_state
|
self.current_state = new_state
|
||||||
|
|
Loading…
Reference in New Issue