This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/23132 )
Change subject: trx_toolkit/data_msg.py: convert comments into docstring for methods
......................................................................
trx_toolkit/data_msg.py: convert comments into docstring for methods
Change-Id: I856b54fd1baca4ae0edd2aa59be6a76372cef667
Related: OS#4006, SYS#4895
---
M src/target/trx_toolkit/data_msg.py
1 file changed, 70 insertions(+), 42 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/32/23132/1
diff --git a/src/target/trx_toolkit/data_msg.py b/src/target/trx_toolkit/data_msg.py
index 22818a4..15c310a 100644
--- a/src/target/trx_toolkit/data_msg.py
+++ b/src/target/trx_toolkit/data_msg.py
@@ -123,18 +123,16 @@
CHDR_VERSION_MAX = 0b1111
known_versions = [0x00, 0x01]
- # Common constructor
def __init__(self, fn = None, tn = None, burst = None, ver = 0):
self.burst = burst
self.ver = ver
self.fn = fn
self.tn = tn
- # The common header length
@property
def CHDR_LEN(self):
- # (VER + TN) + FN
- return 1 + 4
+ ''' The common header length. '''
+ return 1 + 4 # (VER + TN) + FN
@abc.abstractmethod
def gen_hdr(self):
@@ -161,21 +159,22 @@
''' Generate a random message specific burst. '''
raise NotImplementedError
- # Generates a random frame number
def rand_fn(self):
+ ''' Generate a random frame number. '''
return random.randint(0, GSM_HYPERFRAME)
- # Generates a random timeslot number
def rand_tn(self):
+ ''' Generate a random timeslot number. '''
return random.randint(0, 7)
- # Randomizes the message header
def rand_hdr(self):
+ ''' Randomize the message header. '''
self.fn = self.rand_fn()
self.tn = self.rand_tn()
- # Generates human-readable header description
def desc_hdr(self):
+ ''' Generate human-readable header description. '''
+
result = ""
if self.ver > 0:
@@ -192,28 +191,29 @@
return result
- # Converts unsigned soft-bits {254..0} to soft-bits {-127..127}
@staticmethod
def usbit2sbit(bits):
+ ''' Convert unsigned soft-bits {254..0} to soft-bits {-127..127}. '''
return [-127 if (b == 0xff) else 127 - b for b in bits]
- # Converts soft-bits {-127..127} to unsigned soft-bits {254..0}
@staticmethod
def sbit2usbit(bits):
+ ''' Convert soft-bits {-127..127} to unsigned soft-bits {254..0}. '''
return [127 - b for b in bits]
- # Converts soft-bits {-127..127} to bits {1..0}
@staticmethod
def sbit2ubit(bits):
+ ''' Convert soft-bits {-127..127} to bits {1..0}. '''
return [int(b < 0) for b in bits]
- # Converts bits {1..0} to soft-bits {-127..127}
@staticmethod
def ubit2sbit(bits):
+ ''' Convert bits {1..0} to soft-bits {-127..127}. '''
return [-127 if b else 127 for b in bits]
- # Validates the message fields (throws ValueError)
def validate(self):
+ ''' Validate the message fields (throws ValueError). '''
+
if not self.ver in self.known_versions:
raise ValueError("Unknown TRXD header version %d" % self.ver)
@@ -229,8 +229,9 @@
if self.tn < 0 or self.tn > 7:
raise ValueError("TDMA time-slot %d is out of range" % self.tn)
- # Generates a TRX DATA message
def gen_msg(self, legacy = False):
+ ''' Generate a TRX DATA message. '''
+
# Validate all the fields
self.validate()
@@ -258,8 +259,9 @@
return buf
- # Parses a TRX DATA message
def parse_msg(self, msg):
+ ''' Parse a TRX DATA message. '''
+
# Make sure we have at least common header
if len(msg) < self.CHDR_LEN:
raise ValueError("Message is to short: missing common header")
@@ -317,9 +319,10 @@
# Specific message fields
pwr = None
- # Calculates header length depending on its version
@property
def HDR_LEN(self):
+ ''' Calculate header length depending on its version. '''
+
# Common header length
length = self.CHDR_LEN
@@ -331,8 +334,9 @@
return length
- # Validates the message fields (throws ValueError)
def validate(self):
+ ''' Validate the message fields (throws ValueError). '''
+
# Validate common fields
DATAMSG.validate(self)
@@ -350,8 +354,9 @@
if len(self.burst) not in (GSM_BURST_LEN, EDGE_BURST_LEN):
raise ValueError("Tx burst has odd length %u" % len(self.burst))
- # Generates a random power level
def rand_pwr(self, min = None, max = None):
+ ''' Generate a random power level. '''
+
if min is None:
min = self.PWR_MIN
@@ -360,13 +365,15 @@
return random.randint(min, max)
- # Randomizes message specific header
def rand_hdr(self):
+ ''' Randomize message specific header. '''
+
DATAMSG.rand_hdr(self)
self.pwr = self.rand_pwr()
- # Generates human-readable header description
def desc_hdr(self):
+ ''' Generate human-readable header description. '''
+
# Describe the common part
result = DATAMSG.desc_hdr(self)
@@ -376,8 +383,9 @@
# Strip useless whitespace and return
return result.strip()
- # Generates message specific header part
def gen_hdr(self):
+ ''' Generate message specific header part. '''
+
# Allocate an empty byte-array
buf = bytearray()
@@ -386,18 +394,21 @@
return buf
- # Parses message specific header part
def parse_hdr(self, hdr):
+ ''' Parse message specific header part. '''
+
# Parse power level
self.pwr = hdr[5]
- # Generates message specific burst
def gen_burst(self):
+ ''' Generate message specific burst. '''
+
# Copy burst 'as is'
return bytearray(self.burst)
- # Parses message specific burst
def parse_burst(self, burst):
+ ''' Parse message specific burst. '''
+
length = len(burst)
# Distinguish between GSM and EDGE
@@ -406,12 +417,13 @@
else:
self.burst = list(burst[:GSM_BURST_LEN])
- # Generate a random message specific burst
def rand_burst(self, length = GSM_BURST_LEN):
+ ''' Generate a random message specific burst. '''
self.burst = [random.randint(0, 1) for _ in range(length)]
- # Transforms this message to TRX2L1 message
def gen_trx2l1(self, ver = None):
+ ''' Transform this message to TRX2L1 message. '''
+
# Allocate a new message
msg = DATAMSG_TRX2L1(fn = self.fn, tn = self.tn,
ver = self.ver if ver is None else ver)
@@ -545,9 +557,10 @@
tsc = None
ci = None
- # Calculates header length depending on its version
@property
def HDR_LEN(self):
+ ''' Calculate header length depending on its version. '''
+
# Common header length
length = self.CHDR_LEN
@@ -586,15 +599,17 @@
if len(self.burst) != self.mod_type.bl:
raise ValueError("Rx burst has odd length %u" % len(self.burst))
- # Validates the burst (throws ValueError)
def validate_burst(self):
+ ''' Validate the burst (throws ValueError). '''
+
if self.ver == 0x00:
self._validate_burst_v0()
elif self.ver >= 0x01:
self._validate_burst_v1()
- # Validates the message header fields (throws ValueError)
def validate(self):
+ ''' Validate the message header fields (throws ValueError). '''
+
# Validate common fields
DATAMSG.validate(self)
@@ -641,8 +656,9 @@
self.validate_burst()
- # Generates a random RSSI value
def rand_rssi(self, min = None, max = None):
+ ''' Generate a random RSSI value. '''
+
if min is None:
min = self.RSSI_MIN
@@ -651,8 +667,9 @@
return random.randint(min, max)
- # Generates a ToA (Time of Arrival) value
def rand_toa256(self, min = None, max = None):
+ ''' Generate a random ToA (Time of Arrival) value. '''
+
if min is None:
min = self.TOA256_MIN
@@ -661,8 +678,9 @@
return random.randint(min, max)
- # Randomizes message specific header
def rand_hdr(self):
+ ''' Randomize message specific header. '''
+
DATAMSG.rand_hdr(self)
self.rssi = self.rand_rssi()
self.toa256 = self.rand_toa256()
@@ -678,8 +696,9 @@
# C/I: Carrier-to-Interference ratio
self.ci = random.randint(self.CI_MIN, self.CI_MAX)
- # Generates human-readable header description
def desc_hdr(self):
+ ''' Generate human-readable header description. '''
+
# Describe the common part
result = DATAMSG.desc_hdr(self)
@@ -705,8 +724,9 @@
# Strip useless whitespace and return
return result.strip()
- # Encodes Modulation and Training Sequence info
def gen_mts(self):
+ ''' Encode Modulation and Training Sequence info. '''
+
# IDLE / nope indication has no MTS info
if self.nope_ind:
return self.NOPE_IND
@@ -720,8 +740,9 @@
return mts
- # Parses Modulation and Training Sequence info
def parse_mts(self, mts):
+ ''' Parse Modulation and Training Sequence info. '''
+
# IDLE / nope indication has no MTS info
self.nope_ind = (mts & self.NOPE_IND) > 0
if self.nope_ind:
@@ -744,8 +765,9 @@
self.mod_type = Modulation.ModGMSK
self.tsc_set = mts & 0b11
- # Generates message specific header part
def gen_hdr(self):
+ ''' Generate message specific header part. '''
+
# Allocate an empty byte-array
buf = bytearray()
@@ -766,8 +788,9 @@
return buf
- # Parses message specific header part
def parse_hdr(self, hdr):
+ ''' Parse message specific header part. '''
+
# Parse RSSI
self.rssi = -(hdr[5])
@@ -781,16 +804,18 @@
# C/I: Carrier-to-Interference ratio (in centiBels)
self.ci = struct.unpack(">h", hdr[9:11])[0]
- # Generates message specific burst
def gen_burst(self):
+ ''' Generate message specific burst. '''
+
# Convert soft-bits to unsigned soft-bits
burst_usbits = self.sbit2usbit(self.burst)
# Encode to bytes
return bytearray(burst_usbits)
- # Parses message specific burst for header version 0
def _parse_burst_v0(self, burst):
+ ''' Parse message specific burst for header version 0. '''
+
bl = len(burst)
# We need to guess modulation by the length of burst
@@ -804,8 +829,9 @@
return burst[:self.mod_type.bl]
- # Parses message specific burst
def parse_burst(self, burst):
+ ''' Parse message specific burst. '''
+
burst = list(burst)
if self.ver == 0x00:
@@ -814,15 +840,17 @@
# Convert unsigned soft-bits to soft-bits
self.burst = self.usbit2sbit(burst)
- # Generate a random message specific burst
def rand_burst(self, length = None):
+ ''' Generate a random message specific burst. '''
+
if length is None:
length = self.mod_type.bl
self.burst = [random.randint(-127, 127) for _ in range(length)]
- # Transforms this message to L12TRX message
def gen_l12trx(self, ver = None):
+ ''' Transform this message to L12TRX message. '''
+
# Allocate a new message
msg = DATAMSG_L12TRX(fn = self.fn, tn = self.tn,
ver = self.ver if ver is None else ver)
--
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/23132
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I856b54fd1baca4ae0edd2aa59be6a76372cef667
Gerrit-Change-Number: 23132
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210226/9f90198f/attachment.htm>