F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
SocketComponentHelper.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title SocketComponentHelper.hpp
3 // \author mstarch
4 // \brief hpp file for SocketComponentHelper implementation class
5 //
6 // \copyright
7 // Copyright 2009-2020, by the California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged.
10 //
11 // ======================================================================
12 #ifndef DRV_SocketComponentHelper_HPP
13 #define DRV_SocketComponentHelper_HPP
14 
15 #include <Drv/Ip/IpSocket.hpp>
16 #include <Fw/Buffer/Buffer.hpp>
17 #include <Os/Mutex.hpp>
18 #include <Os/Task.hpp>
19 
20 namespace Drv {
29  public:
35 
39  virtual ~SocketComponentHelper();
40 
55  void start(const Fw::StringBase& name,
58  const Os::Task::ParamType cpuAffinity = Os::Task::TASK_DEFAULT);
59 
71 
81  bool isOpened();
82 
92  void setAutomaticOpen(bool auto_open);
93 
102  SocketIpStatus send(const U8* const data, const U32 size);
103 
112  SocketIpStatus recv(U8* data, U32& size);
113 
121  void close();
122 
131  void shutdown();
132 
136  bool running();
137 
144  void stop();
145 
155 
156  protected:
160  virtual void readLoop();
171  virtual IpSocket& getSocketHandler() = 0;
172 
183  virtual Fw::Buffer getBuffer() = 0;
184 
195  virtual void sendBuffer(Fw::Buffer buffer, SocketIpStatus status) = 0;
196 
200  virtual void connected() = 0;
201 
207  static void readTask(void* pointer);
208 
209  private:
219  SocketIpStatus reopen();
220 
221  protected:
225  bool m_reopen = true;
226  bool m_stop = true;
227  OpenState m_open = OpenState::NOT_OPEN;
228 };
229 } // namespace Drv
230 #endif // DRV_SocketComponentHelper_HPP
SocketComponentHelper()
constructs the socket read task
bool m_reopen
Force reopen on disconnect.
static constexpr FwSizeType TASK_DEFAULT
Definition: Task.hpp:37
bool m_stop
Stops the task when set to true.
void shutdown()
shutdown the socket communications
SocketIpStatus send(const U8 *const data, const U32 size)
send data to the IP socket from the given buffer
bool isOpened()
check if IP socket has previously been opened
void start(const Fw::StringBase &name, const FwTaskPriorityType priority=Os::Task::TASK_PRIORITY_DEFAULT, const Os::Task::ParamType stack=Os::Task::TASK_DEFAULT, const Os::Task::ParamType cpuAffinity=Os::Task::TASK_DEFAULT)
start the socket read task to start producing data
void setAutomaticOpen(bool auto_open)
set socket to automatically open connections when true, or not when false
virtual Fw::Buffer getBuffer()=0
returns a buffer to fill with data
static constexpr FwTaskPriorityType TASK_PRIORITY_DEFAULT
Definition: Task.hpp:38
supports a task to read a given socket adaptation
OpenState m_open
Have we successfully opened.
void close()
close the socket communications
virtual void connected()=0
called when the IPv4 system has been connected
PlatformTaskPriorityType FwTaskPriorityType
The type of task priorities used.
virtual IpSocket & getSocketHandler()=0
returns a reference to the socket handler
uint8_t U8
8-bit unsigned integer
Definition: BasicTypes.h:53
FwSizeType ParamType
backwards-compatible parameter type
Definition: Task.hpp:222
SocketIpStatus recv(U8 *data, U32 &size)
receive data from the IP socket from the given buffer
virtual ~SocketComponentHelper()
destructor of the socket read task
static void readTask(void *pointer)
a task designed to read from the socket and output incoming data
void stop()
stop the socket read task and close the associated socket.
virtual void readLoop()
receive off the TCP socket
Os::Task::Status join()
joins to the stopping read task to wait for it to close
SocketIpStatus
Status enumeration for socket return values.
Definition: IpSocket.hpp:29
SocketIpStatus open()
open the socket for communications
Helper base-class for setting up Berkeley sockets.
Definition: IpSocket.hpp:57
virtual void sendBuffer(Fw::Buffer buffer, SocketIpStatus status)=0
sends a buffer to be filled with data
bool running()
is the read loop running