diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2021-05-19 02:32:33 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2021-05-28 17:22:59 +0000 |
commit | 7336e63a96d4511042c47983d09d0ab2da4cefff (patch) | |
tree | 7fdf93a875b18288766d979e4a7e70a1ebb7048e /src | |
parent | 1b277ec2a22d039f1e32c7ceff7809b2a968e476 (diff) |
add chan_mode_to_chan_type()
Move the conversion from chan_mode to lchan type out of the
lchan_select_by_chan_mode() function, so that the conversion can be used
by other code paths, coming up in VAMOS patches.
Related: SYS#5315 OS#4940
Change-Id: I296651ebadba81f8b3db0d9bb5b5377877a43677
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bsc/lchan_select.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/osmo-bsc/lchan_select.c b/src/osmo-bsc/lchan_select.c index 626520c42..b494f023e 100644 --- a/src/osmo-bsc/lchan_select.c +++ b/src/osmo-bsc/lchan_select.c @@ -142,37 +142,46 @@ _lc_find_bts(struct gsm_bts *bts, enum gsm_phys_chan_config pchan, bool log) return _lc_dyn_find_bts(bts, pchan, pchan, log); } -struct gsm_lchan *lchan_select_by_chan_mode(struct gsm_bts *bts, - enum gsm48_chan_mode chan_mode, enum channel_rate chan_rate) +enum gsm_chan_t chan_mode_to_chan_type(enum gsm48_chan_mode chan_mode, enum channel_rate chan_rate) { - enum gsm_chan_t type; - switch (chan_mode) { case GSM48_CMODE_SIGN: switch (chan_rate) { - case CH_RATE_SDCCH: type = GSM_LCHAN_SDCCH; break; - case CH_RATE_HALF: type = GSM_LCHAN_TCH_H; break; - case CH_RATE_FULL: type = GSM_LCHAN_TCH_F; break; - default: return NULL; + case CH_RATE_SDCCH: + return GSM_LCHAN_SDCCH; + case CH_RATE_HALF: + return GSM_LCHAN_TCH_H; + case CH_RATE_FULL: + return GSM_LCHAN_TCH_F; + default: + return GSM_LCHAN_NONE; } - break; case GSM48_CMODE_SPEECH_EFR: /* EFR works over FR channels only */ if (chan_rate != CH_RATE_FULL) - return NULL; + return GSM_LCHAN_NONE; /* fall through */ case GSM48_CMODE_SPEECH_V1: case GSM48_CMODE_SPEECH_AMR: switch (chan_rate) { - case CH_RATE_HALF: type = GSM_LCHAN_TCH_H; break; - case CH_RATE_FULL: type = GSM_LCHAN_TCH_F; break; - default: return NULL; + case CH_RATE_HALF: + return GSM_LCHAN_TCH_H; + case CH_RATE_FULL: + return GSM_LCHAN_TCH_F; + default: + return GSM_LCHAN_NONE; } - break; default: - return NULL; + return GSM_LCHAN_NONE; } +} +struct gsm_lchan *lchan_select_by_chan_mode(struct gsm_bts *bts, + enum gsm48_chan_mode chan_mode, enum channel_rate chan_rate) +{ + enum gsm_chan_t type = chan_mode_to_chan_type(chan_mode, chan_rate); + if (type == GSM_LCHAN_NONE) + return NULL; return lchan_select_by_type(bts, type); } |