diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2016-02-02 17:22:55 +0100 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2016-02-02 17:22:55 +0100 |
commit | 5a32babc12dc1e5f05a55449602292492c071783 (patch) | |
tree | 6745a3652a948864016335bcd26ebc5cbf48f4c9 | |
parent | c6009f58ce5b54a45b2385533920575811a4b85a (diff) |
FIXUP MCS-789 encoding (differential BSN2)
Ticket: OW#????
Sponsored-by: On-Waves ehf
-rw-r--r-- | src/encoding.cpp | 8 |
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; |