<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/15923">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  neels: Looks good to me, but someone else must approve
  fixeria: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm_04_08.h: Introduce API osmo_gsm48_rfpowercap2powerclass()<br><br>Related: OS#4244<br>Change-Id: I32e9cc1c2397b44f0d48db2acdf782a821365b63<br>---<br>M TODO-RELEASE<br>M include/osmocom/gsm/protocol/gsm_04_08.h<br>M src/gsm/gsm48.c<br>M src/gsm/libosmogsm.map<br>M tests/gsm0408/gsm0408_test.c<br>5 files changed, 49 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 547b5a9..9af92c1 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -9,3 +9,4 @@</span><br><span> #library     what                    description / commit summary line</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 style="color: hsl(120, 100%, 40%);">+gsm               API added               osmo_gsm48_rfpowercap2powerclass()</span><br><span>diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h</span><br><span>index 6a6c7f3..b5317d5 100644</span><br><span>--- a/include/osmocom/gsm/protocol/gsm_04_08.h</span><br><span>+++ b/include/osmocom/gsm/protocol/gsm_04_08.h</span><br><span>@@ -10,6 +10,7 @@</span><br><span> #include <osmocom/core/endian.h></span><br><span> </span><br><span> struct gsm_lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+enum gsm_band;</span><br><span> </span><br><span> /* Chapter 10.5.1.5 */</span><br><span> struct gsm48_classmark1 {</span><br><span>@@ -73,7 +74,7 @@</span><br><span> char *osmo_gsm48_classmark_a5_name_buf(char *buf, size_t buf_len, const struct osmo_gsm48_classmark *cm);</span><br><span> char *osmo_gsm48_classmark_a5_name_c(const void *ctx, const struct osmo_gsm48_classmark *cm);</span><br><span> void osmo_gsm48_classmark_update(struct osmo_gsm48_classmark *dst, const struct osmo_gsm48_classmark *src);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+int8_t osmo_gsm48_rfpowercap2powerclass(enum gsm_band band, uint8_t rf_power_cap);</span><br><span> /* Chapter 10.5.2.1b.3 */</span><br><span> #if OSMO_IS_LITTLE_ENDIAN == 1</span><br><span> struct gsm48_range_1024 {</span><br><span>diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c</span><br><span>index 2d6deb5..17b0829 100644</span><br><span>--- a/src/gsm/gsm48.c</span><br><span>+++ b/src/gsm/gsm48.c</span><br><span>@@ -1390,4 +1390,25 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Decode power class from Classmark1/2 RF power capability field.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] rf_power_cap  The RF power capability field (3 bits).</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] band  the band of the arfcn from where the classmark was received</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return the MS power class on success, negative on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int8_t osmo_gsm48_rfpowercap2powerclass(enum gsm_band band, uint8_t rf_power_cap)</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 (rf_power_cap > 2)</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+            return rf_power_cap + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      default:</span><br><span style="color: hsl(120, 100%, 40%);">+              if (rf_power_cap > 4)</span><br><span style="color: hsl(120, 100%, 40%);">+                      return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+            return rf_power_cap + 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 style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! @} */</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index 724fe5b..a0e3b32 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -646,6 +646,7 @@</span><br><span> osmo_gsm48_classmark_a5_name_buf;</span><br><span> osmo_gsm48_classmark_a5_name_c;</span><br><span> osmo_gsm48_classmark_update;</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_gsm48_rfpowercap2powerclass;</span><br><span> </span><br><span> cbsp_msg_type_names;</span><br><span> cbsp_iei_names;</span><br><span>diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c</span><br><span>index db1d45a..2488024 100644</span><br><span>--- a/tests/gsm0408/gsm0408_test.c</span><br><span>+++ b/tests/gsm0408/gsm0408_test.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> #include <osmocom/gsm/gsm48_ie.h></span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span> #include <osmocom/gsm/gsm48_arfcn_range_encode.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm_utils.h></span><br><span> #include <osmocom/gsm/mncc.h></span><br><span> #include <osmocom/core/backtrace.h></span><br><span> #include <osmocom/core/utils.h></span><br><span>@@ -1132,6 +1133,28 @@</span><br><span>    VERIFY(f0, ==, 1);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void test_power_ctrl()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int8_t rc8;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_850, 0x00);</span><br><span style="color: hsl(120, 100%, 40%);">+   VERIFY(rc8, ==, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0x02);</span><br><span style="color: hsl(120, 100%, 40%);">+   VERIFY(rc8, ==, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_1800, 0x02);</span><br><span style="color: hsl(120, 100%, 40%);">+  VERIFY(rc8, ==, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_1900, 0x02);</span><br><span style="color: hsl(120, 100%, 40%);">+  VERIFY(rc8, ==, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_1900, 0x04);</span><br><span style="color: hsl(120, 100%, 40%);">+  VERIFY(rc8, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0x04);</span><br><span style="color: hsl(120, 100%, 40%);">+   VERIFY(rc8, ==, 5);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0x05);</span><br><span style="color: hsl(120, 100%, 40%);">+   VERIFY(rc8, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc8 = osmo_gsm48_rfpowercap2powerclass(GSM_BAND_900, 0xf2);</span><br><span style="color: hsl(120, 100%, 40%);">+   VERIFY(rc8, <, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>   test_bearer_cap();</span><br><span>@@ -1147,6 +1170,7 @@</span><br><span>   test_arfcn_filter();</span><br><span>         test_print_encoding();</span><br><span>       test_range_encoding();</span><br><span style="color: hsl(120, 100%, 40%);">+        test_power_ctrl();</span><br><span> </span><br><span>       return EXIT_SUCCESS;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/15923">change 15923</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/+/15923"/><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: I32e9cc1c2397b44f0d48db2acdf782a821365b63 </div>
<div style="display:none"> Gerrit-Change-Number: 15923 </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: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>