Hi, Andreas!<br><br>I reviewed your implementation of TBF acknowledged mode and it is a great work!<br>I modified implementation of L1 interface for OpenBTS and we have done some tests.<br><br>Can you explain, what is the reason of using Time Indication message? <br>
As I understand, we use only frame number from this message and call gprs_rlcmac_poll_timeout() function. But when we receive Ready To Send message, we also receive frame number, so why we couldn't use that FN for our purpose and call gprs_rlcmac_poll_timeout() in function, which handling ReadyToSend message?<br>
I think for maintain compatibility with different BTS implementations, it is better to use only L1 primitives, which specified in 03.64 Chapter 6.5.3 and Time Indication primitive is not described there.<br><br>Now I think, it makes sense to merge your branch with master, but we should coordinate this process. When it is better to merge it? Do you plan to make some  more fixes, modifications and cleaning of the code at this stage?<br>
I believe, for better understanding of further development of the project we should coordinate our efforts and discuss, what should be implemented in the next steps. What plans of development do you have now? <br><br><div class="gmail_quote">
2012/7/3 jolly <span dir="ltr"><<a href="mailto:andreas@eversberg.eu" target="_blank">andreas@eversberg.eu</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
hi,<br>
<br>
finally the TBF acknowledge mode works in up- and downlink. i have<br>
tested it with attachment/detachment and routing area update. changes<br>
are commited to jolly branch.<br>
<br>
don't be shocked, but there great changes to previous gprs_rlcmac.cpp<br>
code. it is split into three sources:<br>
- gprs_rlcmac.cpp: general functions to handle TBF instances,<br>
hand-hacked codings<br>
- gprs_rlcmac_data.cpp: handling of uplink and downlink TBF<br>
- gprs_rlcmac_sched.cpp: scheduler to handle ready-to-send requests.<br>
<br>
during packet idle mode, assignment of up- or downlink TBF is performed<br>
using IMMEDIATE ASSIGMENT on AGCH. during TBF uplink, downlink<br>
assignment is performed using PACKET DOWNLINK ASSIGNMENT on PACCH. after<br>
TBF downlink, further downlink assignment is performed using PACKET<br>
DOWNLINK ASSIGNMENT. during TBF downlink, uplink assignment is performed<br>
using PACKET UPLINK assignment. this way an attachment / RA update /<br>
detach will complete while staying in packet transfer mode, so no<br>
further assignment must be done on AGCH.<br>
<br>
the acknowledged mode keeps states about transmitted and received<br>
blocks, so unreceived or unacknowledged block are retransmitted as<br>
defined in TS 04.60. downlink RLC/MAC data and control blocks are not<br>
queued, but generated at ready-to-send request from layer 1.<br>
<br>
a scheduler is used to schedule next RLC/MAC block. it uses round-robin<br>
scheduling, if more than two flows are active in one direction. in<br>
downlink direction, control blocks are prioized. in uplink direction,<br>
polling of mobile is priorized. (USF is set to apply uplink ressource to<br>
MS.) only one timeslot (first PDCH) is used to share the ressources,<br>
currently.<br>
<br>
there is a short description (tbf.txt) about states and the process of<br>
current code.<br>
<br>
in order to detect missing responses on polling MS, a<br>
gprs_rlcmac_poll_timeout() function is called. layer 1 interface must<br>
implement detection of missed polled uplink control blocks. there are<br>
two ways to perform this:<br>
 - The received frame is bad (BFI).<br>
 - The GSM indicates that the block should have been already received.<br>
currently pcu_l1_if.c is broken, because none of the detection above is<br>
performed.<br>
<br>
best regards,<br>
<br>
andreas<br>
<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Regards,<br>Ivan Kluchnikov.<br><a href="http://fairwaves.ru/" target="_blank">http://fairwaves.ru</a><br>
<br>