aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/encoding.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/encoding.cpp b/src/encoding.cpp
index e7e13ac1..ba0e4744 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -258,26 +258,21 @@ static int write_ia_rest_uplink_mba(const gprs_rlcmac_ul_tbf *tbf, bitvec *dest,
return rc;
}
-static int write_ia_rest_egprs_uplink_mba(bitvec * dest, uint32_t fn, uint8_t alpha, uint8_t gamma, unsigned& wp)
+static int write_ia_rest_egprs_uplink_mba(bitvec * dest, uint32_t fn, uint8_t alpha, uint8_t gamma)
{
int rc = 0;
- bitvec_write_field(dest, &wp, 0, 1); /* multiblock allocation */
+ SET_0(dest); /* Multi Block Allocation */
- if (alpha) {
- bitvec_write_field(dest, &wp, 0x1, 1); /* ALPHA =yes */
- bitvec_write_field(dest, &wp, alpha, 4); /* ALPHA */
- } else {
- bitvec_write_field(dest, &wp, 0x0, 1); /* ALPHA = no */
- }
+ rc = write_alpha_gamma(dest, alpha, gamma);
+ CHECK(rc);
- bitvec_write_field(dest, &wp, gamma, 5); /* GAMMA power contrl */
- bitvec_write_field(dest, &wp, (fn / (26 * 51)) % 32, 5);/* T1' */
- bitvec_write_field(dest, &wp, fn % 51, 6); /* T3 */
- bitvec_write_field(dest, &wp, fn % 26, 5); /* T2 */
- bitvec_write_field(dest, &wp, 0, 2); /* Radio block allocation */
+ rc = write_tbf_start_time(dest, fn);
+ CHECK(rc);
- bitvec_write_field(dest, &wp, 0, 1);
+ SET_0(dest); /* NUMBER OF RADIO BLOCKS ALLOCATED: */
+ SET_0(dest); /* 1 radio block reserved for uplink transmission */
+ SET_0(dest); /* No P0 */
return rc;
}
@@ -483,7 +478,8 @@ int Encoding::write_immediate_assignment(
if (as_ul_tbf(tbf) != NULL) {
rc = write_ia_rest_egprs_uplink_sba(as_ul_tbf(tbf), dest, usf, alpha, gamma, wp);
} else {
- rc = write_ia_rest_egprs_uplink_mba(dest, fn, alpha, gamma, wp);
+ dest->cur_bit = wp;
+ rc = write_ia_rest_egprs_uplink_mba(dest, fn, alpha, gamma);
}
} else {
OSMO_ASSERT(!tbf || !tbf->is_egprs_enabled());