blob: b0a52caa6dfcf26fe3182d8f277fe692020b57c4 [file] [log] [blame] [edit]
The Virtual Braille Display Driver
----------------------------------
This is a virtual braille display driver for BRLTTY. It uses a simple
text-based protocol over a socket to transmit information to, and to receive
information from, the virtual braille display application (from now on, "the
display"). The intention of this driver is two-fold:
* Give interested developers the ability to test BRLTTY without requiring
access to a real braille display.
* Enable the implementation of a visual braille display based on this driver
which allows a sighted person to see, and even to experience, how a blind
person uses a braille display to work with a computer.
This driver supports the following devices:
client:[address]
The driver periodically tries to connect to the display at the specified
network address.
server:[address]
The driver waits on the specified network address for a connection
request from the display.
If the network address isn't specified then the driver's default TCP/IP port on
the local host is used. The address may be:
On Unix systems: /path/to/unix-socket-file
If the address starts with a slash (/) then it's interpreted as the path
to a Unix socket file. If the driver is the client then the socket file
must already exist. If the driver is the server then the socket file is
created by the driver and must not already exist.
On Windows NT/2000/XP/2003 systems: \\.\pipe\pipename
If the address starts with a backslash (\) then it's interpreted as the
path to a named pipe. If the driver is the client, then the named pipe
must already exist. If the driver is the server then the named pipe is
created by the driver and must not already exist. Beware of the shell's
interpretation of backslashes.
On all systems: [host][:[port]]
A TCP/IP address. Both the host and port components of the address are
optional. The delimiting colon (:) is only required if the port is being
specified. The host may be a name, an alias, or an IPV4 address (in
dotted-decimal form); if it's omitted then the local host is assumed. The
port may be a service name or a port number; if it's omitted then 35752
is assumed.
The Protocol
------------
After the connection between the driver and the display is complete, data is
exchanged between them via command lines. The driver first waits for a "cells"
command in order to determine the dimensions of the braille window. After this
has been taken care of, commands freely flow in both directions without any
restrictions. The braille window dimensions are appropriately reconfigured
whenever another "cells" command is received. The "quit" command, which is also
recognized during the initial wait for the first "cells" command, instructs the
driver to close its end of the connection and to restart.
The command lines are in plain text. Each is terminated by a line-feed [0X0A]
(usually known on Unix systems as a new-line). A carriage-return [0X0D] may
optionally precede the line-feed. Command lines sent to the display contain a
carriage-return if, and only if, the most recent command line received from the
display contained one.
Command lines are composed of space-delimited words, numbers, and strings.
Space consists of one or more blanks and/or tabs. Case is only significant
within a string.
A "number" may be specified as decimal, octal, or hexadecimal. The usual C
syntax is recognized. If the first digit is 0 then the number is octal. If the
first digit isn't 0 then the number is decimal. If the number begins with
either 0X or 0x then the number is hexadecimal. The following three numbers are
the same:
15 Decimal
017 Octal
0XF Hexadecimal
A "string" is a sequence of characters (including space characters) enclosed
within double quotes ("). Special characters within a string are prefixed with
a backslash (\). The following special characters are supported:
\\ A literal backslash.
\" A literal double quote.
\Xxx Any character specified via its hexadecimal value.
For example: "A \" (double quote) must be escaped with a \\ (backslash)."
A "dots" is a string which describes a braille character sequence. Space
(blanks and/or tabs) within the string are ignored. The braille characters are
separated from one another by a vertical bar (|). Each braille character
consists of the numbers (1 through 8) of the dots which represent it. For
example, the first three letters of the English alphabet would be "1|12|14".
Commands Recognized by the Driver
---------------------------------
Cells columns [rows]
The number of columns and rows in the text portion of the display. If the
number of rows isn't supplied then 1 is assumed. This is the first command
which the display must send to the driver. It may be sent at any other time
as well to notify the driver that the dimensions of the text portion of the
display have changed.
Quit
Upon receipt of this command, the driver closes its end of the connection
and then restarts. It's recognized at any time, including during the initial
wait for the first "cells" command from the display.
<basic-command> [state]
A basic command for the BRLTTY core. It may be any of the BRL_CMD_ constants
(without the BRL_CMD_ prefix) defined within "brldefs.h", e.g. LnDn. The
optional <state> operand (which may be either on or off), when applied to an
attribute toggling command, forces that attribute to the specified state.
<cell-command> number
A cell command for the BRLTTY core. It may be any of the BRL_BLK_ constants
(without the BRL_BLK_ prefix) defined within "brldefs.h", e.g. Route. The cell
number, starting at 1 for the leftmost cell, must be supplied. If the
display has more than one row then the cells for the top row are counted
first, e.g. if the display has 32 columns and 2 rows then 35 refers to the
third cell on the second row.
<key-command> [number]
A key command for the BRLTTY core. It may be any of the VPK_ constants
(without the VPK_ prefix) defined within "brldefs.h", e.g. Return. The
Function command requires that the function key number, starting at 1, be
supplied. All the other commands in this set don't accept a number operand.
Commands Sent to the Display
----------------------------
Braille dots
Cells to be presented on the text portion of the display. Excess cells in
the data should be ignored. Excess cells on the display should be blank.
Visual string
Characters to be presented on the visual portion of the display. Excess
characters in the data should be ignored. Excess characters on the display
should be blank.
Status dots
Cells to be presented on the status portion of the display. Excess cells in
the data should be ignored. Excess cells on the display should be blank.
<attribute> <setting>
The current setting of any of several attributes within the BRLTTY core.
These are only sent if "Status Style" is set to "Generic". <attribute> is
the name of any of the STAT_ constants (without the STAT_ prefix) defined
within "brldefs.h", e.g. BrlRow. <setting> is a number. Rows and columns
start at 1. Flags use 0 for "off" and 1 for "on".
Security Implications
---------------------
Please be aware that this driver, when used carelessly, might open severe
security holes. Connections to or from this driver are in no way authenticated
so you yourself need to take care of protecting access to a BRLTTY instance
which uses it. In particular, by sending out information about the currently
active virtual console, this driver might expose valuable information about
your system to a potential attacker. The attacker might also use the
<key-command> family of commands to directly manipulate, possibly even
inputting data to, your current, or even another, virtual console. In effect,
this driver could be used to completely remote-control your system.
Please be aware of these implications when experimenting with this driver. If
you're using TCP/IP, be sure to protect access to the used host and port via
facilities such as firewalls. You should take special precautions on multi-user
systems where untrusted people could use unprotected access to this driver to
gain root access to the machine.
-- Mario Lang <mlang@delysid.org>