BTS_Tests: generate g_AllChannels from module parameters

Change-Id: I600aa49768328b89707b4da13d61f6a8089ac351
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 8895c6b..68503dd 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -469,25 +469,14 @@
 }
 
 /* global init function */
-friend function f_init() runs on test_CT {
+friend function f_init(uint8_t trx_nr := 0)
+runs on test_CT
+{
+	var TrxParsItem trx_pars := mp_trx_pars[trx_nr];
 	var charstring id := testcasename();
-	g_AllChannels := {
-		/* TS 1..4: TCH/F */
-		valueof(ts_RslChanNr_Bm(1)), valueof(ts_RslChanNr_Bm(2)),
-		valueof(ts_RslChanNr_Bm(3)), valueof(ts_RslChanNr_Bm(4)),
-		/* TS 5: TCH/H */
-		valueof(ts_RslChanNr_Lm(5,0)), valueof(ts_RslChanNr_Lm(5,1)),
-		/* TS 0: SDCCH/4 */
-		valueof(ts_RslChanNr_SDCCH4(0,0)), valueof(ts_RslChanNr_SDCCH4(0,1)),
-		valueof(ts_RslChanNr_SDCCH4(0,2)), valueof(ts_RslChanNr_SDCCH4(0,3)),
-		/* TS 6: SDCCH/8 */
-		valueof(ts_RslChanNr_SDCCH8(6,0)), valueof(ts_RslChanNr_SDCCH8(6,1)),
-		valueof(ts_RslChanNr_SDCCH8(6,2)), valueof(ts_RslChanNr_SDCCH8(6,3)),
-		valueof(ts_RslChanNr_SDCCH8(6,4)), valueof(ts_RslChanNr_SDCCH8(6,5)),
-		valueof(ts_RslChanNr_SDCCH8(6,6)), valueof(ts_RslChanNr_SDCCH8(6,7))
-	};
 
-	/* FIXME: FACCH/H is unreliable with calypso firmware, see OS#3653 */
+	/* FIXME: FACCH/H is unreliable with calypso firmware, see OS#3653.
+	 * TODO: also generate this list dynamically from module parameters. */
 	if (mp_bts_trxc_port != -1) {
 		g_AllChanTypes := {
 			/* TS 1..4: TCH/F */
@@ -509,6 +498,48 @@
 			valueof(ts_RslChanNr_SDCCH8(6,4))
 		};
 	}
+
+	g_AllChannels := { };
+
+	/* Generate list of all logical channels from module parameters */
+	for (var integer tn := 0; tn < lengthof(trx_pars.ts); tn := tn + 1) {
+		select (trx_pars.ts[tn].config) {
+		case (GSM_PCHAN_CCCH_SDCCH4) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_SDCCH4(tn, 0)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 1)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 2)),
+				  valueof(ts_RslChanNr_SDCCH4(tn, 3)) };
+			}
+		case (GSM_PCHAN_SDCCH8) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_SDCCH8(tn, 0)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 1)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 2)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 3)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 4)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 5)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 6)),
+				  valueof(ts_RslChanNr_SDCCH8(tn, 7)) };
+			}
+		case (GSM_PCHAN_TCHH_TCHF_PDCH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Lm(tn, 0)),
+				  valueof(ts_RslChanNr_Lm(tn, 1)),
+				  valueof(ts_RslChanNr_Bm(tn)) };
+			}
+		case (GSM_PCHAN_TCHH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Lm(tn, 0)),
+				  valueof(ts_RslChanNr_Lm(tn, 1)) };
+			}
+		case (GSM_PCHAN_TCHF, GSM_PCHAN_TCHF_PDCH) {
+			g_AllChannels := g_AllChannels &
+				{ valueof(ts_RslChanNr_Bm(tn)) };
+			}
+		}
+	}
+
 	f_init_rsl(id);
 	f_sleep(0.5);	/* workaround for OS#3000 */
 	f_init_vty(id);