size Layer
The <size> layer represents remaining serialization length of the frame until the end of <payload>. The frame definition must NOT contain more than one <size> layer.
<?xml version="1.0" encoding="UTF-8"?>
<schema ...>
<frame name="ProtocolFrame">
<size name="Size">
<int name="SizeField" type="uint16" />
</size>
<id name="Id">
<int name="IdField" type="uint8" />
</id>
<payload name="Data" />
</frame>
</schema>
Some protocols may specify that the field of the <size> layer contains its own length as well. The CommsDSL allows implementation of such case by adding usage of serOffset property to the field of the <size> layer.
<?xml version="1.0" encoding="UTF-8"?>
<schema ...>
<frame name="ProtocolFrame">
<size name="Size">
<int name="SizeField" type="uint16" serOffset="2" displayOffset="2"/>
</size>
<id name="Id">
<int name="IdField" type="uint8" />
</id>
<payload name="Data" />
</frame>
</schema>
The example below implements ID (2 bytes) | SIZE (2 bytes) | PAYLOAD
framing where SIZE
value includes length of the header (ID
+ SIZE
) in addition to the length of PAYLOAD
.
<?xml version="1.0" encoding="UTF-8"?>
<schema ...>
<frame name="ProtocolFrame">
<id name="Id">
<int name="IdField" type="uint16" />
</id>
<size name="Size">
<int name="SizeField" type="uint16" serOffset="4" displayOffset="4"/>
</size>
<payload name="Data" />
</frame>
</schema>
Also NOTE that <size> layer specifies number of remaining bytes until the end of <payload> layer. There are protocols that append some kind of <checksum> after the payload. In order to include them in the value of the <size> layer, also use serOffset property.
<?xml version="1.0" encoding="UTF-8"?>
<schema ...>
<frame name="ProtocolFrame">
<size name="Size">
<int name="SizeField" type="uint16" serOffset="2" displayOffset="2"/>
</size>
<id name="Id">
<int name="IdField" type="uint8" />
</id>
<payload name="Data" />
<checksum ...>
<int name="ChecksumField" type="uint16" />
</checksum>
</frame>
</schema>
The <size> layer doesn't have any extra properties in addition to common ones.
Last updated
Was this helpful?