Command-Line Protocol

Version 1.4

November 25, 2002

Abbreviations

Substitutions

Commands

Configuration queries, intercom responses

Status queries

Miscellaneous commands

Miscellaneous responses

Checksums

Notes

Examples

 

Abbreviations

*

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

 

Substitutions

<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

 

Commands

Configuration Queries, Intercom Responses

Alphas

Party lines

Special lists

Dim tables

IFBs

Relays

ISOs

Digital inputs

Block inhibits

Priorities

Tone

Keypanel assignments

Key status

Keypanel setup pages

Restrictions

Force/Inhibit

TIF status

Volumes

Jam statement

 

Alphas

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> }*

Aliases

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> }*

Matrix names

NAMX?<list>

{ MX<value>NA<name> }*

Remote alphas

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>

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> }*

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>TN<in> }*

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> }*

Block inhibits

BI?<list>

{ BI<value>IN<blkspec>OU<blkspec> }*

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 - Key status

KP<value><pnl>KS?<list>

KP<value><pnl>KS { <value>T<+/~>LS<+/~> }*

Keypanels - Software setups

SU?<list>

{ KP<value> { <pnl><setupstat> }* }*

KP<value>SU?

Local scroll restrictions

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><+/~> }*

ADAMedit restrictions

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><+/~> }*

Remote (trunked) scroll restrictions

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><+/~> }*

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<+/~>

Force/Inhibit - by input

IN<in>FI?<list>

IN<in>FI { <value><xpt> }*

Force/Inhibit - by output

OU<value>FI?<list>

OU<value>FI { <value><xpt> }*

TIF status

TIF?<list>

TIF { <value><tifstat> }*

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.

 

Status Queries

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> }*

 

Miscellaneous Commands

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

 

Miscellaneous Responses

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.

Checksums

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

 

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.

· 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.

 

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,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;

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