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
This commit is contained in:
Jacob Erlbeck 2016-01-14 18:05:44 +01:00
parent 419b034975
commit d7630f2256
1 changed files with 12 additions and 23 deletions

View File

@ -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);
"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 (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);
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 */