-
Notifications
You must be signed in to change notification settings - Fork 1
/
recvloop.cpp
76 lines (62 loc) · 2.42 KB
/
recvloop.cpp
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
#include "recvloop.hpp"
#include <string>
namespace hyped {
using data::ModuleStatus;
namespace telemetry {
RecvLoop::RecvLoop(Logger &log, data::Data &data, Main *main_pointer)
: Thread{log},
main_ref_{*main_pointer},
data_{data}
{
log_.DBG("Telemetry", "Telemetry RecvLoop thread object created");
}
void RecvLoop::run()
{
log_.DBG("Telemetry", "Telemetry RecvLoop thread started");
data::Telemetry telem_data_struct = data_.getTelemetryData();
std::string message;
while (true) {
try {
message = main_ref_.client_.receiveData();
} catch (std::exception &e) {
log_.ERR("Telemetry", "%s", e.what());
telem_data_struct.module_status = ModuleStatus::kCriticalFailure;
data_.setTelemetryData(telem_data_struct);
break;
}
if (message == "ACK") {
log_.INFO("Telemetry", "FROM SERVER: ACK");
} else if (message == "STOP") {
log_.INFO("Telemetry", "FROM SERVER: STOP");
telem_data_struct.emergency_stop_command = true;
} else if (message == "CALIBRATE") {
log_.INFO("Telemetry", "FROM SERVER: CALIBRATE");
telem_data_struct.calibrate_command = true;
} else if (message == "LAUNCH") {
log_.INFO("Telemetry", "FROM SERVER: LAUNCH");
telem_data_struct.launch_command = true;
} else if (message == "SHUTDOWN") {
log_.INFO("Telemetry", "FROM SERVER: SHUTDOWN");
telem_data_struct.shutdown_command = true;
} else if (message == "SERVER_PROPULSION_GO") {
log_.INFO("Telemetry", "FROM SERVER: SERVICE_PROPULSION_GO");
telem_data_struct.service_propulsion_go = true;
} else if (message == "SERVER_PROPULSION_STOP") {
log_.INFO("Telemetry", "FROM SERVER: SERVICE_PROPULSION_STOP");
telem_data_struct.service_propulsion_go = false;
} else if (message == "NOMINAL_BRAKING") {
log_.INFO("Telemetry", "FROM SERVER: NOMINAL_BRAKING");
telem_data_struct.nominal_braking_command = true;
} else if (message == "NOMINAL_RETRACT") {
log_.INFO("Telemetry", "FROM SERVER: NOMINAL_RETRACT");
telem_data_struct.nominal_braking_command = false;
} else {
log_.ERR("Telemetry", "Unrecognized input from server, ENTERING CRITICAL FAILURE");
telem_data_struct.module_status = ModuleStatus::kCriticalFailure;
}
data_.setTelemetryData(telem_data_struct);
}
log_.DBG("Telemetry", "Exiting Telemetry RecvLoop thread");
}
} // namespace telemetry
} // namespace hyped