mirror of
https://github.com/nasa/fprime.git
synced 2025-12-10 00:44:37 -06:00
114 lines
4.1 KiB
C++
114 lines
4.1 KiB
C++
// ======================================================================
|
|
// \title Framer.hpp
|
|
// \author mstarch, bocchino
|
|
// \brief hpp file for Framer component implementation class
|
|
//
|
|
// \copyright
|
|
// Copyright 2009-2022, by the California Institute of Technology.
|
|
// ALL RIGHTS RESERVED. United States Government Sponsorship
|
|
// acknowledged.
|
|
//
|
|
// ======================================================================
|
|
|
|
#ifndef Svc_Framer_HPP
|
|
#define Svc_Framer_HPP
|
|
|
|
#include "Svc/Framer/FramerComponentAc.hpp"
|
|
#include "Svc/FramingProtocol/FramingProtocol.hpp"
|
|
#include "Svc/FramingProtocol/FramingProtocolInterface.hpp"
|
|
|
|
namespace Svc {
|
|
/**
|
|
* \brief Generic framing component using FramingProtocol implementation for actual framing
|
|
*
|
|
* Framing component used to take Com and File packets and frame serialize them using a
|
|
* framing protocol specified in a FramingProtocol instance. The instance must be supplied
|
|
* using the `setup` method.
|
|
*
|
|
* Using this component, projects can implement and supply a fresh FramingProtocol implementation
|
|
* without changing the reference topology.
|
|
*/
|
|
class Framer final : public FramerComponentBase, public FramingProtocolInterface {
|
|
public:
|
|
// ----------------------------------------------------------------------
|
|
// Construction, initialization, and destruction
|
|
// ----------------------------------------------------------------------
|
|
|
|
//! Construct object Framer
|
|
//!
|
|
Framer(const char* const compName /*!< The component name*/
|
|
);
|
|
|
|
//! \brief Setup this component with a supplied framing protocol
|
|
//!
|
|
void setup(FramingProtocol& protocol /*!< Protocol used in framing */);
|
|
|
|
//! Destroy object Framer
|
|
//!
|
|
~Framer();
|
|
|
|
PRIVATE:
|
|
// ----------------------------------------------------------------------
|
|
// Handler implementations for user-defined typed input ports
|
|
// ----------------------------------------------------------------------
|
|
|
|
//! Handler implementation for comIn
|
|
//!
|
|
void comIn_handler(const FwIndexType portNum, /*!< The port number*/
|
|
Fw::ComBuffer& data, /*!< Buffer containing packet data*/
|
|
U32 context /*!< Call context value; meaning chosen by user*/
|
|
);
|
|
|
|
//! Handler implementation for bufferIn
|
|
//!
|
|
void bufferIn_handler(const FwIndexType portNum, /*!< The port number*/
|
|
Fw::Buffer& fwBuffer /*!< The buffer*/
|
|
);
|
|
|
|
//! Handler implementation for comStatusIn
|
|
//!
|
|
void comStatusIn_handler(const FwIndexType portNum, /*!< The port number*/
|
|
Fw::Success& condition /*!< The condition*/);
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Implementation of FramingProtocolInterface
|
|
// ----------------------------------------------------------------------
|
|
|
|
//! \brief Allocation callback used to request memory for the framer
|
|
//!
|
|
//! Method used by the FramingProtocol to allocate memory for the framed buffer. Framing
|
|
//! typically adds tokens on the beginning and end of the raw data so it must allocate new space
|
|
//! to place those and a copy of the data in.
|
|
//!
|
|
//! \param size: size of allocation
|
|
//! \return Fw::Buffer containing allocation to write into
|
|
Fw::Buffer allocate(const U32 size);
|
|
|
|
//! Send implementation
|
|
//!
|
|
void send(Fw::Buffer& outgoing //!< The buffer to send
|
|
);
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Helper functions
|
|
// ----------------------------------------------------------------------
|
|
|
|
//! \brief helper function to handle framing of the raw data
|
|
//!
|
|
void handle_framing(const U8* const data, const U32 size, Fw::ComPacket::ComPacketType packet_type);
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Member variables
|
|
// ----------------------------------------------------------------------
|
|
|
|
//! The FramingProtocol implementation
|
|
FramingProtocol* m_protocol;
|
|
|
|
//! Flag determining if at least one frame was sent during framing
|
|
bool m_frame_sent;
|
|
};
|
|
|
|
} // end namespace Svc
|
|
|
|
#endif
|