Version 2.0
2015-03-27
Abbreviations
Substitutions
Configuration Requests
Configuration queries and responsesOther Requests
Configuration commands
Miscellaneous requestsCommand responses
Status queries
Miscellaneous commands
OverviewChecksums
Commands
Simple queries
* | 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 |
<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. |
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.
<namelen>NA<alpha rsrc>?<list> | <namelen> { <alpha rsrc><value>NA<name> }* | |
AU8NA<alpha rsrc>?<list> | AU8 { <alpha rsrc><value><8u alpha> }* |
<namelen>NL<rsrc>?<list> | <namelen> { <lcl asgn>NL<name> }* | |
AU8NL<rsrc>?<list> | AU8 { <lcl asgn><8u alias> }* |
PL<value>?<list> | PL<value>KP { <value><t/l> }* | |
KP<value>PL?<list> | KP<value>PL { <value><t/l> }* |
SL<value>?<list> | SL<value>KP { <value><+/~> }* | |
KP<value>SL?<list> | KP<value>SL { <value><+/~> }* |
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.
DM<value>?<list> | DM<value>KP { <value><+/~> }* | |
KP<value>DM?<list> | KP<value>DM { <value><+/~> }* |
DM<value>LB? | DM<value>LB<label> |
IF?<list> | { IF<value>IN<in>OU<value> }* |
RY?<list> | { RY<value>IN<in>OU<value> }* |
IS?<list> | { IS<value>OU<value>SLF<+/~> }* |
DI?<list> | { DI<value>KP<value>KY<value><di t/l> }* |
IFP?<list> | { KP<value>IFP<value> }* |
TKI?<list> | { KP<value>TKI<value> }* |
TKP?<list> | { KP<value>TKP<value> }* |
TN?<list> | TN { <value><+/~> }* | |
KP<value>TN? | KP<value>TN<+/~> |
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> }* |
SU?<list> | { KP<value> { <pnl><setupstat> }* }* | |
KP<value>SU? |
R<rsrc>?<list> | R<rsrc> { <value><+/~> }* |
RC<rsrc>?<list> | RC<rsrc> { <value><+/~> }* |
RU<rsrc>?<list> | RU<rsrc> { <value><+/~> }* |
KP<value><pnl>RKY?<list> | KP<value><pnl>RKY { <value>T<+/~>LS<+/~> }* | |
KP<value><setup>RKY?<list> | KP<value><setup>RKY { <value>T<+/~>LS<+/~> }* |
RSU?<list> | RSU { <value><+/~> }* | |
KP<value>RSU? | KP<value>RSU<+/~> |
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.
VDM?<list> | VDM<value>=<volume> { ,<value>=<volume> }* | |
DM<value>V? | DM<value>V<volume> |
VKP<value>?<list> | KP<value>VKP<value>=<volume> { ,<value>=<volume> }* |
VPL<value>?<list> | KP<value>VPL<value>=<volume> { ,<value>=<volume> }* |
VTI?<list> | VTI<value>=<index> { ,<value>=<index> }* |
VTO?<list> | VTO<value>=<index> { ,<value>=<index> }* |
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.
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> |
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> }* |
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> }* |
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 |
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.
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.)
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><+/~> |
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> |
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 |
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.
Note: checksum and line termination characters are not shown.
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;
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
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
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 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
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 the setups on keypanel 17 to: main = 1, expansion 1 = 3, expansion 2 = no setup, expansion 3 = no setup.
KP17MNSU1X1SU3X2~X3~
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 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 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 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