Command-Line Protocol

Version 2.0
2015-03-27

 

Abbreviations
Substitutions
Configuration Requests

Configuration queries and responses
Configuration commands
Other Requests
Miscellaneous requests
Status queries
Miscellaneous commands
Command responses
Stored Queries
Overview
Commands
Simple queries
Checksums
Notes
Examples

 

Abbreviations

* all
+ yes/add
~ no/none/delete
! error in command
? query
& more to come
CSM checksum
DI digital input
DL dial (TIF)
DM dim table
FI force/inhibit
IA input alpha
IF IFB
IFP IFB priority
IFTN IFB tone override input
IL IFB special list
IN input
IS camera isolate
KP keypanel (port)
KS key status
KY key
LOG logging
LS listen
MEM memory contents
MN main
MX matrix
NA name (alpha)
NL alpha alias
NXT next (when response takes multiple lines)
OK okay
OU output
PG program input
PL party line
R access restriction
RC AZedit restriction
RIN ring (TIF)
RTX retransmit
RU universal scroll restriction
RY relay
SF special function
SL special list
SLF self (ISO-self flag)
SU software setup
SZ size
T1 talk level 1
T2 talk level 2
TIF telephone interface
TKI trunk IFB priority
TKP trunk priority
TN tone (panel tone generator; IFB tone override in)
UR UPL resource
X expansion
V volume
VDM dim table volume
VKP crosspoint volume
VPL party line volume
VTI analog input trim
VTO analog output trim

 

Substitutions

<value> Any decimal value, 1 or more digits
<range> <value>
<value>-<value>
<list> <range>
<list>,<range>
* (implies entire list)
<namelen> Optional name length. May be "A4", "A6", or "A8". ("AU8", which refers to the 8-Unicode name, is also a valid name length prefix; however, the syntax of Unicode alphas is different, so requests referring to Unicode alphas are listed separately.) If omitted, the request refers to the 4-character name.
<name> Any sequence of <namelen> printable ASCII characters
<8u ascii> 8 Unicode characters, represented as an ASCII string enclosed in double quotes. Note that the string is of fixed length; any embedded double quotes appear literally, and are not escaped in any way.
<8u hex> 8 Unicode characters, each specified as 4 hex digits
<8u alpha> A<8u ascii>
NA<8u hex>
<8u alias> L<8u ascii>
NL<8u hex>
<label> Dim table label (up to 8 printable ASCII characters)
<+/~> A "+" or a "~" character
<addr> Up to 8 hex digits (0-9, A-F)
<byte> Two hex digits
<bytelist> <byte>
<bytelist>,<byte>
<t/l> One of the four characters "P", "T", "L", or "~"
<di t/l> One of the three characters "T", "L", or "~"
<logstat> Logging status, one of the three characters "F", "P", or "~"
<hdststat>   Headset transfer status: "~" (not in headset transfer mode), "+" (in headset transfer), "F" (headset transfer forced), or "I" (headset transfer disabled). For a headset control command sent to the intercom, "R" can also be used, to leave the current status unchanged but release control back to the panel.
     
<rsrc>   KP
  PL
  IF
SL
RY
IS
UR
IL
SF
<alpha rsrc> <rsrc>
IA
<lcl asgn> <rsrc><value>
<asgn> MX<value><rsrc><value>
<lcl asgn>
<pnl> MN
X<value>
<setup> SU<value>
<setupstat> <setup>
"~"
<descript> An ASCII string, enclosed in double quotes
<in> <value>
PG<value>
* (relays only: denotes any input) 
<xpt> One of "F" (force), "I" (inhibit), or "~" (neither). May also include "+" in message sent by intercom, to indicate crosspoint that is closed but not forced.
<tifstat> One of "ON" (on-hook), "OFF" (off-hook), or "RIN" (ringing)
<phonenum> A sequence of digits, "#", and "*"
<volume> Gain (in decibels), with an optional leading minus sign
<date> Date, in the format yyyymmdd
<time> Time, in the format hhmmssff
ff represents the number of frames, in the range 00-29.

 

Configuration Requests

Configuration queries and responses

The following section documents queries and commands that deal with the intercom configuration (i.e. items which are saved in AZedit setup files). Any response to a query documented in this section can be resent to the intercom literally (immediately or at a later time), as a command.

Alphas

Party lines

Special lists

Dim tables

IFBs

Relays

ISOs

Digital inputs

Priorities

Tone

Keypanel assignments

Keypanel setup pages

Restrictions

Force/Inhibit

Volumes

Jam statement

 

Alphas

<namelen>NA<alpha rsrc>?<list> <namelen> { <alpha rsrc><value>NA<name> }*
AU8NA<alpha rsrc>?<list> AU8 { <alpha rsrc><value><8u alpha> }*

Aliases

<namelen>NL<rsrc>?<list> <namelen> { <lcl asgn>NL<name> }*
AU8NL<rsrc>?<list> AU8 { <lcl asgn><8u alias> }*

Party lines

PL<value>?<list> PL<value>KP { <value><t/l> }*
KP<value>PL?<list> KP<value>PL { <value><t/l> }*

Special lists

SL<value>?<list> SL<value>KP { <value><+/~> }*
KP<value>SL?<list> KP<value>SL { <value><+/~> }*

Special list relays

SL<value>RY? SL<value>RY<value> { ,<value> }*

When specifying the relays associated with a special list, all associated relays must be included. For example, if a single relay is specified, all other relays are cleared.

Dim tables

DM<value>?<list> DM<value>KP { <value><+/~> }*
KP<value>DM?<list> KP<value>DM { <value><+/~> }*

Dim label

DM<value>LB? DM<value>LB<label>

IFBs

IF?<list> { IF<value>IN<in>OU<value> }*

Relays

RY?<list> { RY<value>IN<in>OU<value> }*

ISOs

IS?<list> { IS<value>OU<value>SLF<+/~> }*

Digital inputs

DI?<list> { DI<value>KP<value>KY<value><di t/l> }*

IFB priority

IFP?<list> { KP<value>IFP<value> }*

Trunked IFB priority

TKI?<list> { KP<value>TKI<value> }*

Trunk priority

TKP?<list> { KP<value>TKP<value> }*

Tone

TN?<list> TN { <value><+/~> }*
KP<value>TN? KP<value>TN<+/~>

Keypanels - Key assignments

KP<value><pnl>KY?<list> KP<value><pnl> { KY<value>T1<asgn>T2<asgn>LS<asgn> }*
KP<value><setup>KY?<list> KP<value><setup> { KY<value>T1<asgn>T2<asgn>LS<asgn> }*

Keypanels - Software setups

SU?<list> { KP<value> { <pnl><setupstat> }* }*
KP<value>SU?

Local scroll restrictions

R<rsrc>?<list> R<rsrc> { <value><+/~> }*

AZedit restrictions

RC<rsrc>?<list> RC<rsrc> { <value><+/~> }*

Remote (trunked) scroll restrictions

RU<rsrc>?<list> RU<rsrc> { <value><+/~> }*

Key restrictions

KP<value><pnl>RKY?<list> KP<value><pnl>RKY { <value>T<+/~>LS<+/~> }*
KP<value><setup>RKY?<list> KP<value><setup>RKY { <value>T<+/~>LS<+/~> }*

Setup page restrictions

RSU?<list> RSU { <value><+/~> }*
KP<value>RSU? KP<value>RSU<+/~>

Forces and Inhibits

IN<in>FI?<list> IN<in>FI { <value><xpt> }*
OU<value>FI?<list> OU<value>FI { <value><xpt> }*

The first of these commands provides access for a given input to various outputs; the second provides access for various inputs to a given output.

The force/inhibit query returns an indication of whether a crosspoint is forced or inhibited; if it is netiher forced nor inhibited, but is closed for another reason (e.g. an IFB program input), the status returned is "+". When a force/inhibit command is sent to the intercom, a "+" is treated like a "~": any existing force or inhibit is cleared, and the intercom determines whether or not to close the crosspoint based on the status of other requests.

Volumes - Dim tables

VDM?<list> VDM<value>=<volume> { ,<value>=<volume> }*
DM<value>V? DM<value>V<volume>

Volumes - Crosspoint

VKP<value>?<list> KP<value>VKP<value>=<volume> { ,<value>=<volume> }*

Volumes - Party line

VPL<value>?<list> KP<value>VPL<value>=<volume> { ,<value>=<volume> }*

Volumes - Analog input trim

VTI?<list> VTI<value>=<index> { ,<value>=<index> }*

Volumes - Analog output trim

VTO?<list> VTO<value>=<index> { ,<value>=<index> }*

Jam statement

JAM?<list> JAM<value>,OFF
JAM<value>,ON,<value>,<value>,<value>,<value>,<value>,<volume>

Jam statements are a client-specific feature. They simulate radio jamming: periodically, a specific crosspoint (the signal being jammed) is dimmed by the specified amount, and a second crosspoint (the jamming signal) is closed. Jamming is implemented by converting each Jam statement into 3 UPL statements. Note that, with the exception of the special case of Jam statements, UPL statements are not accessible via command-line protocol.

 

Configuration commands

The following section documents various commands that can be used to modify the intercom's configuration, but do not have a corresponding query.

IFB Priorities IFP<value>KP<list>
Trunked IFB Priorities TKI<value>KP<list>
Trunk Priorities TKP<value>KP<list>

 

Other Requests

Miscellaneous Requests

The following section documents queries and commands that deal with miscellaneous functions which are not stored as part of an AZedit setup file. Each response documented in this section can by resent to the intercom literally as a command.

Key Status KP<value><pnl>KS?<list> KP<value><pnl>KS { <value>T<+/~>LS<+/~> }*
Headset Status HS?<list> HS { <value><hdst stat> }*
Mic Mute Status MU?<list> MU { <value><+/~> }*
Date & Time DT? DT<date>TM<time>
Logging Status LOG? LOG:<logstat>
Memory Dump MEM?<addr>,<value> MEM:<addr>=<bytelist>

The reponses to the following queries are not valid commands.

Matrix Names <namelen>NAMX?<list> <namelen> { MX<value>NA<name> }*
AU8NAMX?<list> AU8 { MX<value><8u alpha> }*
Remote Alphas <namelen>MX<value>NA<rsrc>?<list> <namelen>MX<value> { <rsrc><value>NA<name> }*
AU8MX<value>NA<rsrc>?<list> AU8MX<value> { <rsrc><value><8u alpha> }*

 

Status Queries

Crosspoint Status Query the force/inhibit status
Matrix Size SZ? SZ:KP<value> PL<value> IF<value> SL<value> RY<value> IS<value> UR<value> IL<value> DI<value> DM<value> SF<list> SU<value> X<value> IFP<range> PG<value> IFTN<+/~> NL<+/~> MX<value> SLF<+/~> RC<+/~> RU<+/~> TKP<value> TKI<value>
Software Version VER? VER<descript>
Digital Input Status DIS?<list> DIS { <value> <+/~> }*
Digital Output Status RYS?<list> RYS { <value> <+/~> }*
UPL Resource Asserted URS?<list> URS { <value> <+/~> }*
IFB Being Interrupted IFI?<list> IFI { <value> <+/~> }*
Keypanel Present KPS?<list> KPS { <value> <+/~> }*
TIF status TIF?<list> TIF { <value><tifstat> }*

 

Miscellaneous Commands

Dial out on TIF TIF<value>DL<phonenum>
Control key LEDs KP<value><pnl> { LED <value> [T <value>] [LS <value>] }*
Force changes to be written to flash UPDT
Retransmit Last Response RTX
Checksum Enable/Disable CSM<+/~> (described below)
Dump Entire Setup DMP
Send Next Line of Multi-Line Response NXT
Null Command (does nothing) OK

 

Command Responses

OK Command processed
!XCL Can't get exclusive control to make change
!CSM Bad checksum
!CAP Non-existent / unimplemented capability
!UNK Unrecognized / unimplemented request
!RNG Parameter out of range
!SYN Syntax error/error in parsing
!EEP EEPROM update failure
!TIM Timeout - Master Controller does not respond
!BLK Blocked - Master Controller is busy
!COM No communications with Master
!MTX Invalid Matrix Specification

The last three responses occur only when using command line protocol via the trunk master's general purpose interface.

 

Stored Queries

Overview

Command-Line Protocol messages can be divided into two groups: commands and queries. A command sent to the intercom receives a simple response of "OK" (if no errors were encountered). A query sent to the intercom receives a response containing the requested information. Normally, the protocol is half-duplex: a message is sent to the intercom; the intercom processes the message and generates a response; and another message can then be sent to the intercom.

A stored query consists of a simple query of the status of a single item (e.g. the query for the status of one talk key), prefixed by a number and a colon.

A stored query is treated as a command. The immediate response is either "OK" or an error response. However, once a query has been stored, the intercom automatically monitors the given item, and generates a response whenever it changes. These responses are generated asynchronously, i.e. without waiting for a message to be received. However, if CLP is active on a given port, any asynchronous response is guaranteed not to be interleaved with any CLP response on that port.

Stored queries are actually converted to UPL statements. Hence, if the intercom is configured for 256 UPL statements, then it can handle up to 256 stored queries. When a stored query is sent to the intercom, the number at the start of the command specifies the UPL statement number which will be used to store and evaluate the query.

(If a UPL statement is created to handle a stored query, the output action for that statement is Inform Command Line Protocol.)

 

Commands

Description Message Response
Define a stored query <value>:<simple query> OK
Delete a stored query SQD<list> OK
Recall stored queries SQ?<list> <value>:<simple query>
Determine status of stored queries SQS?<list> SQS { <value><+/~> }*
Stored query changes state SQS<value><+/~>

 

Simple queries

Talk Key KP<value><pnl>KS?<value>T
Listen Key KP<value><pnl>KS?<value>LS
GPI Input DIS?<value>
GPI Output RYS?<value>
UPL Resource URS?<value>
Headset Transfer HS?<value>
Crosspoint IN<value>FI?<value>
Crosspoint OU<value>FI?<value>
IFB Being Interrupted IFI?<value>
Keypanel present KPS?<value>
UPL Statement US?<value>
TIF Off-Hook TIF<value>OFF?
TIF Phone Line Ringing TIF<value>RIN?
Mic mute status MU?<value>

 

Checksums

When the command-line editor is first started, after a master reset or after exit from AZedit, checksums are disabled.

When checksums are disabled, the format of a message is:

<message> <return>

where:

<message> is as defined above

<return> is the carriage return character, value 0d hex ('\r' in C).

When checksums are enabled, the format of a message is:

<message> <checksum> <newline>

where:

<message> is as defined above

<checksum> consists of exactly 2 hex digits, calculated by summing the ASCII values of the characters in <message>, taking the 2's complement of the sum, and converting the low-order 8 bits to 2 hex digits (0-9, A-F).

<newline> is the linefeed character, value 0a hex ('\n' in C)

For example, consider the 'dump setup' and 'query all IFBs' messages. The bytes sent for these messages, with checksums disabled, would be:

ASCII: D  M  P  \r I  F  ?  *  \r
Hex: 44 4D 50 0D 49 46 3F 2A 0D

To calculate checksums:

44+4D+50 = E1

low order 8 bits of the 2's complement = 1F

49+46+3F+2A = F8

low order 8 bits of 2's complement = 08

So, with checksums enabled, these messages would be:

ASCII: D  M  P  \r I  F  ?  *  0  8  \n
Hex: 44 4D 50 0D 49 46 3F 2A 30 38 0A

So that a computer driving the command editor does not need to know whether checksums are enabled or disabled, the checksum command (CSM+ or CSM~) must always be terminated with a checksum; it may be followed with either a carriage return or a newline. Hence, the checksum enable command may be one of:

ASCII: C  S  M  +  F  2  \r or C  S  M  +  F  2  \n
Hex: 43 53 4D 2B 46 32 0D 43 53 4D 2B 46 32 0A

The checksum disable command may be one of:

ASCII: C  S  M  ~  9  F  \r or C  S  M  ~  9  F \ n
Hex: 43 53 4D 7E 39 46 0D 43 53 4D 7E 39 46 0A

 

Notes

The protocol consists strictly of upper-case characters, digits, the special characters "?", "!", "=", "-", "+", "~", "*", ":", ",", and the double quote ("). Double quote is used only in response to the VER inquiry.

The protocol will be extended in the future by adding new commands to reflect additional intercom capabilities.

Spaces are never used. They are used above only for greater legibility.

Anything above enclosed in <angle brackets> must be substituted with other text to make a valid command/query, as defined in the Substitutions section.

The construct { .... }* is used to indicate what part of a command can be specified multiple times. For example, the tone query for panels 1 through 10 (<list> becomes "1-10")

TN?1-10

might generate a response of:

TN1+2+3+4~5~6~7~8~9+10~

indicating that tone generation is enabled for panels 1, 2, 3, and 9.

Restriction information is denoted by prefixing the letter "R" to the appropriate information. For example, port access restrict is denoted by RKP, whereas individual key restriction is denoted by RKY.

Special function numbers include the following:

1 null
11 AL (auto listen)
12 AF (auto follow)
13 AM (auto mute)
14 AR (auto reciprocal)
15 AT (auto table)
21 AC (all call)
22 PPL (panel party line) CS9500 only)
23 PPLI (panel party line inhibit) (CS9500 only)
24 dim function

Special function names do not have aliases

There is a maximum length for any reply, query, command or reply of 500 bytes. If a query would result in a longer reply, the reply is abbreviated (fewer items are returned), and the line is terminated with a "&". The successive line(s) are returned in response to NXT requests.

 

Examples

Note: checksum and line termination characters are not shown.

Query matrix size and capabilities

Define IFBs

Define relays

Define alphas

Force crosspoints

Make key assignments

Change setup pages

Set IFB priorities

Restrict key assignments

Force talk and listen key states

Assign party line memberships

 

Query matrix size and capabilities

SZ?

Typical response for 9500: (reply is all on one line)

SZ:KP50PL60IF24SL6RY8IS16SF1,11-14,21,22SU4X3IFP1-3PG1

i.e.50 point-to-points; 60 party lines; 24 IFBs; 6 special lists; 8 relays; 16 isolates; special functions: null, AL, AF, AM, AR, all-call, panel party lines; 4 software setups; 3 expansion panels supported; 3 levels of IFB priority; 1 program input;

Define IFBs

Set up IFB 10 to use output (bus) 49, with program input as its default input; set up IFB 11 to use output 50, with input 50 as its default input.

IF10INPG1OU49

IF11IN50OU50

Equivalently,

IF10OU49INPG1

IF11OU50IN50

Define relays

Assign relay 1 to output 49/program input; assign relay 2 to output 50, any input.

RY1INPG1OU49RY2IN*OU50

Equivalently,

RY1INPG1OU49

RY2IN*OU50

Or

RY2OU50IN*RY1OU49INPG1

Define alphas

Assign the names:

P-P 1 DIR1
P-P 2 PRD1
P-P 3 VTDR
P-P 4 BILL
IFB 10 CAMS
IFB 11 NEWS

KP1NADIR1KP2NAPRD1KP3NAVTDRKP4NABILL

IF10NACAMSIF11NANEWS

Force crosspoints

Force the following crosspoints:

input 1 --> outputs 43, 44, 45

input 3 --> output 43

program input 1 --> output 45

Also inhibit the following crosspoints:

program input 1 --> output 1

IN1FI43F44F45F1I

IN3FI43F

INPG1FI45F

Or, specifying outputs instead of inputs,

OU1FIPG1I

OU43FI1F3F

OU44FI1F

OU45FI1FPG1F

Make key assignments

Assign the following keys:

Port 1: Main panel:

Key Talk level 1 Level 2 Listen
1 IF11 null N048
2 PL06 null AL
3 N004 null AL

Port 2: First expansion panel:

Key Talk level 1 Level 2 Listen
1 N001 null AF
2 IS01 null null

KP1MNKY1T1IF11T2SF1LSKP48KY2T1PL6T2SF1LSSF11KY3T1KP4T2SF1LSSF11

KP2X1KY1T1KP1T2SF1LSSF12KY2T1IS1T2SF1LSSF1

Notes:

·SF1 is the null assignment (special function 1)

·SF11 is auto-listen

·SF12 is auto-follow.

To change the assignments in specific setups, without determining whether those setups are in use and to which panels they may be assigned, change the "KP1MN" to "KP1SU#" and "KP2X1" to "KP2SU#", where # is the corresponding setup number (1-4).

Change setup pages

Change the setups on keypanel 17 to: main = 1, expansion 1 = 3, expansion 2 = no setup, expansion 3 = no setup.

KP17MNSU1X1SU3X2~X3~

Set IFB priorities

Set the IFB priority for panels 1, 2, 3, and 8 to be 2, set the IFB priority for panels 4-7 and 9-20 to be 1.

IFP2KP1-3,8

IFP1KP4-7,9-20

Equivalently,

KP1IFP2KP2IFP2KP3IFP2KP4IFP1KP5IFP1...

Restrict key assignments

Restrict ISO 1-16, IFB 1-12

RIS1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+

RIF1+2+3+4+5+6+7+8+9+10+11+12+

Force talk and listen key states

Force first 3 talk and listen keys of the main panel of panel (port) 20 to be on. Force the 4th talk and listen keys off.

KP20MNKS1T+LS+2T+LS+3T+LS+4T~LS~

Assign party-line memberships

Assign the following panels to party-line 10: panel 5: permanent talker/listener; panels 9,10,11,12: permanent listeners

PL10KP5P9L10L11L12L

Assign panel 19 to be a permanent talker/listener on party-line 14; a permanent listener on party-lines 19 and 20; and a permanent talker on party line 3

KP19PL14P19L20L3T