Version 1.4
November 25, 2002
* |
all |
|
+ |
yes/add |
|
~ |
no/none/delete |
|
! |
error in command |
|
? |
query |
|
& |
more to come |
|
BI |
block inhibit |
|
CAP |
capability |
|
CSM |
checksum |
|
DI |
digital input |
|
DL |
dial (TIF) |
|
DM |
dim table |
|
DMP |
dump (complete setup) |
|
ER |
error |
|
FI |
force/inhibit |
|
IF |
IFB |
|
IFP |
IFB priority |
|
IFTN |
IFB tone override input |
|
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 |
CSedit restriction |
|
RGI |
routing switcher input |
|
RGO |
routing switcher output |
|
RIN |
ring (TIF) |
|
RNG |
range |
|
RTX |
retransmit |
|
RU |
universal scroll restriction |
|
RY |
relay |
|
SF |
special function |
|
SL |
special list |
|
SLF |
self (ISO-self flag) |
|
SU |
software setup |
|
SYN |
syntax |
|
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) |
|
UNK |
unknown |
|
UR |
UPL resource |
|
VER |
version |
|
X |
expansion |
|
XCL |
exclusive control |
|
V |
volume |
|
VDM |
dim table volume |
|
VKP |
crosspoint volume |
|
VPL |
party line volume |
|
VTI |
analog input trim |
|
VTO |
analog output trim |
<list> |
<range> |
|
<list>,<range> |
||
* (implies entire list) |
||
<range> |
<value> |
|
<value>-<value> |
||
<value> |
any decimal value, 1 or more digits |
|
<blkspec> |
<range> |
|
"~" |
||
<name> |
any 4 printable ASCII characters |
|
<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 "~" |
|
<lcl asgn> |
KP<value> |
|
PL<value> |
||
IF<value> |
||
SL<value> |
||
RY<value> |
||
IS<value> |
||
UR<value> |
||
SF<value> |
||
<asgn> |
MX<value><lcl asgn> |
|
<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. |
|
<device> |
one of "MC", "GC", "KP", "FC", or "AUX" |
|
<tifstat> |
one of "ON" (on-hook), "OFF" (off-hook), or "RIN" (ringing) |
|
<phonenum> |
a sequence of digits, "#", and "*" |
|
<volume> |
a gain (in decibels), with an optional leading minus sign |
NAKP?<list> |
{ KP<value>NA<name> }* |
|
NAPL?<list> |
{ PL<value>NA<name> }* |
|
NAIF?<list> |
{ IF<value>NA<name> }* |
|
NASL?<list> |
{ SL<value>NA<name> }* |
|
NARY?<list> |
{ RY<value>NA<name> }* |
|
NAIS?<list> |
{ IS<value>NA<name> }* |
|
NAUR?<list> |
{ UR<value>NA<name> }* |
|
NASF?<list> |
{ SF<value>NA<name> }* |
NLKP?<list> |
{ KP<value>NL<name> }* |
|
NLPL?<list> |
{ PL<value>NL<name> }* |
|
NLIF?<list> |
{ IF<value>NL<name> }* |
|
NLSL?<list> |
{ SL<value>NL<name> }* |
|
NLRY?<list> |
{ RY<value>NL<name> }* |
|
NLIS?<list> |
{ IS<value>NL<name> }* |
|
NLUR?<list> |
{ UR<value>NL<name> }* |
NAMX?<list> |
{ MX<value>NA<name> }* |
MX<value>NAKP?<list> |
MX<value> { <type><value>NA<name> }* |
|
MX<value>NAPL?<list> |
||
MX<value>NAIF?<list> |
||
MX<value>NASL?<list> |
||
MX<value>NARY?<list> |
||
MX<value>NAIS?<list> |
||
MX<value>NAUR?<list> |
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> }* |
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>TN<in> }* |
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> }* |
BI?<list> |
{ BI<value>IN<blkspec>OU<blkspec> }* |
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> }* |
KP<value><pnl>KS?<list> |
KP<value><pnl>KS { <value>T<+/~>LS<+/~> }* |
SU?<list> |
{ KP<value> { <pnl><setupstat> }* }* |
|
KP<value>SU? |
RKP?<list> |
RKP { <value><+/~> }* |
|
RPL?<list> |
RPL { <value><+/~> }* |
|
RIF?<list> |
RIF { <value><+/~> }* |
|
RSL?<list> |
RSL { <value><+/~> }* |
|
RRY?<list> |
RRY { <value><+/~> }* |
|
RIS?<list> |
RIS { <value><+/~> }* |
|
RUR?<list> |
RUR { <value><+/~> }* |
|
RSF?<list> |
RSF { <value><+/~> }* |
RCKP?<list> |
RCKP { <value><+/~> }* |
|
RCPL?<list> |
RCPL { <value><+/~> }* |
|
RCIF?<list> |
RCIF { <value><+/~> }* |
|
RCSL?<list> |
RCSL { <value><+/~> }* |
|
RCRY?<list> |
RCRY { <value><+/~> }* |
|
RCIS?<list> |
RCIS { <value><+/~> }* |
|
RCUR?<list> |
RCUR { <value><+/~> }* |
RUKP?<list> |
RUKP { <value><+/~> }* |
|
RUPL?<list> |
RUPL { <value><+/~> }* |
|
RUIF?<list> |
RUIF { <value><+/~> }* |
|
RUSL?<list> |
RUSL { <value><+/~> }* |
|
RURY?<list> |
RURY { <value><+/~> }* |
|
RUIS?<list> |
RUIS { <value><+/~> }* |
|
RUUR?<list> |
RUUR { <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> }* |
TIF?<list> |
TIF { <value><tifstat> }* |
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.
Input Status |
Use force/inhibit by input |
|||
Output Status |
Use force/inhibit by output |
|||
Matrix Size | SZ? | SZ:KP<value> PL<value> IF<value> SL<value>RY<value> IS<value> DI<value> DM<value> SF<list>RGI<value> RGO<value> SU<value> X<value>IFP<range> PG<value> IFTN<+/~> AUX<range>NL<+/~> MX<value> SLF<+/~> RC<+/~> RU<+/~>TKP<value> TKI<value> | ||
Software Version | VER? | VER<descript> | ||
Memory Dump | MEM?<addr>,<value> | MEM:<addr>=<bytelist> | ||
Logging Status | LOG? | LOG:<logstat> | ||
Digital Input Status | DIS?<range> | DIS { <value> <+/~> }* | ||
Headset Status | HS?<range> | HS { <value> <+/~> }* | ||
IFB Interrupt Priority | IFI?<range> | IFI { <value> <value> }* |
IFB Priorities |
IFP<value>KP<list> |
|
Trunked IFB Priorities |
TKI<value>KP<list> |
|
Trunk Priorities |
TKP<value>KP<list> |
|
Dial out on TIF |
TIF<value>DL<phonenum> |
|
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 processed |
OK |
|
Can't get exclusive control to make change |
!XCL |
|
Bad checksum |
!CSM |
|
Non-existent / unimplemented capability |
!CAP |
|
Unrecognized / unimplemented request |
!UNK |
|
Parameter out of range |
!RNG |
|
Syntax error/error in parsing |
!SYN |
|
EEPROM update failure |
!EEP |
|
Timeout - Master Controller does not respond |
!TIM |
|
Blocked - Master Controller is busy |
!BLK |
|
No communications with Master |
!COM |
|
Invalid Matrix Specification |
!MTX |
The last three responses occur only when using command line protocol via the trunk master's general purpose interface.
When the command-line editor is first started, after a master reset or after exit from CSedit, 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.
· The "?" character generates a reply which includes all items in the specified range. The "%" character generates a reply which suppresses null entries; for example, "IF?*" generates a reply containing definitions for all IFBs, while "IF%*" suppresses those IFBs with no input, output, or tone override input defined. Otherwise, the "%" and "?" characters can be used interchangeably.
· Spaces are never used. They are used above only to delimit braces, for greater legibility.
· Anything above enclosed in <angle brackets> must be substituted with other text to make a valid command/query; the section entitled "Substitutions" defines what is acceptable for the various <entries>.
· 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 |
auto listen |
||
12 |
auto follow |
||
13 |
auto mute |
||
14 |
auto reciprocal |
||
21 |
all call |
||
22 |
panel party line (CS9500 only) |
||
23 |
panel party line inhibit (CS9500 only) |
||
24 |
dim function |
·Special function names do not have aliases
·Auxiliary component numbers include the following:
1-10 |
PAPs |
||
11-20 |
X-Y panels |
||
21-30 |
Relay controllers |
||
31-40 |
Routing switcher interfaces |
||
41-50 |
Auxiliary controllers |
The currently supported AUX lists would be:
9500:1-4,11-14(4 PAPs or X-Y panels)
9600:1-4,31(4 PAPs, 1 routing switcher interface)
9700:1-4,21-24,41(4 PAPs, 4 relay controllers, 1 aux ctlr)
· In general, any response to a query may be resent to the intercom literally (immediately or at a later time), as a command. Exceptions include the responses from the "SZ" (size), "NAMX" (matrix names), "SR" (search), "ST" (communications status), "ER" (error counters), and "VER" (software version) requests. A "+" in an input/output (force/inhibit) command (i.e. crosspoint closed) is treated as "~" (no force/inhibit).
· 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.
· When specifying the relays associated with a special list, all associated relays must be included; if, for example, one relay is specified, all other relays are cleared.
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,22RGI0RGO0SU4X3IFP1-3PG1IFTN~
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; no routing switcher inputs or outputs; 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