FreeCalypso > hg > freecalypso-citrine
annotate doc/TCH-special-feature @ 28:cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 12 Jun 2016 18:28:35 +0000 |
| parents | |
| children | 3362a76ab432 |
| rev | line source |
|---|---|
|
28
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 FreeCalypso Citrine firmware implements an optional special feature (needs to be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 explicitly enabled at compile time) which we call TCH rerouting. When this |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 feature is enabled, it applies the following special handling to GSM voice |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 traffic channels (TCH): |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * All downlink TCH bits passing from the channel decoder to the vocoder block |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 (260 bits every 20 ms with the original FR codec) can be non-invasively |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 intercepted and forwarded to the external host connected to the RVTMUX serial |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 interface; |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Using the same serial interface, the external host can supply substitute |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 uplink TCH bits which will be transmitted in the place of the built-in |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 vocoder output, i.e., the latter can be effectively suppressed. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 In order to use this feature, you need to compile our firmware in the voice+SMS |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 pseudo-modem configuration, i.e., the configuration in which the fw expects to |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 be controlled via AT commands wrapped in the RVTMUX binary packet serial |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 interface. You can use a target GSM device that has just one accessible serial |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 port (Mot C1xx and Pirelli DP-L10) or one that has two Calypso UARTs (Openmoko |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 GTA02 or our future FCDEV3B), but in the latter case you will be using only one |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 UART - whichever one you have configured to be RVTMUX. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 Whatever system you are building that will act as the source and sink for TCH |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 bits will need to interface to the FreeCalypso GSM device via a serial port in |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 the RVTMUX binary packet format. Your system will need to send RVTMUX packets |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 with AT commands inside them in order to command the FC GSM device to register |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 with the network and to dial and/or answer calls, and you will need to send |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 RVTMUX packets of a different kind in order to supply the uplink TCH bits |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 during calls. In the other direction, your system will receive responses to |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 the AT commands you send, asynchronous notifications of incoming calls and SMS, |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 downlink TCH bits and various debug trace output from our FreeCalypso firmware. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 The last part (debug trace output) can be simply ignored and discarded if you |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 wish, but we strongly recommend that you provide a way to view and/or log it |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 for debugging purposes. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 Please see the RVTMUX document in the FreeCalypso host tools package for general |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 background information regarding the RVTMUX binary packet interface; this |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 document should be considered required reading for anyone interested in working |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 with the TCH rerouting special feature. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 All packets transferred over the RVTMUX interface begin and end with 0x02. If |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 a payload byte within a packet equals 0x02 or 0x10, it needs to be prepended |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 with 0x10 as a transparency escape; all other payload bytes are sent literally. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 The first byte within each RVTMUX packet after the opening 0x02 is the packet |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 type; the two packet types you will need to handle (both generate and receive) |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 are 0x1A for AT commands and 0x1C for TCH configuration commands. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 To send an AT command to the FreeCalypso GSM device, prepend the 0x1A packet |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 type in front of the "AT" characters, wrap the packet with 0x02 bytes on both |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 ends, and send it to the modem. Responses to AT commands and asynchronous |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 notification messages such as "RING" for incoming calls will be sent to the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 host as RVTMUX packets also beginning with the 0x1A packet type; they will be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 interspersed among other packet types, mostly debug trace output. Your system |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 will need to receive the RVTMUX serial byte stream continuously, parsing the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 packet structure and looking at the type of each packet (the first byte after |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 the opening 0x02) in order to detect if the modem has sent something you may be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 interested in. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 If you wish to receive a copy of all downlink TCH bits on the serial channel, |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 you will need to send the following 5-byte command packet to the modem: |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 0x02: opening flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 0x1C: RVTMUX packet type for TCH |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 0x11: TCH_CONFIG_REQ command opcode |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 0x01: payload byte indicating that the "forward downlink" state should be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 set to enabled |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 0x02: closing flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 The modem will respond with a TCH_CONFIG_CONF confirmation message (opcode |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 0x12), and then during all voice calls your external host will receive the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 following packet every 20 ms: |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 0x02: opening flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 0x1C: RVTMUX packet type for TCH |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 0x15: TCH_DLBITS_IND opcode |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 - 40 (decimal) bytes of payload - |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 0x02: closing flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 The 40 bytes of payload sent in every TCH_DLBITS_IND packet directly correspond |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 to the 20 16-bit words provided by the Calypso DSP in its a_dd_0 buffer. The |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 first 3 words (6 bytes) contains the DSP's own status information (not fully |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 understood by us yet, but we let you see what the DSP tells us without redacting |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 anything out), and the remaining 17 words (34 bytes) are supposed to contain |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 the TCH bits received from the GSM network in the FR codec format. Each DSP |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 API word is sent in the big-endian byte order, i.e., the most significant byte |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 followed by the least significant byte. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 If you wish to send your own TCH uplink bits, replacing the output of the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 built-in vocoder with your own alternate uplink data, you will need to send |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 your uplink TCH bits to the modem in packets of the following format: |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 0x02: opening flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 0x1C: RVTMUX packet type for TCH |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 0x13: TCH_ULBITS_REQ opcode |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 - 33 or 34 (decimal) bytes of payload - |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 0x02: closing flag |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 Sending 260 bits requires only 33 bytes, but the DSP operates in terms of |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 16-bit words, hence 17 of those words are used. The least significant byte of |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 the last word (i.e., the very last byte with our big-endian transmission order) |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 is not expected to be used, but if you send 34 bytes rather than 33, you will |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 have control over every bit going into the DSP API RAM in this case. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 There is a queue inside the firmware in which these TCH uplink data blocks are |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 stored; this queue is filled by the serial packet receiving handler and drained |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 by the L1S (synchronous) code that executes at the right times in the GSM TDMA |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 multiplex when uplink TCH transmission is expected. Up to 4 blocks can be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 queued up; as each queued-up block is transmitted on the air (more precisely, |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 as it is passed to the DSP for channel encoding and transmission), a |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 TCH_ULBITS_CONF short packet (consisting of just the opcode and nothing more) |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 is sent to the host. These confirmation packets can be used to pace the sending |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 of further TCH_ULBITS_REQs. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 Testing |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 ======= |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 The just-described mechanism has been tested as follows: |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 1. I placed a call to WWV (+1-303-499-7111), and after verifying with my ear |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 that the downlink audio was good, I recorded the downlink TCH bits on that |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 call into a file with the tch record command in fc-shell. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 2. I placed a call to another phone (running over a live commercial GSM network) |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 and played the saved recording from WWV into the call uplink with the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 tch play command in fc-shell. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 3. The audio heard on the other end of the call in the previous step: the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 recording from WWV was definitely recognizable, but it didn't sound perfect, |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 i.e., it was rather garbled. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 [NOTE: the experiment described above was performed with an older version of |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 the firmware which is now codenamed Citrine, namely, the version with L1-2014. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 I have not played with the TCH rerouting feature again since the transition to |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 L1-2016.] |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 Further debugging of this mechanism will require two things which I currently |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 lack: (1) proper understanding of the workings of the GSM 06.10 FR codec and |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 (2) a test GSM network (as in OpenBTS/OpenBSC/etc) that could be used instead |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 of live commercial ones, so we could see exactly what the test MS is |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 transmitting on the air and what the BTS transmits in the downlink. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 Host side reference implementation |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 ================================== |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 If you are going to implement your own system for talking to FreeCalypso GSM |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 pseudo-modems via the RVTMUX binary packet interface, we strongly recommend |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 that you use our rvinterf and fc-shell Unix/Linux host utilities as your |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 starting point. You can find their source code in the freecalypso-tools Hg |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 repository on Bitbucket. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 The following test commands have been added to fc-shell for exercising the |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 experimental TCH rerouting mechanism: |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 tch record <filename> |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 Sends a TCH_CONFIG_REQ packet to the target, commanding the firmware to |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 start forwarding TCH downlink bits to the external host, and starts |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 recording the bits it receives in the named file. The file is written |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 with the same ordering of GSM 06.10 bits as used by the popular libgsm |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 implementation of this codec, i.e., the bits received from the GSM |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 device (ultimately coming from TI's DSP) are reordered before being |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 written into the file. It is only a reordering of bits with no change |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 in the information content. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 I was hoping that the resulting files could be played with the SoX play |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 command under Slackware Linux, but all I got was garbled audio, and my |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 audio-fu is not good enough to figure out what is wrong. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 tch record stop |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 Stops TCH downlink recording and closes the file into which the bytes |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 were being written; until the file is thus closed, it may not be |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 actually written out to the file system. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 tch play <filename> |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 Plays GSM 06.10 FR speech frames from the named file in libgsm format |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 (same as written by the tch record command) into the call uplink. |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 tch play stop |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 Terminates the TCH UL play-from-file operation. This command is |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 normally not needed, as the play session will end automatically when |
|
cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 the end of file is reached. |
