From d61b59bb18e237bbe61cd794465c25bff67bcd23 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 3 Nov 2016 14:08:30 +0100 Subject: rtp-amr.adoc: TCH/AFS Downlink: Inhibiting Add two new chapters contributed by Nutaq: * TCH/AFS Downlink: Inhibiting a SID_FIRST frame * TCH/AFS Downlink: FACCH/F During DTX Operation Change-Id: Ic39d035f9d17bd0634c2df78ae3359a5eb7dfd46 --- doc/manuals/abis/rtp-amr.adoc | 89 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/doc/manuals/abis/rtp-amr.adoc b/doc/manuals/abis/rtp-amr.adoc index 12b5a9fd..6716800b 100644 --- a/doc/manuals/abis/rtp-amr.adoc +++ b/doc/manuals/abis/rtp-amr.adoc @@ -495,10 +495,91 @@ msc { } ---- -DLOS1:: The SID_ONSET and the first voice frame are sent in the same -block of four radio busts. Hence, the BTS must be able ot to send -actual codec payload along with the GsmL1_TchPlType_Amr_Onset -primitive. +==== TCH/AFS Downlink: Inhibiting a SID_FIRST frame + +Here is the procedure to inhibit a SID_FIRST frame in order to quickly resume speech. + +["mscgen"] +---- +msc { + hscale = 2; + ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"]; + + ...; + --- [label="Inhibiting a SID_FIRST frame"]; + + bts <= mgw [label="RTP (AMR FT=SID,Q=1)"]; + phy => bts [label="PH-RTS.ind (TCH)"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_FIRST)"]; + bts => bts [label="Store SID frame in case it contains comfort noise parameters"]; + ms <= phy [label="L1 burst (sub-block 5 of speech frame N-1 + sub-block 1 of SID_FIRST)"]; + ms <= phy [label="L1 burst (sub-block 6 of speech frame N-1 + sub-block 2 of SID_FIRST)"]; + ms <= phy [label="L1 burst (sub-block 7 of speech frame N-1 + sub-block 3 of SID_FIRST)"]; + ms <= phy [label="L1 burst (sub-block 8 of speech frame N-1 + sub-block 4 of SID_FIRST)"]; + + bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"]; + phy => bts [label="PH-RTS.ind (TCH)"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"]; + ms <= phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)"]; + ms <= phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N)"]; + ms <= phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of speech frame N)"]; + ms <= phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of speech frame N)"]; + + bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"]; + phy => bts [label="PH-RTS.ind (TCH)"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"]; + ms <= phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"]; + ms <= phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"]; + ms <= phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 2 of speech frame N+1)"]; + ms <= phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 2 of speech frame N+1)"]; + } +---- + +==== TCH/AFS Downlink: FACCH/F During DTX Operation + +The following procedure must be observed if a FACCH/F frame must be transmitted during DTX operation. + +["mscgen"] +---- +msc { + hscale = 2; + ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"]; + + ...; + --- [label="FACCH/F Frame During DTX"]; + + bts <= mgw [label="FACCH/F"]; + phy => bts [label="PH-RTS.ind (FACCH/F)"]; + phy => bts [label="PH-RTS.ind (TCH/F)"]; + phy <= bts [label="PH-DATA.req (FACCH/F)"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset(TCH/F)", id="NOTE"]; + ms <= phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH/F)"]; + ms <= phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH/F)"]; + ms <= phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of FACCH/F)"]; + ms <= phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of FACCH/F)"]; + + phy => bts [label="PH-RTS.ind (FACCH)"]; + phy => bts [label="PH-RTS.ind (TCH)"]; + phy <= bts [label="PH-EMPTY-FRAME.req (FACCH/F)"]; + phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_FIRST)"]; + ms x- phy [label="L1 burst (sub-block 5 of FACCH/F + sub-block 1 of SID_FIRST)"]; + ms x- phy [label="L1 burst (sub-block 6 of FACCH/F + sub-block 2 of SID_FIRST)"]; + ms x- phy [label="L1 burst (sub-block 7 of FACCH/F + sub-block 3 of SID_FIRST)"]; + ms x- phy [label="L1 burst (sub-block 8 of FACCH/F + sub-block 4 of SID_FIRST)"]; + + phy => bts [label="PH-RTS.ind (FACCH)"]; + phy => bts [label="PH-RTS.ind (TCH)"]; + phy <= bts [label="PH-EMPTY-FRAME.req (FACCH/F)"]; + phy <= bts [label="PH-EMPTY-FRAME.req (TCH/F)"]; + ms x- phy [label="Supressed burst"]; + ms x- phy [label="Supressed burst"]; + ms x- phy [label="Supressed burst"]; + ms x- phy [label="Supressed burst"]; +} +---- + +NOTE:: The ONSET and the FACCH/F PH-DATA requests must both be sent to the PHY. == Half-Rate (TCH/AHS) -- cgit v1.2.3