bts: Test AMR in TC_speech_rtp_tch{h,f}()

Related: SYS#5987
Requires: osmocom-bb.git Ib80be434c06d07b3611bd18ae25dff8b14a7aad9 (trxcon)
Change-Id: I8cf7792a00b0a858f6a02bf5cb0d283484b820eb
This commit is contained in:
Pau Espin 2022-09-02 18:11:12 +02:00
parent 1a8f8f8ab6
commit 091c530555
2 changed files with 48 additions and 3 deletions

View File

@ -47,6 +47,8 @@ import from IPA_Testing all;
import from RSL_Emulation all;
import from RTP_Emulation all;
import from AMR_Types all;
import from IPL4asp_Types all;
import from TRXC_Types all;
import from TRXC_CodecPort all;
@ -2542,6 +2544,28 @@ private function f_est_dchan(boolean encr_enable := false, RSL_IE_List more_ies
g_first_meas_res := true;
}
private function get_start_amr_ft() runs on ConnHdlr return integer {
var integer start_nth;
if (g_pars.mr_conf.icmi) {
start_nth := 0; /* FIXME: implement 3GPP TS 45.009 3.4.3 */
} else {
start_nth := g_pars.mr_conf.start_mode;
}
var integer n := 0;
for (var integer i:= 7; i >= 0; i := i - 1) {
if (g_pars.mr_conf.amr_codec_modes[i] == '1'B) {
if (n == start_nth) {
return 7 - i;
}
n := n + 1;
}
}
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
log2str("mr_conf is wrong! ", g_pars.mr_conf));
return 0;
}
/* Initialize and start the RTP emulation component for a ConnHdlr */
friend function f_rtpem_activate(inout octetstring payload,
RtpemConfig cfg := c_RtpemDefaultCfg,
@ -2566,7 +2590,19 @@ runs on ConnHdlr {
{ 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 else { /* FIXME: also handle TCH/AFS and TCH/AHS */
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__);
}
@ -8147,7 +8183,11 @@ testcase TC_speech_rtp_tchf() runs on test_CT {
vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
vc_conn.done;
/* TODO: also test V3 (AMR codec) */
/* TS1, TCH/F, V3 (AMR codec) */
pars := valueof(t_Pars(ts_RslChanNr_Bm(1), ts_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)));
pars.mr_conf := valueof(ts_RSL_MultirateCfg(false, 0, '00000100'B /* 5,90k */));
vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
vc_conn.done;
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
@ -8162,7 +8202,11 @@ testcase TC_speech_rtp_tchh() runs on test_CT {
vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
vc_conn.done;
/* TODO: also test V3 (AMR codec) */
/* TS1, TCH/H0, V3 (AMR codec) */
pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0), ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)));
pars.mr_conf := valueof(ts_RSL_MultirateCfg(false, 0, '00000100'B /* 5,90k */));
vc_conn := f_start_handler(refers(f_TC_speech_rtp), pars);
vc_conn.done;
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}

View File

@ -44,6 +44,7 @@ FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter
FILES+="L3_Templates.ttcn L3_Common.ttcn "
FILES+="Native_Functions.ttcn Native_FunctionDefs.cc "
FILES+="TRXC_Types.ttcn TRXC_CodecPort.ttcn TRXC_CodecPort_CtrlFunct.ttcn TRXC_CodecPort_CtrlFunctDef.cc "
FILES+="AMR_Types.ttcn "
FILES+="RTP_CodecPort.ttcn RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_Emulation.ttcn IuUP_EncDec.cc "
FILES+="RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc "
FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn "