From 15034cb55243e25aea5279db87264d8636f499d8 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Fri, 1 Sep 2023 05:39:48 +0700 Subject: library: RTP_Emulation: implement new RTPEM_MODE_LOOPBACK Change-Id: Iee8f736e1eebc357fc997353ee4b629d24dc09e7 Related: OS#1572 --- library/RTP_Emulation.ttcn | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn index 539ea45d..de2c8770 100644 --- a/library/RTP_Emulation.ttcn +++ b/library/RTP_Emulation.ttcn @@ -97,6 +97,7 @@ type component RTP_Emulation_CT { var PortNumber g_local_port; /* state variables, change over time */ + var boolean g_loopback := false; var boolean g_rx_enabled := false; var boolean g_tx_connected := false; /* Set to true after connect() */ var LIN2_BO_LAST g_tx_next_seq := 0; @@ -116,7 +117,8 @@ type enumerated RtpemMode { RTPEM_MODE_NONE, RTPEM_MODE_TXONLY, RTPEM_MODE_RXONLY, - RTPEM_MODE_BIDIR + RTPEM_MODE_BIDIR, + RTPEM_MODE_LOOPBACK }; type record RtpemStats { @@ -512,12 +514,14 @@ function f_main() runs on RTP_Emulation_CT [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_NONE}) { T_transmit.stop; g_rx_enabled := false; + g_loopback := false; CTRL.reply(RTPEM_mode:{RTPEM_MODE_NONE}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_TXONLY}) { /* start transmit timer */ T_transmit.start; g_rx_enabled := false; + g_loopback := false; CTRL.reply(RTPEM_mode:{RTPEM_MODE_TXONLY}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_RXONLY}) { @@ -529,6 +533,7 @@ function f_main() runs on RTP_Emulation_CT RTCP.clear; g_rx_enabled := true; } + g_loopback := false; CTRL.reply(RTPEM_mode:{RTPEM_MODE_RXONLY}); } [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_BIDIR}) { @@ -539,8 +544,20 @@ function f_main() runs on RTP_Emulation_CT RTCP.clear; g_rx_enabled := true; } + g_loopback := false; CTRL.reply(RTPEM_mode:{RTPEM_MODE_BIDIR}); } + [] CTRL.getcall(RTPEM_mode:{RTPEM_MODE_LOOPBACK}) { + T_transmit.stop; + if (g_rx_enabled == false) { + /* flush queues */ + RTP.clear; + RTCP.clear; + g_rx_enabled := true; + } + g_loopback := true; + CTRL.reply(RTPEM_mode:{RTPEM_MODE_LOOPBACK}); + } [] CTRL.getcall(RTPEM_configure:{?}) -> param (cfg) { g_cfg := cfg; g_iuup_ent.cfg := g_cfg.iuup_cfg; @@ -599,8 +616,16 @@ function f_main() runs on RTP_Emulation_CT } } - /* Match the received payload against any of the predefined fixed rx payloads */ - f_check_fixed_rx_payloads(rx_rtp.msg.rtp.payload_type, rx_rtp.msg.rtp.data); + if (g_loopback) { + f_tx_rtp(rx_rtp.msg.rtp.data, rx_rtp.msg.rtp.payload_type); + /* update counters */ + g_stats_rtp.num_pkts_tx := g_stats_rtp.num_pkts_tx + 1; + g_stats_rtp.bytes_payload_tx := g_stats_rtp.bytes_payload_tx + + lengthof(rx_rtp.msg.rtp.data); + } else { + /* Match the received payload against any of the predefined fixed rx payloads */ + f_check_fixed_rx_payloads(rx_rtp.msg.rtp.payload_type, rx_rtp.msg.rtp.data); + } if (DATA.checkstate("Connected")) { DATA.send(rx_rtp.msg.rtp); -- cgit v1.2.3