fake_trx/data_msg.py: implement header randomization

This feature could be used by both burst_gen.py and burst_send.py.

Change-Id: I724e267382ff32ef1f964b1ee6cbe99069139867
This commit is contained in:
Vadim Yanitskiy 2018-01-25 01:24:44 +06:00
parent f10a8d4c92
commit 8c79e2ce6b
1 changed files with 64 additions and 0 deletions

View File

@ -44,6 +44,19 @@ class DATAMSG:
def parse_hdr(self, hdr):
raise NotImplementedError
# Generates a random frame number
def rand_fn(self):
return random.randint(0, GSM_HYPERFRAME)
# Generates a random timeslot number
def rand_tn(self):
return random.randint(0, 7)
# Randomizes the message header
def rand_hdr(self):
self.fn = self.rand_fn()
self.tn = self.rand_tn()
# Converts unsigned soft-bits {254..0} to soft-bits {-127..127}
def usbit2sbit(self, bits):
buf = []
@ -201,6 +214,21 @@ class DATAMSG_L12TRX(DATAMSG):
return True
# Generates a random power level
def rand_pwr(self, min = None, max = None):
if min is None:
min = self.PWR_MIN
if max is None:
max = self.PWR_MAX
return random.randint(min, max)
# Randomizes message specific header
def rand_hdr(self):
DATAMSG.rand_hdr(self)
self.pwr = self.rand_pwr()
# Generates message specific header part
def gen_hdr(self):
# Allocate an empty byte-array
@ -258,6 +286,32 @@ class DATAMSG_TRX2L1(DATAMSG):
return True
# Generates a random RSSI value
def rand_rssi(self, min = None, max = None):
if min is None:
min = self.RSSI_MIN
if max is None:
max = self.RSSI_MAX
return random.randint(min, max)
# Generates a ToA (Time of Arrival) value
def rand_toa(self, min = None, max = None):
if min is None:
min = self.TOA_MIN
if max is None:
max = self.TOA_MAX
return random.uniform(min, max)
# Randomizes message specific header
def rand_hdr(self):
DATAMSG.rand_hdr(self)
self.rssi = self.rand_rssi()
self.toa = self.rand_toa()
# Generates message specific header part
def gen_hdr(self):
# Allocate an empty byte-array
@ -350,6 +404,16 @@ if __name__ == '__main__':
print("[?] Compare message specific data: OK")
# Validate header randomization
for i in range(0, 100):
msg_l12trx_ref.rand_hdr()
msg_trx2l1_ref.rand_hdr()
assert(msg_l12trx_ref.validate())
assert(msg_trx2l1_ref.validate())
print("[?] Validate header randomization: OK")
# Bit conversation test
usbits_ref = range(0, 256)
sbits_ref = range(-127, 128)