diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2017-07-18 15:21:59 +0200 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-11-27 17:54:20 +0100 |
commit | fa53c9eafe39bf9f010cc32355281aedc31c812b (patch) | |
tree | 0a7aaaacd2b3764e17aee8496ddb62daa6b76d36 /doc | |
parent | 683b775c7a956bcfdf8ecb6e71a178c3adb11553 (diff) |
rtp-amr: Describe requirement to recieve all PH-DATA.ind events
Change-Id: I4a78b3398c36a8107fa1809ba9b89235980f0e4f
Diffstat (limited to 'doc')
-rw-r--r-- | doc/manuals/rtp-amr-docinfo.xml | 8 | ||||
-rw-r--r-- | doc/manuals/rtp-amr.adoc | 86 |
2 files changed, 59 insertions, 35 deletions
diff --git a/doc/manuals/rtp-amr-docinfo.xml b/doc/manuals/rtp-amr-docinfo.xml index fe5d6813..3f4de8d9 100644 --- a/doc/manuals/rtp-amr-docinfo.xml +++ b/doc/manuals/rtp-amr-docinfo.xml @@ -15,6 +15,14 @@ FSM added </revremark> </revision> + <revision> + <revnumber>3</revnumber> + <date>July 2017</date> + <authorinitials>PE</authorinitials> + <revremark> + Add section and update sequence charts to describe requirement to receive all PH-DATA.ind events + </revremark> + </revision> </revhistory> <authorgroup> diff --git a/doc/manuals/rtp-amr.adoc b/doc/manuals/rtp-amr.adoc index 982a5af3..5f0f803e 100644 --- a/doc/manuals/rtp-amr.adoc +++ b/doc/manuals/rtp-amr.adoc @@ -14,6 +14,22 @@ back-haul towards the MGW. === TCH/AFS Uplink (MS to Network) +==== TCH/AFS Uplink: Initial Assumptions + +When a call is established, the BTS expects PH-DATA.ind (TCH) events to be +triggered by BTS-PHY at regular intervals and none of them being lost, even if +the MS is not transmitting at that time due to DTX. This requirement is +important as upper layers rely on this timing to update the RTP source clock at +a correct pace. Given an event from BTS-PHY is lost, the RTP source clock will +drift and this may be seen as steady increase of delay over time from the +receiver point of view. + +In the case of Nutaq GSM PHY and API, option fBFILevel is set to a ridiculously +low value -200 to ensure all indications are notified to upper layers, even if +no meaningful payload is available at that time. In this case, an empty payload +is delivered from PHY-BTS to BTS, which updates the clock without sending any +RTP packet. + ==== TCH/AFS Uplink: During Talk-Spurt During a talk-spurt, the system behaves identical to a system without @@ -83,14 +99,14 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)", id="ULSU2"]; ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; @@ -133,7 +149,7 @@ msc { ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; @@ -147,49 +163,49 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; @@ -242,14 +258,14 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)", id="ULSO2"]; 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)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"]; @@ -333,14 +349,14 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH frame)"]; ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH frame)"]; ms => phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of FACCH frame)"]; ms => phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of FACCH frame)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 5 of FACCH frame + sub-block 1 of SID First frame)"]; @@ -734,7 +750,7 @@ msc { ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; @@ -772,11 +788,11 @@ msc { ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; @@ -786,36 +802,36 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; @@ -864,17 +880,17 @@ msc { ms -x phy [label="Suppressed L1 burst"]; ms -x phy [label="Suppressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; 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)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"]; ms => phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"]; @@ -916,7 +932,7 @@ msc { ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"]; ms => phy [label="L1 burst (sub-block 4 of speech frame N+1 + sub-block 2 of speech frame N+2)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3 of speech frame N+2 + sub-block 1 of speech frame N+3)"]; @@ -948,17 +964,17 @@ msc { ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"]; ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (block 1 of SID_UPD_INH + sub-block 1 of speech frame N)", id="SFU1"]; ms => phy [label="L1 burst (block 2 of SID_UPD_INH + sub-block 2 of speech frame N)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"]; ms => phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"]; @@ -985,17 +1001,17 @@ msc { ms -x phy [label="Supressed L1 burst"]; ms -x phy [label="Supressed L1 burst"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH/H)"]; ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH/H)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 3+4 of FACCH/H)"]; ms => phy [label="L1 burst (sub-block 5+6 of FACCH/H)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms => phy [label="L1 burst (sub-block 7 of FACCH/H + sub-block 1 of SID_FIRST_P1)"]; @@ -1007,7 +1023,7 @@ msc { ms => phy [label="L1 burst (sub-block 3 of SID_FIRST_P1 + block 1 of SID_FIRST_P2)"]; ms => phy [label="L1 burst (sub-block 4 of SID_FIRST_P1 + block 2 of SID_FIRST_P2)"]; - phy -x bts [label="No PH-DATA.ind sent[BFI]"]; + phy => bts [label="PH-DATA.ind with empty payload"]; bts -x mgw [label="Suppressed RTP frame"]; ms -x phy [label="Supressed L1 burst"]; |