scmxx

## Name

scmxx — exchange data with your Siemens mobile phone

## Synopsis

`scmxx` [`--device` `device`] [`--baud` `baudrate`] [`--quiet`] [`--verbose`] [`--reset`] {[`--info`] | [`--set-time`] | [`--mem-info`] | [`--lock-info`] | [ `--lock` `lock` {[`--enable`] | [`--disable`]} ] | [ `--set-smsc` `--number` { `number` | `name` } ]}

`scmxx` [`--device` `device`] [`--baud` `baudrate`] [`--quiet`] [`--verbose`] [`--reset`] [`--out` `file`] [`--pipe` `pipe`] {[`--remove`] | [`--send`] | [`--get`]} [`--binary`] [`--mem` `memory`] [`--slot` `slot`] [`file...`]

`scmxx` [`--device` `device`] [`--baud` `baudrate`] [`--quiet`] [`--verbose`] [`--reset`] [`--out` `file`] [`--pipe` `pipe`] [`--pin` `PIN`] {[`--remove`] | [`--send`] | [`--get`]} [`--pbook`] [`--mem` `memory`] [`--slot` `slot`] [`--text` `text`] [ `--number` { `number` | `name` } ] [`file...`]

`scmxx` [`--device` `device`] [`--baud` `baudrate`] [`--quiet`] [`--verbose`] [`--reset`] [`--out` `file`] [`--pipe` `pipe`] {[`--remove`] | [`--send`] | [`--get`]} [`--sms`] [`--mem` `memory`] [`--slot` `slot`] [`--text` `text`] [ `--number` { `number` | `name` } ] [`--direct`] [`--flash`] [`--srr`] [`--unicode`] [`file...`]

`scmxx` [`--help`] [`--version`]

## Description

SCMxx can copy files to and from a Siemens mobile phone and also delete stored files. Files can read from a given file or through stdin and stored to a given file or stdout. SMS can also be directly sent or received without storing in the mobile phone. SCMxx was tested with several mobile phones manufactured by Siemens (only S25 and later).

## Options

`--device (-d)`

  specify another than the compiled in device. This overwrites the SCMXX_TTY environment variable and the compiled-in value. For linux systems, this may be e.g. /dev/ttyS0 for serial connections, /dev/ircomm0 for infrared connections and /dev/rfcomm0 for bluetooth connections. If native bluetooth support is compiled in, you can also use the format bt://[xx:xx:xx:xx:xx:xx]:n or bluetooth://[xx:xx:xx:xx:xx:xx]:n to specify a bluetooth address xx:xx:xx:xx:xx:xx and the bluetooth channel n (default is 1). The channel is optional, omit the colon in this case, too.

`--baud (-b)`

  specify the device's speed. Valid values are dependent on the system but may be 9600, 19200, 38400, 57600 or 115200. The default value is 19200. The S25 and *35i only work at the 19200, all later phones also work at full serial speed. Infrared connections may be an exception to these rules (dependent on the infrared donle). This overwrites the SCMXX_BAUD environment variable and the compiled-in value.

`--out (-o)`

  specify a file to use. When getting binary files with "all", the slot number, a dot and the filetype are appended. When sending or deleting, this parameter has no use but the last parameters that should be valid files. Stdout must be explicitly selected with the dash ("-"), by default nothing is written to stdout. There is nothing appended to "-" when getting multiple files.

`--pipe (-p)`

  specify a pipe to another program. When getting with "all", every file is piped to this programs on its own (only for --binary and --sms).

`--quiet (-q)`

  decreases verbosity by 1

`--pin`

  use this option if a PIN code is required for access

`--verbose (-v)`

  increases verbosity by 1

`--reset`

  try to reset the phone, so it gets accessible again. It may happen that the phone does not answer on the serial interface anymore, especially with a previous user-interrupted file transfer. This simply blindly sends some special characters.

`--help (-h)`

  print the help message

`--version`

  print the version number

`--remove (-r)`

  removes an entry from the phone. When specified with --sms and --get, this will get'n'delete. When specified with --sms and --send, this will send'n'delete.

`--get (-g)`

  get an entry and save it to a file. When specified with --sms and --remove, this will get'n'delete. When specified with --sms and --send, this will get'n'send.

`--send (-s)`

  sends a file to the phone. When sending sms, you might want to take a look at the option --direct, too. When specified with --sms and --remove, this will send'n'delete. When specified with --sms and --get, this will get'n'send.

`--info (-i)`

  collect information from the phone, --mem-info can be used as a trigger to display a more complex listing of the available memories

`--mem-info`

  display information about available memories and their slots and other information. It uses the same format as --mem=? (see below) and can also be use as a trigger for --info to replace the short memory listing.

`--lock-info`

  display status of locks. It can also be use as a trigger for --info to replace the lock name listing.

`--lock`

  specify a lock that you can enable or disable. For some locks, a password is needed (see --pin)

`--enable`

  enable e.g. a lock

`--disable`

  disable e.g. a lock

`--dial`

  dial a number (requires --number). The program returns either after 10 seconds or when the call reached the other side.

`--hangup`

  hangup all currently active calls

`--set-time`

  synchronize time to phone. The use of tools like ntpdate is recommended before using this.

`--set-smsc`

  set the SMSC number (requires --number)

`--binary (-N)`

  select binary file transfer mode

`--pbook (-P)`

  select phonebook transfer mode

`--sms (-S)`

  select short message service mode

`--mem`

  select a memory to access. Slot numbers may vary depending on the selected memory. See the output of --info for the supported memory types. Not using this option triggers the default behaviour (if a default behaviour was defined). There is a special string "?" that outputs in the same format as --mem-info but only for the selected mode.

`--slot`

  select a slot to access. See the output of --mem-info or --mem=?. Not using this option triggers the default behaviour (if a default behaviour was defined). The special string "all" defines the whole range of available slots for the selected memory and mode and, except with --sms, cannot be used with --send. For SMS, there are four additional special strings: "read", "unread", "sent" and "unsent". The latter two can be used with --send. For phonebook access, there is the additional special string "last". When this option is omitted with --send, scmxx tries to find an empty slot (that may or may not take long). Finding an empty slot is not supported for phonebooks, yet. When a slot was specified and also multiple files to upload, the specified slot is the starting point to search for empty slots. Overwriting multiple, non-empty slots is not supported, yet, except for the special case "all".

`--text (-t)`

  specify content text of short message or text of the phonebook entry. For phonebook entries, the length limit may depend on the selected phonebook (see output of --mem-info or --mem=?).

`--number (-n)`

  specify number to send the short message to or the number for the phonebook entry. Note that the number may have a leading '+' for international numbers. It is normally limited to 20 digits (without the '+') which is certainly enough.

`--direct`

  send/get short messages without storing in the phone. This is not default because you will certainly be charged for it when sending. With direct getting, SMS that are not of type DELIVER are still stored on the phone (scmxx cannot decode those messages, yet).

`--unicode`

  send the short message and use UCS-2 (16bit unicode) as character set. You do not need to specify this parameter to enable unicode sms decoding.

`--flash`

  set the class0 in the data coding scheme field that is normally interpreted as "immediate display". Not all receiving entities support this. Note that a second sms of this type normally overwrites a previous one without asking! Its use is not recommended.

`--srr`

  this sets the StatusReportRequest bit in the pdutype field of the sms pdu. It depends on the SMSC if this is honored. With some providers, this produces additional costs!

`--sort`

  sort the messages on printing to chosen output. Possible sorting methods are "type", "slot" and "type,slot". "type" sorts for the type of the short message with an internal order of unsupported types first, then SMS-SUBMIT, SMS-STATUS-REPORT and SMS-DELIVER. "slot" sorts for the slot of the short message. "type,slot" does sorting like "type" first and sorts each type like "slot". Default is to not sort at all (order depends on phone).

`--pin`

  enable pin usage. Use this only if there was an error message that asks for a PIN or PUK. For a PIN, this is the corresponding "<PIN>", for a PUK, it is "<PUK>,<new PIN>". The value is only used once. Consider using the pin file (see below) instead of this option.

`--system-charset`

  define the system character set instead of using the return value from nl_langinfo(CODESET). This is to work around systems that do not support unicode locales like UTF-8 or when data from a different system with a different locale is used as input. Usually, you do not need this option.

## Examples

Send an bitmap file to the phone as bitmap (logo):

  scmxx `--send` `--binary` `--mem`="bmp" `--slot`=0 myfile.bmp

Get a Bitmap from the phone and save it into a new file:

  scmxx `--get` `--binary` `--mem`="bmp" `--slot`=0 `--out`=myfile.bmp

Get all unread (default on get) short messages and output to stdout:

  scmxx `--get` `--sms` `--slot`=unread `--out`=-

  scmxx `-gS` `-o`-

Send a short message directly (not stored in the phone):

  scmxx `--send` `--sms` `--direct` `--number`=123 `--text`="test"

Get a phonebook and store it to a file:

  scmxx `--get` `--pbook` `--mem`=SM `--out`=SM.pb

Modify a specific slot (33) in phonebook memory SM:

  scmxx `-sP` `--mem`=SM `--slot`=33 `--number`=123 `--text`="test"

## Notes

The output of text (phonebook and sms) depends on the character set of your current locale. Input is the same. This has the advantage of localization but may have the drawback that all other characters must be entered by a sequence \XXXX where X is a hex character (e.g. \20ac for EuroSign). This is a 16bit representative of the unicode value. The \XXXX is only used for output with the intention to read it again at a later time. For normal output, characters that cannot be displayed in the current local are replaced by a '?'. Using an UTF-8 based locale will make sure that all character can be converted. The newline character can be entered using the common \n and '\' must be masked with itself. In bash, this might even result in a needed input like "\\\\".

## Connection problems

There are additional parameters --ignore-serial-bits (default) and --keep-serial-bits. Use it only when you get no response from the phone at all. Which setting is needed depends on the cable and serial port and cannot be determined automatically.

If you experience timeouts on the first command, try the --start-delay=<seconds> parameter.

Another parameter --device-timeout=<seconds> is provided for the case that your phone ever needs more than default value of 10 seconds to answer. Actually, this should be more than enough but one never knows. The minimum value is 1, values higher than 25 mean "forever".

## Security

The --pin option should be used with care. The option and its argument are visible in the process list.

## Environment

SCMXX_TTY

  see --device for decription

SCMXX_BAUD

  see --baud for description

## Files

~/.scmxx/cache.pb

  this file serves as lookup file during short message output (for recipient/sender address) and for number aliasing for --number on sending a short message. The format is the same as a phonebook file (slot numbers don't matter but must be present).

~/.scmxx/config

  this file can contain long options (without the --), the arguments is seperated from the option name by an '='. Any amount of spaces at beginning of line, before and after the seperator are allowed. A '#' at beginning of line marks this line as comment. Examples:

  #choose a device to access
  device = /dev/ttyS0
  #always send SMS using UCS-2
  unicode

~/.scmxx/pin

  This file is used as an alternativ to the --pin command line option. The file MUST NOT be group readable/writeable or world readable/writeable! It also MUST be a regular file, not a symlink. SCMxx refuses to use the file if this is not the case. If a PUK value is requested by the phone, the corresponding PIN must also be defined. The only necessary format elements are '{', '=', ';' and '}'. Spaces and newlines are ignored. The file has the following format:

  sim 262031234567890 {
  pin = 1234
  puk = 12345678;
  pin2 = 4321;
  puk2 = 87654321;
  }
  device 350123456789012 {
  type SIM {
  pin = 0000;
  puk = 0000;
  }
  }

  "sim" sections use the IMSI as identifier, "device" sections use the IMEI as identifier (see output of --info). Since the IMSI is needed, you canNOT switch the phone on with this! The "type" sub section in the device section has the following idenfifiers:

  SIM

    device code (theft protection)

  FSIM

    very first inserted SIM

  NET

    network personalization

  NETSUB

    network subset personalization

  SP

    service provider personalization

  CORP

    corporate personalization

## Author

Hendrik Sattler `<post@hendrik-sattler.de>`