Command Interface
The default server port for the command interface is port 8888. All commands and responses are in ASCII with lines separated with newline characters (ASCII character 0x0A).
All commands can be grouped into three forms (query, assignment, table assignment) and two targets (system and fields). There exactly four possible response formats (ok, ok with value, error, multiple value). This section describes this command interface.
The three basic command forms are:
Name |
Format |
Description |
---|---|---|
Query |
target |
Interrogates target for current value, can return error, single value or a list of multiple values. |
Assignment |
target |
Updates target with given value, can return error or success. |
Table |
target |
Command may be followed by lines of text, must be terminated by blank line. |
The four basic command responses are:
Name |
Format |
Description |
---|---|---|
Success |
|
Returned assignment and table commands to report successful update. |
Value |
|
Successful return of single value from query command. |
Error |
|
Error string returned on any command failure |
Multi value |
! value. |
Any number of values can be returned, each
preceded by |
Command forms and their possible responses:
Form |
Responses |
---|---|
Query |
Error, Value, Multi value |
Assignment |
Error, Success |
Table |
Error, Success |
Each individual query target will either return a single value or multi-value, as documented below.
Finally, there are two basic types of target: configuration commands and system commands.
Configuration Commands
The entire hardware interface to PandA is structured into “blocks” and “fields”, and each field may have a number of “attributes” depending on the field type. This structure is reflected in the form of configuration commands which are tabulated below:
Command Syntax |
Description |
block[number] |
Return current value of field. |
block[number] |
Assign value to field. |
block[number] |
Write table data to field. |
block[number] |
Return current value of field attribute. |
block[number] |
Assign value to field attribute. |
block[number] |
Returns list of fields. |
block[number] |
Returns list of field attributes. |
In all of these commands the number after the block is optional if there is only
one instance of that block, and is ignored for the two .*?
commands. See
the description of the .TABLE
fields for an explanation of the optional
format characters in the table write command.
System Commands
All system commands are prefixed with a leading *
character. The simplest
command is *IDN?
which returns a system identification string:
< *IDN?
> OK =PandA SW: 330bd94-dirty FPGA: 0.1.9 d1275f61 00000000
The available system commands are tabulated here and listed in more detail below:
Command |
Description |
|
Device identification. |
|
Echo. |
|
List connected clients. |
|
List device blocks. |
*DESC. block. field[. attr]? *DESC. block. field[]. subfield? |
Show description for field, attribute, or table subfield. |
*ENUMS. block. field[. attr]? *ENUMS. block. field[]. subfield? |
List enumerations for field, attribute, or table subfield. |
|
Report changes to values. group can be
any of |
|
Reset reported changes, group as above. |
|
Report fields configured for capture. |
|
List all fields that can be captured. |
|
Interrogate capture options, name can be
|
|
Reset data capture. |
|
Enumerate possible capture positions. |
|
Enumerate possible bit bus positions. |
|
Control command logging. |
|
Special position capture status fields.
field can be any of |
|
Position capture actions. field can be
either |
|
Triggers immediate save to file of the persistence file state. |
|
Returns currently configured system clock frequency |
*IDN?
Returns system identification string, for example the following:
OK =PandA SW: 1.1 FPGA: 0.1.9 d1275f61 00000000 rootfs: PandA 1.1
The first field after “PandA” is the software version, the second field is the FPGA version, the third the firmware build number, and the fourth field identifies the supporting firmware. The final fields (prefixed
rootfs:
) identify the underlying system on which the server is running.Note that the
rootfs:
identification is new to version 1.1 of PandA.*ECHO string?
Returns string back to caller. Not terribly useful. Note that the echoed string cannot contain any of
?
,=
or<
characters, as this would cause the command to be mistaken for another command format! Example usage:< *ECHO This is a test? > OK =This is a test
*WHO?
Returns list of client connections, for example:
< *WHO? > !2015-12-04T14:30:40.403Z config 127.0.0.1:34185 > .
The first field is the time the connection was made, the second field is either
config
ordata
depending on whether the configuration or data port is connected, and the third field is the remote IP address and socket.*BLOCKS?
Returns a list of all the top level blocks in the system. The order in which the blocks is returned is somewhat arbitrary. For example (here the list has been shortened in the middle):
< *BLOCKS? > !TTLIN 6 > !OUTENC 4 ... > !CLOCKS 1 > !BITS 1 > !QDEC 4 > .
Block and field commands can be used to interrogate each block. The number after each block records the number of instances of each block.
*DESC.
block?
*DESC.
block.
field?
*DESC.
block.
field.
attr?
*DESC.
block.
field[].
subfield?
Returns description string for specified block, field, attribute, or table subfield eg:
< *DESC.TTLIN? > OK =TTL input < *DESC.TTLIN.TERM? > OK =Select TTL input termination < *DESC.TTLIN.TERM.INFO? > OK =Class information for field
*ENUMS.
block.
field?
*ENUMS.
block.
field.
attr?
*ENUMS.
block.
field[].
subfield?
Returns list of enumerations for given field, attribute, or table subfield, if appropriate.
*CHANGES?
*CHANGES.CONFIG?
*CHANGES.BITS?
*CHANGES.POSN?
*CHANGES.READ?
*CHANGES.ATTR?
*CHANGES.TABLE?
Reports changes to the appropriate group of values. Changes are reported since the last request on the connection, and on the first request the current value for every field will be reported. The
*CHANGES?
command reports changes for all groups, otherwise one of the following groups can be selected:
CONFIG
Configuration settings
BITS
Bits on the system bus
POSN
Positions
READ
Polled read values
ATTR
Attributes (included capture enable flags)
TABLE
Table changes
For example:
< *CHANGES.CONFIG? > !TTLIN1.TERM=High-Z > !TTLIN2.TERM=50-Ohm > !TTLIN3.TERM=High-Z ... > !QDEC2.B=TTLIN1.VAL > !QDEC3.B=TTLIN1.VAL > !QDEC4.B=TTLIN1.VAL > .Here 804 (at the time of writing) lines have been deleted from the transcript! Now if we repeat the call we see that no further changes have happened until something is actually changed:
< *CHANGES.CONFIG? > . < TTLOUT4.VAL=TTLIN3.VAL > OK < *CHANGES.CONFIG? > !TTLOUT4.VAL=TTLIN3.VAL > .Note that for tables only the fact that the table has changed is shown, no attempt is made to show the current table value:
< *CHANGES.TABLE? > !PCOMP1.TABLE< > !PCOMP2.TABLE< > !PCOMP3.TABLE< > !PCOMP4.TABLE< > !PGEN1.TABLE< > !PGEN2.TABLE< > !SEQ1.TABLE< > !SEQ2.TABLE< > !SEQ3.TABLE< > !SEQ4.TABLE< > .
*CHANGES=
[E
| S
]*CHANGES.CONFIG=
[E
| S
]*CHANGES.BITS=
[E
| S
]*CHANGES.POSN=
[E
| S
]*CHANGES.READ=
[E
| S
]*CHANGES.ATTR=
[E
| S
]*CHANGES.TABLE=
[E
| S
]These commands reset the change information for the corresponding group of information so that only changes occuring after the reset are reported, or so that all changes are reported. If
=
or=E
(for End) is specified then only new changes are reported, if=S
(for Start) then change reporting is reset to the start as for a new connection. For example:< TTLIN1.TERM=50-Ohm > OK < *CHANGES= > OK < *CHANGES.CONFIG? > .
*CAPTURE?
This returns a list of all positions and bit masks that will be written to the data capture port. This list is controlled by setting the
.CAPTURE
attribute on the corresponding position fields.*CAPTURE.*?
This returns a list of all fields that can be configured for capture. This includes all
pos_out
andext_out
fields.*CAPTURE.OPTIONS?
Lists the available capture options for
pos_out
fields. The available options are “Value”, “Diff”, “Sum”, “Mean, “Min”, “Max”, “StdDev”. Availability of the last option “StdDev” depends on the FPGA configuration.*CAPTURE.ENUMS?
Generates a curated list of capture option selections. This is designed to be used for presenting lists of available capture options as an enumeration. Returns the same as calling
*ENUMS.
name.
field.CAPTURE?
on anypos_out
field.*CAPTURE=
This resets all
.CAPTURE
flags to zero so that no data will be captured.*POSITIONS?
This command lists all available position capture fields in order.
*BITS?
This command lists all available bit bus positions, but not including the special values
ZERO
andONE
.*VERBOSE=
valueIf
*VERBOSE=1
is set then every command will be echoed to the server’s log. Set*VERBOSE=0
to restore normal quiet behaviour.
*PCAP.STATUS?
*PCAP.CAPTURED?
*PCAP.COMPLETION?
Interrogates status of position capture:
STATUS
Returns string with three fields: “Busy” or “Idle”, followed by the number of connected readers, and the number taking data.
CAPTURED
Returns number of samples captured in the current or most recent data capture.
COMPLETION
Returns completion status from most recent data capture, as listed in the table below.
The completion codes have the following meaning:
Busy
Capture in progress.
Ok
Capture completed without error or intervention.
Disarmed
Capture was manually disarmed by
*PCAP.DISARM=
command.Framing error
Data capture framing error, probably due to incorrectly configured capture.
DMA data error
Internal data error, should not occur.
Driver data overrun
Data capture too fast, internal buffers overrun. Can also occur if PandA processor overloaded.
*PCAP.ARM=
*PCAP.DISARM=
Top level capture control:
ARM
Initiates data capture. Will fail if capture already in progress, or no fields configured for capture.
DISARM
Halts ongoing data capture.
*SAVESTATE=
Updates the persistence state file (as configured on the command line when launched) with the current state. Returns after a file system
sync
call, so it is safe to power-off the system after this command has completed.*CLOCK_FREQ?
Returns currently configured FPGA clock frequency as used to convert between times in natural units and times in clock ticks.