Defining Packet Fields¶
All fields in a packet including those in the packet primary header are defined by a name, bit length (if available), and data type.
This is done by using one of the following objects PacketField
and PacketArray
.
These objects are used by the packet objects FixedLength
and VariableLength
.
PacketField¶
The PacketField
is used to define most fields in a packet as well as the packet primary header.
It can be defined simply, for example:
PacketField(name='SHCOARSE', data_type='uint', bit_length=32)
It requires a name, data type, as well as bit length. The name can be any string. This string is used as the index in the resulting dictionary once a packet is parsed. It is also possible to provide a bit offset to define precisely its position within the packet. This is typically not necessary because packet are defined in a list. Without a bit offset, its value is calculated automatically assuming that the order of packet fields is correct.
PacketArray¶
The PacketArray
provides a simple way to define multiple repeating packet fields.
It is defined similarly to PacketField
but adds a few new keywords, for example:
PacketArray(name='SENSOR_GRID', data_type='uint', bit_length=16,
array_shape=(32, 32), array_order='C')
The bit length is the value for each element in the array. Defining it this way makes it a fixed length field. It is also possible to use it to define a field that can have a variable size.:
PacketArray(name="data", data_type="uint", bit_length=16,
array_shape="expand")
This enables the parsing of variable length packets using the VariableLength
.