aka TAP. The protocol used to communicate with alphanumeric paging services. It's usual means of operation is a 300bps dialup modem.

A typical session goes something like:

Server                    Client
ID=                       ESC PG1 CR
114 Welcome CR ACK CR
ESC [ p CR                STX Pager ID CR
                          Pager Message CR ETX Checksum CR
211 Message sent CR ACK CR
                          ESC EOT CR
115 Goodbye CR ESC EOT CR
Checksum algorithm:
Sum all characters making up message (everything between and including STX/ETX) then transmit the checksum as 3 bytes:
Checksumdigit = (((Checksum>>8)%16)+'0');
Checksumdigit = (((Checksum>>4)%16)+'0');
Checksumdigit = (((lChecksum)%16)+'0');

The Telocator Alphanumeric Protocol (TAP) was first proposed by Telocator on September 1, 1988. TAP is used to send ASCII text from a PC or paging client to a paging terminal via a modem. TAP was once originally known as the Motorola Page Entry protocol as well as IXO alphanumeric entry protocol. TAP is now an industry standard for text messaging.

Operating Environment

The standard protocol for TAP requires that all data be sent as a series of ASCII characters, Xon/Xoff flow control in either direction, and 10-bit codes for each character (one start bit, 7 data bits, one even parity bit, and one stop bit). Paging terminals using TAP must be equipped with modems that can answer between 300 and 1200 baud with full duplexing and no echoing.

Procedure for sending a message to the paging terminal

Below is what happens once a paging terminal is dialed and a connection is established.

Sender			Paging Terminal			Comments

<CR>							Send a carriage return
							<CR> character and
 							wait for response of
 							"ID=".Used to recognize
							baudrate.  <CR>s are
							spaced at two-second 

		ID=					May get sent after two
							seconds if <CR> is not
							received.  Will wait for
							a response if sent.

<ESC>SST						Signals terminal that
							sender is using automatic
							mode.  SS denotes the type
							of service to be used
							T is the type of terminal
							or device the sender is

xxxxxx<CR>						Sent only if a password
							is required to access
							the paging terminal

M<CR>							Sent only if <ESC> is 
								not sent.  M signals
							manual mode transmission
		<CR><ACK><CR>				Logon accepted

		<message sequence>			Not acknlowleged, send
		<CR><NAK><CR>				again.

		<CR><ESC><EOT><CR>				Forced disconnect.

							Message sequences are
							defined as a series of
							shorter messages separated
							by <CR> characters.

		optional message sequence<CR>		May be inserted by the 
							paging terminal

		<ESC>[p<CR>				Indicates that the
							paging terminal is ready
							to accept message.

<STX>message<ETX>					Send the message and
checksum<CR>						checksum value.  Messages
							are sent as blocks of
							256 characters.  Blocks
							are divided into three
							sections:  250 characters
							for the message, three
							control characters, and
							three checksum characters.
		<message sequence>
		<CR><ACK><CR>				OK, send next block

		<message sequence>			Not acknlowleged, send
		<CR><NAK><CR>				again.  Usually a bad
							checksum or a transmission

		<CR><ESC><EOT><CR>			Abandon the current

<EOT><CR>						Signals end of
							transmission.  Sent when
							last block of data is
							received by terminal and
							<ACK> is sent.

		<ESC><EOT><CR>				Paging terminal signals
							end of transmission and
							hangs up

hang up							Sender hangs up.
Calculation of the checksum

The following pseudocode shows how the checksum is calculated give the message

<STX>hello world!<ETX>
<STX>  h   e   l   l   o   <space>  w   o   r   l   d   !  <ETX>
2      104 101 108 108 111  32      119 111 114 108 100 33 3

int sum = 0;
while (i != <ETX>)  //repeat until <ETX>
	sum = sum + i;
print sum;
In the example above, the checksum value will be 1154. To convert the value into a three character checksum, the following conversion algorithm is used.
void calculate_checksum(int sum)
	int d1, d2, d3
	char c1, c2, c3;
	d3 = 48 + sum - (sum % 16) * 16;
	sum = sum % 16;
	d2 = 48 + sum - (sum % 16) * 16;
	sum = sum % 16;
	d1 = 48 + sum - (sum % 16) * 16;

	c1 = d1;
	c2 = d2;
	c3 = d3;		
Once the checksum is calculated, the checksum characters are appended to the end of the block.

Response codes

The response codes are a sequence of three digits. The first digit identifies the type of response code, and the remaining two further defines it. The definitions for the first digit are as follow:

  1. Informational text
  2. Positive completion
  3. unused
  4. unused
  5. Negative completion
  6. unused
  7. unused
  8. unused
  9. unused
The specific messages are as follow:
  • 110: Paging Terminal TAP Specification Supported
  • 111: Paging terminal is processing previous input
  • 112: Maximum pages entered for session
  • 113: Maximum time reached for session
  • 114: (used to present service information and "welcome banners")
  • 115: (used to present exit messages and termination notices)
  • 211: Page sent successfully
  • 212: Long message truncated and sent
  • 213: Message accepted - held for deferred delivery
  • 214: xxx character maximum reached. Message truncated and sent.
  • 501: Time-out waiting for user input
  • 502: Unexpected input received
  • 503: Excessive attempts to send a transaction with checksum errors
  • 504: Pager identified as tone-only
  • 505: Pager identified as numeric-only
  • 506: Excessive invalid pages received
  • 507: Invalid logon
  • 508: Service type not supported
  • 509: Invalid password
  • 510: Invalid pager ID -- illegal characters or too long/short
  • 511: Invalid pager ID -- No match in database
  • 512: Cannot deliver to pager ID
  • 513: Long message rejected -- character limit exceeded
  • 514: Checksum error
  • 515: Message format error
  • 516: Message quota exceeded
  • 517: xxx character maximum. Message rejected.

Log in or register to write something here or to contact authors.