FreeCalypso > hg > freecalypso-tools
comparison doc/User-phone-tools @ 388:3d45660f78f0
doc/User-phone-tools article written
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 11 Mar 2018 06:32:00 +0000 |
| parents | |
| children | b1864e3f8fb4 |
comparison
equal
deleted
inserted
replaced
| 387:b61b81d3cece | 388:3d45660f78f0 |
|---|---|
| 1 FreeCalypso User Phone Tools are a new software addition to the FreeCalypso | |
| 2 family. These tools are programs that run on a Unix host computer such as a | |
| 3 GNU/Linux PC or laptop and communicate with a FreeCalypso phone or modem via | |
| 4 the standard AT command interface, rather than any of the formerly proprietary | |
| 5 interfaces specific to TI's internal architecture. The following tools are | |
| 6 currently available: | |
| 7 | |
| 8 fcup-at Issues an arbitrary AT command given on the command line. | |
| 9 | |
| 10 fcup-settime Issues AT+CCLK command to the target to set its clock to the | |
| 11 host computer's notion of local time. | |
| 12 | |
| 13 fcup-smdump Retrieves a dump of SMS records (received, sent or stored | |
| 14 messages) from the FC device's SMS storage (currently SIM | |
| 15 storage; ME storage may be implemented in the future), | |
| 16 optionally deleting them from the severely space-limited | |
| 17 SIM/ME storage afterward. | |
| 18 | |
| 19 fcup-smsend* Tools for sending outgoing SMS from a host computer through a | |
| 20 FreeCalypso phone or modem and/or writing such outgoing SMS | |
| 21 into the FC device's SMS storage. | |
| 22 | |
| 23 fcup-smwrite Debug and development tool: writes arbitrary message records | |
| 24 into the FC device's SMS storage (currently SIM storage) in any | |
| 25 of the possible 4 states, with arbitrary incoming or outgoing | |
| 26 SMS PDU content. | |
| 27 | |
| 28 Because these tools communicate with the target via standards-defined AT | |
| 29 commands, in theory they ought to work with any AT-command-speaking 3GPP phone | |
| 30 or modem and not just our own FreeCalypso. However, experience has shown that | |
| 31 in the case of the common proprietary implementations, practice does not match | |
| 32 theory: when I (Mychaela) tried these same AT commands against a random | |
| 33 off-the-shelf proprietary modem (Huawei E303 USB stick modem for 3G), the | |
| 34 following problems were seen: | |
| 35 | |
| 36 * The essential AT+CMGL=4 command for retrieving the full set of SMS records | |
| 37 from SIM storage in PDU mode appears to be broken: all I got was a hang. | |
| 38 Its text mode counterpart AT+CMGL="ALL" produces incomplete output. | |
| 39 | |
| 40 * Qualcomm/Huawei's implementation of the AT command interface does not allow | |
| 41 AT+CSCS to be set to "HEX"; our fcup-smdump implementation uses this setting | |
| 42 so that the phonebook names returned along with SMS PDUs in the +CMGL | |
| 43 responses can be parsed reliably no matter what weird characters they might | |
| 44 contain. | |
| 45 | |
| 46 * Setting AT+CSCS to "8859-1" is not supported either; this setting is used by | |
| 47 our fcup-smsend and fcup-smsendmult tools when sending in text mode. | |
| 48 | |
| 49 * Sending outgoing SMS with fcup-smsend in PDU mode (which does not touch | |
| 50 AT+CSCS) works in that the message goes out, but the tool complains afterward | |
| 51 because the echo after the ^Z is different from what our tools expect. | |
| 52 | |
| 53 Because of these quirks, our FC User Phone Tools officially work only with our | |
| 54 own FreeCalypso phones and modems, and are not expected to work against various | |
| 55 proprietary implementations. Let us not forget that the broken and buggy nature | |
| 56 of the common proprietary implementations is the very reason why we need | |
| 57 FreeCalypso in the first place. | |
| 58 | |
| 59 Target interface options | |
| 60 ======================== | |
| 61 | |
| 62 Our fcup-* tools can communicate with the AT-command-speaking target in one of | |
| 63 two ways: | |
| 64 | |
| 65 * The default is the standard AT command interface over a dedicated UART. As | |
| 66 of this writing, the only FreeCalypso device that provides a full-featured AT | |
| 67 command interface of this kind is our FCDEV3B modem, but the ultimate goal of | |
| 68 the project is to build our own end user phone handset (a Libre Dumbphone) | |
| 69 that will also provide a full-featured AT command interface on its USB port | |
| 70 via a built-in CP2102 or FT232R chip. | |
| 71 | |
| 72 * As a dirty hack, one can run FreeCalypso GSM fw on some alien hw targets, | |
| 73 currently Motorola C139 and Pirelli DP-L10. In this hacked-up configuration | |
| 74 there is no dedicated UART available for a standard AT command interface, but | |
| 75 there is a hack that allows a limited subset of AT commands to be passed over | |
| 76 the RVTMUX binary packet interface provided by the running FreeCalypso GSM fw. | |
| 77 Our fcup-* tools can work with such targets to a limited extent. | |
| 78 | |
| 79 The AT-over-RVTMUX mechanism was originally invented back in 2015 as a | |
| 80 development aid, and was never intended for production use or to support any | |
| 81 kind of end user functionality. One of its limitations is that the strings | |
| 82 that are sent to ATI via this interface are limited to 254 characters, whereas | |
| 83 sending or writing SMS in hex format requires longer strings. As a result, SMS | |
| 84 sending and writing functionality via fcup-smsend* is limited when a crippled | |
| 85 Motorola or Pirelli hw target is used instead of proper FreeCalypso hardware. | |
| 86 | |
| 87 All fcup-* tools take the following common command line options for selecting | |
| 88 the AT command target interface: | |
| 89 | |
| 90 -B baud Valid only when -p is also given; selects a different baud rate | |
| 91 than the default 115200 bps. | |
| 92 | |
| 93 -n Dry run debug mode with no target interface at all: the AT | |
| 94 commands which would otherwise be sent to the target are simply | |
| 95 printed on stdout. | |
| 96 | |
| 97 -p ttyport Names the serial port to be used to talk to the target. | |
| 98 | |
| 99 -R Use the AT-over-RVTMUX interface instead of the standard AT | |
| 100 command interface over a dedicated UART. | |
| 101 | |
| 102 -X program Use the specified external program as the AT target | |
| 103 communication back-end; read the source code for the details. | |
| 104 | |
| 105 -R and -p options interact as follows: | |
| 106 | |
| 107 Neither -R The standard dedicated AT command interface is used; | |
| 108 nor -p FC_GSM_DEVICE= environment variable needs to be set | |
| 109 to point to the serial port. | |
| 110 | |
| 111 -p only The standard dedicated AT command interface is used; | |
| 112 the serial port is named with the -p option. | |
| 113 | |
| 114 -R only AT-over-RVTMUX interface is used; the fcup-* tool connects | |
| 115 to an already running rvinterf process. | |
| 116 | |
| 117 -R and -p AT-over-RVTMUX interface is used; a new rvinterf process | |
| 118 is launched to talk RVTMUX on the specified serial port. | |
| 119 | |
| 120 Retrieving and decoding stored SMS | |
| 121 ================================== | |
| 122 | |
| 123 As of this writing, our current FreeCalypso GSM firmware supports only SIM | |
| 124 storage for SMS, i.e., there is no working mechanism currently for storing SMS | |
| 125 records (received and sent messages) in the phone's or modem's own flash file | |
| 126 system. The capacity of this SIM SMS storage is determined by the SIM issuer, | |
| 127 but it is typically quite limited, on the order of 20 to 30 messages. | |
| 128 | |
| 129 The model adopted for FreeCalypso is that incoming (and possibly saved outgoing) | |
| 130 messages initially accumulate in the SIM storage as they come in, and then the | |
| 131 user periodically transfers them to her larger host computer, simultaneously | |
| 132 deleting them from the SIM storage to reclaim the limited space. The retrieval | |
| 133 of stored SMS from FreeCalypso GSM devices is accomplished with our fcup-smdump | |
| 134 utility; unlike SMS sending/writing, this operation works exactly the same | |
| 135 whether the FC GSM device offers a full-featured AT command interface or only | |
| 136 AT over RVTMUX. SMS retrieval is always done in PDU mode, and the output from | |
| 137 fcup-smdump contains raw SMS PDUs in the form of long hex strings. A separate | |
| 138 utility called sms-pdu-decode then does what its name says. | |
| 139 | |
| 140 The intended mode of usage is something like this: | |
| 141 | |
| 142 fcup-smdump -d >> long-term-sms-log | |
| 143 | |
| 144 The -d option to fcup-smdump tells it to delete the retrieved messages from the | |
| 145 SIM or future ME storage; this option should only be used when the output is | |
| 146 redirected into some kind of longer-term storage. In the above model the file | |
| 147 named long-term-sms-log becomes what its name says as new messages retrieved | |
| 148 from the FC GSM device get added to it; the format will look like this: | |
| 149 | |
| 150 Received message: | |
| 151 XXXXXX... | |
| 152 | |
| 153 Received message: | |
| 154 XXXXXX... | |
| 155 | |
| 156 Sent message: | |
| 157 XXXXXX... | |
| 158 | |
| 159 Stored unsent message: | |
| 160 XXXXXX... | |
| 161 | |
| 162 Received message: | |
| 163 XXXXXX... | |
| 164 | |
| 165 Each of the "XXXXXX..." lines will be a long hex string giving an SMS PDU. The | |
| 166 idea is that the complete record of all received and sent messages should be | |
| 167 stored on the user's big computer in raw PDU form, rather than decoded, and the | |
| 168 decoding utility sms-pdu-decode should be invoked by the user (with the message | |
| 169 log file as input) as needed for reading these messages. | |
| 170 | |
| 171 The message decoding utility sms-pdu-decode does its best to decode and show | |
| 172 everything without dropping any bits: in addition to the actual decoded message | |
| 173 characters and the From/To address (the "end user" content of the message), it | |
| 174 decodes and shows the SC address, the first octet, the MR octet for outgoing | |
| 175 messages, PID and DCS octets, the SC timestamp or the validity period fields, | |
| 176 and the UDH bytes if present. However, some bits can still be lost in the | |
| 177 decoding, which is why it is important to archive messages in the raw PDU form: | |
| 178 | |
| 179 * Padding bits used to round the From/To address and septet-based user data to | |
| 180 an octet boundary and to round any UDH to a septet boundary are not decoded. | |
| 181 | |
| 182 * If the user data portion of the message is 8-bit or compressed data (per the | |
| 183 DCS octet), it is shown as a raw hex dump, which is lossless, but if it is | |
| 184 GSM7 or UCS-2 text (GSM 03.38 character encodings), the characters are | |
| 185 converted to the user's character set (plain ASCII only by default) for | |
| 186 display, and some characters may not be displayable. | |
| 187 | |
| 188 Character sets and encodings | |
| 189 ---------------------------- | |
| 190 | |
| 191 By default, sms-pdu-decode only emits 7-bit ASCII characters in its output; any | |
| 192 GSM7 or UCS-2 characters which fall outside of this plain ASCII repertoire are | |
| 193 displayed as the '?' error character and the presence of such decoding errors | |
| 194 is indicated in the Length: header. This conservative default behaviour can be | |
| 195 modified as follows: | |
| 196 | |
| 197 -e option extends the potential output character repertoire from 7-bit ASCII to | |
| 198 8-bit ISO 8859-1. Any 8859-1 high characters are emitted as single bytes, | |
| 199 i.e., are NOT encoded in UTF-8 - this option is intended for non-UTF-8 | |
| 200 environments. | |
| 201 | |
| 202 -u option extends the potential output character repertoire to the entire Basic | |
| 203 Multilingual Plane of Unicode, and changes the output encoding to UTF-8. | |
| 204 | |
| 205 -h option causes the user data portion of every message to be displayed as a | |
| 206 raw hex dump; in the case of GSM7-encoded messages, this hex dump shows the | |
| 207 unpacked septets. | |
| 208 | |
| 209 Composing and sending outgoing SMS | |
| 210 ================================== | |
| 211 | |
| 212 When used with a FreeCalypso GSM device that offers the full AT command | |
| 213 interface (currently only the FCDEV3B modem), the primary SMS sending/writing | |
| 214 tool fcup-smsend offers the following capabilities: | |
| 215 | |
| 216 * Sending outgoing messages in either GSM7 or UCS-2 encoding; | |
| 217 * Sending either single or long (concatenated) SMS; | |
| 218 * Message body input in ASCII, ISO 8859-1 or UTF-8; | |
| 219 * Message body input either on the command line or on stdin; | |
| 220 * Any messages sent through this tool (single or concatenated) may be | |
| 221 multiline, i.e., may contain embedded newlines; | |
| 222 * Messages sent in GSM7 encoding can contain ASCII characters [\]^ and {|}~ | |
| 223 - the tool is smart enough to do the necessary escape encoding. | |
| 224 | |
| 225 The default and preferred AT command interface mode for sending/writing SMS is | |
| 226 PDU mode, which works great when the GSM device provides a proper AT command | |
| 227 interface. However, when a message of maximum or near-maximum length is being | |
| 228 submitted to the modem in PDU mode, the hex string that needs to be sent is | |
| 229 longer than what the crippled AT-over-RVTMUX mechanism can handle, thus if you | |
| 230 are using crippled Motorola or Pirelli hardware, you need to give the -t option | |
| 231 to fcup-smsend or fcup-sendmult, telling these tools to use text mode instead | |
| 232 of PDU mode on the AT command interface. In this text (-t) mode the following | |
| 233 restrictions apply: | |
| 234 | |
| 235 * Only single SMS can be sent, not concatenated; | |
| 236 * Only GSM7-encoded messages can be sent, not UCS-2; | |
| 237 * No multiline messages can be sent, i.e., no newlines in the message body; | |
| 238 * ASCII characters [\]^ and {|}~ won't be sent correctly - GSM 07.05 text mode | |
| 239 drops them. | |
| 240 | |
| 241 But if you have to use FreeCalypso on crippled hardware, the -t option does | |
| 242 allow you to send GSM7-encoded SMS of the full maximum length of 160 characters. | |
| 243 If you attempt to use PDU mode (no -t option) with an AT-over-RVTMUX back-end | |
| 244 (-R option), the send or write operation will fail if the generated PDU is | |
| 245 longer than 127 octets; the length of the generated PDU depends not only on the | |
| 246 message body length, but also on the length of the destination address. | |
| 247 | |
| 248 The invokation syntax is as follows: | |
| 249 | |
| 250 fcup-smsend [options] dest-addr [message] | |
| 251 | |
| 252 The destination address must be given on the command line; the address digits | |
| 253 may be optionally followed by a comma and an address type byte, either decimal | |
| 254 or hexadecimal with 0x prefix. The default address type is 0x91 if the number | |
| 255 begins with a '+' or 0x81 otherwise. If the message body is given on the | |
| 256 command line, it must be given as a single argument; if no message body argument | |
| 257 is given, the message body will be read from stdin. Any trailing newlines are | |
| 258 stripped before SMS encoding. | |
| 259 | |
| 260 The following options are supported, in addition to the common target interface | |
| 261 options listed earlier: | |
| 262 | |
| 263 -c Enables concatenated SMS. Concatenated SMS will be sent only | |
| 264 if the message body exceeds 160 GSM7 or 70 UCS-2 characters, | |
| 265 otherwise plain SMS will be sent whether -c is given or not - | |
| 266 but the -c option enables the possibility of sending | |
| 267 concatenated SMS. | |
| 268 | |
| 269 -C refno Enables concatenated SMS like -c, but also explicitly sets the | |
| 270 concatenated SMS reference number to be used. The number can | |
| 271 be either decimal or hexadecimal with 0x prefix. | |
| 272 | |
| 273 -q Concatenated SMS quiet mode. If -c is given without -q, the | |
| 274 tool prints a message on stdout indicating whether the message | |
| 275 was sent as single or concatenated, and in how many parts. | |
| 276 -q suppresses this additional output. | |
| 277 | |
| 278 -t Use text mode instead of PDU mode on the AT command interface. | |
| 279 This option is incompatible with -c and with -U, and introduces | |
| 280 other restrictions listed above. | |
| 281 | |
| 282 -u By default, if the message body input contains any 8-bit | |
| 283 characters, they are interpreted as ISO 8859-1. With -u they | |
| 284 are interpreted as UTF-8 instead. This option is only relevant | |
| 285 for GSM7 output encoding, and it is implemented by converting | |
| 286 the input first from UTF-8 to 8859-1, and then from 8859-1 to | |
| 287 GSM7 - thus all UTF-8 input characters must fall into the | |
| 288 8859-1 repertoire, and it is not currently possible to send | |
| 289 GSM7-encoded messages containing the few Greek letters or the | |
| 290 Euro currency symbol allowed by GSM 03.38 encoding. | |
| 291 | |
| 292 -U Send message in UCS-2 encoding instead of GSM7. Any 8-bit | |
| 293 characters in the message body input are interpreted as UTF-8, | |
| 294 and the entire Basic Multilingual Plane of Unicode is allowed. | |
| 295 | |
| 296 -w By default the outgoing message is sent out on the GSM network | |
| 297 with the AT+CMGS command. With this -w option, the message is | |
| 298 first written into SIM or future ME SMS storage with AT+CMGW, | |
| 299 then sent out on the GSM network with AT+CMSS. | |
| 300 | |
| 301 -W Write only, not send: the message is written into storage with | |
| 302 AT+CMGW and no further action is taken. The modem's +CMGW: | |
| 303 responses with message storage indices are forwarded to stdout. | |
| 304 With this option the destination address argument can be a null | |
| 305 string or omitted altogether. | |
| 306 | |
| 307 Concatenated SMS reference numbers | |
| 308 ---------------------------------- | |
| 309 | |
| 310 Every concatenated SMS transmission needs a reference number, and this number | |
| 311 needs to increment from one concatenated SMS to the next, to help message | |
| 312 recipients sort out which is which. If the reference number is not given | |
| 313 explicitly with -C, fcup-smsend creates (opens with O_RDWR|O_CREAT) a file | |
| 314 named .concat_sms_refno in the invoking user's $HOME directory; automatically | |
| 315 incrementing reference numbers are maintained in this file. The initial seed | |
| 316 is an XOR of all bytes of the current time returned by gettimeofday(2), | |
| 317 followed by simple linear incrementing; these reference numbers do not need to | |
| 318 be random in any kind of cryptographically secure sense. | |
| 319 | |
| 320 fcup-smsendmult | |
| 321 =============== | |
| 322 | |
| 323 As an alternative to sending concatenated SMS, one can use the fcup-smsendmult | |
| 324 utility to send several single (no UDH) messages in one batch. This utlity | |
| 325 supports both text and PDU modes (PDU mode is still the preferred default when | |
| 326 it can be used), and when PDU mode is used, it supports both GSM7 and UCS-2 | |
| 327 output encodings just like fcup-smsend. The messages to be sent are read from | |
| 328 stdin, and each input line produces a new message. | |
| 329 | |
| 330 The entire batch of messages can be sent to a single recipient, or each message | |
| 331 in the batch can have its own individual destination address. If the | |
| 332 destination address is given on the command line, each input line read from | |
| 333 stdin is just a message body; if no destination address is given on the command | |
| 334 line, each input line must have the following format: | |
| 335 | |
| 336 <dest addr><white space><message body> | |
| 337 | |
| 338 -t, -u, -U, -w and -W command line options are unchanged from fcup-smsend. | |
| 339 | |
| 340 If you have to use FreeCalypso on crippled hardware, fcup-smsendmult -t can be | |
| 341 a viable alternative to sending concatenated SMS, as each message in the batch | |
| 342 can be up to the maximum limit of 160 characters. | |
| 343 | |
| 344 fcup-smsendpdu | |
| 345 ============== | |
| 346 | |
| 347 This utility sends out SMS PDUs that have been prepared externally; it only | |
| 348 works in PDU mode, which limits its usefulness to high-end FreeCalypso hardware | |
| 349 with a full AT command interface. The PDUs to be sent out are read from stdin, | |
| 350 one long hex string PDU per line; one can send either a single message or a | |
| 351 batch. Because the destination address and all content details are encoded in | |
| 352 the PDU, the tool does not care if the messages are going to the same recipient | |
| 353 or to different recipients, nor does it care if they constitute a concatenated | |
| 354 SMS transmission or not. -w and -W options work the same way as in fcup-smsend | |
| 355 and fcup-smsendmult. | |
| 356 | |
| 357 fcup-smwrite | |
| 358 ============ | |
| 359 | |
| 360 This utility is a debug and development tool; it differs from fcup-smsendpdu in | |
| 361 the following ways: | |
| 362 | |
| 363 * fcup-smsendpdu can send messages out with AT+CMGS, write them into memory | |
| 364 with AT+CMGW, or do a write-then-send sequence (-w option) with AT+CMGW | |
| 365 followed by AT+CMSS. fcup-smwrite only issues AT+CMGW commands. | |
| 366 | |
| 367 * fcup-smwrite passes a second argument to AT+CMGW that sets the message state | |
| 368 to any of the possible 4 values; fcup-smsend* -W put them in the "stored | |
| 369 unsent" state. | |
| 370 | |
| 371 * The input to fcup-smsendpdu is just PDU hex strings; the input to | |
| 372 fcup-smwrite needs to have the same format as fcup-smdump output in order to | |
| 373 indicate what state each message should be written in. |
