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.


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.


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,

This enables the parsing of variable length packets using the VariableLength.