add new rsl_dec_chan_nr() function
diff --git a/src/rsl.c b/src/rsl.c
index 58afc9d..ca2f7de 100644
--- a/src/rsl.c
+++ b/src/rsl.c
@@ -21,6 +21,9 @@
  *
  */
 
+#include <stdint.h>
+#include <errno.h>
+
 #include <osmocore/tlv.h>
 #include <osmocore/rsl.h>
 
@@ -142,6 +145,37 @@
 	return ret;
 }
 
+int rsl_dec_chan_nr(uint8_t chan_nr, uint8_t *type, uint8_t *subch, uint8_t *timeslot)
+{
+	*timeslot = chan_nr & 0x7;
+
+	if ((chan_nr & 0xf8) == RSL_CHAN_Bm_ACCHs) {
+		*type = RSL_CHAN_Bm_ACCHs;
+		*subch = 0;
+	} else if ((chan_nr & 0xf0) == RSL_CHAN_Lm_ACCHs) {
+		*type = RSL_CHAN_Lm_ACCHs;
+		*subch = (chan_nr >> 3) & 0x1;
+	} else if ((chan_nr & 0xe0) == RSL_CHAN_SDCCH4_ACCH) {
+		*type = RSL_CHAN_SDCCH4_ACCH;
+		*subch = (chan_nr >> 3) & 0x3;
+	} else if ((chan_nr & 0xc0) == RSL_CHAN_SDCCH8_ACCH) {
+		*type = RSL_CHAN_SDCCH8_ACCH;
+		*subch = (chan_nr >> 3) & 0x7;
+	} else if (chan_nr == 0x10) {
+		*type = RSL_CHAN_BCCH;
+		*subch = 0;
+	} else if (chan_nr == 0x11) {
+		*type = RSL_CHAN_RACH;
+		*subch = 0;
+	} else if (chan_nr == 0x12) {
+		*type = RSL_CHAN_PCH_AGCH;
+		*subch = 0;
+	} else
+		return -EINVAL;
+
+	return 0;
+}
+
 /* FIXME: convert to value_string */
 static const char *rsl_err_vals[0xff] = {
 	[RSL_ERR_RADIO_IF_FAIL] =	"Radio Interface Failure",