aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf_dl.cpp
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-07-07 13:49:29 +0200
committerMax <msuraev@sysmocom.de>2017-07-10 09:39:53 +0000
commitaae1bfbbe0694db5df21073780fad964044dc4c1 (patch)
tree180d8903cef422c2d38956abca655a8b73df3cb8 /src/tbf_dl.cpp
parent557959546441ec1aa7667ddaf8fcfeccec23f493 (diff)
Remove TBF knowledge from rcv_control*dl_ack_nack
Do not access TBF internals directly from rcv_control*dl_ack_nack() - wrap corresponding code into TBF-DL method. Change-Id: I3d1b5782001e45617b4a960612fcfc249904b37c Related: OS#1539
Diffstat (limited to 'src/tbf_dl.cpp')
-rw-r--r--src/tbf_dl.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 24c6385c..a894789e 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -609,6 +609,29 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
return bsn;
}
+void gprs_rlcmac_dl_tbf::clear_poll_timeout_flag()
+{
+ state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+}
+
+bool gprs_rlcmac_dl_tbf::handle_ack_nack()
+{
+ bool ack_recovered = false;
+
+ state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK);
+ if ((state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) {
+ clear_poll_timeout_flag();
+ ack_recovered = true;
+ }
+
+ /* reset N3105 */
+ n3105 = 0;
+ stop_t3191();
+ poll_state = GPRS_RLCMAC_POLL_NONE;
+
+ return ack_recovered;
+}
+
struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block(
const uint32_t fn, const uint8_t ts,
int index, int index2)
@@ -807,8 +830,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block(
if (is_final)
tbf_timer_start(this, 3191, bts_data()->t3191, 0);
- /* Clear poll timeout flag */
- state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK);
+ clear_poll_timeout_flag();
/* Clear request flag */
m_dl_ack_requested = false;