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:
parent
419b034975
commit
d7630f2256
35
src/bts.cpp
35
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);
|
||||
"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 */
|
||||
|
|
Loading…
Reference in New Issue