forked from JanekOstendorf/THOMAS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTelemetryReceiver.h
131 lines (96 loc) · 3.12 KB
/
TelemetryReceiver.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#pragma once
// UDPServer-Klasse
#include "UDPClient.h"
// TCPServer-Klasse
#include "TCPServer.h"
// StatusInformation-Klasse
#include "StatusInformation.h"
// Enthält die Kommunikation für den Arduino
#include "ArduinoProtocol.h"
// Enthält die Funktionen zur Lasergestützten Abstandsmessung
#include "LaserMeasurement.h"
// OpenCV implementieren
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
// Enhält das Vector-Element
#include <vector>
// C++-thread-Klasse
#include <thread>
// Enhält Funktionen für Sockets
#include <sys/socket.h>
// Enhält das Map-Element
#include <map>
// BYTE Alias
#define BYTE char
// Status Codes
#define STATUS_CONNECT 0
#define STATUS_DISCONNECT 1
// Informations-IDs
#define FIELD_CPU 0
#define FIELD_MEMORY 1
#define FIELD_DISK 2
#define FIELD_SSID 3
#define FIELD_SIGNAL 4
#define FIELD_BANDWIDTH 5
#define FIELD_LASER_DISTANCE 6
// Kamera-ID
#define CAMERA 0
// Kamera Einstellungen
#define CAMERA_WIDTH 1280
#define CAMERA_HEIGHT 720
#define CAMERA_MAX_FPS 30
// Position des Laser-Markierungs-Markers
#define LASER_MARKER_POSITION 360
namespace THOMAS {
class TelemetryReceiver
{
private:
// Socket Struktur
struct sockaddr_in;
// Der TCP-Server.
TCPServer *_server;
// StatusInformations Klasse
StatusInformation *_statusInformation;
// Aufnahme Thread
std::thread *_captureFrameThread;
// ArduinoProtocol Klasse
ArduinoProtocol *_arduino;
// LaserMeasurement Klasse
LaserMeasurement *_laser;
// VideoCapture Device
cv::VideoCapture _videoCapture;
// Liste mit ClientIDs
std::map<int, UDPClient> UDPClientList;
// Array mit den Parametern für OpenCV
std::vector<int> param = std::vector<int>(2);
// TCP Daten verarbeiten
void ComputeTCPServerData(BYTE *data, int dataLength, int clientID);
// Neuer Client verbunden
void OnClientStatusChange(int clientID, int status, const char* ip);
// Nimmt Frames im seperaten Thread auf
void CaptureFrameThread();
// Erstellt ein Byte Array
std::vector<BYTE> GenerateByteArray(int cmdByte, int fieldID, std::string text);
// Wrapper, um die ComputeClientCommand-Memberfunktion sauber an den TCP-Server zu übergeben.
// Parameter:
// -> data: Die vom Server empfangenen Daten.
// -> dataLength: Die Länge der vom Server empfangenen Daten.
// -> obj: Das zur ComputeClientCommand-Funktion gehörende MotorControl-Objekt.
// -> clientID: ClientID jedes Clients zur Referenzierung
static void ComputeTCPServerDataWrapper(BYTE *data, int dataLength, void *obj, int clientID)
{
(reinterpret_cast<TelemetryReceiver *>(obj))->ComputeTCPServerData(data, dataLength, clientID);
}
// Wraper, um die OnClientStatusChange Funktion sauber an den TCP-Server zu übergeben
static void OnClientStatusChangeWrapper(int clientID, int status, void *obj, const char *ip)
{
(reinterpret_cast<TelemetryReceiver *>(obj))->OnClientStatusChange(clientID, status, ip);
}
public:
// Konstruktor
TelemetryReceiver();
// Wird beim Start ausgeführt
void Run(ArduinoProtocol *arduinoProtocol, LaserMeasurement *laserMeasurement = NULL);
};
}