Source code for fprime_gds.common.encoders.event_encoder

"""
@brief Encoder for Event data

This encoder takes in EventData objects, serializes them, and sends the results
to all registered senders.

Serialized Event format:
    +--------------------------------+          -
    | Header = "A5A5 "               |          |
    | (5 byte string)                |          |
    +--------------------------------+      Added by
    | Destination = "GUI " or "FSW " |       Sender
    | (4 byte string)                |          |
    +--------------------------------+          -
    | Length of descriptor, ID,      |
    | and argument data              |
    | (variable bytes, check config) |
    +--------------------------------+
    | Descriptor type = 2            |
    | (4 bytes)                      |
    +--------------------------------+
    | ID                             |
    | (4 bytes)                      |
    +--------------------------------+
    | Argument 1 value               |
    +--------------------------------+
    | Argument 2 value               |
    +--------------------------------+
    | ...                            |
    +--------------------------------+
    | Argument n value               |
    +--------------------------------+

@date Created August 9, 2018
@author R. Joseph Paetz

@bug No known bugs
"""

from .encoder import Encoder
from fprime_gds.common.data_types.event_data import EventData
from fprime_gds.common.utils.data_desc_type import DataDescType


[docs]class EventEncoder(Encoder): """Encoder class for event data""" def __init__(self, config=None): """ Constructor Args: config (ConfigManager, default=None): Object with configuration data for the sizes of fields in the binary data. If None passed, defaults are used. Returns: An initialized EventEncoder object """ super().__init__(config) self.len_obj = self.config.get_type("msg_len") self.desc_obj = self.config.get_type("msg_desc") self.id_obj = self.config.get_type("event_id")
[docs] def encode_api(self, data): """ Encodes the given EventData object as binary data and returns the result. Args: data (EventData obj): A non-empty EventData object to encode Returns: Encoded version of the data argument as binary data """ assert isinstance(data, EventData), "Encoder handling incorrect type" event_temp = data.get_template() self.desc_obj.val = DataDescType["FW_PACKET_LOG"].value desc_bin = self.desc_obj.serialize() self.id_obj.val = event_temp.get_id() id_bin = self.id_obj.serialize() time_bin = data.get_time().serialize() arg_bin = b"" for arg in data.get_args(): arg_bin += arg.serialize() len_val = len(desc_bin) + len(id_bin) + len(time_bin) + len(arg_bin) self.len_obj.val = len_val len_bin = self.len_obj.serialize() binary_data = len_bin + desc_bin + id_bin + time_bin + arg_bin return binary_data