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/04/14 |
---|
6 | // filename: TargetController.h |
---|
7 | // |
---|
8 | // author: Gildas Bayard |
---|
9 | // Copyright Heudiasyc UMR UTC/CNRS 7253 |
---|
10 | // |
---|
11 | // version: $Id: $ |
---|
12 | // |
---|
13 | // purpose: Base class for target side remote controls |
---|
14 | // |
---|
15 | // |
---|
16 | /*********************************************************************/ |
---|
17 | |
---|
18 | #ifndef TARGETCONTROLLER_H |
---|
19 | #define TARGETCONTROLLER_H |
---|
20 | |
---|
21 | #include <IODevice.h> |
---|
22 | #include <Thread.h> |
---|
23 | #include <stdint.h> |
---|
24 | #include <queue> |
---|
25 | |
---|
26 | namespace flair { |
---|
27 | namespace core { |
---|
28 | class FrameworkManager; |
---|
29 | class Matrix; |
---|
30 | class Socket; |
---|
31 | class io_data; |
---|
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 | |
---|
44 | /*! \class TargetController |
---|
45 | * |
---|
46 | * \brief Base Class for target side remote controls |
---|
47 | * |
---|
48 | */ |
---|
49 | class TargetController : public core::Thread, public core::IODevice { |
---|
50 | public: |
---|
51 | TargetController(std::string name,uint8_t priority = 0); |
---|
52 | ~TargetController(); |
---|
53 | // void DrawUserInterface(); |
---|
54 | virtual bool IsConnected() const = 0; |
---|
55 | virtual bool IsDataFrameReady() = 0; |
---|
56 | // axis stuff |
---|
57 | unsigned int GetAxisNumber() const; |
---|
58 | virtual std::string GetAxisName(unsigned int axisId) const; |
---|
59 | float |
---|
60 | GetAxisValue(unsigned int axisId) const; // always in the range [-1.0,1.0] |
---|
61 | // button stuff |
---|
62 | unsigned int GetButtonNumber() const; |
---|
63 | bool IsButtonPressed(unsigned int buttonId) const; |
---|
64 | virtual std::string GetButtonName(unsigned int axisId) const; |
---|
65 | // controller state stuff |
---|
66 | virtual bool IsControllerActionSupported(ControllerAction action) const { |
---|
67 | return false; |
---|
68 | }; |
---|
69 | bool SetLedOn(unsigned int ledId); |
---|
70 | bool SetLedOff(unsigned int ledId); |
---|
71 | bool Rumble(unsigned int left_force, unsigned int left_timeout, |
---|
72 | unsigned int right_force, unsigned int right_timeout); |
---|
73 | bool FlashLed(unsigned int ledId, unsigned int on_timeout, |
---|
74 | unsigned int off_timeout); |
---|
75 | void UpdateFrom(const core::io_data *data){}; // TODO |
---|
76 | gui::Tab *GetTab(void) const; |
---|
77 | |
---|
78 | protected: |
---|
79 | virtual bool ProcessMessage(core::Message *msg) = 0; |
---|
80 | void QueueMessage(core::Message msg); |
---|
81 | virtual bool ControllerInitialization() = 0; // {return true;}; |
---|
82 | // axis stuff |
---|
83 | unsigned int axisNumber; |
---|
84 | core::Matrix *axis = nullptr; |
---|
85 | virtual void AcquireAxisData(core::Matrix &axis) = 0; // responsible for |
---|
86 | // getting the axis |
---|
87 | // data from the |
---|
88 | // hardware |
---|
89 | uint16_t bitsPerAxis; |
---|
90 | // button stuff |
---|
91 | unsigned int buttonNumber; |
---|
92 | core::Matrix *button = nullptr; |
---|
93 | virtual void AcquireButtonData(core::Matrix &button) = 0; // responsible for |
---|
94 | // getting the |
---|
95 | // button data |
---|
96 | // from the |
---|
97 | // hardware |
---|
98 | // controller state stuff |
---|
99 | unsigned int ledNumber; |
---|
100 | |
---|
101 | private: |
---|
102 | void Run(); |
---|
103 | std::queue<core::Message *> changeStateQueue; |
---|
104 | flair::gui::Tab *main_tab; |
---|
105 | flair::gui::Tab *setup_tab; |
---|
106 | }; |
---|
107 | } |
---|
108 | } |
---|
109 | |
---|
110 | #endif // TARGETCONTROLLER_H |
---|