<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/15924">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm: gsm_utils: Introduce API ms_max_pwr_dbm<br><br>Related: OS#4244<br>Change-Id: Ia10345008b3aca50b30482ef3b852b03eca71995<br>---<br>M TODO-RELEASE<br>M include/osmocom/gsm/gsm_utils.h<br>M src/gsm/gsm_utils.c<br>M src/gsm/libosmogsm.map<br>M tests/gsm0408/gsm0408_test.c<br>5 files changed, 49 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/24/15924/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 9af92c1..9905057 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -10,3 +10,4 @@</span><br><span> core             osmo_tdef_get()         change val_if_not_present arg from unsigned long to long to allow passing -1</span><br><span> core            struct osmo_tdef        fields min_val,max_val added, ABI break (arrays of structs used in programs)</span><br><span> gsm             API added               osmo_gsm48_rfpowercap2powerclass()</span><br><span style="color: hsl(120, 100%, 40%);">+gsm         API added               ms_max_pwr_dbm()</span><br><span>diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h</span><br><span>index 7a5da9a..4414563 100644</span><br><span>--- a/include/osmocom/gsm/gsm_utils.h</span><br><span>+++ b/include/osmocom/gsm/gsm_utils.h</span><br><span>@@ -118,6 +118,7 @@</span><br><span> </span><br><span> unsigned int ms_class_gmsk_dbm(enum gsm_band band, int ms_class);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int ms_max_pwr_dbm(enum gsm_band band, uint8_t ms_power_class);</span><br><span> int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm);</span><br><span> int ms_pwr_dbm(enum gsm_band band, uint8_t lvl);</span><br><span> </span><br><span>diff --git a/src/gsm/gsm_utils.c b/src/gsm/gsm_utils.c</span><br><span>index 365920f..9f8aa8e 100644</span><br><span>--- a/src/gsm/gsm_utils.c</span><br><span>+++ b/src/gsm/gsm_utils.c</span><br><span>@@ -542,6 +542,34 @@</span><br><span>   return -EINVAL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Determine maximum output power for given band based on MS Power class, as</span><br><span style="color: hsl(120, 100%, 40%);">+ *  indicated by the tables in chapter 4.1.1 of GSM TS 05.05</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] band GSM frequency band</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ms_power_class Power class of the MS (1-5)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns RF power level in dBm, negative on error. */</span><br><span style="color: hsl(120, 100%, 40%);">+int ms_max_pwr_dbm(enum gsm_band band, uint8_t ms_power_class)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        /* TS 05.05 provides no value for GSM900 class1, but TS 02.06 provides</span><br><span style="color: hsl(120, 100%, 40%);">+           value of 20W (43.01 dBm) */</span><br><span style="color: hsl(120, 100%, 40%);">+        int col_dbm_def[5] = {44, 39, 37, 33, 29};</span><br><span style="color: hsl(120, 100%, 40%);">+    int col_dbm_1800[3] = {30, 24, 36};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ms_power_class == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+              return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (band) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case GSM_BAND_1800:</span><br><span style="color: hsl(120, 100%, 40%);">+   case GSM_BAND_1900:</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ms_power_class > 3)</span><br><span style="color: hsl(120, 100%, 40%);">+                    return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               return col_dbm_1800[ms_power_class - 1];</span><br><span style="color: hsl(120, 100%, 40%);">+      default:</span><br><span style="color: hsl(120, 100%, 40%);">+              if (ms_power_class > 5)</span><br><span style="color: hsl(120, 100%, 40%);">+                    return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               return col_dbm_def[ms_power_class - 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%);">+</span><br><span> /*! determine power control level for given dBm value, as indicated</span><br><span>  *  by the tables in chapter 4.1.1 of GSM TS 05.05</span><br><span>  *  \param[in] GSM frequency band</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index a0e3b32..a56fda5 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -485,6 +485,7 @@</span><br><span> milenage_opc_gen;</span><br><span> </span><br><span> ms_class_gmsk_dbm;</span><br><span style="color: hsl(120, 100%, 40%);">+ms_max_pwr_dbm;</span><br><span> ms_pwr_ctl_lvl;</span><br><span> ms_pwr_dbm;</span><br><span> </span><br><span>diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c</span><br><span>index 2488024..5003d41 100644</span><br><span>--- a/tests/gsm0408/gsm0408_test.c</span><br><span>+++ b/tests/gsm0408/gsm0408_test.c</span><br><span>@@ -1136,6 +1136,7 @@</span><br><span> static void test_power_ctrl()</span><br><span> {</span><br><span>         int8_t rc8;</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc;</span><br><span> </span><br><span>  rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_850, 0x00);</span><br><span>  VERIFY(rc8, ==, 1);</span><br><span>@@ -1153,6 +1154,23 @@</span><br><span>         VERIFY(rc8, <, 0);</span><br><span>        rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0xf2);</span><br><span>  VERIFY(rc8, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       rc = ms_max_pwr_dbm(GSM_BAND_850, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ VERIFY(rc, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = ms_max_pwr_dbm(GSM_BAND_850, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ VERIFY(rc, ==, 44);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = ms_max_pwr_dbm(GSM_BAND_900, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+ VERIFY(rc, ==, 37);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = ms_max_pwr_dbm(GSM_BAND_1800, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+        VERIFY(rc, ==, 24);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = ms_max_pwr_dbm(GSM_BAND_1900, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+        VERIFY(rc, ==, 36);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = ms_max_pwr_dbm(GSM_BAND_1900, 4);</span><br><span style="color: hsl(120, 100%, 40%);">+        VERIFY(rc, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = ms_max_pwr_dbm(GSM_BAND_900, 5);</span><br><span style="color: hsl(120, 100%, 40%);">+ VERIFY(rc, ==, 29);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = ms_max_pwr_dbm(GSM_BAND_900, 6);</span><br><span style="color: hsl(120, 100%, 40%);">+ VERIFY(rc, <, 0);</span><br><span> }</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/15924">change 15924</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/libosmocore/+/15924"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia10345008b3aca50b30482ef3b852b03eca71995 </div>
<div style="display:none"> Gerrit-Change-Number: 15924 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>