RTP_Emulation: Add RtpemConfig / RTPEM_configure() call
Change-Id: Ie60b750fc009a3d8aa044e4fd450873aa19086bb
This commit is contained in:
parent
46a38f1669
commit
3f6f48f4c1
|
@ -32,10 +32,7 @@ type component RTP_Emulation_CT {
|
|||
port RTPEM_CTRL_PT CTRL;
|
||||
|
||||
/* configurable by user, should be fixed */
|
||||
var INT7b g_tx_payload_type := 0;
|
||||
var integer g_tx_samplerate_hz := 8000;
|
||||
var integer g_tx_duration_ms := 20;
|
||||
var BIT32_BO_LAST g_tx_ssrc := hex2bit('DEADBEEF'H);
|
||||
var RtpemConfig g_cfg := c_default_cfg;
|
||||
|
||||
var HostName g_remote_host;
|
||||
var PortNumber g_remote_port;
|
||||
|
@ -59,12 +56,29 @@ type enumerated RtpemMode {
|
|||
RTPEM_MODE_BIDIR
|
||||
};
|
||||
|
||||
type record RtpemConfig {
|
||||
INT7b tx_payload_type,
|
||||
integer tx_samplerate_hz,
|
||||
integer tx_duration_ms,
|
||||
BIT32_BO_LAST tx_ssrc,
|
||||
octetstring tx_fixed_payload optional
|
||||
};
|
||||
|
||||
const RtpemConfig c_default_cfg := {
|
||||
tx_payload_type := 0,
|
||||
tx_samplerate_hz := 8000,
|
||||
tx_duration_ms := 20,
|
||||
tx_ssrc := '11011110101011011011111011101111'B,
|
||||
tx_fixed_payload := '01020304'O
|
||||
}
|
||||
|
||||
signature RTPEM_bind(in HostName local_host, inout PortNumber local_port);
|
||||
signature RTPEM_connect(in HostName remote_host, in PortNumber remote_port);
|
||||
signature RTPEM_mode(in RtpemMode mode);
|
||||
signature RTPEM_configure(in RtpemConfig cfg);
|
||||
|
||||
type port RTPEM_CTRL_PT procedure {
|
||||
inout RTPEM_bind, RTPEM_connect, RTPEM_mode;
|
||||
inout RTPEM_bind, RTPEM_connect, RTPEM_mode, RTPEM_configure;
|
||||
} with { extension "internal" };
|
||||
|
||||
template PDU_RTP ts_RTP(BIT32_BO_LAST ssrc, INT7b pt, LIN2_BO_LAST seq, uint32_t ts,
|
||||
|
@ -84,20 +98,21 @@ template PDU_RTP ts_RTP(BIT32_BO_LAST ssrc, INT7b pt, LIN2_BO_LAST seq, uint32_t
|
|||
}
|
||||
|
||||
private function f_tx_rtp(octetstring payload, BIT1 marker := '0'B) runs on RTP_Emulation_CT {
|
||||
var PDU_RTP rtp := valueof(ts_RTP(g_tx_ssrc, g_tx_payload_type, g_tx_next_seq,
|
||||
var PDU_RTP rtp := valueof(ts_RTP(g_cfg.tx_ssrc, g_cfg.tx_payload_type, g_tx_next_seq,
|
||||
g_tx_next_ts, payload, marker));
|
||||
RTP.send(t_RTP_Send(g_rtp_conn_id, RTP_messages_union:{rtp:=rtp}));
|
||||
/* increment sequence + timestamp for next transmit */
|
||||
g_tx_next_seq := g_tx_next_seq + 1;
|
||||
g_tx_next_ts := g_tx_next_ts + (g_tx_samplerate_hz / (1000 / g_tx_duration_ms));
|
||||
g_tx_next_ts := g_tx_next_ts + (g_cfg.tx_samplerate_hz / (1000 / g_cfg.tx_duration_ms));
|
||||
}
|
||||
|
||||
function f_main() runs on RTP_Emulation_CT
|
||||
{
|
||||
var Result res;
|
||||
|
||||
timer T_transmit := int2float(g_tx_duration_ms)/1000.0;
|
||||
timer T_transmit := int2float(g_cfg.tx_duration_ms)/1000.0;
|
||||
var RTP_RecvFrom rx_rtp;
|
||||
var RtpemConfig cfg;
|
||||
var template RTP_RecvFrom tr := {
|
||||
connId := ?,
|
||||
remName := ?,
|
||||
|
@ -174,6 +189,9 @@ function f_main() runs on RTP_Emulation_CT
|
|||
g_rx_enabled := true;
|
||||
}
|
||||
}
|
||||
[] CTRL.getcall(RTPEM_configure:{?}) -> param (cfg) {
|
||||
g_cfg := cfg;
|
||||
}
|
||||
|
||||
/* simply ignore any RTTP/RTCP if receiver not enabled */
|
||||
[g_rx_enabled==false] RTP.receive(tr_rtp) { }
|
||||
|
@ -190,7 +208,7 @@ function f_main() runs on RTP_Emulation_CT
|
|||
/* transmit if timer has expired */
|
||||
[] T_transmit.timeout {
|
||||
/* send one RTP frame, re-start timer */
|
||||
f_tx_rtp('01020304'O);
|
||||
f_tx_rtp(g_cfg.tx_fixed_payload);
|
||||
T_transmit.start;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue