<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/18586">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Transceiver: Implement TRXC cmd NOMTXPOWER<br><br>It allows the BTS to retrieve the nominal transmit output power value of<br>each TRX in order to compute attenuation later on and apply it through<br>SETPOWER or ADJPOWER TRXC commands.<br><br>Change-Id: I1d7efe56e008d8d60e23f9a85aa40809f7f84d9c<br>---<br>M Transceiver52M/Transceiver.cpp<br>M Transceiver52M/device/common/radioDevice.h<br>M Transceiver52M/device/lms/LMSDevice.cpp<br>M Transceiver52M/device/lms/LMSDevice.h<br>M Transceiver52M/device/uhd/UHDDevice.cpp<br>M Transceiver52M/device/uhd/UHDDevice.h<br>M Transceiver52M/device/usrp1/USRPDevice.cpp<br>M Transceiver52M/device/usrp1/USRPDevice.h<br>M Transceiver52M/radioInterface.cpp<br>M Transceiver52M/radioInterface.h<br>10 files changed, 50 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp</span><br><span>index 8308def..0b7ac31 100644</span><br><span>--- a/Transceiver52M/Transceiver.cpp</span><br><span>+++ b/Transceiver52M/Transceiver.cpp</span><br><span>@@ -902,6 +902,12 @@</span><br><span>     power = mRadioInterface->setPowerAttenuation(power, chan);</span><br><span>     mStates[chan].mPower = power;</span><br><span>     sprintf(response, "RSP ADJPOWER 0 %d", power);</span><br><span style="color: hsl(120, 100%, 40%);">+} else if (match_cmd(command, "NOMTXPOWER", NULL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+    int power = mRadioInterface->getNominalTxPower(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (power > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+      sprintf(response, "RSP NOMTXPOWER 0 %d", power);</span><br><span style="color: hsl(120, 100%, 40%);">+    else</span><br><span style="color: hsl(120, 100%, 40%);">+      sprintf(response, "RSP NOMTXPOWER 1 %d", -power);</span><br><span>   } else if (match_cmd(command, "RXTUNE", &params)) {</span><br><span>     // tune receiver</span><br><span>     int freqKhz;</span><br><span>diff --git a/Transceiver52M/device/common/radioDevice.h b/Transceiver52M/device/common/radioDevice.h</span><br><span>index 0dc38d5..8dd8f49 100644</span><br><span>--- a/Transceiver52M/device/common/radioDevice.h</span><br><span>+++ b/Transceiver52M/device/common/radioDevice.h</span><br><span>@@ -128,6 +128,9 @@</span><br><span>   /** sets the transmit chan gain, returns the gain setting **/</span><br><span>   virtual double setTxGain(double dB, size_t chan = 0) = 0;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /** returns the Nominal transmit output power of the transceiver in dBm, negative on error **/</span><br><span style="color: hsl(120, 100%, 40%);">+  virtual int getNominalTxPower(size_t chan = 0) = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /** get transmit gain */</span><br><span>   virtual double getTxGain(size_t chan = 0) = 0;</span><br><span> </span><br><span>diff --git a/Transceiver52M/device/lms/LMSDevice.cpp b/Transceiver52M/device/lms/LMSDevice.cpp</span><br><span>index 932817d..355c8e4 100644</span><br><span>--- a/Transceiver52M/device/lms/LMSDevice.cpp</span><br><span>+++ b/Transceiver52M/device/lms/LMSDevice.cpp</span><br><span>@@ -530,6 +530,14 @@</span><br><span>       return rx_gains[chan];</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int LMSDevice::getNominalTxPower(size_t chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     /* TODO: return value based on some experimentally generated table depending on</span><br><span style="color: hsl(120, 100%, 40%);">+        * band/arfcn, which is known here thanks to TXTUNE</span><br><span style="color: hsl(120, 100%, 40%);">+    */</span><br><span style="color: hsl(120, 100%, 40%);">+   return 23;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void LMSDevice::log_ant_list(bool dir_tx, size_t chan, std::ostringstream& os)</span><br><span> {</span><br><span>   lms_name_t name_list[MAX_ANTENNA_LIST_SIZE]; /* large enough list for antenna names. */</span><br><span>diff --git a/Transceiver52M/device/lms/LMSDevice.h b/Transceiver52M/device/lms/LMSDevice.h</span><br><span>index 5b6330a..78fd62a 100644</span><br><span>--- a/Transceiver52M/device/lms/LMSDevice.h</span><br><span>+++ b/Transceiver52M/device/lms/LMSDevice.h</span><br><span>@@ -179,6 +179,8 @@</span><br><span>       /** return minimum Rx Gain **/</span><br><span>       double minTxGain(void);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   int getNominalTxPower(size_t chan = 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /** sets the RX path to use, returns true if successful and false otherwise */</span><br><span>       bool setRxAntenna(const std::string & ant, size_t chan = 0);</span><br><span> </span><br><span>diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp b/Transceiver52M/device/uhd/UHDDevice.cpp</span><br><span>index ad56250..2970173 100644</span><br><span>--- a/Transceiver52M/device/uhd/UHDDevice.cpp</span><br><span>+++ b/Transceiver52M/device/uhd/UHDDevice.cpp</span><br><span>@@ -341,6 +341,14 @@</span><br><span>         return tx_gains[chan];</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int uhd_device::getNominalTxPower(size_t chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* TODO: return value based on some experimentally generated table depending on</span><br><span style="color: hsl(120, 100%, 40%);">+        * band/arfcn, which is known here thanks to TXTUNE</span><br><span style="color: hsl(120, 100%, 40%);">+    */</span><br><span style="color: hsl(120, 100%, 40%);">+   return 23;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>     Parse the UHD device tree and mboard name to find out what device we're</span><br><span>     dealing with. We need the window type so that the transceiver knows how to</span><br><span>diff --git a/Transceiver52M/device/uhd/UHDDevice.h b/Transceiver52M/device/uhd/UHDDevice.h</span><br><span>index 1e66246..01d71a0 100644</span><br><span>--- a/Transceiver52M/device/uhd/UHDDevice.h</span><br><span>+++ b/Transceiver52M/device/uhd/UHDDevice.h</span><br><span>@@ -100,6 +100,8 @@</span><br><span>    double maxTxGain(void) { return tx_gain_max; }</span><br><span>       double minTxGain(void) { return tx_gain_min; }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    int getNominalTxPower(size_t chan = 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    double getTxFreq(size_t chan);</span><br><span>       double getRxFreq(size_t chan);</span><br><span>       double getRxFreq();</span><br><span>diff --git a/Transceiver52M/device/usrp1/USRPDevice.cpp b/Transceiver52M/device/usrp1/USRPDevice.cpp</span><br><span>index 1a9a7e1..73117d2 100644</span><br><span>--- a/Transceiver52M/device/usrp1/USRPDevice.cpp</span><br><span>+++ b/Transceiver52M/device/usrp1/USRPDevice.cpp</span><br><span>@@ -314,6 +314,14 @@</span><br><span>   return rxGain;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int USRPDevice::getNominalTxPower(size_t chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       /* TODO: return value based on some experimentally generated table depending on</span><br><span style="color: hsl(120, 100%, 40%);">+        * band/arfcn, which is known here thanks to TXTUNE</span><br><span style="color: hsl(120, 100%, 40%);">+    */</span><br><span style="color: hsl(120, 100%, 40%);">+   return 23;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> bool USRPDevice::setRxAntenna(const std::string &ant, size_t chan)</span><br><span> {</span><br><span>       if (chan >= rx_paths.size()) {</span><br><span>diff --git a/Transceiver52M/device/usrp1/USRPDevice.h b/Transceiver52M/device/usrp1/USRPDevice.h</span><br><span>index a4a0886..0549192 100644</span><br><span>--- a/Transceiver52M/device/usrp1/USRPDevice.h</span><br><span>+++ b/Transceiver52M/device/usrp1/USRPDevice.h</span><br><span>@@ -180,6 +180,8 @@</span><br><span>   /** return minimum Rx Gain **/</span><br><span>   double minTxGain(void);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  int getNominalTxPower(size_t chan = 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /** sets the RX path to use, returns true if successful and false otherwise */</span><br><span>   bool setRxAntenna(const std::string &ant, size_t chan = 0);</span><br><span> </span><br><span>diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp</span><br><span>index fbcacf1..fb724d2 100644</span><br><span>--- a/Transceiver52M/radioInterface.cpp</span><br><span>+++ b/Transceiver52M/radioInterface.cpp</span><br><span>@@ -124,6 +124,16 @@</span><br><span>   return atten;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int RadioInterface::getNominalTxPower(size_t chan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (chan >= mChans) {</span><br><span style="color: hsl(120, 100%, 40%);">+    LOG(ALERT) << "Invalid channel requested";</span><br><span style="color: hsl(120, 100%, 40%);">+    return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    return mDevice->getNominalTxPower(chan);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int RadioInterface::radioifyVector(signalVector &wVector,</span><br><span>                                    size_t chan, bool zero)</span><br><span> {</span><br><span>diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h</span><br><span>index c75a983..eb7ed3b 100644</span><br><span>--- a/Transceiver52M/radioInterface.h</span><br><span>+++ b/Transceiver52M/radioInterface.h</span><br><span>@@ -117,6 +117,7 @@</span><br><span>   int driveReceiveRadio();</span><br><span> </span><br><span>   int setPowerAttenuation(int atten, size_t chan = 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  int getNominalTxPower(size_t chan = 0);</span><br><span> </span><br><span>   /** returns the full-scale transmit amplitude **/</span><br><span>   double fullScaleInputValue();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/18586">change 18586</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-trx/+/18586"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I1d7efe56e008d8d60e23f9a85aa40809f7f84d9c </div>
<div style="display:none"> Gerrit-Change-Number: 18586 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: roh <jsteiger@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>