The live command table (LIVECMDS) consists of a number of contiguous definitions (LIVECMD), each of which contains all the information about a specific live command.
The location (relative to the file) and size of the table are specified by the LIVEHEADER.ITEMSOFF and LIVEHEADER.ITEMSSIZE fields, respectively.
Live changes command definition
Live commands (LIVECMD) have a common initial part, then a specific data area for each type of element. The common part is as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
Command code |
SIZE |
+2 |
U32 |
Full size of the command (all fields). |
DATA |
+6 |
... |
Command-specific data (optional). |
The commands currently provided are:
•Command 0x0001 - Circuit insertion
•Command 0x0002 - Edit circuit
•Command 0x0003 - Remove circuit
•Command 0x0008 - Structure insertion
•Command 0x0009 - Variable insertion
Command 0x0001 - Circuit Insertion
This command allows a circuit to be inserted into a given block, at a certain position. The data of the command, are as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
0x0001 |
SIZE |
+2 |
U32 |
32 + ITEMSSIZE |
BLOCKID |
+6 |
U32 |
container block ID |
RUNGID |
+10 |
U32 |
ID of the affected circuit (goes into Inserting state) |
REFID |
+14 |
U32 |
ID of reference circuit (only for insertion locations #1, otherwise 0) |
IFLAGS |
+18 |
U16 |
Insertion settings: 0x000F = Insertion location: 0x0 = Before the circuit with REFID ID (#1) 0x1 = After the circuit with REFID ID (#1) 0x2 = As the first circuit of the block 0x3 = As the last circuit of the block |
FLAGS |
+20 |
U16 |
Circuit settings: 0x0001 (ignored in live changes) |
ITEMSOFF |
+22 |
U32 |
Offset of the circuit element table (relative to the file) |
ITEMSSIZE |
+26 |
U32 |
Size of the circuit element table |
TEXT |
+30 |
U32 |
Offset circuit description (relative to strings) |
WARNING: the circuit element table must still be appended to the live command itself.
Command 0x0002 - Edit Circuit
This command allows to insert a modified circuit, removing the old one, in a given block. The data of the command, are as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
0x0002 |
SIZE |
+2 |
U32 |
32 + ITEMSSIZE |
BLOCKID |
+6 |
U32 |
container block ID |
RUNGID |
+10 |
U32 |
ID of the affected circuit (goes into Inserting state) |
REFID |
+14 |
U32 |
ID of previous circuit to be removed (goes into Dropping state) |
|
+18 |
U16 |
(reserved) |
FLAGS |
+20 |
U16 |
Circuit settings: 0x0001 (ignored in live changes) |
ITEMSOFF |
+22 |
U32 |
Offset of the circuit element table (relative to the file) |
ITEMSSIZE |
+26 |
U32 |
Size of the circuit element table |
TEXT |
+30 |
U32 |
Offset circuit description (related to strings) |
Command 0x0003 - Circuit Removal.
This command allows to remove an existing circuit. The data of the command, are as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
0x0003 |
SIZE |
+2 |
U32 |
14 |
BLOCKID |
+6 |
U32 |
Container block ID |
RUNGID |
+10 |
U32 |
ID of the circuit to be removed (goes into Deleting state) |
Command 0x0008 - Structure Insertion
This command allows you to create a new structure. The data of the command, are as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
0x0008 |
SIZE |
+2 |
U32 |
68 + (VARSCNT * sizeof(VAR)) |
TYPEID |
+6 |
U32 |
User structure type ID Note: only values 0x0001000-0xFFFFFE; values 0 and 0xFFFFFF are special meaning IDs. |
FLAGS |
+10 |
U16 |
Structure settings: 0x0001 (ignored in live edits) 0x0002 (ignored in live edits) |
NAME |
+12 |
U32 |
Offset structure name (relative to strings). |
TEXT |
+16 |
U32 |
Offset description of structure (relative to strings). |
VARSOFF |
+20 |
U32 |
Variable table offset (file related) (#1). |
VARSCNT |
+24 |
U32 |
Variable table size |
SIZE |
+28 |
U32 |
Size of the structure [bytes]. |
OBCID |
+32 |
U32 |
Reference OB class ID (0=none).(#2,#3) |
ATTRIB |
+36 |
U32 |
Structure attributes: 0x000001 Structure referred to OB class (AREFOBC)(#2) 0x000002 Main structure OB class (AISOBC)(#2,#3) 0x000004 Structure with external name (AEXTNAME) |
MODIFIER |
+40 |
U32 |
Offset modifiers of structure (relative to strings). |
REFID |
+44 |
U32 |
Structure type reference ID (#4). |
EXTNAME |
+48 |
U32 |
Offset external structure name (relative to strings). |
|
+52 |
U8[16] |
(reserved) |
(#1) The structure definition uses a normal variable definition table to define its elements. In this case, variable IDs are meaningless and should always be 0.
(#2) At equal non-0 OBCID value with AREFOBC attribute, there can be only one structure with AISOBC flag, while there can be 0 or more structures without AISOBC attribute.
(#3) A structure is called an "orphan" structure if it is in the condition of AREFOBC attribute set and OBCID field = 0: this condition happens when updating/removing an OB class, there are still variables (or other) referencing it.
(#4) In case of AREFOBC attribute, the REFID field contains the ID of the structure as defined of the source OBB file (0 in case of AISOBC attribute).
Command 0x0009 - Variable insertion.
This command allows you to create a new variable with an initialization value. The data of the command, are as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
0x0009 |
SIZE |
+2 |
U32 |
76 |
VARID |
+6 |
U32 |
Unique ID of the user variable. Note: only values 0x0001000-0xFFFFFE; values 0 and 0xFFFFFF are special meaning IDs. |
TYPEID |
+10 |
U32 |
ID variable data type Note: can be a default or user-defined type. |
FLAGS |
+14 |
U16 |
Variable settings: 0x0001 (ignored in live edits) 0x0002 (ignored in live edits) 0x0004 (ignored in live edits) |
NAME |
+16 |
U32 |
Offset variable name (relative to strings). |
TEXT |
+20 |
U32 |
Offset description of variable (relative to strings). |
BITTEXT |
+24 |
U32 |
Offset variable bit descriptions, i.e., sequence of strings related to each individual bit separated by the ascii character 0xFF (related to strings). |
DIM0 |
+28 |
U32 |
1st array size (0=unspecified)(#1) or index 0 for Alias. |
DIM1 |
+32 |
U32 |
2nd array size (0=unspecified)(#1) or index 1 for Alias. |
DIM2 |
+36 |
U32 |
3rd array size (0=unspecified)(#1) or index 2 for Alias. |
ALIASID |
+40 |
U16 |
Alias type ID |
ALIASBIT |
+42 |
U16 |
No. of bits per alias (depends on the type of alias ID) |
SIZE |
+44 |
U32 |
Size of variable. If Alias, the size is 0. |
VALUE |
+48 |
U32 |
Offset initial value of variable (relative to strings, 0=no value). |
ATTRIB |
+52 |
U32 |
Variable attributes: 0x000001 Variable can be written (WRITE) 0x000002 The variable can be read (READ) 0x000004 The variable can be forced (FORCE) 0x000008 The variable can be released (RELEASE) 0x000010 The variable is constant (CONST) 0x000020 The variable has no bit access (NOBITS) |
MODIFIER |
+56 |
U32 |
Variable modifier offsets (relative to strings). |
DIM0L |
+60 |
U32 |
Offset label 1st array size (related to strings). (#2) |
DIM1L |
+64 |
U32 |
Offset label 2nd array size (relative to strings). (#2) |
DIM2L |
+68 |
U32 |
Offset label 3rd array size (relative to strings). (#2) |
|
+72 |
U8[16] |
(reserved) |
(#1) Although ARRAYn fields are 32bit, in the current version of SW the maximum size should still be considered only 16bit (i.e., maximum index 0xFFFF).
(#2) Label means either a variable name (constant value) or the ascii representation of a numeric value, i.e., an offset to the string table .