This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHarald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/13214 ) Change subject: MCS: add mcs_is_*() helpers ...................................................................... MCS: add mcs_is_*() helpers In preparation for Channel Coding Command encoder in follow-up patches let's add necessary helpers. Those are similar to previously used helpers from GprsCodingScheme class but without CamelCase and with less typo chances between Gprs and Egprs cases. Change-Id: I6699cbc8d7ae766fa4d2b3d37e5f9ff1cf158b7e --- M src/coding_scheme.c M src/coding_scheme.h M src/decoding.cpp M src/encoding.cpp M src/gprs_coding_scheme.cpp M src/gprs_coding_scheme.h M src/gprs_ms.cpp M src/pdch.cpp M src/tbf.cpp M src/tbf_dl.cpp M src/tbf_ul.cpp M tests/edge/EdgeTest.cpp 12 files changed, 65 insertions(+), 45 deletions(-) Approvals: Jenkins Builder: Verified Pau Espin Pedrol: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved diff --git a/src/coding_scheme.c b/src/coding_scheme.c index 135ddd2..4a5d0d4 100644 --- a/src/coding_scheme.c +++ b/src/coding_scheme.c @@ -46,6 +46,24 @@ return get_value_string(mcs_names, val); } +bool mcs_is_gprs(enum CodingScheme cs) +{ + return CS1 <= cs && cs <= CS4; +} + +bool mcs_is_edge(enum CodingScheme cs) +{ + return MCS1 <= cs && cs <= MCS9; +} + +bool mcs_is_edge_gmsk(enum CodingScheme cs) +{ + if (mcs_is_edge(cs)) + return cs <= MCS4; + + return false; +} + static struct { struct { uint8_t data_header_bits; diff --git a/src/coding_scheme.h b/src/coding_scheme.h index f69a76e..3a9ef25 100644 --- a/src/coding_scheme.h +++ b/src/coding_scheme.h @@ -33,6 +33,10 @@ extern const struct value_string mcs_names[]; const char *mcs_name(enum CodingScheme val); +bool mcs_is_gprs(enum CodingScheme cs); +bool mcs_is_edge(enum CodingScheme cs); +bool mcs_is_edge_gmsk(enum CodingScheme cs); + enum HeaderType { HEADER_INVALID, HEADER_GPRS_CONTROL, diff --git a/src/decoding.cpp b/src/decoding.cpp index 1473ff7..d439e30 100644 --- a/src/decoding.cpp +++ b/src/decoding.cpp @@ -215,7 +215,7 @@ "but no more chunks possible\n"); return -ENOSPC; } - } else if (cs.isEgprs()) { + } else if (mcs_is_edge(cs)) { /* if E is not set (LI follows), EGPRS */ num_chunks = parse_extensions_egprs(data, data_len, &offs, is_last_block, @@ -240,7 +240,7 @@ } memcpy(&tlli_enc, data + offs, sizeof(tlli_enc)); - if (cs.isGprs()) + if (mcs_is_gprs(cs)) /* The TLLI is encoded in big endian for GPRS (see * TS 44.060, figure 10.2.2.1, note) */ *tlli = be32toh(tlli_enc); diff --git a/src/encoding.cpp b/src/encoding.cpp index e21a7fc..9920b46 100644 --- a/src/encoding.cpp +++ b/src/encoding.cpp @@ -1605,12 +1605,12 @@ gprs_llc *llc, int *offset, int *num_chunks, uint8_t *data_block, bool is_final, int *count_payload) { - if (cs.isGprs()) + if (mcs_is_gprs(cs)) return rlc_data_to_dl_append_gprs(rdbi, llc, offset, num_chunks, data_block, is_final, count_payload); - if (cs.isEgprs()) + if (mcs_is_edge(cs)) return rlc_data_to_dl_append_egprs(rdbi, llc, offset, num_chunks, data_block, is_final, count_payload); diff --git a/src/gprs_coding_scheme.cpp b/src/gprs_coding_scheme.cpp index 1a89b77..8e6593b 100644 --- a/src/gprs_coding_scheme.cpp +++ b/src/gprs_coding_scheme.cpp @@ -228,10 +228,10 @@ void GprsCodingScheme::inc() { - if (isGprs() && m_scheme == CS4) + if (mcs_is_gprs(m_scheme) && m_scheme == CS4) return; - if (isEgprs() && m_scheme == MCS9) + if (mcs_is_edge(m_scheme) && m_scheme == MCS9) return; if (!isValid()) @@ -242,10 +242,10 @@ void GprsCodingScheme::dec() { - if (isGprs() && m_scheme == CS1) + if (mcs_is_gprs(m_scheme) && m_scheme == CS1) return; - if (isEgprs() && m_scheme == MCS1) + if (mcs_is_edge(m_scheme) && m_scheme == MCS1) return; if (!isValid()) diff --git a/src/gprs_coding_scheme.h b/src/gprs_coding_scheme.h index 6f965d6..728ffd6 100644 --- a/src/gprs_coding_scheme.h +++ b/src/gprs_coding_scheme.h @@ -45,9 +45,7 @@ GprsCodingScheme& operator =(GprsCodingScheme o); bool isValid() const {return UNKNOWN <= m_scheme && m_scheme <= MCS9;} - bool isGprs() const {return CS1 <= m_scheme && m_scheme <= CS4;} - bool isEgprs() const {return m_scheme >= MCS1;} - bool isEgprsGmsk() const {return isEgprs() && m_scheme <= MCS4;} + bool isCompatible(enum mcs_kind mode) const; bool isCompatible(GprsCodingScheme o) const; bool isFamilyCompatible(GprsCodingScheme o) const; @@ -86,10 +84,10 @@ inline uint8_t GprsCodingScheme::to_num() const { - if (isGprs()) + if (mcs_is_gprs(m_scheme)) return (m_scheme - CS1) + 1; - if (isEgprs()) + if (mcs_is_edge(m_scheme)) return (m_scheme - MCS1) + 1; return 0; @@ -98,9 +96,9 @@ inline bool GprsCodingScheme::isCompatible(enum mcs_kind mode) const { switch (mode) { - case GPRS: return isGprs(); - case EGPRS_GMSK: return isEgprsGmsk(); - case EGPRS: return isEgprs(); + case GPRS: return mcs_is_gprs(m_scheme); + case EGPRS_GMSK: return mcs_is_edge_gmsk(m_scheme); + case EGPRS: return mcs_is_edge(m_scheme); } return false; @@ -108,7 +106,7 @@ inline bool GprsCodingScheme::isCompatible(GprsCodingScheme o) const { - return (isGprs() && o.isGprs()) || (isEgprs() && o.isEgprs()); + return (mcs_is_gprs(m_scheme) && mcs_is_gprs(o)) || (mcs_is_edge(m_scheme) && mcs_is_edge(o)); } inline GprsCodingScheme::GprsCodingScheme(CodingScheme s) diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index e64bee4..f8f6227 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -222,13 +222,13 @@ switch (m_mode) { case GPRS: - if (!m_current_cs_ul.isGprs()) { + if (!mcs_is_gprs(m_current_cs_ul)) { m_current_cs_ul = GprsCodingScheme::getGprsByNum( m_bts->bts_data()->initial_cs_ul); if (!m_current_cs_ul.isValid()) m_current_cs_ul = CS1; } - if (!m_current_cs_dl.isGprs()) { + if (!mcs_is_gprs(m_current_cs_dl)) { m_current_cs_dl = GprsCodingScheme::getGprsByNum( m_bts->bts_data()->initial_cs_dl); if (!m_current_cs_dl.isValid()) @@ -238,13 +238,13 @@ case EGPRS_GMSK: case EGPRS: - if (!m_current_cs_ul.isEgprs()) { + if (!mcs_is_edge(m_current_cs_ul)) { m_current_cs_ul = GprsCodingScheme::getEgprsByNum( m_bts->bts_data()->initial_mcs_ul); if (!m_current_cs_ul.isValid()) m_current_cs_ul = MCS1; } - if (!m_current_cs_dl.isEgprs()) { + if (!mcs_is_edge(m_current_cs_dl)) { m_current_cs_dl = GprsCodingScheme::getEgprsByNum( m_bts->bts_data()->initial_mcs_dl); if (!m_current_cs_dl.isValid()) @@ -564,14 +564,14 @@ OSMO_ASSERT(m_bts != NULL); bts_data = m_bts->bts_data(); - if (m_current_cs_ul.isGprs()) { + if (mcs_is_gprs(m_current_cs_ul)) { if (!bts_data->max_cs_ul) return GprsCodingScheme(CS4); return GprsCodingScheme::getGprsByNum(bts_data->max_cs_ul); } - if (!m_current_cs_ul.isEgprs()) + if (!mcs_is_edge(m_current_cs_ul)) return GprsCodingScheme(); /* UNKNOWN */ if (bts_data->max_mcs_ul) @@ -594,14 +594,14 @@ OSMO_ASSERT(m_bts != NULL); bts_data = m_bts->bts_data(); - if (m_current_cs_dl.isGprs()) { + if (mcs_is_gprs(m_current_cs_dl)) { if (!bts_data->max_cs_dl) return GprsCodingScheme(CS4); return GprsCodingScheme::getGprsByNum(bts_data->max_cs_dl); } - if (!m_current_cs_dl.isEgprs()) + if (!mcs_is_edge(m_current_cs_dl)) return GprsCodingScheme(); /* UNKNOWN */ if (bts_data->max_mcs_dl) @@ -650,12 +650,12 @@ old_link_qual = meas->link_qual; - if (m_current_cs_ul.isGprs()) { + if (mcs_is_gprs(m_current_cs_ul)) { if (current_cs_num > MAX_GPRS_CS) current_cs_num = MAX_GPRS_CS; low = bts_data->cs_lqual_ranges[current_cs_num-1].low; high = bts_data->cs_lqual_ranges[current_cs_num-1].high; - } else if (m_current_cs_ul.isEgprs()) { + } else if (mcs_is_edge(m_current_cs_ul)) { if (current_cs_num > MAX_EDGE_MCS) current_cs_num = MAX_EDGE_MCS; low = bts_data->mcs_lqual_ranges[current_cs_num-1].low; diff --git a/src/pdch.cpp b/src/pdch.cpp index c6c677c..8003105 100644 --- a/src/pdch.cpp +++ b/src/pdch.cpp @@ -741,10 +741,10 @@ LOGP(DRLCMACUL, LOGL_DEBUG, "Got RLC block, coding scheme: %s, " "length: %d (%d))\n", mcs_name(cs), len, cs.usedSizeUL()); - if (cs.isGprs()) + if (mcs_is_gprs(cs)) return rcv_block_gprs(data, len, fn, meas, cs); - if (cs.isEgprs()) + if (mcs_is_edge(cs)) return rcv_data_block(data, len, fn, meas, cs); bts()->decode_error(); @@ -765,7 +765,7 @@ /* These are always data blocks, since EGPRS still uses CS-1 for * control blocks (see 44.060, section 10.3, 1st par.) */ - if (cs.isEgprs()) { + if (mcs_is_edge(cs)) { if (!bts()->bts_data()->egprs_enabled) { LOGP(DRLCMACUL, LOGL_ERROR, "Got %s RLC block but EGPRS is not enabled\n", diff --git a/src/tbf.cpp b/src/tbf.cpp index 3d9b5c4..dc90dbb 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -952,8 +952,8 @@ static void setup_egprs_mode(gprs_rlcmac_bts *bts, GprsMs *ms) { - if (GprsCodingScheme::getEgprsByNum(bts->max_mcs_ul).isEgprsGmsk() && - GprsCodingScheme::getEgprsByNum(bts->max_mcs_dl).isEgprsGmsk() && + if (mcs_is_edge_gmsk(GprsCodingScheme::getEgprsByNum(bts->max_mcs_ul)) && + mcs_is_edge_gmsk(GprsCodingScheme::getEgprsByNum(bts->max_mcs_dl)) && ms->mode() != EGPRS) { ms->set_mode(EGPRS_GMSK); diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index c276b3a..13ef143 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -363,7 +363,7 @@ if (previous_bsn >= 0) { force_cs = m_rlc.block(previous_bsn)->cs_current_trans; - if (!force_cs.isEgprs()) + if (!mcs_is_edge(force_cs)) return -1; force_data_len = m_rlc.block(previous_bsn)->len; } @@ -765,7 +765,7 @@ m_rlc.block(bsn)->next_ps, m_rlc.block(bsn)->cs_last, cs, spb); - if (cs.isEgprs()) { + if (mcs_is_edge(cs)) { OSMO_ASSERT(m_rlc.block(bsn)->next_ps >= EGPRS_PS_1); OSMO_ASSERT(m_rlc.block(bsn)->next_ps <= EGPRS_PS_3); } @@ -812,7 +812,7 @@ } /* Calculate CPS only for EGPRS case */ - if (cs.isEgprs()) + if (mcs_is_edge(cs)) rlc.cps = gprs_rlc_mcs_cps(cs, punct[0], punct[1], need_padding); /* If the TBF has just started, relate frames_since_last_poll to the @@ -1369,7 +1369,7 @@ uint8_t coding_scheme = 0; coding_scheme = CodingScheme(cs); - if (cs.isGprs()) { + if (mcs_is_gprs(cs)) { switch (coding_scheme) { case CS1 : bts->gprs_dl_cs1(); diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index 0bf5765..f40ec3d 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -530,7 +530,7 @@ uint8_t coding_scheme = 0; coding_scheme = CodingScheme(cs); - if (cs.isGprs()) { + if (mcs_is_gprs(cs)) { switch (coding_scheme) { case CS1 : bts->gprs_ul_cs1(); diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index b902806..f124b76 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -59,14 +59,14 @@ /* Check static getBySizeUL() */ expected_size = cs.usedSizeUL(); - if (cs.spareBitsUL() > 0 && cs.isGprs()) + if (cs.spareBitsUL() > 0 && mcs_is_gprs(cs)) expected_size += 1; OSMO_ASSERT(expected_size == cs.sizeUL()); OSMO_ASSERT(cs == GprsCodingScheme::getBySizeUL(expected_size)); /* Check static sizeUL() */ expected_size = cs.usedSizeDL(); - if (cs.spareBitsDL() > 0 && cs.isGprs()) + if (cs.spareBitsDL() > 0 && mcs_is_gprs(cs)) expected_size += 1; OSMO_ASSERT(expected_size == cs.sizeDL()); @@ -157,9 +157,9 @@ for (i = 0; i < ARRAY_SIZE(gprs_schemes); i++) { GprsCodingScheme current_cs(gprs_schemes[i]); - OSMO_ASSERT(current_cs.isGprs()); - OSMO_ASSERT(!current_cs.isEgprs()); - OSMO_ASSERT(!current_cs.isEgprsGmsk()); + OSMO_ASSERT(mcs_is_gprs(current_cs)); + OSMO_ASSERT(!mcs_is_edge(current_cs)); + OSMO_ASSERT(!mcs_is_edge_gmsk(current_cs)); OSMO_ASSERT(CodingScheme(current_cs) == gprs_schemes[i]); OSMO_ASSERT(current_cs == GprsCodingScheme(gprs_schemes[i])); @@ -179,9 +179,9 @@ for (i = 0; i < ARRAY_SIZE(egprs_schemes); i++) { GprsCodingScheme current_cs(egprs_schemes[i].s); - OSMO_ASSERT(!current_cs.isGprs()); - OSMO_ASSERT(current_cs.isEgprs()); - OSMO_ASSERT(!!current_cs.isEgprsGmsk() == !!egprs_schemes[i].is_gmsk); + OSMO_ASSERT(!mcs_is_gprs(current_cs)); + OSMO_ASSERT(mcs_is_edge(current_cs)); + OSMO_ASSERT(mcs_is_edge_gmsk(current_cs) == !!egprs_schemes[i].is_gmsk); OSMO_ASSERT(CodingScheme(current_cs) == egprs_schemes[i].s); OSMO_ASSERT(current_cs == GprsCodingScheme(egprs_schemes[i].s)); -- To view, visit https://gerrit.osmocom.org/13214 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-MessageType: merged Gerrit-Change-Id: I6699cbc8d7ae766fa4d2b3d37e5f9ff1cf158b7e Gerrit-Change-Number: 13214 Gerrit-PatchSet: 6 Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder (1000002) Gerrit-Reviewer: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de> Gerrit-Reviewer: osmith <osmith at sysmocom.de> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190327/fe004ac3/attachment.htm>