FreeCalypso > hg > freecalypso-sw
comparison rvinterf/README @ 429:f114f5c547ec
rvinterf/README: beginning of proper documentation
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
|---|---|
| date | Sat, 21 Jun 2014 19:36:32 +0000 |
| parents | f42854da4563 |
| children |
comparison
equal
deleted
inserted
replaced
| 428:e61eacecd319 | 429:f114f5c547ec |
|---|---|
| 1 I (Spacefalcon the Outlaw, FreeCalypso developer) am still learning what kinds | 1 You are looking at the suite of FreeCalypso tools for talking to the RVTMUX |
| 2 of traffic may be passed across TI's RVTMUX binary-packet serial interface. We | 2 interface provided by TI-based GSM firmwares. If you haven't already, please |
| 3 already know that much of this traffic is debug trace output, i.e., | 3 read ../doc/RVTMUX first. |
| 4 unidirectional and essentially unconditional output from the GSM device. All | |
| 5 of the "standard" firmwares we have (mokoN, our leo2moko which functions almost | |
| 6 identically, and Pirelli's fw) produce massive volumes of such trace output in | |
| 7 normal operation. We already know that this "unsolicited" trace output comes | |
| 8 in at least 3 different flavors: | |
| 9 | 4 |
| 10 * RiViera traces emitted by rvf_send_trace() | 5 The fundamental difference between these tools and loadtools is that loadtools |
| 11 * L1 traces | 6 operate on a GSM device while its regular firmware is shut down, whereas the |
| 12 * G23 traces | 7 present rvinterf tools talk to active running GSM firmwares. |
| 13 | 8 |
| 14 The RVTMUX interface can be used for more than just trace output, though: any | 9 The following tools are currently implemented: |
| 15 component in TI's fw suite can send and/or register to receive binary packets. | |
| 16 As I slowly work my way through various components which comprise TI's Leonardo | |
| 17 fw whose semi-source we use as our reference version, learning what they do and | |
| 18 reintegrating them in our own gsm-fw, I will undoubtedly uncover additional uses | |
| 19 to which the RVTMUX interface is put. | |
| 20 | |
| 21 Aside from the trivial provision in the RVT module itself whereby an external | |
| 22 host can send a command to the target to set a filter masking some of the RV | |
| 23 trace output, so far the only entity I've come across which accepts packets from | |
| 24 an external host is ETM (Enhanced Test Mode). ETM implements a registration | |
| 25 system of its own, whereby other modules can register with ETM to receive | |
| 26 certain external command messages passing first through RVT, then through ETM. | |
| 27 | |
| 28 Because I do not yet have a clear mental picture of *every* function for which | |
| 29 the RVTMUX interface will ever be used, it is correspondingly impractical to | |
| 30 decide on a once-and-for-all design of what the host-side software for talking | |
| 31 to this interface should be like. Therefore, it is currently premature to | |
| 32 expect any stability in the present rvinterf subdirectory of freecalypso-sw; I | |
| 33 may implement something one day, then toss it away the next day (without | |
| 34 providing much in the way of backward compatibility) when I come up with some | |
| 35 other idea. | |
| 36 | |
| 37 The current roadmap for what the rvinterf suite of host tools is envisioned to | |
| 38 look like eventually is as follows: | |
| 39 | 10 |
| 40 rvtdump Opens the serial port, decodes TI's binary packet protocol, and | 11 rvtdump Opens the serial port, decodes TI's binary packet protocol, and |
| 41 simply dumps every received/decoded packet on stdout in a human- | 12 simply dumps every received/decoded packet on stdout in a human- |
| 42 readable form. No provision for sending anything to the target. | 13 readable form. No provision for sending anything to the target. |
| 43 Intended use: observing the debug trace output which all TI | 14 Intended use: observing the debug trace output which all TI |
| 44 firmwares emit as standard "background noise". This utility has | 15 firmwares emit as standard "background noise". This utility |
| 45 already been written, and it allows one to observe/log/study the | 16 allows one to observe/log/study the "noise" that appears on |
| 46 "noise" that appears on Pirelli's USB-serial port (running | 17 Pirelli's USB-serial port (running Pirelli's original fw), |
| 47 Pirelli's original fw), as well as that emitted on the IrDA | 18 as well as that emitted on the IrDA (headset jack) port on the |
| 48 (headset jack) port on the GTA02 by mokoN/leo2moko firmwares. | 19 GTA02 by mokoN/leo2moko firmwares. |
| 49 | 20 |
| 50 rvinterf My plan is to make a copy of rvtdump, called rvinterf, and have | 21 rvinterf Provides a bidirectional interface to RVTMUX on the host side. |
| 51 it act very much like rvtdump: receive TI's packets from the | 22 It dumps and/or logs the "background noise" emitted by the |
| 52 serial port, decode them and print the decoded form on stdout. | 23 target just like rvtdump, but also creates a local UNIX domain |
| 53 However, rvinterf will also create a listening UNIX domain | 24 socket on the host machine to which other programs can connect, |
| 54 socket to which other programs in the present suite will | 25 replicating the MUXing function on the host side. |
| 55 connect. These other programs connecting through rvinterf will | |
| 56 be able to send packets to the target, as well as register to | |
| 57 receive certain kinds of target->host message packets. | |
| 58 | 26 |
| 59 fc-tmsh FreeCalypso Test Mode Shell is my vision for the utility which | 27 fc-tmsh Interactive asynchronous test mode shell. This program connects |
| 60 will provide a practically usable interface to ETM. ETM's | 28 to a target GSM device through rvinterf and allows a developer- |
| 61 general mode of operation seems to be (weasel phrase inserted | 29 operator to send various ETM commands to the target. ETM |
| 62 because many other fw components may connect through ETM, and I | 30 responses are decoded (sometimes only lightly) and displayed. |
| 63 have yet to study all of them) command-response: an external | 31 fc-tmsh is fully asynchronous in that it continuously listens |
| 64 host sends a command to ETM, that command gets dispatched to the | 32 (via select(2)) both for user input and for packets from the |
| 65 proper registered handler, the command function is executed, a | 33 target at the same time, translating any user-entered commands |
| 66 response packet is composed, and finally that response is sent | 34 into packets to the target and conversely, scribbling on the |
| 67 back to the host. But because all code on the target side is | 35 terminal when a packet arrives from the target. It has no |
| 68 under active development and debugging, we should not expect | 36 knowledge of any correspondence between commands and responses |
| 69 perfect lock-step behaviour on the interface; instead, our | 37 they normally elicit. |
| 70 fc-tmsh should be fundamentally asynchronous: when the user | |
| 71 enters a command, the appropriate command packet is sent to the | |
| 72 target, but we are prepared for target->host messages at any | |
| 73 time, without enforcing strict correspondence to issued | |
| 74 commands: let the developer-operator sort that out instead. | |
| 75 | 38 |
| 76 The usage scenario I envision is that one will need to run rvinterf first | 39 g23sh Like fc-tmsh (same asynchronous design), but for GPF/G23 rather |
| 77 (either directly or through fc-xram) in one terminal window, leave it running, | 40 than ETM. This tool and FreeCalypso project's understanding of |
| 78 then run fc-tmsh in another terminal window, and have it connect to rvinterf | 41 GPF/G23 in general are currently in the earliest stages, so it |
| 79 via the local UNIX domain socket interface. Why such complexity, why not have | 42 is premature to try to describe it any further at this point. |
| 80 one program do everything? I suspect that in many debug/experimentation | 43 |
| 81 sessions it will be necessary to use fc-tmsh on "noisy" targets, i.e., in | 44 fc-sendsp Precursor to g23sh; even less worthy of further documentation. |
| 82 scenarios where the target is continuously spewing its "normal" voluminous debug | 45 |
| 83 trace output, such that the "interesting" output as in responses to commands | 46 fc-fsio This program uses RVTMUX, ETM and TMFFS2 to access the live file |
| 84 gets drowned in the noise. In such a scenario it would be helpful to have one | 47 system of a running GSM firmware. Of the existing proprietary |
| 85 terminal window in which one sees the transcript of the fc-tmsh session, | 48 firmwares, the only one that implements the TMFFS2 protocol |
| 86 consisting of issued commands and received ETM responses without the general | 49 required for fc-fsio is Pirelli's, to the best of our knowledge. |
| 87 noise, and another window in which one sees all RVTMUX interface activity in | 50 This program connects to the target through rvinterf, but it |
| 88 real time - the latter would allow one to observe commands having side effects | 51 differs from fc-tmsh in that it operates in a synchronous |
| 89 outside of ETM, such as crashing the whole fw. :-) | 52 manner: the flow of operation is driven by user commands (just |
| 53 like in fc-loadtool), and every time the program sends an ETM | |
| 54 command packet to the target, it expects a lock-step response. | |
| 55 | |
| 56 tfc139 See ../doc/Compal-unlock | |
| 57 | |
| 58 The fc-fsio, fc-tmsh and g23sh tools connect to the target not directly, but | |
| 59 via rvinterf. Two usage scenarios are supported: | |
| 60 | |
| 61 1. The user explicitly runs rvinterf (either directly or secondary to fc-xram, | |
| 62 when testing an experimental FreeCalypso firmware ramImage), leaves it | |
| 63 running (either backgrounded or in its own terminal window), and then runs | |
| 64 one of the "client" programs: fc-fsio, fc-tmsh or g23sh. The two programs | |
| 65 connect via local UNIX domain sockets on the host machine. | |
| 66 | |
| 67 2. All of the "client" programs under discussion can also launch rvinterf | |
| 68 themselves. An instance of rvinterf lauched in this manner becomes a child | |
| 69 process of the "client" program, terminating together with it, and the two | |
| 70 processes communicate via an unnamed and unbound socket pair. |
