annotate doc/Voice-pseudo-modem @ 377:db0874a11f57

beginning of C11x target support
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 13 Jan 2018 18:14:21 +0000
parents 3f1a587b3a84
children 7bdd370f6f59
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
376
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 Back when TI's TCS211 fw existed in the traditional world of phone handset and
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 cellular modem manufacturers, there were only two principal classes of target
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 devices for it: handsets and modems. The former have local UI hardware (LCDs
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 and keypads) and run firmware that works with this UI hw, the latter have no
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 such hw and run firmware that expects to be controlled by an external host via
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 AT commands.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 But the peculiar circumstances under which our FreeCalypso family of projects
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 operates give rise to a third possibility: what happens if one were to run
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 non-UI-capable firmware that expects control via AT commands on a hardware
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 target device that was originally designed to be an end user phone handset, in
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 our case either Motorola C1xx or Pirelli DP-L10? The result is what I call a
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 voice pseudo-modem (VPM): the phone's LCD stays dark, the buttons do nothing
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 and the device expects to be controlled via AT commands as if it were a modem
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 like the one in GTA01/02 smartphones, but there is no practically usable way to
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 make use of any data services, only voice and SMS, hence my VPM term.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 It needs to be noted clearly that the VPM hack described in this article is NOT
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 a substitute for proper modem hardware - if your area of interest is Standard
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 Modem functionality (the full set of GSM and GPRS services accessed via AT
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 commands), then you need a proper hardware platform for it, such as our FCDEV3B
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 hardware product. However, support for VPM operation in FreeCalypso exists for
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 the following purposes:
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 * On some hw targets the VPM configuration can be an intermediate stepping stone
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 toward potential future UI (see the Handset-goal article) - this situation
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 holds on the C139.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 * Being able to run FreeCalypso fw in the VPM configuration on Mot C1xx hw that
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 many people already have and that may still be readily and cheaply available
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 makes our firmware accessible to those who are not able to afford our
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 expensive FCDEV3B hardware.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 * If you have a Pirelli DP-L10 phone (now very rare and hard to get, but were
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 readily available in early 2013 when I started FreeCalypso): while there is
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 unfortunately very little chance of being able to turn it into a practically
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 usable Libre Dumbphone with FreeCalypso (the unwanted extra chips sans docs
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 which we don't know how to power down are a killer), running FreeCalypso fw
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 on the Pirelli in the VPM configuration is so easy and convenient that I do
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 it all the time during development and testing.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 Building firmware for VPM operation
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 ===================================
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 The following two firmware build configurations (in the ./configure.sh sense)
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 are appropriate for VPM usage:
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 hybrid-vpm This is the TCS2/TCS3 hybrid config (see the Modem-configs
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 article) that has all data services (CSD, fax and GPRS)
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 disabled and FCHG (new FreeCalypso battery charging driver)
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 enabled. The removal of data services code makes the firmware
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 image size and its RAM usage significantly smaller than all
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 other configurations, making hybrid-vpm the smallest of all
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 FC Magnetite firmware configs.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 l1reconst-chg This is a variant of the stable l1reconst config (again, see
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 the Modem-configs article) that has our FCHG battery charging
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 driver enabled. Because this config uses the TCS211 blob
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 version of the G23M PS, data services cannot be disabled, and
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 the associated code sits in the firmware image as dead weight.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 Thus this l1reconst-chg config produces much heavier fw images
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 than hybrid-vpm, and should only be used when you suspect a bug
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 in the new TCS3 G23M or ACI code and would like to run the old
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 TCS2 version for comparison.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 Mot C139/140 phones have enough flash and RAM to run the l1reconst-chg config
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 (with data services code as non-exercisable dead weight), but the more basic
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 C11x/12x models (the ones with black&white LCDs) have smaller memories, and the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 only FC Magnetite config that is small enough to fit into their tiny flash and
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 XRAM capacity is hybrid-vpm. As of this writing there is no official support
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 for the C11x target yet, but it is currently under investigation, now that we
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 have a functional firmware config that is small enough to fit.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 Playing with FreeCalypso VPM on C1xx phones
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 ===========================================
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 If a Mot C11x phone is flashed with a FreeCalypso firmware image in the VPM
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 configuration (see C139-Howto for the messy details of how to do it), it will
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 behave as follows:
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 * The LCD will remain dark and the buttons will do nothing no matter what.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 * If you plug in Motorola's charging adapter (it's a regulated 5 VDC power
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 source, but with a non-USB connector) and you had properly installed the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 charging config file when creating the aftermarket FFS for FreeCalypso, the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 battery will charge. When you unplug the charging adapter, if there is no
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 host computer running FC host program rvinterf connected to the phone
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 serially, the phone will power off some 60 to 80 s after the charger unplug.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 * If you press the power button while the phone is off, even momentarily, the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 phone will power on and boot (with nothing on the LCD as usual), but if the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 headset jack serial port is not connected to a computer running rvinterf, the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 firmware will execute a power-off after at most 80 s.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 * In order to make the phone-turned-VPM do anything useful, you will need to
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 connect the headset jack serial port to a host computer running FC host tools,
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 run rvinterf to keep the phone alive (keep it from automatically powering
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 off), and use FC host utility fc-shell to issue AT commands to it over the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 RVTMUX channel managed by rvinterf.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 * The phone will remain on (i.e., the fw won't execute an automatic power-off)
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 for as long as there is either a charging power adapter plugged in or a
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 connected host computer running rvinterf - if there is no charging power,
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 the fw will send periodic keepalive queries to check for the presence of a
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 connected rvinterf process.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 Playing with FreeCalypso VPM on a Pirelli DP-L10
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 ================================================
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 There are two ways in which one can play with FC VPM firmware on a Pirelli:
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 * FC VPM fw can be flashed into the phone just like on Mot C1xx. To make this
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 approach sensible, you will also need to craft and install a charging config
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 file that will cause our FCHG driver to initiate the charging process
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 automatically when the battery voltage falls below some sensible threshold,
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 without requiring manual charging start via AT@CHG=1. In this case the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 reflashed phone will behave like C1xx in the previous section, except that
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 the charging power source and the host computer connection are one and the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 same in the case of Pirelli's USB.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 * The other approach is to keep Pirelli's original fw in the flash, let the
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 phone function normally when not in the middle of a FreeCalypso VPM session,
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 and load our FC VPM fw into RAM via fc-xram, making use of this phone's huge
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 RAM that can hold an entire functional fw image without flashing. This is
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 the Mother's preferred method.
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126
3f1a587b3a84 doc/Voice-pseudo-modem written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 See the Pirelli-Howto article for the details.