aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libcommon/gsm_data_shared.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-06-25 10:02:33 +0200
committerHarald Welte <laforge@gnumonks.org>2011-06-25 10:02:33 +0200
commitf6093a4d0e5fa43f7c544a8a40f9aeab37256881 (patch)
tree0a81183b19282bb17e8968a60a618e73155d8891 /openbsc/src/libcommon/gsm_data_shared.c
parent8b65ab9d9133efe53a058733d492ac0595040fb4 (diff)
move {ts,lchan}2chan_nr() functions to gsm_data_shared.c
... this way osmo-bts can use them
Diffstat (limited to 'openbsc/src/libcommon/gsm_data_shared.c')
-rw-r--r--openbsc/src/libcommon/gsm_data_shared.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/openbsc/src/libcommon/gsm_data_shared.c b/openbsc/src/libcommon/gsm_data_shared.c
index 98dabda81..baf8c3553 100644
--- a/openbsc/src/libcommon/gsm_data_shared.c
+++ b/openbsc/src/libcommon/gsm_data_shared.c
@@ -408,3 +408,42 @@ gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
}
return obj;
}
+
+/* See Table 10.5.25 of GSM04.08 */
+uint8_t gsm_ts2chan_nr(const struct gsm_bts_trx_ts *ts, uint8_t lchan_nr)
+{
+ uint8_t cbits, chan_nr;
+
+ switch (ts->pchan) {
+ case GSM_PCHAN_TCH_F:
+ case GSM_PCHAN_PDCH:
+ case GSM_PCHAN_TCH_F_PDCH:
+ cbits = 0x01;
+ break;
+ case GSM_PCHAN_TCH_H:
+ cbits = 0x02;
+ cbits += lchan_nr;
+ break;
+ case GSM_PCHAN_CCCH_SDCCH4:
+ cbits = 0x04;
+ cbits += lchan_nr;
+ break;
+ case GSM_PCHAN_SDCCH8_SACCH8C:
+ cbits = 0x08;
+ cbits += lchan_nr;
+ break;
+ default:
+ case GSM_PCHAN_CCCH:
+ cbits = 0x10;
+ break;
+ }
+
+ chan_nr = (cbits << 3) | (ts->nr & 0x7);
+
+ return chan_nr;
+}
+
+uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan)
+{
+ return gsm_ts2chan_nr(lchan->ts, lchan->nr);
+}