fprime/Drv/LinuxUartDriver/LinuxUartDriver.hpp
Thomas Boyer-Chammard d0246f148b
Add Framer FPP interface, implement FprimeFramer and adapt ComQueue (#3486)
* Initial FprimeFramer and FprimePacketizer

* Code clarity + set up UTs

* Rework ComQueue and ComStub to use DataWithContext

* Add packets to RefPackets.fppi

* Fix ComQueue tests

* Add hotfix to FileDownlink instead of ComQueue

* Fix cancelPacket as well

* Fix ComQueue UTs by removing hotfix

* Refactor DataWithContext to use an FPP object for context instead of Fw.Buffer

* Touch up testing

* Add docs

* more docs

* More docs

* Rework buffer deallocation pattern to pass-through ComQueue

* Update ComStub UTs

* Restore original FileDownlink.cpp

* Formatting tweak

* Update deprecated getSerializeRepr() calls

* deserialization methods

* Fix spelling

* add cast for safety

* CMakefile change

* Bump ComQueue depth

* Update RPI deployment with new Downlink stack

* Rename comQueueIn port to comPktQueueIn

* Fix comQueueIn to comPktQueueIn change

* Remove legacy Svc.Framer

* Fix CMake UTs

* Fix RPI topology config

* Fix FprimeProtocol.fpp module

* Fix namespacing

* Use const reference for FrameContext port

* Review comments EXCEPT port passback refactor

* Rework ComStub with new ByteStream

* New ByteStream - ComInterface model

* Rework TcpClient / TcpServer with new bytestream

* Adapt UDP component for new ByteStream

* Adapt FrameAccumulator for new ByteStream

* Adapt FprimeFramer for new ByteStream

* Update Ref topology with new ByteStream model

* Remove all legacy deallocates from Drivers; reintroduce DEPRECATED model types

* Fix spelling and include error

* More spelling....

* RPI and RpiDemo fixes

* Fix conversion warning on RPI

* static_cast for short int on RPI

* Standardize port names

* Remove legacy Drv types and merge RECV/SEND enum type, delete StreamCrossover

* Update SDDs

* Update SDDs

* Fix ComInterface <-> Framer interfaction, clarify comments and fix annotations

* Switch ComStub from ASSERT to log failure and return buffer

* Add history size check + clarify test handler overrides

* Fix RPI topology to wire comStub on Uplink

* Rename comm to comDriver in RPI topology

* Update communication adapter interface docs
2025-04-29 16:40:36 -07:00

116 lines
3.3 KiB
C++

// ======================================================================
// \title LinuxUartDriverImpl.hpp
// \author tcanham
// \brief hpp file for LinuxUartDriver component implementation class
//
// \copyright
// Copyright 2009-2015, by the California Institute of Technology.
// ALL RIGHTS RESERVED. United States Government Sponsorship
// acknowledged.
//
// ======================================================================
#ifndef LinuxUartDriver_HPP
#define LinuxUartDriver_HPP
#include <Drv/LinuxUartDriver/LinuxUartDriverComponentAc.hpp>
#include <Os/Mutex.hpp>
#include <Os/Task.hpp>
#include <termios.h>
namespace Drv {
class LinuxUartDriver final : public LinuxUartDriverComponentBase {
public:
// ----------------------------------------------------------------------
// Construction, initialization, and destruction
// ----------------------------------------------------------------------
//! Construct object LinuxUartDriver
//!
LinuxUartDriver(const char* const compName /*!< The component name*/
);
//! Configure UART parameters
enum UartBaudRate {
BAUD_9600=9600,
BAUD_19200=19200,
BAUD_38400=38400,
BAUD_57600=57600,
BAUD_115K=115200,
BAUD_230K=230400,
#ifdef TGT_OS_TYPE_LINUX
BAUD_460K=460800,
BAUD_921K=921600,
BAUD_1000K=1000000,
BAUD_1152K=1152000,
BAUD_1500K=1500000,
BAUD_2000K=2000000,
#ifdef B2500000
BAUD_2500K=2500000,
#endif
#ifdef B3000000
BAUD_3000K=3000000,
#endif
#ifdef B3500000
BAUD_3500K=3500000,
#endif
#ifdef B4000000
BAUD_4000K=4000000
#endif
#endif
};
enum UartFlowControl { NO_FLOW, HW_FLOW };
enum UartParity { PARITY_NONE, PARITY_ODD, PARITY_EVEN };
// Open device with specified baud and flow control.
bool open(const char* const device, UartBaudRate baud, UartFlowControl fc, UartParity parity, U32 allocationSize);
//! start the serial poll thread.
//! buffSize is the max receive buffer size
//!
void start(Os::Task::ParamType priority = Os::Task::TASK_DEFAULT,
Os::Task::ParamType stackSize = Os::Task::TASK_DEFAULT,
Os::Task::ParamType cpuAffinity = Os::Task::TASK_DEFAULT);
//! Quit thread
void quitReadThread();
//! Join thread
Os::Task::Status join();
//! Destroy object LinuxUartDriver
//!
~LinuxUartDriver();
PRIVATE:
// ----------------------------------------------------------------------
// Handler implementations for user-defined typed input ports
// ----------------------------------------------------------------------
//! Handler implementation for serialSend
//!
void send_handler(FwIndexType portNum, /*!< The port number*/
Fw::Buffer& serBuffer);
PlatformIntType m_fd; //!< file descriptor returned for I/O device
U32 m_allocationSize; //!< size of allocation request to memory manager
const char* m_device; //!< original device path
//! This method will be called by the new thread to wait for input on the serial port.
static void serialReadTaskEntry(void* ptr);
Os::Task m_readTask; //!< task instance for thread to read serial port
bool m_quitReadThread; //!< flag to quit thread
};
} // end namespace Drv
#endif