comparison Speech-codec-selection @ 98:915ff61137ee

Speech-codec-selection: document MSCAP
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 06 Jun 2023 01:47:36 +0000
parents
children c28a1518d268
comparison
equal deleted inserted replaced
97:80f0996bfd16 98:915ff61137ee
1 There exist a total of 5 speech TCH modes in classic GSM, outside of exotic
2 additions (did anyone ever implement them?) of AMR-WB and TCH-8PSK; these
3 classic 5 speech TCH modes are:
4
5 TCH/FS (FRv1 codec)
6 TCH/HS (HRv1 codec)
7 TCH/EFS (EFR codec)
8 TCH/AFS (AMR-FR)
9 TCH/AHS (AMR-HR)
10
11 The selection of TCH type (full-rate or half-rate) and speech version (specific
12 codec) assigned to each voice call is always done by the GSM network - the MS
13 has no direct control over these decisions. However, the MS tells the network
14 which codecs it supports by way of Bearer capability IE (information element)
15 in CC (call control) Layer 3 messages, and networks that are designed to support
16 a wide range of GSM MS technology generations (as opposed to, for example,
17 operating with a policy that excludes non-AMR-capable MS) heed these MS-declared
18 speech codec capabilities when deciding which codec and TCH type to use.
19
20 Per the specs, every type-approved GSM MS is required to support FRv1 codec,
21 but support for all other speech codecs is optional in any combination.
22
23 In TI's GSM MS firmware architecture there is a configuration record in the
24 Condat PCM layer that tells the protocol stack's CC component which speech
25 versions it should list as supported in the Bearer capability IE. This PCM
26 configuration record is called EF_MSCAP; normally the firmware runs with its
27 compiled-in default for this record, and that default is crafted to match the
28 capabilities of Calypso L1. However, if there is a file named /pcm/MSCAP in
29 FFS, that FFS file overrides the compiled-in default for EF_MSCAP; this MSCAP
30 override mechanism can be used to artificially restrict which codecs the MS
31 will declare to the network as supported, thereby influencing the actual codec
32 selection by the network.
33
34 As of 2023-06-05 FreeCalypso Tourmaline firmware offers 3 different methods for
35 manipulating the speech version list sent to the network in the Bearer
36 capability IE for voice calls:
37
38 * Writing /pcm/MSCAP with fc-fsio;
39 * Writing to EF_MSCAP more conveniently with AT%MSCAP;
40 * Setting the speech version list directly with AT%SPVER.
41
42 MSCAP record manipulation
43 =========================
44
45 Writing /pcm/MSCAP with fc-fsio is the oldest method for artificially
46 restricting the selection of speech codec for voice calls - this method has been
47 available since the earliest FreeCalypso firmware versions. However, this
48 method is very inconvenient: the firmware checks FFS for the presence of
49 /pcm/MSCAP only once on boot, when the Condat PCM layer is initialized, and
50 this file is never re-read afterward. Therefore, if you create or modify or
51 delete this file with fc-fsio, your change won't have any effect whatsoever on
52 the already-booted firmware session, instead it will only take effect on the
53 next firmware boot cycle.
54
55 The addition of AT%MSCAP private AT command solves this problem: this command
56 updates the EF_MSCAP record through the firmware's pcm_WriteFile() API, which
57 not only writes to FFS, but also updates the in-RAM copy in the PCM layer which
58 takes effect on the next voice call. This command supports both set and query
59 forms:
60
61 AT%MSCAP=byte1,byte2,byte3[,byte4,byte5,byte6] -- set form
62 AT%MSCAP? -- query form
63
64 This private AT command is unusual (differs from 3GPP standard commands) in that
65 each of the byte arguments is hexadecimal. The hexadecimal form is "raw", i.e.,
66 just the two hexadecimal digits without any prefix or suffix. For example, the
67 following command restores the standard EF_MSCAP setting for CSD-enabled
68 firmware builds on Calypso C035 platfotms with AMR-capable DSP ROM versions:
69
70 AT%MSCAP=B7,C7,00
71
72 The full EF_MSCAP record consists of 6 bytes, but only the first 3 bytes contain
73 defined bits; the last 3 bytes are unused and should be set to 0. The set form
74 of AT%MSCAP command requires the first 3 bytes to be fully specified (there is
75 no default), but the last 3 unused bytes default to 0 if left unspecified.
76
77 The first byte of EF_MSCAP indicates supported speech codec versions, and the
78 following two bytes specify CSD capabilities. The firmware's compiled-in MSCAP
79 standard configurations are:
80
81 Firmware build w/o CSD Firmware build with CSD
82 Early Calypso silicon w/o AMR 07,00,00 87,C7,00
83 Final Calypso silicon with AMR 37,00,00 B7,C7,00
84
85 The first byte of EF_MSCAP is called chnMode and has the following bit
86 definitions (ASCII art diagrams copied from TI's source comments):
87
88 _______________________________________________________
89 |8 |7 |6 |5 |4 |3 |2 |1 |
90 |------|------|------|------|------|------|------|------|
91 |L1 |Tm |afs |ahs |spV3 |efrV2 |hr |spV1 |
92 -------------------------------------------------------
93
94 (Note the same bit numbering convention as is used in the GSM 11.11 spec for
95 EFs in the SIM file system.)
96
97 Bit 1: indicates support for FRv1, must always be set
98 Bit 2: indicates support for HRv1
99 Bit 3: indicates support for EFR
100 Bit 4: defined as indicating support for "EFR v3", but there is no such thing
101 Bit 5: indicates support for AMR-HR
102 Bit 6: indicates support for AMR-FR
103 Bit 7: defined as meaning "Test Mobile", not actually used
104 Bit 8: defined as meaning "L1 Version", not actually used
105
106 The second byte is called datCap1 and has the following bit definitions:
107
108 _______________________________________________________
109 |8 |7 |6 |5 |4 |3 |2 |1 |
110 |------|------|------|------|------|------|------|------|
111 |14.4 |tfax |ntfax |tsyn |syn |asyn |rlp |ds |
112 -------------------------------------------------------
113
114 Specific bit meanings per TI's source comments:
115
116 Bit 1: Data support
117 Bit 2: RLP data (NT Async)
118 Bit 3: T Async data support
119 Bit 4: NT Sync data support
120 Bit 5: T Sync data support
121 Bit 6: NT Fax support
122 Bit 7: T Fax support
123 Bit 8: Data rate 14.4 support
124
125 The third byte is called datCap2 and has the following bit definitions:
126
127 _______________________________________________________
128 |8 |7 |6 |5 |4 |3 |2 |1 |
129 |------|------|------|------|------|------|------|------|
130 |DHR | | |NAS |TPD |NTPD |TP |NTP |
131 -------------------------------------------------------
132
133 Specific bit meanings per TI's source comments:
134
135 Bit 1: NT Packet Service
136 Bit 2: T Packet Service
137 Bit 3: NT PAD Access Service
138 Bit 4: T PAD Access Service
139 Bit 5: No Alternate Services
140 Bit 8: Data Halfrate support
141
142 Note that Calypso Layer1 as delivered by TI does not support CSD on TCH/H, only
143 on TCH/F, and this lack of CSD half-rate support is reflected in the compiled-in
144 EF_MSCAP configuration. However, the DSP does have channel mode definitions for
145 TCH/H4.8 and TCH/H2.4, suggesting at least partial support for half-rate CSD -
146 perhaps this support is incomplete and/or non-functional. ARM L1 support for
147 half-rate CSD (called IDS in the code) is very obviously missing, though. But
148 on TCH/F our TI-inherited GSM MS solution does support CSD modes from F2.4
149 through F14.4 inclusive, with bearer services of transparent async,
150 non-transparent RLP and fax.
151
152 Playing with AT%MSCAP and cleaning up afterward
153 -----------------------------------------------
154
155 The set form of AT%MSCAP command issues a pcm_WriteFile() internal API call,
156 and that operation writes /pcm/MSCAP into FFS in addition to updating the record
157 inside the PCM layer. Therefore, MSCAP changes made with this command persist
158 across firmware boot cycles. There is no way to delete /pcm/MSCAP via AT%MSCAP,
159 and thus no way to return to the standard system design state where the active
160 MSCAP record depends on the firmware build variant on development boards where
161 different fw build configurations are often being run. Therefore, the following
162 clean-up procedure is recommended:
163
164 Step 1: set AT%MSCAP to the standard config for your currently running firmware
165 version, usually AT%MSCAP=37,00,00 or AT%MSCAP=B7,C7,00.
166
167 Step 2: execute 'rm /pcm/MSCAP' in fc-fsio, deleting the file from FFS.