view doc/Simtool-command-shell @ 171:4d747b86da00

simtool code: readef command implementation split off
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 02 Mar 2021 03:03:49 +0000
parents 13dea9b95afc
children
line wrap: on
line source

Our fc-simtool and fc-uicc-tool operate as interactive shells.  When you run
either program, it selects the "card reader" device it will use and connects to
the card via pcsc-lite facilities, and then it gives you an interactive command
shell.  The communication session with the card (including vital volatile state
like PIN authentication and currently selected directory and EF) remains
unbroken until you exit the shell, at which point our tools tell pcsc-lite to
power down the card.

The actual useful commands available in fc-simtool and fc-uicc-tool are
described in other documents; this document describes program invokation and
the command shell itself.

Program invokation
==================

Both tools share the same command line structure:

fc-simtool [-p num] [batch-command]
fc-uicc-tool [-p num] [batch-command]

If you run either tool without any options or arguments, it will select the
first reader supported by pcsc-lite (reader number 0, same as if -p0 was
specified), and if the card connection is successful, it will enter the
interactive command shell.  Use the -p num option to select a different reader
number; to tell which reader number is which, use fc-pcsc-list to list all
available readers.

Aside from the -p num option, any arguments given on the command line suppress
the default interactive shell and select the tool's batch mode instead - the
arguments specify the command to be executed.  For example, the following
invokation will read and display the inserted card's ICCID, and immediately
exit:

fc-simtool iccid

This batch mode is particularly useful with the exec command described further
in this document.

Command shell basic features
============================

The interactive command shell prompt is "simtool> " in fc-simtool and "uicc> "
in fc-uicc-tool.  In this interactive command shell mode commands are entered
naturally, with white space separating the command keyword and any arguments.
Arguments containing spaces need to be enclosed in double-quotes as in
"quoted string"; our tools have two main instances where such complex arguments
are used:

* Many of our commands, particularly low-level ones, take hexadecimal byte
  strings as arguments.  In such hex byte strings each byte must be given as
  exactly two hex digits (no 0x and no single-digit bytes for small values),
  but spaces between bytes for human readability are optional.  If these
  optional spaces are included, the whole argument needs to be included in
  double-quotes.

* Some of our commands take arguments that represent GSM 03.38 text strings,
  using our ASCII representation format for such strings that is defined in the
  SIM-data-formats document in the freecalypso-docs repository.  If these
  arguments contain spaces, they need to be enclosed in double-quotes, and any
  embedded '"' characters need to be entered as \".

Output redirection
==================

Most of our information retrieval and dumping commands support output
redirection at the tool-internal command shell level.  For example, the
following command will list the SIM Service Table (SST) on the terminal and
redisplay the "simtool> " prompt:

simtool> sst

The following form of the same command will write the output to the named file
and not send anything to the terminal:

simtool> sst > sst-list-file

If you try the '>' output redirection construct on a command that does not
support it, you will get an error message.

Working with the local host file system
=======================================

Because our tools provide a lot of commands for saving SIM data into host files
(the above output redirection mechanism and some binary file writes) as well as
reading data and command scripts from host files, having a sensible interaction
with the local host file system is important.  Users should have a convenient
way to see what directory they are in, change their current directory, and
invoke other local host commands like mkdir from inside their fc-simtool session
- hence the following features are provided:

* Any command beginning with '!' is passed to the system shell /bin/sh - the
  primary use of this feature is to be able to run !pwd to see what directory
  you are in, and more rarely do other things like !mkdir mysimdata.

* The built-in cd command changes the current directory of the running
  fc-simtool process - because of the way UNIX works, cd is one command that
  cannot be usefully executed via the '!' shell invokation mechanism.

Command script facility
=======================

Both fc-simtool and fc-uicc-tool implement an exec command:

exec script-file

This command opens the named file, reads it line by line, and executes each
read line as a command.  Whitespace-only lines are skipped, and any lines
beginning with '#' are treated as comments.  exec scripts can be nested.  If
the execution of any command encounters an error, all nested scripts are
stopped: we implement the "stop on first error" policy.

If the given script file name contains any slashes, it is used as-is.  If there
are no slashes in the requested script file name, the file is sought first in
the script installation directory /opt/freecalypso/sim-scripts, and if it is
not found there, then in the current directory.

Data file sourcing
==================

All fc-simtool and fc-uicc-tool commands that read from ASCII-based data files
named as arguments implement the same search logic as the exec command.  This
design allows complex SIM programming scripts to be installed in
/opt/freecalypso/sim-scripts along with their data files, ready to be invoked
as needed.