diff options
-rw-r--r-- | src/gprs_ms.cpp | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index c10c735f..78f03f84 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -209,46 +209,45 @@ void GprsMs::stop_timer() unref(); } -inline static GprsCodingScheme assign_cs(GprsCodingScheme current, BTS *bts, bool uplink, GprsCodingScheme::Mode mode) -{ - GprsCodingScheme tmp = GprsCodingScheme::UNKNOWN; - struct gprs_rlcmac_bts * b = bts->bts_data(); - - if (GprsCodingScheme::GPRS == mode) { - if (!current.isGprs()) { - tmp = GprsCodingScheme::getGprsByNum(uplink ? b->initial_cs_ul : b->initial_cs_dl); - if (!tmp.isValid()) - return GprsCodingScheme::CS1; - } - } else { - if (!current.isEgprs()) { - tmp = GprsCodingScheme::getEgprsByNum(uplink ? b->initial_mcs_ul : b->initial_mcs_dl); - if (!tmp.isValid()) - return GprsCodingScheme::MCS1; - } - } - - return tmp; -} - void GprsMs::set_mode(GprsCodingScheme::Mode mode) { - GprsCodingScheme tmp; m_mode = mode; if (!m_bts) return; - tmp = assign_cs(m_current_cs_ul, m_bts, true, mode); - if (tmp) - m_current_cs_ul = tmp; - - tmp = assign_cs(m_current_cs_dl, m_bts, false, mode); - if (tmp) - m_current_cs_dl = tmp; - - LOGP(DRLCMAC, LOGL_DEBUG, "MS IMSI=%s mode set to %s: UL=%s, DL=%s\n", - imsi(), tmp.modeName(mode), m_current_cs_ul.name(), m_current_cs_dl.name()); + switch (m_mode) { + case GprsCodingScheme::GPRS: + if (!m_current_cs_ul.isGprs()) { + m_current_cs_ul = GprsCodingScheme::getGprsByNum( + m_bts->bts_data()->initial_cs_ul); + if (!m_current_cs_ul.isValid()) + m_current_cs_ul = GprsCodingScheme::CS1; + } + if (!m_current_cs_dl.isGprs()) { + m_current_cs_dl = GprsCodingScheme::getGprsByNum( + m_bts->bts_data()->initial_cs_dl); + if (!m_current_cs_dl.isValid()) + m_current_cs_dl = GprsCodingScheme::CS1; + } + break; + + case GprsCodingScheme::EGPRS_GMSK: + case GprsCodingScheme::EGPRS: + if (!m_current_cs_ul.isEgprs()) { + m_current_cs_ul = GprsCodingScheme::getEgprsByNum( + m_bts->bts_data()->initial_mcs_ul); + if (!m_current_cs_dl.isValid()) + m_current_cs_ul = GprsCodingScheme::MCS1; + } + if (!m_current_cs_dl.isEgprs()) { + m_current_cs_dl = GprsCodingScheme::getEgprsByNum( + m_bts->bts_data()->initial_mcs_dl); + if (!m_current_cs_dl.isValid()) + m_current_cs_dl = GprsCodingScheme::MCS1; + } + break; + } } void GprsMs::attach_tbf(struct gprs_rlcmac_tbf *tbf) |