diff options
-rw-r--r-- | src/bts.cpp | 6 | ||||
-rw-r--r-- | src/gprs_coding_scheme.cpp | 20 | ||||
-rw-r--r-- | src/gprs_coding_scheme.h | 2 | ||||
-rw-r--r-- | src/tbf.h | 2 | ||||
-rw-r--r-- | src/tbf_dl.cpp | 2 | ||||
-rw-r--r-- | src/tbf_ul.cpp | 2 | ||||
-rw-r--r-- | tests/edge/EdgeTest.cpp | 8 |
7 files changed, 30 insertions, 12 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 1ef735b4..18bee665 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -1138,7 +1138,7 @@ int gprs_rlcmac_pdch::rcv_block(uint8_t *data, uint8_t len, uint32_t fn, } LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, " - "length: %d (%d))\n", cs.name(), len, cs.maxBytesUL()); + "length: %d (%d))\n", cs.name(), len, cs.usedSizeUL()); if (cs.isGprs()) return rcv_block_gprs(data, fn, meas, cs); @@ -1158,7 +1158,7 @@ int gprs_rlcmac_pdch::rcv_data_block(uint8_t *data, uint32_t fn, int rc; struct gprs_rlc_data_info rlc_dec; struct gprs_rlcmac_ul_tbf *tbf; - unsigned len = cs.maxBytesUL(); + unsigned len = cs.sizeUL(); /* These are always data blocks, since EGPRS still uses CS-1 for * control blocks (see 44.060, section 10.3, 1st par.) @@ -1208,7 +1208,7 @@ int gprs_rlcmac_pdch::rcv_data_block(uint8_t *data, uint32_t fn, return 0; } - return tbf->rcv_data_block_acknowledged(&rlc_dec, data, len, meas); + return tbf->rcv_data_block_acknowledged(&rlc_dec, data, meas); } int gprs_rlcmac_pdch::rcv_block_gprs(uint8_t *data, uint32_t fn, diff --git a/src/gprs_coding_scheme.cpp b/src/gprs_coding_scheme.cpp index 4ba55c30..629ba4a0 100644 --- a/src/gprs_coding_scheme.cpp +++ b/src/gprs_coding_scheme.cpp @@ -73,7 +73,15 @@ GprsCodingScheme GprsCodingScheme::getBySizeUL(unsigned size) unsigned int GprsCodingScheme::sizeUL() const { - return maxBytesUL() + (spareBitsUL() ? 1 : 0); + return mcs_info[m_scheme].uplink.bytes + (spareBitsUL() ? 1 : 0); +} + +unsigned int GprsCodingScheme::usedSizeUL() const +{ + if (mcs_info[m_scheme].data_hdr == HEADER_GPRS_DATA) + return mcs_info[m_scheme].uplink.bytes; + else + return sizeUL(); } unsigned int GprsCodingScheme::maxBytesUL() const @@ -88,7 +96,15 @@ unsigned int GprsCodingScheme::spareBitsUL() const unsigned int GprsCodingScheme::sizeDL() const { - return maxBytesDL() + (spareBitsDL() ? 1 : 0); + return mcs_info[m_scheme].downlink.bytes + (spareBitsDL() ? 1 : 0); +} + +unsigned int GprsCodingScheme::usedSizeDL() const +{ + if (mcs_info[m_scheme].data_hdr == HEADER_GPRS_DATA) + return mcs_info[m_scheme].downlink.bytes; + else + return sizeDL(); } unsigned int GprsCodingScheme::maxBytesDL() const diff --git a/src/gprs_coding_scheme.h b/src/gprs_coding_scheme.h index c26d12a7..854deb67 100644 --- a/src/gprs_coding_scheme.h +++ b/src/gprs_coding_scheme.h @@ -72,6 +72,8 @@ public: unsigned int sizeUL() const; unsigned int sizeDL() const; + unsigned int usedSizeUL() const; + unsigned int usedSizeDL() const; unsigned int maxBytesUL() const; unsigned int maxBytesDL() const; unsigned int spareBitsUL() const; @@ -414,7 +414,7 @@ struct gprs_rlcmac_ul_tbf : public gprs_rlcmac_tbf { /* blocks were acked */ int rcv_data_block_acknowledged( const struct gprs_rlc_data_info *rlc, - uint8_t *data, uint8_t len, struct pcu_l1_meas *meas); + uint8_t *data, struct pcu_l1_meas *meas); /* TODO: extract LLC class? */ diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 73d8a3bc..ac1c253f 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -441,7 +441,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, const uint8_t /* total length of block, including spare bits */ const uint8_t block_length = cs.sizeDL(); - /* length of usable data of block, w/o spare bits, inc. MAC */ + /* length of usable data of block, w/o spare bits (GPRS), inc. MAC */ const uint8_t block_data_len = cs.maxBytesDL(); /* now we still have untransmitted LLC data, so we fill mac block */ diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index e81cd4bd..1d0b1681 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -138,7 +138,7 @@ struct msgb *gprs_rlcmac_ul_tbf::create_ul_ack(uint32_t fn) int gprs_rlcmac_ul_tbf::rcv_data_block_acknowledged( const struct gprs_rlc_data_info *rlc, - uint8_t *data, uint8_t len, struct pcu_l1_meas *meas) + uint8_t *data, struct pcu_l1_meas *meas) { int8_t rssi = meas->have_rssi ? meas->rssi : 0; diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index dffd009d..b26262ca 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -49,15 +49,15 @@ static void check_coding_scheme(GprsCodingScheme& cs, GprsCodingScheme::Mode mod OSMO_ASSERT(cs.isCompatible(mode)); /* Check static getBySizeUL() */ - expected_size = cs.maxBytesUL(); - if (cs.spareBitsUL() > 0) + expected_size = cs.usedSizeUL(); + if (cs.spareBitsUL() > 0 && cs.isGprs()) expected_size += 1; OSMO_ASSERT(expected_size == cs.sizeUL()); OSMO_ASSERT(cs == GprsCodingScheme::getBySizeUL(expected_size)); /* Check static sizeUL() */ - expected_size = cs.maxBytesDL(); - if (cs.spareBitsDL() > 0) + expected_size = cs.usedSizeDL(); + if (cs.spareBitsDL() > 0 && cs.isGprs()) expected_size += 1; OSMO_ASSERT(expected_size == cs.sizeDL()); |