aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-02 17:22:55 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-02 17:22:55 +0100
commit5a32babc12dc1e5f05a55449602292492c071783 (patch)
tree6745a3652a948864016335bcd26ebc5cbf48f4c9
parentc6009f58ce5b54a45b2385533920575811a4b85a (diff)
FIXUP MCS-789 encoding (differential BSN2)
Ticket: OW#???? Sponsored-by: On-Waves ehf
-rw-r--r--src/encoding.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/encoding.cpp b/src/encoding.cpp
index 7a6abb75..a7d7b169 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -718,6 +718,7 @@ int Encoding::rlc_write_dl_data_header(const struct gprs_rlc_data_info *rlc,
unsigned int e_fbi_header;
GprsCodingScheme cs = rlc->cs;
unsigned int offs;
+ unsigned int bsn_delta;
switch(cs.headerTypeData()) {
case GprsCodingScheme::HEADER_GPRS_DATA:
@@ -752,8 +753,11 @@ int Encoding::rlc_write_dl_data_header(const struct gprs_rlc_data_info *rlc,
egprs1->bsn1_b = rlc->block_info[0].bsn >> 2; /* 8 bits */
egprs1->bsn1_c = rlc->block_info[0].bsn >> 10; /* 1 bit */
- egprs1->bsn2_a = rlc->block_info[1].bsn >> 0; /* 7 bits LSB */
- egprs1->bsn2_b = rlc->block_info[1].bsn >> 7; /* 3 bits */
+ bsn_delta = (rlc->block_info[1].bsn - rlc->block_info[0].bsn) &
+ (RLC_EGPRS_SNS - 1);
+
+ egprs1->bsn2_a = bsn_delta >> 0; /* 7 bits LSB */
+ egprs1->bsn2_b = bsn_delta >> 7; /* 3 bits */
/* first FBI/E header */
e_fbi_header = rlc->block_info[0].e ? 0x01 : 0;