Skip to content

Commit 46ac3a7

Browse files
committed
Merge pull request #6 from peterbarker/la-enhancements
La enhancements
2 parents 67319fe + 3934c9c commit 46ac3a7

30 files changed

+1042
-360
lines changed

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ INCS = -I./util -I./ini -I./ini/cpp
1717

1818
STD=-std=c++11
1919
CFLAGS += -Wall $(INCS) -DGIT_VERSION=\"$(GIT_VERSION)\"
20-
CXXFLAGS += -Wall $(INCS) $(STD) -g -fpermissive -DGIT_VERSION=\"$(GIT_VERSION)\"
20+
CXXFLAGS += -Wall $(INCS) $(STD) -g -DGIT_VERSION=\"$(GIT_VERSION)\"
2121

2222
DLIBS += -ljsoncpp
2323

2424
SRCS_CPP = dataflash_logger.cpp
2525
SRCS_CPP += INIReader.cpp
26+
SRCS_CPP += analyzer_util.cpp
2627
SRCS_CPP += mavlink_message_handler.cpp
2728
SRCS_CPP += mavlink_reader.cpp
2829
SRCS_CPP += analyze.cpp
@@ -34,7 +35,10 @@ SRCS_CPP += analyzer_ever_flew.cpp
3435
SRCS_CPP += analyzer_good_ekf.cpp
3536
SRCS_CPP += analyzer_battery.cpp
3637
SRCS_CPP += analyzer_brownout.cpp
37-
SRCS_CPP += analyzer_crashed.cpp
38+
SRCS_CPP += analyzer_notcrashed.cpp
39+
SRCS_CPP += analyzer_attitude_control.cpp
40+
SRCS_CPP += analyzervehicle_copter.cpp
41+
SRCS_CPP += analyzervehicle.cpp
3842
SRCS_CPP += la-log.cpp
3943
SRCS_C = util.c ini.c
4044

analyze.cpp

Lines changed: 73 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
#include "analyzer_ever_armed.h"
88
#include "analyzer_ever_flew.h"
99
#include "analyzer_good_ekf.h"
10+
#include "analyzer_attitude_control.h"
1011
#include "analyzer_battery.h"
1112
#include "analyzer_brownout.h"
12-
#include "analyzer_crashed.h"
13+
#include "analyzer_notcrashed.h"
1314

1415
void Analyze::instantiate_analyzers(INIReader *config)
1516
{
@@ -18,55 +19,62 @@ void Analyze::instantiate_analyzers(INIReader *config)
1819
exit(1); // FIXME - throw exception
1920
}
2021

21-
Analyzer_Compass_Offsets *analyzer_compass_offsets = new Analyzer_Compass_Offsets(_fd_telem_forwarder, _sa_telemetry_forwarder);
22+
Analyzer_Compass_Offsets *analyzer_compass_offsets = new Analyzer_Compass_Offsets(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
2223
if (analyzer_compass_offsets != NULL) {
2324
configure_analyzer(config, analyzer_compass_offsets, "Analyzer_Compass_Offsets");
2425
} else {
2526
syslog(LOG_INFO, "Failed to create analyzer_compass_offsets");
2627
}
2728

28-
Analyzer_Ever_Armed *analyzer_ever_armed = new Analyzer_Ever_Armed(_fd_telem_forwarder, _sa_telemetry_forwarder);
29+
Analyzer_Ever_Armed *analyzer_ever_armed = new Analyzer_Ever_Armed(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
2930
if (analyzer_ever_armed != NULL) {
3031
configure_analyzer(config, analyzer_ever_armed, "Analyzer_Ever_Armed");
3132
} else {
3233
syslog(LOG_INFO, "Failed to create analyzer_ever_armed");
3334
}
3435

35-
Analyzer_Ever_Flew *analyzer_ever_flew = new Analyzer_Ever_Flew(_fd_telem_forwarder, _sa_telemetry_forwarder);
36+
Analyzer_Ever_Flew *analyzer_ever_flew = new Analyzer_Ever_Flew(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
3637
if (analyzer_ever_flew != NULL) {
3738
configure_analyzer(config, analyzer_ever_flew, "Analyzer_Ever_Flew");
3839
} else {
3940
syslog(LOG_INFO, "Failed to create analyzer_ever_flew");
4041
}
4142

4243

43-
Analyzer_Good_EKF *analyzer_good_ekf = new Analyzer_Good_EKF(_fd_telem_forwarder, _sa_telemetry_forwarder);
44+
Analyzer_Good_EKF *analyzer_good_ekf = new Analyzer_Good_EKF(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
4445
if (analyzer_good_ekf != NULL) {
4546
configure_analyzer(config, analyzer_good_ekf, "Analyzer_Good_EKF");
4647
} else {
4748
syslog(LOG_INFO, "Failed to create analyzer_good_ekf");
4849
}
4950

50-
Analyzer_Battery *analyzer_battery = new Analyzer_Battery(_fd_telem_forwarder, _sa_telemetry_forwarder);
51+
Analyzer_Attitude_Control *analyzer_attitude_control = new Analyzer_Attitude_Control(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
52+
if (analyzer_attitude_control != NULL) {
53+
configure_analyzer(config, analyzer_attitude_control, "Analyzer_Attitude_Control");
54+
} else {
55+
syslog(LOG_INFO, "Failed to create analyzer_attitude_control");
56+
}
57+
58+
Analyzer_Battery *analyzer_battery = new Analyzer_Battery(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
5159
if (analyzer_battery != NULL) {
5260
configure_analyzer(config, analyzer_battery, "Analyzer_Battery");
5361
} else {
5462
syslog(LOG_INFO, "Failed to create analyzer_battery");
5563
}
5664

57-
Analyzer_Brownout *analyzer_brownout = new Analyzer_Brownout(_fd_telem_forwarder, _sa_telemetry_forwarder);
65+
Analyzer_Brownout *analyzer_brownout = new Analyzer_Brownout(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
5866
if (analyzer_brownout != NULL) {
5967
configure_analyzer(config, analyzer_brownout, "Analyzer_Brownout");
6068
} else {
6169
syslog(LOG_INFO, "Failed to create analyzer_brownout");
6270
}
6371

6472

65-
Analyzer_Crashed *analyzer_crashed = new Analyzer_Crashed(_fd_telem_forwarder, _sa_telemetry_forwarder);
66-
if (analyzer_crashed != NULL) {
67-
configure_analyzer(config, analyzer_crashed, "Analyzer_Crashed");
73+
Analyzer_NotCrashed *analyzer_notcrashed = new Analyzer_NotCrashed(_fd_telem_forwarder, _sa_telemetry_forwarder, vehicle);
74+
if (analyzer_notcrashed != NULL) {
75+
configure_analyzer(config, analyzer_notcrashed, "Analyzer_NotCrashed");
6876
} else {
69-
syslog(LOG_INFO, "Failed to create analyzer_crashed");
77+
syslog(LOG_INFO, "Failed to create analyzer_not_crashed");
7078
}
7179
}
7280

@@ -342,6 +350,9 @@ void Analyze::end_of_log(uint32_t packet_count) {
342350
}
343351

344352
Json::Value root;
353+
root["format-version"] = "0.1";
354+
root["timestamp"] = (Json::UInt64)start_time;
355+
root["duration"] = (Json::UInt64)(now() - start_time);
345356

346357
results_json(root);
347358

@@ -364,41 +375,92 @@ void Analyze::end_of_log(uint32_t packet_count) {
364375
}
365376

366377
void Analyze::handle_decoded_message(uint64_t T, mavlink_ahrs2_t &msg) {
378+
if (!vehicle) {
379+
return;
380+
}
367381
for(int i=0; i<next_analyzer; i++) {
368382
analyzer[i]->handle_decoded_message(T, msg);
369383
}
370384
}
371385
void Analyze::handle_decoded_message(uint64_t T, mavlink_attitude_t &msg) {
386+
if (!vehicle) {
387+
return;
388+
}
389+
vehicle->handle_decoded_message(T, msg);
372390
for(int i=0; i<next_analyzer; i++) {
373391
analyzer[i]->handle_decoded_message(T, msg);
374392
}
375393
}
376394
void Analyze::handle_decoded_message(uint64_t T, mavlink_heartbeat_t &msg) {
395+
if (!vehicle) {
396+
return;
397+
}
398+
vehicle->handle_decoded_message(T, msg);
399+
for(int i=0; i<next_analyzer; i++) {
400+
analyzer[i]->handle_decoded_message(T, msg);
401+
}
402+
}
403+
void Analyze::handle_decoded_message(uint64_t T, mavlink_nav_controller_output_t &msg) {
404+
if (!vehicle) {
405+
return;
406+
}
407+
vehicle->handle_decoded_message(T, msg);
377408
for(int i=0; i<next_analyzer; i++) {
378409
analyzer[i]->handle_decoded_message(T, msg);
379410
}
380411
}
381412
void Analyze::handle_decoded_message(uint64_t T, mavlink_param_value_t &msg) {
413+
if (!vehicle) {
414+
return;
415+
}
416+
vehicle->handle_decoded_message(T, msg);
382417
for(int i=0; i<next_analyzer; i++) {
383418
analyzer[i]->handle_decoded_message(T, msg);
384419
}
385420
}
386421
void Analyze::handle_decoded_message(uint64_t T, mavlink_servo_output_raw_t &msg) {
422+
if (!vehicle) {
423+
return;
424+
}
425+
vehicle->handle_decoded_message(T, msg);
387426
for(int i=0; i<next_analyzer; i++) {
388427
analyzer[i]->handle_decoded_message(T, msg);
389428
}
390429
}
391430
void Analyze::handle_decoded_message(uint64_t T, mavlink_ekf_status_report_t &msg) {
431+
if (!vehicle) {
432+
return;
433+
}
392434
for(int i=0; i<next_analyzer; i++) {
393435
analyzer[i]->handle_decoded_message(T, msg);
394436
}
395437
}
396438
void Analyze::handle_decoded_message(uint64_t T, mavlink_sys_status_t &msg) {
439+
if (!vehicle) {
440+
return;
441+
}
397442
for(int i=0; i<next_analyzer; i++) {
398443
analyzer[i]->handle_decoded_message(T, msg);
399444
}
400445
}
401446
void Analyze::handle_decoded_message(uint64_t T, mavlink_vfr_hud_t &msg) {
447+
if (!vehicle) {
448+
return;
449+
}
450+
for(int i=0; i<next_analyzer; i++) {
451+
analyzer[i]->handle_decoded_message(T, msg);
452+
}
453+
}
454+
void Analyze::handle_decoded_message(uint64_t T, mavlink_statustext_t &msg) {
455+
if (!vehicle) {
456+
if (strstr(msg.text, "APM:Copter")) {
457+
vehicle = new AnalyzerVehicle::Copter();
458+
}
459+
}
460+
if (!vehicle) {
461+
return;
462+
}
463+
vehicle->handle_decoded_message(T, msg);
402464
for(int i=0; i<next_analyzer; i++) {
403465
analyzer[i]->handle_decoded_message(T, msg);
404466
}

analyze.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33

44
#include "mavlink_message_handler.h"
55
#include "analyzer.h"
6+
#include "analyzervehicle_copter.h"
7+
8+
#include "analyzer_util.h"
69

710
class Analyze : public MAVLink_Message_Handler {
811

912
public:
1013
Analyze(int fd, struct sockaddr_in &sa) :
1114
MAVLink_Message_Handler(fd, sa),
15+
vehicle(NULL),
1216
_output_style(OUTPUT_JSON),
1317
next_analyzer(0)
1418
{
19+
start_time = now();
1520
}
1621
void instantiate_analyzers(INIReader *config);
1722

@@ -26,6 +31,10 @@ class Analyze : public MAVLink_Message_Handler {
2631
void set_output_style(output_style_option option) { _output_style = option;}
2732

2833
private:
34+
uint64_t start_time;
35+
36+
AnalyzerVehicle::Base *vehicle;
37+
2938
output_style_option _output_style;
3039
#define MAX_ANALYZERS 10
3140
uint8_t next_analyzer;
@@ -43,8 +52,10 @@ class Analyze : public MAVLink_Message_Handler {
4352
virtual void handle_decoded_message(uint64_t T, mavlink_attitude_t &msg);
4453
virtual void handle_decoded_message(uint64_t T, mavlink_ekf_status_report_t &msg);
4554
virtual void handle_decoded_message(uint64_t T, mavlink_heartbeat_t &msg);
55+
virtual void handle_decoded_message(uint64_t T, mavlink_nav_controller_output_t &msg);
4656
virtual void handle_decoded_message(uint64_t T, mavlink_param_value_t &msg);
4757
virtual void handle_decoded_message(uint64_t T, mavlink_servo_output_raw_t &msg);
58+
virtual void handle_decoded_message(uint64_t T, mavlink_statustext_t &msg);
4859
virtual void handle_decoded_message(uint64_t T, mavlink_sys_status_t &msg);
4960
virtual void handle_decoded_message(uint64_t T, mavlink_vfr_hud_t &msg);
5061

analyzer.h

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,42 @@
66
#include <jsoncpp/json/json.h> // libjsoncpp0 and libjsoncpp-dev on debian
77
#include <jsoncpp/json/writer.h> // libjsoncpp0 and libjsoncpp-dev on debian
88

9+
#include "analyzervehicle.h"
10+
11+
enum analyzer_status {
12+
analyzer_status_warn = 17,
13+
analyzer_status_fail,
14+
analyzer_status_ok,
15+
};
16+
17+
class analyzer_result {
18+
public:
19+
analyzer_status status;
20+
const char *status_as_string() const {
21+
switch(status) {
22+
case analyzer_status_fail:
23+
return "FAIL";
24+
case analyzer_status_warn:
25+
return "WARN";
26+
case analyzer_status_ok:
27+
return "OK";
28+
}
29+
return "STRANGE";
30+
}
31+
// std::string reason_as_string() const {
32+
// return string_format("Desired attitude not achieved");
33+
// }
34+
};
35+
36+
937
class Analyzer : public MAVLink_Message_Handler {
1038

1139
public:
12-
Analyzer(int fd, struct sockaddr_in &sa) :
40+
Analyzer(int fd, struct sockaddr_in &sa, AnalyzerVehicle::Base *&vehicle) :
1341
MAVLink_Message_Handler(fd, sa),
14-
evilness(0)
42+
evilness(0),
43+
_vehicle(vehicle),
44+
_status(analyzer_status_ok)
1545
{ }
1646

1747
virtual const char *name() = 0;
@@ -22,14 +52,25 @@ class Analyzer : public MAVLink_Message_Handler {
2252
void add_evilness(uint8_t sin_points) {
2353
evilness += sin_points;
2454
}
25-
uint16_t get_evilness() { return evilness; }
55+
uint16_t get_evilness() const { return evilness; }
56+
57+
analyzer_status status() const { return _status; }
2658

2759
protected:
60+
2861
std::string to_string(double x);
2962
uint16_t evilness;
63+
AnalyzerVehicle::Base *&_vehicle;
64+
void set_status(analyzer_status status) { _status = status; }
3065

3166
private:
67+
analyzer_status _status;
3268
};
3369

3470
#endif
3571

72+
73+
74+
// - two fundamental types of test
75+
// - is the software working correctly (EKF issues)
76+
// - is the vehicle doing sensible things (attitude etc)

0 commit comments

Comments
 (0)