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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ta_control: move timing advance code from osmo-bts-trx to common<br><br>The timing advance controller that is implemented in loops.c of<br>osmo-bts-trx only works for osmo-bts-trx and not for any of the phy<br>based bts. Lets move the timing advance controller into the common part<br>and make it available for every bts. Also lets add a unit-test.<br><br>Change-Id: If7ddf74db3abc9b9872abe620a0aeebe3327e70a<br>Related: SYS#4567<br>---<br>M .gitignore<br>M configure.ac<br>M include/osmo-bts/Makefile.am<br>M include/osmo-bts/phy_link.h<br>A include/osmo-bts/ta_control.h<br>M src/common/Makefile.am<br>M src/common/measurement.c<br>A src/common/ta_control.c<br>M src/osmo-bts-trx/loops.c<br>M src/osmo-bts-trx/loops.h<br>M src/osmo-bts-trx/main.c<br>M src/osmo-bts-trx/scheduler_trx.c<br>M src/osmo-bts-trx/trx_vty.c<br>M tests/Makefile.am<br>A tests/ta_control/Makefile.am<br>A tests/ta_control/ta_control_test.c<br>A tests/ta_control/ta_control_test.ok<br>M tests/testsuite.at<br>18 files changed, 773 insertions(+), 81 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/.gitignore b/.gitignore</span><br><span>index a4b794a..7422edb 100644</span><br><span>--- a/.gitignore</span><br><span>+++ b/.gitignore</span><br><span>@@ -62,6 +62,7 @@</span><br><span> tests/misc/misc_test</span><br><span> tests/handover/handover_test</span><br><span> tests/tx_power/tx_power_test</span><br><span style="color: hsl(120, 100%, 40%);">+tests/ta_control/ta_control_test</span><br><span> tests/testsuite</span><br><span> tests/testsuite.log</span><br><span> </span><br><span>diff --git a/configure.ac b/configure.ac</span><br><span>index 1bcd2fe..55755ab 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -382,6 +382,7 @@</span><br><span>     tests/sysmobts/Makefile</span><br><span>     tests/misc/Makefile</span><br><span>     tests/handover/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+    tests/ta_control/Makefile</span><br><span>     tests/tx_power/Makefile</span><br><span>     tests/power/Makefile</span><br><span>     tests/meas/Makefile</span><br><span>diff --git a/include/osmo-bts/Makefile.am b/include/osmo-bts/Makefile.am</span><br><span>index a15ce3d..668db32 100644</span><br><span>--- a/include/osmo-bts/Makefile.am</span><br><span>+++ b/include/osmo-bts/Makefile.am</span><br><span>@@ -2,4 +2,4 @@</span><br><span>                oml.h paging.h rsl.h signal.h vty.h amr.h pcu_if.h pcuif_proto.h \</span><br><span>           handover.h msg_utils.h tx_power.h control_if.h cbch.h l1sap.h \</span><br><span>              power_control.h scheduler.h scheduler_backend.h phy_link.h \</span><br><span style="color: hsl(0, 100%, 40%);">-            dtx_dl_amr_fsm.h</span><br><span style="color: hsl(120, 100%, 40%);">+              dtx_dl_amr_fsm.h ta_control.h</span><br><span>diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h</span><br><span>index b2e7c0e..69c6bd6 100644</span><br><span>--- a/include/osmo-bts/phy_link.h</span><br><span>+++ b/include/osmo-bts/phy_link.h</span><br><span>@@ -44,7 +44,6 @@</span><br><span>                  uint16_t base_port_local;</span><br><span>                    uint16_t base_port_remote;</span><br><span>                   struct osmo_fd trx_ofd_clk;</span><br><span style="color: hsl(0, 100%, 40%);">-                     bool trx_ta_loop;</span><br><span>                    uint32_t clock_advance;</span><br><span>                      uint32_t rts_advance;</span><br><span>                        bool use_legacy_setbsic;</span><br><span>diff --git a/include/osmo-bts/ta_control.h b/include/osmo-bts/ta_control.h</span><br><span>new file mode 100644</span><br><span>index 0000000..168f14a</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmo-bts/ta_control.h</span><br><span>@@ -0,0 +1,5 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/gsm_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_ms_ta_ctrl(struct gsm_lchan *lchan);</span><br><span>diff --git a/src/common/Makefile.am b/src/common/Makefile.am</span><br><span>index 113ff2f..0a10abf 100644</span><br><span>--- a/src/common/Makefile.am</span><br><span>+++ b/src/common/Makefile.am</span><br><span>@@ -12,6 +12,6 @@</span><br><span>                 load_indication.c pcu_sock.c handover.c msg_utils.c \</span><br><span>                tx_power.c bts_ctrl_commands.c bts_ctrl_lookup.c \</span><br><span>                   l1sap.c cbch.c power_control.c main.c phy_link.c \</span><br><span style="color: hsl(0, 100%, 40%);">-              dtx_dl_amr_fsm.c scheduler_mframe.c</span><br><span style="color: hsl(120, 100%, 40%);">+                   dtx_dl_amr_fsm.c scheduler_mframe.c ta_control.c</span><br><span> </span><br><span> libl1sched_a_SOURCES = scheduler.c</span><br><span>diff --git a/src/common/measurement.c b/src/common/measurement.c</span><br><span>index 3e0daf1..ddc1747 100644</span><br><span>--- a/src/common/measurement.c</span><br><span>+++ b/src/common/measurement.c</span><br><span>@@ -10,6 +10,7 @@</span><br><span> #include <osmo-bts/measurement.h></span><br><span> #include <osmo-bts/scheduler.h></span><br><span> #include <osmo-bts/rsl.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/ta_control.h></span><br><span> </span><br><span> /* Tables as per TS 45.008 Section 8.3 */</span><br><span> static const uint8_t ts45008_83_tch_f[] = { 52, 53, 54, 55, 56, 57, 58, 59 };</span><br><span>@@ -696,6 +697,11 @@</span><br><span> </span><br><span>   lchan_meas_compute_extended(lchan);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* Compute new ta_req value. This has to be done here since the value</span><br><span style="color: hsl(120, 100%, 40%);">+  * in lchan->meas.num_ul_meas together with lchan->meas.ms_toa256</span><br><span style="color: hsl(120, 100%, 40%);">+        * is needed for the computation. */</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan_ms_ta_ctrl(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   lchan->meas.num_ul_meas = 0;</span><br><span> </span><br><span>  /* return 1 to indicate that the computation has been done and the next</span><br><span>diff --git a/src/common/ta_control.c b/src/common/ta_control.c</span><br><span>new file mode 100644</span><br><span>index 0000000..2ccc41a</span><br><span>--- /dev/null</span><br><span>+++ b/src/common/ta_control.c</span><br><span>@@ -0,0 +1,55 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* Loop control for Timing Advance */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2013 by Andreas Eversberg <jolly@eversberg.eu></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</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%);">+#include <osmo-bts/gsm_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 90% of one bit duration in 1/256 symbols: 256*0.9 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TOA256_9OPERCENT      230</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* rqd_ta value range */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TOA_MIN 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define TOA_MAX 63</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_ms_ta_ctrl(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int16_t toa256 = lchan->meas.ms_toa256;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Do not perform any computation when the amount of measurement</span><br><span style="color: hsl(120, 100%, 40%);">+       * results is too little. */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (lchan->meas.num_ul_meas < 4)</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (toa256 < -TOA256_9OPERCENT && lchan->rqd_ta > TOA_MIN) {</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPLCHAN(lchan, DLOOP, LOGL_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+                      "TOA is too early (%d), now lowering TA from %d to %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   toa256, lchan->rqd_ta, lchan->rqd_ta - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+            lchan->rqd_ta--;</span><br><span style="color: hsl(120, 100%, 40%);">+   } else if (toa256 > TOA256_9OPERCENT && lchan->rqd_ta < TOA_MAX) {</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPLCHAN(lchan, DLOOP, LOGL_INFO,</span><br><span style="color: hsl(120, 100%, 40%);">+                      "TOA is too late (%d), now raising TA from %d to %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     toa256, lchan->rqd_ta, lchan->rqd_ta + 1);</span><br><span style="color: hsl(120, 100%, 40%);">+            lchan->rqd_ta++;</span><br><span style="color: hsl(120, 100%, 40%);">+   } else</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPLCHAN(lchan, DLOOP, LOGL_DEBUG,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "TOA is correct (%d), keeping current TA of %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          toa256, lchan->rqd_ta);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/osmo-bts-trx/loops.c b/src/osmo-bts-trx/loops.c</span><br><span>index eb25f64..823c2d7 100644</span><br><span>--- a/src/osmo-bts-trx/loops.c</span><br><span>+++ b/src/osmo-bts-trx/loops.c</span><br><span>@@ -35,63 +35,6 @@</span><br><span> #include "l1_if.h"</span><br><span> #include "loops.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Timing Advance loop</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* 90% of one bit duration in 1/256 symbols: 256*0.9 */</span><br><span style="color: hsl(0, 100%, 40%);">-#define TOA256_9OPERCENT 230</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void ta_val(struct gsm_lchan *lchan, struct l1sched_chan_state *chan_state, int16_t toa256)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- /* check if the current L1 header acks to the current ordered TA */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (lchan->meas.l1_info[1] != lchan->rqd_ta)</span><br><span style="color: hsl(0, 100%, 40%);">-              return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* sum measurement */</span><br><span style="color: hsl(0, 100%, 40%);">-   chan_state->meas.toa256_sum += toa256;</span><br><span style="color: hsl(0, 100%, 40%);">-       if (++(chan_state->meas.toa_num) < 16)</span><br><span style="color: hsl(0, 100%, 40%);">-            return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* complete set */</span><br><span style="color: hsl(0, 100%, 40%);">-      toa256 = chan_state->meas.toa256_sum / chan_state->meas.toa_num;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  /* check for change of TOA */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (toa256 < -TOA256_9OPERCENT && lchan->rqd_ta > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "TOA is too early (%d), now lowering TA from %d to %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  toa256, lchan->rqd_ta, lchan->rqd_ta - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-                lchan->rqd_ta--;</span><br><span style="color: hsl(0, 100%, 40%);">-     } else if (toa256 > TOA256_9OPERCENT && lchan->rqd_ta < 63) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "TOA is too late (%d), now raising TA from %d to %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    toa256, lchan->rqd_ta, lchan->rqd_ta + 1);</span><br><span style="color: hsl(0, 100%, 40%);">-                lchan->rqd_ta++;</span><br><span style="color: hsl(0, 100%, 40%);">-     } else</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPLCHAN(lchan, DLOOP, LOGL_INFO, "TOA is correct (%d), keeping current TA of %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                 toa256, lchan->rqd_ta);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      chan_state->meas.toa_num = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        chan_state->meas.toa256_sum = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! Process a SACCH event as input to the MS power control and TA loop.  Function</span><br><span style="color: hsl(0, 100%, 40%);">- *  is called once every uplink SACCH block is received.</span><br><span style="color: hsl(0, 100%, 40%);">- * \param l1t L1 TRX instance on which we operate</span><br><span style="color: hsl(0, 100%, 40%);">- * \param chan_nr RSL channel number on which we operate</span><br><span style="color: hsl(0, 100%, 40%);">- * \param chan_state L1 scheduler channel state of the channel on which we operate</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] rssi Receive Signal Strength Indication</span><br><span style="color: hsl(0, 100%, 40%);">- * \param[in] toa256 Time of Arrival in 1/256 symbol periods */</span><br><span style="color: hsl(0, 100%, 40%);">-void trx_loop_sacch_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span style="color: hsl(0, 100%, 40%);">- struct l1sched_chan_state *chan_state, int16_t toa256)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan = &l1t->trx->ts[L1SAP_CHAN2TS(chan_nr)]</span><br><span style="color: hsl(0, 100%, 40%);">-                                       .lchan[l1sap_chan2ss(chan_nr)];</span><br><span style="color: hsl(0, 100%, 40%);">- struct phy_instance *pinst = trx_phy_instance(l1t->trx);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     /* if TA loop is enabled, handle it */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (pinst->phy_link->u.osmotrx.trx_ta_loop)</span><br><span style="color: hsl(0, 100%, 40%);">-               ta_val(lchan, chan_state, toa256);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void trx_loop_amr_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span>     struct l1sched_chan_state *chan_state,</span><br><span>       int n_errors, int n_bits_total)</span><br><span>diff --git a/src/osmo-bts-trx/loops.h b/src/osmo-bts-trx/loops.h</span><br><span>index bc87860..1384960 100644</span><br><span>--- a/src/osmo-bts-trx/loops.h</span><br><span>+++ b/src/osmo-bts-trx/loops.h</span><br><span>@@ -11,9 +11,6 @@</span><br><span>  * loops api</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void trx_loop_sacch_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span style="color: hsl(0, 100%, 40%);">-  struct l1sched_chan_state *chan_state, int16_t toa);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void trx_loop_amr_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span>    struct l1sched_chan_state *chan_state,</span><br><span>       int n_errors, int n_bits_total);</span><br><span>diff --git a/src/osmo-bts-trx/main.c b/src/osmo-bts-trx/main.c</span><br><span>index 00280ce..6671243 100644</span><br><span>--- a/src/osmo-bts-trx/main.c</span><br><span>+++ b/src/osmo-bts-trx/main.c</span><br><span>@@ -135,7 +135,6 @@</span><br><span>      plink->u.osmotrx.base_port_remote = 5700;</span><br><span>         plink->u.osmotrx.clock_advance = 20;</span><br><span>      plink->u.osmotrx.rts_advance = 5;</span><br><span style="color: hsl(0, 100%, 40%);">-    plink->u.osmotrx.trx_ta_loop = true;</span><br><span>      /* attempt use newest TRXD version by default: */</span><br><span>    plink->u.osmotrx.trxd_hdr_ver_max = TRX_DATA_FORMAT_VER;</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index 2785d09..20d502f 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -954,12 +954,6 @@</span><br><span>         } else</span><br><span>               memset(burst, 0, 58 * 2);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* send burst information to loops process */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (L1SAP_IS_LINK_SACCH(trx_chan_desc[chan].link_id)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         trx_loop_sacch_input(l1t, trx_chan_desc[chan].chan_nr | bi->tn,</span><br><span style="color: hsl(0, 100%, 40%);">-                      chan_state, bi->toa256);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    /* wait until complete set of bursts */</span><br><span>      if (bid != 3)</span><br><span>                return 0;</span><br><span>diff --git a/src/osmo-bts-trx/trx_vty.c b/src/osmo-bts-trx/trx_vty.c</span><br><span>index 5c5e477..9c67a7f 100644</span><br><span>--- a/src/osmo-bts-trx/trx_vty.c</span><br><span>+++ b/src/osmo-bts-trx/trx_vty.c</span><br><span>@@ -181,23 +181,19 @@</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_phy_timing_advance_loop, cfg_phy_timing_advance_loop_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_phy_timing_advance_loop, cfg_phy_timing_advance_loop_cmd,</span><br><span>      "osmotrx timing-advance-loop", OSMOTRX_STR</span><br><span>         "Enable timing advance control loop\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct phy_link *plink = vty->index;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- plink->u.osmotrx.trx_ta_loop = true;</span><br><span style="color: hsl(120, 100%, 40%);">+       vty_out (vty, "'osmotrx timing-advance-loop' is deprecated, ta control is now active by default%s", VTY_NEWLINE);</span><br><span> </span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_phy_no_timing_advance_loop, cfg_phy_no_timing_advance_loop_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_phy_no_timing_advance_loop, cfg_phy_no_timing_advance_loop_cmd,</span><br><span>      "no osmotrx timing-advance-loop",</span><br><span>  NO_STR OSMOTRX_STR "Disable timing advance control loop\n")</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      struct phy_link *plink = vty->index;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- plink->u.osmotrx.trx_ta_loop = false;</span><br><span style="color: hsl(120, 100%, 40%);">+      vty_out (vty, "'no osmotrx timing-advance-loop' is deprecated, ta control is now active by default%s", VTY_NEWLINE);</span><br><span> </span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -522,8 +518,6 @@</span><br><span>               vty_out(vty, " osmotrx ip remote %s%s",</span><br><span>                    plink->u.osmotrx.remote_ip, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        vty_out(vty, " %sosmotrx timing-advance-loop%s", (plink->u.osmotrx.trx_ta_loop) ? "" : "no ", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>         if (plink->u.osmotrx.base_port_local)</span><br><span>             vty_out(vty, " osmotrx base-port local %"PRIu16"%s",</span><br><span>                     plink->u.osmotrx.base_port_local, VTY_NEWLINE);</span><br><span>diff --git a/tests/Makefile.am b/tests/Makefile.am</span><br><span>index 1eb28d6..57687ee 100644</span><br><span>--- a/tests/Makefile.am</span><br><span>+++ b/tests/Makefile.am</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-SUBDIRS = paging cipher agch misc handover tx_power power meas</span><br><span style="color: hsl(120, 100%, 40%);">+SUBDIRS = paging cipher agch misc handover tx_power power meas ta_control</span><br><span> </span><br><span> if ENABLE_SYSMOBTS</span><br><span> SUBDIRS += sysmobts</span><br><span>diff --git a/tests/ta_control/Makefile.am b/tests/ta_control/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..4c89dd2</span><br><span>--- /dev/null</span><br><span>+++ b/tests/ta_control/Makefile.am</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOCODEC_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOABIS_CFLAGS)</span><br><span style="color: hsl(120, 100%, 40%);">+LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOCODEC_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOABIS_LIBS)</span><br><span style="color: hsl(120, 100%, 40%);">+noinst_PROGRAMS = ta_control_test</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = ta_control_test.ok</span><br><span style="color: hsl(120, 100%, 40%);">+ta_control_test_LDADD = $(top_builddir)/src/common/libbts.a $(LDADD)</span><br><span>diff --git a/tests/ta_control/ta_control_test.c b/tests/ta_control/ta_control_test.c</span><br><span>new file mode 100644</span><br><span>index 0000000..2e981b3</span><br><span>--- /dev/null</span><br><span>+++ b/tests/ta_control/ta_control_test.c</span><br><span>@@ -0,0 +1,77 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* Test cases for tx_control.c Timing Advance Computation */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2016 by sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Philipp Maier</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</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%);">+#include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/application.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/gsm_data.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmo-bts/ta_control.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void lchan_ms_ta_ctrl_test(int16_t toa256_start, unsigned int steps)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_lchan lchan = { };</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int i;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t rqd_ta_after;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t rqd_ta_before;</span><br><span style="color: hsl(120, 100%, 40%);">+        int16_t toa256 = toa256_start;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Arbitrary value, high enough so that a computation can happen. */</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.meas.num_ul_meas = 10;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        printf("toa256_start = %u / 256 = %u, steps = %u\n", toa256_start,</span><br><span style="color: hsl(120, 100%, 40%);">+         toa256_start / 256, steps);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (i = 0; i < steps; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("Step #%u\n", i);</span><br><span style="color: hsl(120, 100%, 40%);">+            printf("  lchan.rqd_ta (before) = %u\n", lchan.rqd_ta);</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("  toa256 (before) = %u / 256 = %u\n", toa256,</span><br><span style="color: hsl(120, 100%, 40%);">+                      toa256 / 256);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               rqd_ta_before = lchan.rqd_ta;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               lchan.meas.ms_toa256 = toa256;</span><br><span style="color: hsl(120, 100%, 40%);">+                lchan_ms_ta_ctrl(&lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               rqd_ta_after = lchan.rqd_ta;</span><br><span style="color: hsl(120, 100%, 40%);">+          toa256 -= (rqd_ta_after - rqd_ta_before) * 256;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("  lchan.rqd_ta (after) = %u\n", lchan.rqd_ta);</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("  toa256 (after) = %u / 256 = %u\n", toa256,</span><br><span style="color: hsl(120, 100%, 40%);">+                       toa256 / 256);</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%);">+   printf("Done.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("\n");</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%);">+int main(int argc, char **argv)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      void *tall_bts_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ tall_bts_ctx = talloc_named_const(NULL, 1, "OsmoBTS context");</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_init_logging2(tall_bts_ctx, &bts_log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        lchan_ms_ta_ctrl_test(16 * 256, 20);</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan_ms_ta_ctrl_test(4000, 50);</span><br><span style="color: hsl(120, 100%, 40%);">+      lchan_ms_ta_ctrl_test(12345, 50);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/tests/ta_control/ta_control_test.ok b/tests/ta_control/ta_control_test.ok</span><br><span>new file mode 100644</span><br><span>index 0000000..8ebe5d5</span><br><span>--- /dev/null</span><br><span>+++ b/tests/ta_control/ta_control_test.ok</span><br><span>@@ -0,0 +1,609 @@</span><br><span style="color: hsl(120, 100%, 40%);">+toa256_start = 4096 / 256 = 16, steps = 20</span><br><span style="color: hsl(120, 100%, 40%);">+Step #0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4096 / 256 = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3840 / 256 = 15</span><br><span style="color: hsl(120, 100%, 40%);">+Step #1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3840 / 256 = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3584 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+Step #2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3584 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3328 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+Step #3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3328 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3072 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+Step #4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3072 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2816 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+Step #5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2816 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2560 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+Step #6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2560 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2304 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+Step #7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2304 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2048 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+Step #8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2048 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1792 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+Step #9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1792 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1536 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+Step #10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1536 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1280 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+Step #11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1280 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1024 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+Step #12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1024 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 768 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+Step #13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 768 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 512 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+Step #14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 512 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 256 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+Step #15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 256 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #16</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #17</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #18</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #19</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 0 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Done.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+toa256_start = 4000 / 256 = 15, steps = 50</span><br><span style="color: hsl(120, 100%, 40%);">+Step #0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4000 / 256 = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3744 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+Step #1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3744 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3488 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+Step #2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3488 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3232 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+Step #3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3232 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2976 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+Step #4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2976 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2720 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+Step #5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2720 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2464 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+Step #6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2464 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2208 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+Step #7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2208 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1952 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+Step #8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1952 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1696 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+Step #9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1696 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1440 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+Step #10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1440 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1184 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+Step #11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1184 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 928 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+Step #12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 928 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 672 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+Step #13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 672 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 416 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+Step #14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 416 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #16</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #17</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #18</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #19</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #20</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #21</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #22</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #23</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #24</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #25</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #26</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #27</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #28</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #29</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #30</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #31</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #32</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #33</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #34</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #35</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #36</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #37</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #38</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #39</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #40</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #41</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #42</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #43</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #44</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #45</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #46</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #47</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #48</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #49</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 160 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Done.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+toa256_start = 12345 / 256 = 48, steps = 50</span><br><span style="color: hsl(120, 100%, 40%);">+Step #0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 12345 / 256 = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 12089 / 256 = 47</span><br><span style="color: hsl(120, 100%, 40%);">+Step #1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 12089 / 256 = 47</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 11833 / 256 = 46</span><br><span style="color: hsl(120, 100%, 40%);">+Step #2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 11833 / 256 = 46</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 11577 / 256 = 45</span><br><span style="color: hsl(120, 100%, 40%);">+Step #3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 11577 / 256 = 45</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 11321 / 256 = 44</span><br><span style="color: hsl(120, 100%, 40%);">+Step #4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 11321 / 256 = 44</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 11065 / 256 = 43</span><br><span style="color: hsl(120, 100%, 40%);">+Step #5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 11065 / 256 = 43</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 10809 / 256 = 42</span><br><span style="color: hsl(120, 100%, 40%);">+Step #6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 10809 / 256 = 42</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 10553 / 256 = 41</span><br><span style="color: hsl(120, 100%, 40%);">+Step #7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 10553 / 256 = 41</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 10297 / 256 = 40</span><br><span style="color: hsl(120, 100%, 40%);">+Step #8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 10297 / 256 = 40</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 10041 / 256 = 39</span><br><span style="color: hsl(120, 100%, 40%);">+Step #9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 10041 / 256 = 39</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 9785 / 256 = 38</span><br><span style="color: hsl(120, 100%, 40%);">+Step #10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 9785 / 256 = 38</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 9529 / 256 = 37</span><br><span style="color: hsl(120, 100%, 40%);">+Step #11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 9529 / 256 = 37</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 9273 / 256 = 36</span><br><span style="color: hsl(120, 100%, 40%);">+Step #12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 9273 / 256 = 36</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 9017 / 256 = 35</span><br><span style="color: hsl(120, 100%, 40%);">+Step #13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 9017 / 256 = 35</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 8761 / 256 = 34</span><br><span style="color: hsl(120, 100%, 40%);">+Step #14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 8761 / 256 = 34</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 8505 / 256 = 33</span><br><span style="color: hsl(120, 100%, 40%);">+Step #15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 8505 / 256 = 33</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 8249 / 256 = 32</span><br><span style="color: hsl(120, 100%, 40%);">+Step #16</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 8249 / 256 = 32</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 17</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 7993 / 256 = 31</span><br><span style="color: hsl(120, 100%, 40%);">+Step #17</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 17</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 7993 / 256 = 31</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 18</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 7737 / 256 = 30</span><br><span style="color: hsl(120, 100%, 40%);">+Step #18</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 18</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 7737 / 256 = 30</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 19</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 7481 / 256 = 29</span><br><span style="color: hsl(120, 100%, 40%);">+Step #19</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 19</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 7481 / 256 = 29</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 20</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 7225 / 256 = 28</span><br><span style="color: hsl(120, 100%, 40%);">+Step #20</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 20</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 7225 / 256 = 28</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 21</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 6969 / 256 = 27</span><br><span style="color: hsl(120, 100%, 40%);">+Step #21</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 21</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 6969 / 256 = 27</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 22</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 6713 / 256 = 26</span><br><span style="color: hsl(120, 100%, 40%);">+Step #22</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 22</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 6713 / 256 = 26</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 23</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 6457 / 256 = 25</span><br><span style="color: hsl(120, 100%, 40%);">+Step #23</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 23</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 6457 / 256 = 25</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 24</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 6201 / 256 = 24</span><br><span style="color: hsl(120, 100%, 40%);">+Step #24</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 24</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 6201 / 256 = 24</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 25</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 5945 / 256 = 23</span><br><span style="color: hsl(120, 100%, 40%);">+Step #25</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 25</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 5945 / 256 = 23</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 26</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 5689 / 256 = 22</span><br><span style="color: hsl(120, 100%, 40%);">+Step #26</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 26</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 5689 / 256 = 22</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 27</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 5433 / 256 = 21</span><br><span style="color: hsl(120, 100%, 40%);">+Step #27</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 27</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 5433 / 256 = 21</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 28</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 5177 / 256 = 20</span><br><span style="color: hsl(120, 100%, 40%);">+Step #28</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 28</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 5177 / 256 = 20</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 29</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 4921 / 256 = 19</span><br><span style="color: hsl(120, 100%, 40%);">+Step #29</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 29</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4921 / 256 = 19</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 30</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 4665 / 256 = 18</span><br><span style="color: hsl(120, 100%, 40%);">+Step #30</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 30</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4665 / 256 = 18</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 31</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 4409 / 256 = 17</span><br><span style="color: hsl(120, 100%, 40%);">+Step #31</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 31</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4409 / 256 = 17</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 32</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 4153 / 256 = 16</span><br><span style="color: hsl(120, 100%, 40%);">+Step #32</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 32</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 4153 / 256 = 16</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 33</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3897 / 256 = 15</span><br><span style="color: hsl(120, 100%, 40%);">+Step #33</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 33</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3897 / 256 = 15</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 34</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3641 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+Step #34</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 34</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3641 / 256 = 14</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 35</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3385 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+Step #35</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 35</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3385 / 256 = 13</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 36</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 3129 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+Step #36</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 36</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 3129 / 256 = 12</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 37</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2873 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+Step #37</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 37</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2873 / 256 = 11</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 38</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2617 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+Step #38</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 38</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2617 / 256 = 10</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 39</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2361 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+Step #39</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 39</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2361 / 256 = 9</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 40</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 2105 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+Step #40</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 40</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 2105 / 256 = 8</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 41</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1849 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+Step #41</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 41</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1849 / 256 = 7</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 42</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1593 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+Step #42</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 42</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1593 / 256 = 6</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 43</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1337 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+Step #43</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 43</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1337 / 256 = 5</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 44</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 1081 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+Step #44</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 44</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 1081 / 256 = 4</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 45</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 825 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+Step #45</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 45</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 825 / 256 = 3</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 46</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 569 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+Step #46</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 46</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 569 / 256 = 2</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 47</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 313 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+Step #47</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 47</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 313 / 256 = 1</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 57 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #48</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 57 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 57 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Step #49</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (before) = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (before) = 57 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+  lchan.rqd_ta (after) = 48</span><br><span style="color: hsl(120, 100%, 40%);">+  toa256 (after) = 57 / 256 = 0</span><br><span style="color: hsl(120, 100%, 40%);">+Done.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/tests/testsuite.at b/tests/testsuite.at</span><br><span>index 2d1cefd..d9bc1ce 100644</span><br><span>--- a/tests/testsuite.at</span><br><span>+++ b/tests/testsuite.at</span><br><span>@@ -49,3 +49,9 @@</span><br><span> cat $abs_srcdir/meas/meas_test.ok > expout</span><br><span> AT_CHECK([$abs_top_builddir/tests/meas/meas_test], [], [expout], [ignore])</span><br><span> AT_CLEANUP</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AT_SETUP([ta_control])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_KEYWORDS([ta_control])</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/ta_control/ta_control_test.ok > expout</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CHECK([$abs_top_builddir/tests/ta_control/ta_control_test], [], [expout], [ignore])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CLEANUP</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/16885">change 16885</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-bts/+/16885"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If7ddf74db3abc9b9872abe620a0aeebe3327e70a </div>
<div style="display:none"> Gerrit-Change-Number: 16885 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@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-MessageType: merged </div>