<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16082">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PTCCH: implement basic message codec and API<br><br>Change-Id: Id79e95aafdde4a71977c64385fce48b729a51ca9<br>Related: OS#1545<br>---<br>M src/bts.cpp<br>M src/pdch.cpp<br>M src/pdch.h<br>3 files changed, 54 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index a9ff553..24666af 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -252,6 +252,7 @@</span><br><span> </span><br><span>              for (size_t ts_no = 0; ts_no < ARRAY_SIZE(trx->pdch); ++ts_no) {</span><br><span>                       struct gprs_rlcmac_pdch *pdch = &trx->pdch[ts_no];</span><br><span style="color: hsl(120, 100%, 40%);">+                     pdch->init_ptcch_msg();</span><br><span>                   pdch->ts_no = ts_no;</span><br><span>                      pdch->trx = trx;</span><br><span>          }</span><br><span>diff --git a/src/pdch.cpp b/src/pdch.cpp</span><br><span>index e4b25e1..beb2c13 100644</span><br><span>--- a/src/pdch.cpp</span><br><span>+++ b/src/pdch.cpp</span><br><span>@@ -48,6 +48,7 @@</span><br><span> }</span><br><span> </span><br><span> #include <errno.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdlib.h></span><br><span> #include <arpa/inet.h></span><br><span> </span><br><span> extern void *tall_pcu_ctx;</span><br><span>@@ -961,3 +962,37 @@</span><br><span> {</span><br><span>     return trx->bts->bts_data();</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* PTCCH (Packet Timing Advance Control Channel) */</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_rlcmac_pdch::init_ptcch_msg(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        memset(ptcch_msg, PTCCH_TAI_FREE, PTCCH_TAI_NUM);</span><br><span style="color: hsl(120, 100%, 40%);">+     memset(ptcch_msg + PTCCH_TAI_NUM, PTCCH_PADDING, 7);</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%);">+uint8_t gprs_rlcmac_pdch::reserve_tai(uint8_t ta)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t tai;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for (tai = 0; tai < PTCCH_TAI_NUM; tai++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ptcch_msg[tai] == PTCCH_TAI_FREE) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       ptcch_msg[tai] = ta;</span><br><span style="color: hsl(120, 100%, 40%);">+                  return tai;</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%);">+   /* Special case: no free TAI available */</span><br><span style="color: hsl(120, 100%, 40%);">+     return PTCCH_TAI_FREE;</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%);">+void gprs_rlcmac_pdch::release_tai(uint8_t tai)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(tai < PTCCH_TAI_NUM);</span><br><span style="color: hsl(120, 100%, 40%);">+  ptcch_msg[tai] = PTCCH_TAI_FREE;</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%);">+void gprs_rlcmac_pdch::update_ta(uint8_t tai, uint8_t ta)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(tai < PTCCH_TAI_NUM);</span><br><span style="color: hsl(120, 100%, 40%);">+  ptcch_msg[tai] = ta;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/pdch.h b/src/pdch.h</span><br><span>index 3015023..d55f58e 100644</span><br><span>--- a/src/pdch.h</span><br><span>+++ b/src/pdch.h</span><br><span>@@ -35,6 +35,11 @@</span><br><span> </span><br><span> #include <stdint.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* PTCCH (Packet Timing Advance Control Channel) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PTCCH_TAI_FREE             0x7f    /*!< Special value for unused TA Indexes */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PTCCH_TAI_NUM           16      /*!< Number of PTCCH/U slots and thus TA Indexes */</span><br><span style="color: hsl(120, 100%, 40%);">+#define PTCCH_PADDING           0x2b    /*!< PTCCH/D messages need to be padded to 23 octets */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*</span><br><span>  * PDCH instance</span><br><span>  */</span><br><span>@@ -88,6 +93,19 @@</span><br><span>   struct llist_head paging_list; /* list of paging messages */</span><br><span>         uint32_t last_rts_fn; /* store last frame number of RTS */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* PTCCH (Packet Timing Advance Control Channel) */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t ptcch_msg[GSM_MACBLOCK_LEN]; /* 'ready to use' PTCCH/D message */</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __cplusplus</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize the PTCCH/D message */</span><br><span style="color: hsl(120, 100%, 40%);">+  void init_ptcch_msg(void);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Obtain an unused TA Index for a TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t reserve_tai(uint8_t ta);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Mark a given TA Index as free, so it can be used again */</span><br><span style="color: hsl(120, 100%, 40%);">+  void release_tai(uint8_t tai);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Update the actual Timing Advance value for a given TA Index */</span><br><span style="color: hsl(120, 100%, 40%);">+     void update_ta(uint8_t tai, uint8_t ta);</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   /* back pointers */</span><br><span>  struct gprs_rlcmac_trx *trx;</span><br><span>         uint8_t ts_no;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16082">change 16082</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-pcu/+/16082"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id79e95aafdde4a71977c64385fce48b729a51ca9 </div>
<div style="display:none"> Gerrit-Change-Number: 16082 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </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-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>