Skip to content

Instantly share code, notes, and snippets.

@yunginnanet
Created February 3, 2025 01:07
Show Gist options
  • Save yunginnanet/16ffe8471e7d8ffef9295f8bf2db8dea to your computer and use it in GitHub Desktop.
Save yunginnanet/16ffe8471e7d8ffef9295f8bf2db8dea to your computer and use it in GitHub Desktop.
yardstick one slumpin
#!/usr/bin/python3
# pylint: disable=W0614
import sys
import os
import subprocess
import time
import signal
import random
import rflib
global d
FREQ = 910000000
PKTLEN = 8
DRATE = 9600
packet_1 = ["00100001", "01000011", "00101101", "01010101", "01000001", "01010011"]
packet_2 = ["01000011", "00101101", "01010101", "01000001", "01010011", "00100001"]
data_hex_1 = [chr(int(x, 2)) for x in packet_1]
data_hex_3 = [chr(int(x, 2)) for x in packet_2]
global dry
dry = False
global action
action = "run"
if len(sys.argv) > 1:
if sys.argv[1] == "-n":
dry = True
def reset_usb():
if dry == True:
return
if len(sys.argv) < 2:
return
if sys.argv[1] != "-r":
return
print("resetting USB ports...")
rpistr = "echo '1-1' > /sys/bus/usb/drivers/usb/unbind"
subprocess.Popen(rpistr, shell=True, preexec_fn=os.setsid)
time.sleep(2)
rpistr = "echo '1-1' > /sys/bus/usb/drivers/usb/bind"
subprocess.Popen(rpistr, shell=True, preexec_fn=os.setsid)
time.sleep(10)
def handler(signum, frame):
global action
action = "stop"
if d == None:
return
print("-----")
print("set idle...")
try:
d.setModeIDLE()
exit(0)
except:
exit(1)
def send_data(d, data, repeat=1):
if action == "stop":
return
print(data)
for i in range(0, repeat):
if action == "stop":
return
if dry != True:
try:
d.RFxmit("".join(data).encode("utf-8"))
except Exception as e:
print(e)
def get_freq(maxi):
e = os.urandom((maxi.bit_length() + 7) // 8)
i = int.from_bytes(e, "big")
return i % maxi
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
try:
reset_usb()
if dry != True:
d = rflib.RfCat()
d.setFreq(FREQ)
d.setMdmModulation(rflib.MOD_MSK)
d.setMdmChanBW(60000)
d.setRFRegister(rflib.PKTCTRL1, 0xFF)
d.setMdmChanSpc(40000)
# d.makePktFLEN(PKTLEN)
d.setChannel(0)
d.setMdmDRate(DRATE)
d.setMdmSyncMode(0)
d.setMaxPower()
ct = 0
print("init")
while True:
roll = FREQ
if action == "stop":
break
if ct == 60:
ct = 0
else:
base = 1
ent = random.randint(1, 5000)
ent = ent / 1000
base = (base + ent) * (ct * 100000)
roll = FREQ + base
data = data_hex_1
if ct % 2 == 0:
data = data_hex_3
print("sending on ", roll, end="")
try:
if dry != True:
print("+")
d.setFreq(roll)
send_data(d, data, random.randint(1, 24))
if dry:
print("")
except Exception as e:
print(e)
action = "stop"
ct = ct + 1
# for i in range(0, len(str(data)), 8):
# roll = roll + 25e4
# chunk = str(data)[i:i + 8]
#
# if (dry != True):
# d.setFreq(roll)
# send_data(d, chunk)
except Exception as e:
action = "stop"
sys.exit("Error %s" % str(e))
handler()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment