diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2016-02-01 16:13:38 +0100 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2016-02-08 00:45:38 +0100 |
commit | 2647a337a8343ab1cbb9bb17f918df2db98864e7 (patch) | |
tree | 5f16e94e12b74357800b4da966af666ab8aced64 /src/bts.cpp | |
parent | 18831c3ca94b8cfcdb64a883d88d22404d7c28bd (diff) |
encoding: Redesign Encoding::write_immediate_assignment API
The EGPRS support will need more information to encode the IMMEDIATE
ASSIGMENT. Instead of adding more parameters pass a pointer to the
TBF unless an SBA shall be done (indicated by tbf == NULL). All
values that can be derived from the TBF and are not needed for an SBA
are removed from the parameter list.
Return a negative value on error.
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/bts.cpp')
-rw-r--r-- | src/bts.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 47dc1d1c..8337b068 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -466,8 +466,7 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) uint8_t sb = 0; uint32_t sb_fn = 0; int rc; - uint8_t plen; - uint8_t tfi = 0; + int plen; uint8_t usf = 7; uint8_t tsc; uint16_t ta; @@ -528,7 +527,6 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) "Assignment Uplink (AGCH)\n", tbf_name(tbf)); trx_no = tbf->trx->trx_no; ts_no = tbf->first_ts; - tfi = tbf->tfi(); usf = tbf->m_usf[ts_no]; tsc = tbf->tsc(); } @@ -538,14 +536,17 @@ int BTS::rcv_rach(uint8_t ra, uint32_t Fn, int16_t qta) LOGP(DRLCMAC, LOGL_DEBUG, " - TRX=%d (%d) TS=%d TA=%d TSC=%d TFI=%d USF=%d\n", - trx_no, m_bts.trx[trx_no].arfcn, ts_no, ta, tsc, tfi, usf); + trx_no, m_bts.trx[trx_no].arfcn, ts_no, ta, tsc, + tbf ? tbf->tfi() : -1, usf); plen = Encoding::write_immediate_assignment( - &m_bts, immediate_assignment, 0, ra, Fn, ta, - m_bts.trx[trx_no].arfcn, ts_no, tsc, tfi, usf, 0, 0, sb_fn, sb, + tbf, immediate_assignment, 0, ra, Fn, ta, + m_bts.trx[trx_no].arfcn, ts_no, tsc, usf, 0, sb_fn, m_bts.alpha, m_bts.gamma, -1); - pcu_l1if_tx_agch(immediate_assignment, plen); + if (plen >= 0) + pcu_l1if_tx_agch(immediate_assignment, plen); + bitvec_free(immediate_assignment); return 0; @@ -598,11 +599,12 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi) LOGP(DRLCMAC, LOGL_DEBUG, " - TRX=%d (%d) TS=%d TA=%d pollFN=%d\n", tbf->trx->trx_no, tbf->trx->arfcn, ts, tbf->ta(), poll ? tbf->poll_fn : -1); - plen = Encoding::write_immediate_assignment(&m_bts, immediate_assignment, 1, 125, + plen = Encoding::write_immediate_assignment(tbf, immediate_assignment, 1, 125, (tbf->pdch[ts]->last_rts_fn + 21216) % 2715648, tbf->ta(), - tbf->trx->arfcn, ts, tbf->tsc(), tbf->tfi(), 7, tbf->tlli(), poll, - tbf->poll_fn, 0, m_bts.alpha, m_bts.gamma, -1); - pcu_l1if_tx_pch(immediate_assignment, plen, imsi); + tbf->trx->arfcn, ts, tbf->tsc(), 7, poll, + tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1); + if (plen >= 0) + pcu_l1if_tx_pch(immediate_assignment, plen, imsi); bitvec_free(immediate_assignment); } |