Flair
Framework Libre Air
HostEthController.h
1 // %flair:license{
2 // This file is part of the Flair framework distributed under the
3 // CECILL-C License, Version 1.0.
4 // %flair:license}
5 // created: 2015/03/30
6 // filename: HostEthController.h
7 //
8 // author: Gildas Bayard
9 // Copyright Heudiasyc UMR UTC/CNRS 7253
10 //
11 // version: $Id: $
12 //
13 // purpose: Base class for host side remote controls that talks to target
14 // side through ethernet connection
15 //
16 //
17 /*********************************************************************/
18 
19 #ifndef HOSTETHCONTROLLER_H
20 #define HOSTETHCONTROLLER_H
21 
22 #include <IODevice.h>
23 #include <Thread.h>
24 #include <stdint.h>
25 
26 namespace flair {
27  namespace core {
28  class Matrix;
29  class TcpSocket;
30  class UdpSocket;
31  class Mutex;
32  }
33  namespace gui {
34  class Tab;
35  class TabWidget;
36  class DataPlot1D;
37  }
38 }
39 
40 namespace flair {
41 namespace sensor {
42 enum class ControllerAction;
43 
56 public:
57  HostEthController(std::string name,
58  std::string address, int port, uint32_t period = 10,
59  uint32_t _bitsPerAxis = 7, uint8_t priority = 0);
61  void DrawUserInterface();
62 
63 protected:
64  std::string controllerName;
65  core::TcpSocket *controlSocket; // connection to the target
66  core::UdpSocket *dataSocket;
67  std::string targetAddress;
68  int targetPort;
69  gui::Tab *tab;
70  gui::TabWidget *tabWidget;
71  virtual bool IsDataFrameReady() { return true; };
72  virtual void CompleteDataFrameGrab(){};
73  // int8_t *datas;
74  // uint8_t dataSize;
75  char *dataFrameBuffer;
76  size_t dataFrameSize;
77  virtual void ProcessMessage(core::Message *controllerAction){};
78 
79  virtual std::string GetAxisDescription(unsigned int axis);
80  virtual void
81  GetAxisData() = 0; // responsible for getting the axis data from the hardware
82  unsigned int axisNumber;
83  core::Matrix *axis;
84  gui::DataPlot1D **axisPlot;
85  uint32_t bitsPerAxis;
86  uint32_t nativeBitsPerAxis;
87 
88  virtual std::string GetButtonDescription(unsigned int button);
89  virtual void GetButtonData() = 0; // responsible for getting the button data
90  // from the hardware
91  unsigned int buttonNumber;
92  core::Matrix *button;
93  uint8_t buttonOffset;
94  bool meaningfulDataAvailable;
95 
96 private:
97  class DataSender : public core::Thread {
98  public:
99  DataSender(Object *parent, HostEthController *hostEthController,
100  std::string name, uint8_t priority = 0);
101  void Run();
102 
103  private:
104  HostEthController *hostEthController;
105  };
106  DataSender *dataSender;
107 
108  bool ControllerInitialization();
109  bool ConnectWithTarget();
110  void SendControllerInfo();
111  void Run();
112  void BuildDataFrame();
113  bool writeBits(uint16_t value, uint8_t valueSizeInBits, char *buffer,
114  uint8_t offsetInBits);
115  core::Mutex *connectionEstablishedMutex;
116 };
117 }
118 }
119 
120 #endif // HOSTETHCONTROLLER_H
Abstract class for input/ouput system.
Definition: IODevice.h:45
namespace of the flair Framework
Definition: Ahrs.h:19
Class defining a mutex.
Definition: Mutex.h:29
Class encapsulating a TCP socket.
Definition: TcpSocket.h:25
Abstract class for input/ouput system.
Class displaying a QTabWidget on the ground station.
Definition: TabWidget.h:29
Abstract class for a thread.
Base Class for host side remote controls that talks to target side through ethernet connection...
Definition: HostEthController.h:55
Abstract class for a thread.
Definition: Thread.h:38
Definition: Object.h:35
Class defining a matrix.
Definition: Matrix.h:31
Class displaying a 1D plot on the ground station.
Definition: DataPlot1D.h:33
Class displaying a QTab on the ground station.
Definition: Tab.h:29
Class encapsulating a UDP socket. It assumes packets are coming from only one distant host on a given...
Definition: UdpSocket.h:31
Object(const Object *parent=NULL, std::string name="", std::string type="")
Constructor.