diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-11-27 17:54:38 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-11-27 17:54:38 +0100 |
commit | 0133b65da1bcf788181b43030fde6b4975ea6be7 (patch) | |
tree | 899a88095620473bfe1bb99412d44db098d1fc69 /doc/manuals/dtx.dot | |
parent | e3cb8715f59cae342b6ecb96be4eb82c1ad00b4e (diff) | |
parent | b7eaf282dd60d20a9bbe7ff2309b0213c3f7e71f (diff) |
Merge history from osmo-gsm-manuals.git
Change-Id: Ib62d046bd84204b902cac3fe8c0765e32da0a0c6
Diffstat (limited to 'doc/manuals/dtx.dot')
-rw-r--r-- | doc/manuals/dtx.dot | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/doc/manuals/dtx.dot b/doc/manuals/dtx.dot new file mode 100644 index 00000000..b9f0b5f2 --- /dev/null +++ b/doc/manuals/dtx.dot @@ -0,0 +1,85 @@ +digraph dtx_dl_amr_fsm { + node [shape = doublecircle] ST_VOICE ST_FACCH ST_U_NOINH + node [shape = circle] + + // default state for non-DTX and DTX when SPEECH is in progress + ST_VOICE -> ST_SID_F1 [ label = "E_SID_F" ] + ST_VOICE -> ST_F1_INH_V [ label = "E_INHIB" ] + ST_VOICE -> ST_U_NOINH [ label = "E_SID_U" ] + ST_VOICE -> ST_VOICE [ label = "E_VOICE" ] + ST_VOICE -> ST_VOICE [ label = "E_FACCH" ] + + // SID-FIRST or SID-FIRST-P1 in case of AMR HR: start of silence period (might be interrupted in case of AMR HR) + ST_SID_F1 -> ST_SID_F1 [ label = "E_SID_F" ] + ST_SID_F1 -> ST_U_NOINH [ label = "E_SID_U" ] + ST_SID_F1 -> ST_F1_INH_F [ label = "E_FACCH" ] + ST_SID_F1 -> ST_SID_F2 [ label = "E_FIRST" ] + ST_SID_F1 -> ST_ONSET_V [ label = "E_ONSET" ] + + // SID-FIRST P2 (only for AMR HR): actual start of silence period in case of AMR HR + ST_SID_F2 -> ST_U_NOINH [ label = "E_COMPL" ] + ST_SID_F2 -> ST_ONSET_F [ label = "E_FACCH" ] + ST_SID_F2 -> ST_ONSET_V [ label = "E_ONSET" ] + + // SID-FIRST Inhibited: incoming SPEECH (only for AMR HR) + ST_F1_INH_V -> ST_F1_INH_V_REC [ label = "E_COMPL" ] + + // SID-FIRST Inhibited: incoming FACCH frame (only for AMR HR) + ST_F1_INH_F -> ST_F1_INH_F_REC [ label = "E_COMPL" ] + + // SID-UPDATE Inhibited: incoming SPEECH (only for AMR HR) + ST_U_INH_V -> ST_U_INH_V_REC [ label = "E_COMPL" ] + + // SID-UPDATE Inhibited: incoming FACCH frame (only for AMR HR) + ST_U_INH_F -> ST_U_INH_F_REC [ label = "E_COMPL" ] + + // Silence period with periodic comfort noise data updates (no Inhibition) + ST_U_NOINH -> ST_ONSET_F [ label = "E_FACCH" ] + ST_U_NOINH -> ST_VOICE [ label = "E_VOICE" ] + ST_U_NOINH -> ST_U_NOINH [ label = "E_SID_U" ] + ST_U_NOINH -> ST_U_NOINH [ label = "E_SID_F" ] + ST_U_NOINH -> ST_ONSET_V [ label = "E_ONSET" ] + ST_U_NOINH -> ST_SID_U [ label = "E_COMPL" ] + + // SID-FIRST Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it + ST_F1_INH_V_REC -> ST_VOICE [ label = "E_COMPL" ] + ST_F1_INH_V_REC -> ST_VOICE [ label = "E_VOICE" ] + + // SID-FIRST Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it + ST_F1_INH_F_REC -> ST_FACCH [ label = "E_COMPL" ] + ST_F1_INH_F_REC -> ST_FACCH [ label = "E_VOICE" ] + + // SID-UPDATE Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it + ST_U_INH_V_REC -> ST_VOICE [ label = "E_COMPL" ] + ST_U_INH_V_REC -> ST_VOICE [ label = "E_VOICE" ] + + // SID-UPDATE Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it + ST_U_INH_F_REC -> ST_FACCH [ label = "E_COMPL" ] + ST_U_INH_F_REC -> ST_FACCH [ label = "E_VOICE" ] + + // Silence period with periodic comfort noise data updates (can be inhibited) + ST_SID_U -> ST_U_INH_F [ label = "E_FACCH" ] + ST_SID_U -> ST_VOICE [ label = "E_VOICE" ] + ST_SID_U -> ST_U_INH_V [ label = "E_INHIB" ] + ST_SID_U -> ST_U_NOINH [ label = "E_SID_U" ] + ST_SID_U -> ST_U_NOINH [ label = "E_SID_F" ] + + // ONSET - end of silent period due to incoming SPEECH frame + ST_ONSET_V -> ST_ONSET_V_REC [ label = "E_COMPL" ] + + // ONSET - end of silent period due to incoming FACCH frame + ST_ONSET_F -> ST_ONSET_F_REC [ label = "E_COMPL" ] + + // ONSET recursion in progress: ONSET itself was already sent, now have to send the data that caused it + ST_ONSET_F_REC -> ST_FACCH [ label = "E_COMPL" ] + + // ONSET recursion in progress: ONSET itself was already sent, now have to send the voice that caused it + ST_ONSET_V_REC -> ST_VOICE [ label = "E_COMPL" ] + + // FACCH sending state + ST_FACCH -> ST_VOICE [ label = "E_VOICE" ] + ST_FACCH -> ST_FACCH [ label = "E_FACCH" ] + ST_FACCH -> ST_FACCH [ label = "E_SID_U" ] + ST_FACCH -> ST_FACCH [ label = "E_SID_F" ] + ST_FACCH -> ST_SID_F1 [ label = "E_COMPL" ] +} |