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 <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to