Skip to content
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,4 @@ Any transmit capable device that can be used to transmit using a GNURadio gr-osm
**lrs_pager.py** Generates a pager.bin file to be transmitted by lrs_tx.py. This code is based on [github.com/tony-tiger/lrs](https://github.com/tony-tiger/lrs)<br/>
**lrs_tx.py** Transmits an LRS signal, based on a pager.bin file generated by lrs_pager.py<br/>
**pocsagtx_osmocom.py** Transmits POCSAG messages using [gr-mixalot](https://github.com/unsynchronized/gr-mixalot)<br/>
**gotenna_pro_bladerf.py** Transmits goTenna Pro broadcast messages using bladeRF and packet encoding from [gr-tenna](https://github.com/argilo/gr-tenna)<br/>
45 changes: 45 additions & 0 deletions challengectl.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import subprocess

from challenges import ask, cw, usb_tx, nbfm, spectrum_paint, pocsagtx_osmocom, lrs_pager, lrs_tx
from challenges.gotenna import gotenna_pro_tx_bladerf, gotenna_pro_tx_usrp

def build_database(flagfile, devicefile):
"""Create sqlite database based on flags file and devices file. Database file name will be based on
Expand Down Expand Up @@ -232,6 +233,50 @@ def fire_lrs(self, device_string, flag_q, device_q, *flag_args):
flag_q.put(flag_args[0])
print("Returned flag to pool")

def fire_gotenna_pro(self, device_string, flag_q, device_q, *flag_args):
print("\nTransmitting goTenna Pro\n")
flag_args = flag_args[0]
flag = flag_args[1]
modopts = flag_args[2]
mintime = flag_args[4]
maxtime = flag_args[5]
freq = int(flag_args[6]) * 1000
norandsleep = flag_args[8]

devargs = [arg.strip() for arg in device_string.split(",") if arg.strip() != ""]
devtypes = [arg.lower() for arg in devargs]
gotenna_module = None
if("uhd" in devtypes):
gotenna_module = gotenna_pro_tx_usrp
gotennaopts = gotenna_module.argument_parser().parse_args(modopts.split())
gotennaopts.device_addr = ",".join([arg for arg in devargs if arg.lower() != "uhd"])
elif(any(devtype.startswith("hackrf") for devtype in devtypes)):
print("goTenna Pro is not supported on HackRF, skipping device {}".format(device_string))
elif(any(devtype.startswith("bladerf") for devtype in devtypes)):
gotenna_module = gotenna_pro_tx_bladerf
gotennaopts = gotenna_module.argument_parser().parse_args(modopts.split())
gotennaopts.device_args = device_string
antenna = get_antenna_port(device_string)
if(antenna != ""):
gotennaopts.antenna = antenna
else:
print("goTenna Pro is not supported on device {}, skipping".format(device_string))

if(gotenna_module != None):
gotennaopts.message = flag
gotennaopts.frequency = freq

gotenna_module.main(options=gotennaopts)
sleep(3)
disable_amp(device_string)
device_q.put(device_string)

if(norandsleep == False):
sleep(randint(mintime, maxtime))
replaceinqueue = flag_args[7]
if(replaceinqueue != False):
flag_q.put(flag_args[0])


def select_freq(band):
"""Read from frequencies text file, select row that starts with band argument.
Expand Down
4 changes: 4 additions & 0 deletions challenges/gotenna/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# The flowgraphs in this package are generated by GNU Radio Companion from the
# .grc files beside them, so they import the packet library under its bare name.
# Importing challenges.gotenna_packet first registers it under that name.
#from challenges import gotenna_packet # noqa: F401
Loading
Loading