BTS_Tests: decouple payload generation from f_rtpem_activate()

This function is going to be used by the upcoming testcases for CSD
specific channel modes.  Generating the Rx/Tx payload(s) now becomes
the duty of the calling function.  So far the only user of this API
is f_TC_speech_rtp(), so move the speech payload generation there.

Change-Id: I9e823c33b1dbbadd57bc63df25b8ddf368d76232
Related: OS#1572
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index cd13688..888abf5 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2607,9 +2607,8 @@
 }
 
 /* Initialize and start the RTP emulation component for a ConnHdlr */
-friend function f_rtpem_activate(inout octetstring payload,
-				 RtpemConfig cfg := c_RtpemDefaultCfg,
-				 RtpemMode mode := RTPEM_MODE_BIDIR,
+friend function f_rtpem_activate(RtpemConfig cfg := c_RtpemDefaultCfg,
+				 RtpemMode mode := RTPEM_MODE_LOOPBACK,
 				 uint7_t rtp_pt := 0)
 runs on ConnHdlr {
 	/* Step 0: initialize, connect and start the emulation component */
@@ -2621,38 +2620,6 @@
 	vc_RTPEM.start(RTP_Emulation.f_main());
 
 	/* Step 1: configure the RTP parameters */
-	var integer payload_len := 0;
-	var octetstring hdr := ''O;
-	var OCT1 pad := '00'O;
-
-	select (g_pars.chan_mode) {
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
-		{ payload_len := 33; hdr := 'D0'O; pad := 'FF'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
-		{ payload_len := 15; hdr := '00'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
-		{ payload_len := 31; hdr := 'C0'O; }
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
-		{
-			var integer amr_ft := get_start_amr_ft();
-			payload_len := f_amrft_payload_len(amr_ft) + 2;
-			hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
-		}
-	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
-		{
-			var integer amr_ft := get_start_amr_ft();
-			payload_len := f_amrft_payload_len(amr_ft) + 2;
-			hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
-		}
-	case else {
-		setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
-		}
-	}
-
-	/* Pad the payload to conform the expected length */
-	payload := f_pad_oct(hdr & payload, payload_len, pad);
-	cfg.tx_payloads[0].fixed_payload := payload;
 	f_rtpem_configure(RTPEM_CTRL, cfg);
 
 	/* Step 2: bind the RTP emulation to the configured address */
@@ -8351,9 +8318,9 @@
 
 /* Verify handling of Downlink and Uplink speech frames */
 private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
+	var octetstring payload;
 	var L1ctlMessage l1_dl;
 	var PDU_RTP rtp_pdu;
-	var octetstring pl;
 	timer Td, Tu;
 
 	log("Testing channel mode ", g_pars.chan_mode);
@@ -8361,9 +8328,37 @@
 	f_l1_tune(L1CTL);
 	f_est_dchan();
 
+	select (g_pars.chan_mode) {
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
+		{ payload := f_pad_oct('D0'O & f_rnd_octstring(6), 33, 'FF'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
+		{ payload := f_pad_oct('00'O & f_rnd_octstring(6), 15, '00'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
+		{ payload := f_pad_oct('C0'O & f_rnd_octstring(6), 31, '00'O); }
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
+		{
+			var integer amr_ft := get_start_amr_ft();
+			var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+			payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+			payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+		}
+	case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
+		{
+			var integer amr_ft := get_start_amr_ft();
+			var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+			payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+			payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+		}
+	case else {
+		setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+		}
+	}
+
 	/* Activate the RTP emulation */
-	pl := f_rnd_octstring(6);
-	f_rtpem_activate(pl);
+	var RtpemConfig cfg := c_RtpemDefaultCfg;
+	cfg.tx_payloads[0].fixed_payload := payload;
+	f_rtpem_activate(cfg, RTPEM_MODE_BIDIR);
 
 	/* Give the scheduler some time to fill up the buffers */
 	f_sleep(2.0);
@@ -8373,7 +8368,7 @@
 	/* Make sure that Downlink frames are received at the UE */
 	Td.start(2.0);
 	alt {
-	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := pl)) -> value l1_dl {
+	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := payload)) -> value l1_dl {
 		var octetstring data := l1_dl.payload.traffic_ind.data;
 		log("TCH received (len=", lengthof(data), "): ", data);
 		L1CTL.send(ts_L1CTL_TRAFFIC_REQ(g_chan_nr, l1_dl.dl_info.link_id,
@@ -8383,7 +8378,7 @@
 	[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := ?)) -> value l1_dl {
 		setverdict(fail, "Rx unexpected Downlink speech frame ",
 			   "(", l1_dl.payload.traffic_ind.data, ") ",
-			   "expected (", pl, ")");
+			   "expected (", payload, ")");
 		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
 		}
 	[] as_l1_sacch();
@@ -8401,7 +8396,7 @@
 	[] as_l1_tch_loop();
 	[] as_l1_sacch();
 	[] RTPEM_DATA.receive(PDU_RTP:?) -> value rtp_pdu {
-		if (rtp_pdu.data != pl)
+		if (rtp_pdu.data != payload)
 			{ repeat; }
 		}
 	[] RTPEM_DATA.receive { repeat; }