source: flair-src/trunk/lib/FlairSensorActuator/src/HostEthController.h@ 330

Last change on this file since 330 was 238, checked in by Bayard Gildas, 4 years ago

correction sémaphore. bloquant tout ça...

File size: 3.5 KB
RevLine 
[3]1// %flair:license{
[15]2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
[3]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//
[15]13// purpose: Base class for host side remote controls that talks to target
14// side through ethernet connection
[3]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 {
[238]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 }
[3]38}
39
[15]40namespace flair {
41namespace sensor {
42enum class ControllerAction;
[3]43
[15]44/*! \class HostEthController
45*
46* \brief Base Class for host side remote controls that talks to target side
47*through ethernet connection
48*
[238]49* There are 3 communication channels:
[15]50* - 1 connection with the ground station to display the values. Output for
[238]51*analog sticks is normalized in the range [-1, 1] (float values) (through DrawUserInterface, use a UDT socket)
52* - 1 connection with the target to send the controller values (through udp socket - high bandwitdh, packets may be discarded)
53* - 1 connection with the target to receive controller state modification requests (through tcp socket - low bandwidth, packets must not be discarded)
[15]54*/
55class HostEthController : public core::Thread, public core::IODevice {
56public:
[137]57 HostEthController(std::string name,
[15]58 std::string address, int port, uint32_t period = 10,
59 uint32_t _bitsPerAxis = 7, uint8_t priority = 0);
60 ~HostEthController();
61 void DrawUserInterface();
[3]62
[15]63protected:
64 std::string controllerName;
65 core::TcpSocket *controlSocket; // connection to the target
[178]66 core::UdpSocket *dataSocket;
[15]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){};
[3]78
[15]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;
[214]83 core::Matrix *axis;
[15]84 gui::DataPlot1D **axisPlot;
85 uint32_t bitsPerAxis;
86 uint32_t nativeBitsPerAxis;
[3]87
[15]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;
[214]92 core::Matrix *button;
[15]93 uint8_t buttonOffset;
94 bool meaningfulDataAvailable;
[3]95
[15]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();
[3]102
[15]103 private:
104 HostEthController *hostEthController;
105 };
106 DataSender *dataSender;
[3]107
[15]108 bool ControllerInitialization();
[238]109 bool ConnectWithTarget();
[15]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
[3]120#endif // HOSTETHCONTROLLER_H
Note: See TracBrowser for help on using the repository browser.