From d7630f2256f7e99240c214b5c3310cf650e393d5 Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Thu, 14 Jan 2016 18:05:44 +0100 Subject: edge: Use bitvec based window methods for EGPRS Currently a faked 'old' RBB with 64 ACKs is being used. Use the new bitvec based methods instead. Sponsored-by: On-Waves ehf --- src/bts.cpp | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/bts.cpp b/src/bts.cpp index d95dd869..eb079186 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -1031,31 +1031,20 @@ void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nac &ack_nack->EGPRS_AckNack.Desc, &bits, &bsn_begin, &bsn_end, &tbf->m_window); - for (int i = 0; i < num_blocks; i++) { - show_bits[i] = bitvec_get_bit_pos(&bits, i) ? 'R' : 'I'; - } - show_bits[num_blocks] = 0; - LOGP(DRLCMAC, LOGL_DEBUG, - "EGPRS DL ACK bitmap: BSN %d to %d - 1 (%d blocks): %s\n", - bsn_begin, bsn_end, num_blocks, show_bits); - - if (ack_nack->EGPRS_AckNack.Desc.URBB_LENGTH == 0 && - !ack_nack->EGPRS_AckNack.Desc.Exist_CRBB) - { - /* Everything has been received successfully */ - /* Fake a GPRS type ack */ - uint64_t fake_map = -1; - - rc = tbf->rcvd_dl_ack( - ack_nack->EGPRS_AckNack.Desc.FINAL_ACK_INDICATION, - tbf->m_window.mod_sns(ack_nack->EGPRS_AckNack.Desc.STARTING_SEQUENCE_NUMBER-1), - (uint8_t *)&fake_map); + "Got EGPRS DL ACK bitmap: SSN: %d, BSN %d to %d - 1 (%d blocks), " + "\"%s\"\n", + ack_nack->EGPRS_AckNack.Desc.STARTING_SEQUENCE_NUMBER, + bsn_begin, bsn_end, num_blocks, + (Decoding::extract_rbb(&bits, show_bits), show_bits) + ); - if (rc == 1) { - tbf_free(tbf); - return; - } + rc = tbf->rcvd_dl_ack( + ack_nack->EGPRS_AckNack.Desc.FINAL_ACK_INDICATION, + bsn_begin, &bits); + if (rc == 1) { + tbf_free(tbf); + return; } /* check for channel request */ -- cgit v1.2.3