comparison README @ 10:ad0d9f7c06e9 default tip

README: update for the present situation
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 29 Dec 2019 23:01:26 +0000
parents 6c35c9f2ecab
children
comparison
equal deleted inserted replaced
9:6c35c9f2ecab 10:ad0d9f7c06e9
71 71
72 This new approach works with current FC Magnetite firmware, and has been tested 72 This new approach works with current FC Magnetite firmware, and has been tested
73 in a few different ways: 73 in a few different ways:
74 74
75 * We have a real TI-made D-Sample board and we can run our Magnetite firmware 75 * We have a real TI-made D-Sample board and we can run our Magnetite firmware
76 on it, but lacking the tpudrv10 driver code for Clara RF, we are running with 76 on it, but lacking the real tpudrv10.c driver code for Clara RF, we are
77 a non-functional placeholder stub for the TPU driver. The D-Sample board thus 77 running with a disassembly-based reconstruction attempt which is unfortunately
78 has no GSM radio functionality when running our fw, and the firmware can only 78 still broken and non-functional. The D-Sample board thus has no GSM radio
79 do what any regular phone would do in an area with zero coverage: limited to 79 functionality when running our fw, and the firmware can only do what any
80 stepping through menus and examining SIM phonebook entries and stored 80 regular phone would do in an area with zero coverage: limited to stepping
81 messages. The physical LCD output works, but is often garbled due to what 81 through menus and examining SIM phonebook entries and stored messages. The
82 appears to be a hardware problem. Running fc-lcdpoll|fc-lcdemu against this 82 physical LCD output works, but is often garbled due to what appears to be a
83 setup results in the virtual LCD mirroring the physical one, albeit with some 83 hardware problem. Running fc-lcdpoll|fc-lcdemu against this setup results in
84 lag, and the virtual LCD shows what the physical one *should* display if it 84 the virtual LCD mirroring the physical one, albeit with seconds of lag, and
85 weren't garbled. 85 the virtual LCD shows what the physical one *should* display if it weren't
86 garbled.
86 87
87 * One can run a UI-enabled Magnetite build on our FCDEV3B modem board and use 88 * One can run a UI-enabled Magnetite build on our FCDEV3B modem board and use
88 the fc-lcdpoll|fc-lcdemu pipe to display what the fw puts in the framebuffer. 89 the fc-lcdpoll|fc-lcdemu pipe to display what the fw puts in the framebuffer.
89 Unlike the D-Sample, our FCDEV3B has perfectly working GSM radio, thus this 90 Unlike the D-Sample, our FCDEV3B has perfectly working GSM radio, thus this
90 setup allows us to see the behaviour of the UI firmware with a working radio 91 setup allows us to see the behaviour of the UI firmware with a working radio
96 sending simulated keystrokes via RVTMUX encoded in GPF system primitives, and 97 sending simulated keystrokes via RVTMUX encoded in GPF system primitives, and
97 we have recently figured out how to use it. Our fc-shell utility now offers 98 we have recently figured out how to use it. Our fc-shell utility now offers
98 the new key command for sending such simulated keypresses to the target, and 99 the new key command for sending such simulated keypresses to the target, and
99 by combining this key entry mechanism with the present fc-lcdpoll|fc-lcdemu 100 by combining this key entry mechanism with the present fc-lcdpoll|fc-lcdemu
100 display viewing mechanism, we've been able to exercise the UI a little 101 display viewing mechanism, we've been able to exercise the UI a little
101 further. This approach definitely shows some promise. 102 further.
102 103
103 * The Pirelli DP-L10 target has also been tried. I was hoping that it would 104 * One can also use a Pirelli DP-L10 phone instead of FCDEV3B. The long-time
104 make a good platform by virtue of having a working GSM radio (unlike the 105 bug that caused GSM radio functionality to break if it was brought up without
105 D-Sample sans tpudrv10 code) and a physical keypad that is just like the 106 getting some deep sleep first was fixed in 2019-03, and all GSM radio
106 one on the D-Sample, but no joy. When running FreeCalypso on Pirelli's alien 107 functionality now works just as well on this Pirelli target as it does on our
107 hardware, among many other issues that kill any possibility of turning this 108 native FCDEV3B. The native 128x128 pixel LCD on this phone remains dark and
108 alien hw into a libre phone, we get this one highly bizarre misbehaviour for 109 unused for now because it is too small to display TI's 176x220 pixel UI, but
109 which we have absolutely no explanation: the radio works OK *only if* the 110 the present fc-lcdpoll|fc-lcdemu mechanism works just as well on the Pirelli
110 firmware is built with deep sleep enabled in CST (i.e., enabled by default on 111 as it does on FCDEV3B. However, the Pirelli phone has a physical keypad that
111 boot), and the Calypso gets to do some deep sleeps prior to the operator 112 has the same repertoire of buttons as D-Sample, and our fw knows and supports
112 manually bringing it up with AT commands. If deep sleep is disabled, as soon 113 Pirelli's keypad wiring. Thus if you run a UI-enabled Magnetite build on the
113 as you try to bring the radio up, the Calypso DSP falls over with errors 114 Pirelli, you can use the phone's native keypad to drive this UI, but you have
114 which we naturally have no way of debugging. The most recent experiment has 115 to use the fc-lcdpoll|fc-lcdemu mechanism to see the display output.
115 revealed that this same DSP death behaviour (resulting in no working GSM
116 radio) occurs even when deep sleep is enabled if the firmware is built in the
117 MFW configuration (UI layers included) - as the UI layers command the radio
118 bring-up immediately on boot, the DSP falls over. Thus we are rudely reminded
119 once more than the Pirelli target is a dead end.
120 116
121 One currently outstanding defect with this fc-lcdpoll mechanism is that rvinterf 117 One currently outstanding defect with this fc-lcdpoll mechanism is that rvinterf
122 currently prints all ETM packets as full hex dumps, and the flood of all that 118 currently prints all ETM packets as full hex dumps, and the flood of all that
123 hex in the rvinterf window makes that window unusable for its original intended 119 hex in the rvinterf window makes that window unusable for its original intended
124 purpose of seeing other debug output from the fw. This voluminous rvinterf 120 purpose of seeing other debug output from the fw. This voluminous rvinterf
125 output also slows down the rate at which the LCD framebuffer is polled. One 121 output also slows down the rate at which the LCD framebuffer is polled. One
126 can run rvinterf with the -n option to suppress its output, but then all other 122 can run rvinterf with the -n option to suppress its output, but then all other
127 debug trace output will be lost too. I plan on fixing rvinterf at some point 123 debug trace output will be lost too. Back in 2018-03 I was thinking about
128 in the future to make its output less voluminous by default: keep the human- 124 fixing rvinterf at some point to make its output less voluminous by default,
129 readable traces, but omit the rarely-useful hex dumps from the default output. 125 keeping the human-readable traces, but omitting the rarely-useful hex dumps
126 from the default output - but now I am thinking of different approaches as
127 outlined below.
130 128
131 Baud rate considerations 129 Baud rate considerations
132 ======================== 130 ========================
133 131
134 The ETM memory read approach implemented in fc-lcdpoll is a lock-step, one read 132 The ETM memory read approach implemented in fc-lcdpoll is a lock-step, one read
140 baud is still preferable. To change the RVTMUX serial baud rate from 115200 bps 138 baud is still preferable. To change the RVTMUX serial baud rate from 115200 bps
141 to 812500 bps in your Magnetite firmware build, simply add a 139 to 812500 bps in your Magnetite firmware build, simply add a
142 TR_BAUD_CONFIG=TR_BAUD_812500 argument to your ./configure.sh line, 140 TR_BAUD_CONFIG=TR_BAUD_812500 argument to your ./configure.sh line,
143 and remember to pass the -B812500 option to rvinterf when talking to such 141 and remember to pass the -B812500 option to rvinterf when talking to such
144 trace-speed-increased firmware. 142 trace-speed-increased firmware.
143
144 New thoughts as of 2019-12
145 ==========================
146
147 While the fc-lcdpoll approach implemented in 2018-03 is much cleaner and much
148 more workable than the original 2015-09 approach, the update rate of the virtual
149 LCD is painfully slow, which is why no actual UI development work has been done
150 yet via this approach. It needs to be remembered that a 176x220 pixel
151 framebuffer image with 16 bits per pixel weighs 77440 bytes, while the
152 theoretical maximum throughput of a Calypso UART at the maximum 812500 baud rate
153 is 81250 bytes per second - thus even under ideal conditions it will still take
154 almost a full second to push out a single frame update. The original 2015-09
155 approach tried to get close to this theoretical maximum update rate by having
156 the firmware stream out framebuffer updates continuously, but embedding this
157 stream within RVTMUX resulted in overwhelming the trace mechanism beyond what
158 it was meant to handle.
159
160 The newer 2018-03 approach avoids overstressing the trace mechanism, but the new
161 drawback is that the update rate of the virtual LCD got even slower: it now
162 takes about 4 s to update the virtual LCD window by reading out the firmware's
163 framebuffer via ETM, thus any UI features (animations, temporary message
164 pop-ups) that last less than 4 s become lost. This unacceptable lag in visible
165 display updates is the main reason why I did not pursue further UI development
166 work back in 2018 using this mechanism.
167
168 If we were to continue down the virtual LCD route as opposed to looking for a
169 new Calypso platform with a suitable hardware LCD, one possible approach would
170 be to make use of two fully accessible UARTs on our FCDEV3B as opposed to just
171 one UART accessible on our previous OM GTA02 and Pirelli DP-L10 platforms. One
172 idea would be to keep the IrDA UART for RVTMUX and keep it free from virtual LCD
173 blit traffic, remove the ASCII AT command channel from the MODEM UART (not
174 needed for basic handset UI work) and repurpose the MODEM UART for a new ad hoc
175 interface that would carry just virtual LCD blits and nothing else. It would be
176 similar to going back to the original 2015-09 approach, but using a dedicated
177 UART and thus not loading the RiViera Trace mechanism at all.
178
179 However, as of right now (final days of 2019) I (Mother Mychaela) am not looking
180 at any more virtual LCD approaches because as explained above, even under ideal
181 conditions we would still have a lag of almost a full second per frame update -
182 and no real LCD on any real phone or proper development board is that slow.
183
184 Instead my view is that the proper solution is to acquire or create a UI
185 development platform whose LCD subsystem would be no worse than D-Sample. The
186 exact arrangement implemented on the DS board is unknown because we have no
187 schematics or any other hw docs, but the R2D driver in TI's firmware implements
188 both LCD module configuration writes and actual pixel output by writing 16-bit
189 words into certain magic addresses in the nCS3 address space, meaning that a
190 16-bit parallel microprocessor bus write interface is implemented in some
191 manner. The 128x128 pixel LCD (also 16-bit color) on the Pirelli DP-L10 is
192 similarly memory-mapped, with both commands and pixel data written as 16-bit
193 words into magic addresses on another chip select (nCS4 in Pirelli's case) -
194 although they have the additional complication of going through that SPCA552E
195 camera chip which we would much rather not have.
196
197 Smaller LCDs on lower-end phones are attached serially, using either uWire or
198 I2C, but note that the largest serial LCD we have ever seen on a real-life
199 Calypso phone is the 96x64 pixel 16-bit color LCD on the C139. Pirelli's
200 128x128 pixel LCD is already 2.6 times larger in terms of bits per frame, and
201 it is parallel memory-mapped, not serially interfaced any more. TI's 176x220
202 pixel LCD on the D-Sample (also 16-bit color) is another 2.3 times larger than
203 Pirelli's 128x128, and it is also parallel memory-mapped. I desire a 176x220
204 pixel LCD for UI development so I can see TI's original UI in its full glory,
205 and I feel that interfacing it to the Calypso in any other way than 16-bit
206 parallel memory-mapped would be substandard: the update rate would be slower
207 than it was on the original D-Sample, and the user experience with the UI would
208 no longer be the same as what TI's original developers experienced when they
209 implemented this UI.
210
211 The current situation as of the last days of 2019 is that we are looking to put
212 together our own FC Luna UI development platform with a memory-mapped parallel-
213 interfaced 176x220 pixel LCD using a certain historical development board as our
214 starting point. Our current hope is to be able to work on this project in the
215 first half of 2020 once the starting-point hw arrives at the Mother's shop in
216 California.