Change in osmocom-bb[master]: fake_trx: Support SETPOWER and NOMTXPOWER TRXC cmds

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/.

pespin gerrit-no-reply at lists.osmocom.org
Sun Jun 7 19:51:33 UTC 2020


pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmocom-bb/+/18641 )

Change subject: fake_trx: Support SETPOWER and NOMTXPOWER TRXC cmds
......................................................................

fake_trx: Support SETPOWER and NOMTXPOWER TRXC cmds

By default RSSI on the Rx side is computed based on transmitter's
tx power and then substracting the the Rx path loss.
If FAKE_RSSI is used, then the values in there are used instead.

A default hardcoded value of tx nominal power = 50 dBm is set to keep
old behavior of RSSI=-60dB after calculations.

Change-Id: I3ee1a32ca22c3272e66b3ca78e4f67d283844c80
---
M src/target/trx_toolkit/ctrl_if_trx.py
M src/target/trx_toolkit/fake_trx.py
2 files changed, 40 insertions(+), 3 deletions(-)

Approvals:
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/target/trx_toolkit/ctrl_if_trx.py b/src/target/trx_toolkit/ctrl_if_trx.py
index 65198cf..e841975 100644
--- a/src/target/trx_toolkit/ctrl_if_trx.py
+++ b/src/target/trx_toolkit/ctrl_if_trx.py
@@ -239,6 +239,19 @@
 				% (self.trx, ver_cur, ver_req))
 			return ver_req
 
+		# Set Power Attenuation
+		if self.verify_cmd(request, "SETPOWER", 1):
+			log.debug("(%s) Recv SETPOWER cmd" % self.trx)
+			# Parse the requested Tx Power Attenuation
+			att_req = int(request[1])
+			self.trx.tx_att_base = att_req
+			return 0
+
+		# Retrieve Nominal Tx power
+		if self.verify_cmd(request, "NOMTXPOWER", 0):
+			log.debug("(%s) Recv NOMTXPOWER cmd" % self.trx)
+			return (0, [str(self.trx.tx_power_base)])
+
 		# Wrong / unknown command
 		else:
 			# We don't care about other commands,
diff --git a/src/target/trx_toolkit/fake_trx.py b/src/target/trx_toolkit/fake_trx.py
index f14d143..4a49fa3 100755
--- a/src/target/trx_toolkit/fake_trx.py
+++ b/src/target/trx_toolkit/fake_trx.py
@@ -106,8 +106,11 @@
 
 	"""
 
+	NOMINAL_TX_POWER_DEFAULT = 50 # dBm
+	TX_ATT_DEFAULT = 0 # dB
+	PATH_LOSS_DEFAULT = 110 # dB
+
 	TOA256_BASE_DEFAULT = 0
-	RSSI_BASE_DEFAULT = -60
 	CI_BASE_DEFAULT = 90
 
 	# Default values for NOPE / IDLE indications
@@ -118,9 +121,15 @@
 	def __init__(self, *trx_args, **trx_kwargs):
 		Transceiver.__init__(self, *trx_args, **trx_kwargs)
 
+		# fake RSSI is disabled by default, only enabled through TRXC FAKE_RSSI.
+		# When disabled, RSSI is calculated based on Tx power and Rx path loss
+		self.fake_rssi_enabled = False
+
 		# Actual ToA, RSSI, C/I, TA values
+		self.tx_power_base = self.NOMINAL_TX_POWER_DEFAULT
+		self.tx_att_base = self.TX_ATT_DEFAULT
 		self.toa256_base = self.TOA256_BASE_DEFAULT
-		self.rssi_base = self.RSSI_BASE_DEFAULT
+		self.rssi_base = self.NOMINAL_TX_POWER_DEFAULT - self.TX_ATT_DEFAULT - self.PATH_LOSS_DEFAULT
 		self.ci_base = self.CI_BASE_DEFAULT
 		self.ta = 0
 
@@ -156,6 +165,10 @@
 		return random.randint(rssi_min, rssi_max)
 
 	@property
+	def tx_power(self):
+		return self.tx_power_base - self.tx_att_base
+
+	@property
 	def ci(self):
 		# Check if randomization is required
 		if self.ci_rand_threshold == 0:
@@ -224,7 +237,12 @@
 
 		# Complete message header
 		msg.toa256 = self.toa256
-		msg.rssi = self.rssi
+
+		# Apply RSSI based on transmitter:
+		if not self.fake_rssi_enabled:
+			msg.rssi = src_trx.tx_power - src_msg.pwr - self.PATH_LOSS_DEFAULT
+		else: # Apply fake RSSI
+			msg.rssi = self.rssi
 
 		# Version specific fields
 		if msg.ver >= 0x01:
@@ -272,9 +290,15 @@
 		elif self.ctrl_if.verify_cmd(request, "FAKE_RSSI", 2):
 			log.debug("(%s) Recv FAKE_RSSI cmd" % self)
 
+			# Use negative threshold to disable fake_rssi if previously enabled:
+			if int(request[2]) < 0:
+				self.fake_rssi_enabled = False
+				return 0
+
 			# Parse and apply both base and threshold
 			self.rssi_base = int(request[1])
 			self.rssi_rand_threshold = int(request[2])
+			self.fake_rssi_enabled = True
 			return 0
 
 		# RSSI simulation

-- 
To view, visit https://gerrit.osmocom.org/c/osmocom-bb/+/18641
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I3ee1a32ca22c3272e66b3ca78e4f67d283844c80
Gerrit-Change-Number: 18641
Gerrit-PatchSet: 6
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200607/f4848c91/attachment.htm>


More information about the gerrit-log mailing list