source: flair-dev/trunk/include/FlairSensorActuator/HostEthController.h @ 68

Last change on this file since 68 was 68, checked in by Sanahuja Guillaume, 3 years ago

maj for armv5te

File size: 3.2 KB
Line 
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
26namespace flair {
27namespace core {
28class Matrix;
29class TcpSocket;
30class UdpSocket;
31class Mutex;
32}
33namespace gui {
34class Tab;
35class TabWidget;
36class DataPlot1D;
37}
38}
39
40namespace flair {
41namespace sensor {
42enum class ControllerAction;
43
44/*! \class HostEthController
45*
46* \brief Base Class for host side remote controls that talks to target side
47*through ethernet connection
48*
49* There are 2 communication channels:
50*   - 1 connection with the ground station to display the values. Output for
51*analog sticks is normalized in the range [-1, 1] (float values)
52*   - 1 connection with the target to send the controller values (and receive
53*controller state modification requests)
54*/
55class HostEthController : public core::Thread, public core::IODevice {
56public:
57  HostEthController(std::string name,
58                    std::string address, int port, uint32_t period = 10,
59                    uint32_t _bitsPerAxis = 7, uint8_t priority = 0);
60  ~HostEthController();
61  void DrawUserInterface();
62
63protected:
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
96private:
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 ConnectedWithTarget();
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
Note: See TracBrowser for help on using the repository browser.