diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2012-07-15 16:27:01 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2012-07-15 16:27:01 +0200 |
commit | ee31b78cfd0945e92a8e11e1460e57886cd5b854 (patch) | |
tree | bf70afc74f6b2d54d95b87fb4038968452f8c94c /src/gprs_rlcmac_sched.cpp | |
parent | 06f96cd5a72e475db44bda14a9bf86bed4260857 (diff) |
Fixed contention resolution issue
In order to do downlink assignment during uplink TBF, the content
resolution must be completed. It is completed when the first Packet
Uplink Ack/Nack message is transmitted to the mobile.
Diffstat (limited to 'src/gprs_rlcmac_sched.cpp')
-rw-r--r-- | src/gprs_rlcmac_sched.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp index f88b09b5..cd995166 100644 --- a/src/gprs_rlcmac_sched.cpp +++ b/src/gprs_rlcmac_sched.cpp @@ -69,12 +69,12 @@ int gprs_rlcmac_rcv_rts_block(uint8_t trx, uint8_t ts, uint16_t arfcn, if (tbf->poll_state == GPRS_RLCMAC_POLL_SCHED && tbf->poll_fn == poll_fn) poll_tbf = tbf; + if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_SEND_ACK) + ul_ack_tbf = tbf; if (tbf->dl_ass_state == GPRS_RLCMAC_DL_ASS_SEND_ASS) dl_ass_tbf = tbf; if (tbf->ul_ass_state == GPRS_RLCMAC_UL_ASS_SEND_ASS) ul_ass_tbf = tbf; - if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_SEND_ACK) - ul_ack_tbf = tbf; } llist_for_each_entry(tbf, &gprs_rlcmac_dl_tbfs, list) { /* this trx, this ts */ @@ -88,8 +88,6 @@ int gprs_rlcmac_rcv_rts_block(uint8_t trx, uint8_t ts, uint16_t arfcn, dl_ass_tbf = tbf; if (tbf->ul_ass_state == GPRS_RLCMAC_UL_ASS_SEND_ASS) ul_ass_tbf = tbf; - if (tbf->ul_ack_state == GPRS_RLCMAC_UL_ACK_SEND_ACK) - ul_ack_tbf = tbf; } /* check uplink ressource for polling */ @@ -134,14 +132,14 @@ int gprs_rlcmac_rcv_rts_block(uint8_t trx, uint8_t ts, uint16_t arfcn, if (dl_ass_tbf) { tbf = dl_ass_tbf; msg = gprs_rlcmac_send_packet_downlink_assignment(tbf, fn); - } else + } /* schedule PACKET UPLINK ASSIGNMENT */ - if (ul_ass_tbf) { + if (!msg && ul_ass_tbf) { tbf = ul_ass_tbf; msg = gprs_rlcmac_send_packet_uplink_assignment(tbf, fn); - } else + } /* schedule PACKET UPLINK ACK */ - if (ul_ack_tbf) { + if (!msg && ul_ack_tbf) { tbf = ul_ack_tbf; msg = gprs_rlcmac_send_uplink_ack(tbf, fn); } |