#!/usr/bin/env python # # (C) 2011-2019 by Sylvain Munaut # All Rights Reserved # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # from collections import namedtuple import datetime import os import sys import re EXEC_GMR1_DEMOD = 'gmr1_rx_live' EXEC_GMR1_SPLIT = 'gmr1_rx_sdr.py' CHAN_BW = 31.25e3 Recording = namedtuple('Recording', 'center samplerate timestamp') def parse_filename(fn): m = re.match('^.*-f([0-9\.e+-]*)-s([0-9\.e+-]*)-t([0-9]{14})\.cfile$', fn) if not m: return m return Recording( float(m.group(1)), float(m.group(2)), datetime.datetime.strptime(m.group(3), '%Y%m%d%H%M%S'), ) def arfcn_to_freq(arfcn, band='L'): base = { 'L': 1525e6, 'S': 2170e6 + 15.625e3, } return base[band] + 31.25e3 * arfcn def arfcn_fifo(arfcn): return "/tmp/arfcn_%d.cfile" % arfcn def main(argv0, capture_fn): # Parse filename p = parse_filename(capture_fn) # Derive upper and lower band ll = p.center - p.samplerate / 2 + CHAN_BW ul = p.center + p.samplerate / 2 - CHAN_BW # Select band band = 'S' if ul > 2e9 else 'L' n_arfcns = { 'L': 1087, 'S': 960, } # List all visible arfcns visible_arfcns = [x for x in range(0,n_arfcns[band]+1) if ll <= arfcn_to_freq(x, band) <= ul] # Create all FIFOs #for arfcn in visible_arfcns: # if os.path.exists(arfcn_fifo(arfcn)): # print "Output FIFO already exists, aborting !" # return -1 #for arfcn in visible_arfcns: # os.mkfifo(arfcn_fifo(arfcn)) # exec_split = [ EXEC_GMR1_SPLIT, '-s', '%f' % p.samplerate, '-f', '%f' % p.center, '-B', band, '--args', 'file=%s,freq=%f,rate=%f,throttle=false,repeat=false' % (capture_fn, p.center, p.samplerate), ] for arfcn in visible_arfcns: exec_split.extend(['-a', '%d' % arfcn]) print ' '.join(exec_split) # exec_rx = [ EXEC_GMR1_DEMOD, '4', ] for arfcn in visible_arfcns: exec_rx.append('%d:%s' % (arfcn, arfcn_fifo(arfcn))) print ' '.join(exec_rx) # Cleanup all FIFOs #for arfcn in visible_arfcns: # os.unlink(arfcn_fifo(arfcn)) if __name__ == '__main__': main(*sys.argv)