aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'Tools')
-rw-r--r--Tools/tests-host/Makefile2
-rw-r--r--Tools/tests-host/sbus2_test.cpp63
2 files changed, 54 insertions, 11 deletions
diff --git a/Tools/tests-host/Makefile b/Tools/tests-host/Makefile
index f0737ef88..6e1d08fc1 100644
--- a/Tools/tests-host/Makefile
+++ b/Tools/tests-host/Makefile
@@ -36,4 +36,4 @@ autodeclination_test: $(SBUS2_FILES)
.PHONY: clean
clean:
- rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ mixer_test sbus2_test autodeclination_test \ No newline at end of file
+ rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ mixer_test sbus2_test autodeclination_test
diff --git a/Tools/tests-host/sbus2_test.cpp b/Tools/tests-host/sbus2_test.cpp
index d8fcb695d..a1fee9fd2 100644
--- a/Tools/tests-host/sbus2_test.cpp
+++ b/Tools/tests-host/sbus2_test.cpp
@@ -2,10 +2,11 @@
#include <stdio.h>
#include <unistd.h>
#include <string.h>
+#include <stdlib.h>
#include <systemlib/mixer/mixer.h>
#include <systemlib/err.h>
#include <drivers/drv_hrt.h>
-#include <px4iofirmware/px4io.h>
+#include <px4iofirmware/sbus.h>
#include "../../src/systemcmds/tests/tests.h"
int main(int argc, char *argv[]) {
@@ -14,6 +15,15 @@ int main(int argc, char *argv[]) {
if (argc < 2)
errx(1, "Need a filename for the input file");
+ int byte_offset = 7;
+
+ if (argc > 2) {
+ char* end;
+ byte_offset = strtol(argv[2],&end,10);
+ }
+
+ warnx("RUNNING TEST WITH BYTE OFFSET OF: %d", byte_offset);
+
warnx("loading data from: %s", argv[1]);
FILE *fp;
@@ -33,37 +43,70 @@ int main(int argc, char *argv[]) {
}
// Init the parser
- uint8_t frame[30];
+ uint8_t frame[SBUS_BUFFER_SIZE];
unsigned partial_frame_count = 0;
uint16_t rc_values[18];
uint16_t num_values;
+ uint16_t sbus_frame_drops = 0;
+ unsigned sbus_frame_resets = 0;
bool sbus_failsafe;
bool sbus_frame_drop;
uint16_t max_channels = sizeof(rc_values) / sizeof(rc_values[0]);
float last_time = 0;
+ int rate_limiter = 0;
+
while (EOF != (ret = fscanf(fp, "%f,%x,,", &f, &x))) {
- if (((f - last_time) * 1000 * 1000) > 3000) {
+
+ unsigned last_drop = sbus_frame_drops + sbus_frame_resets;
+
+ unsigned interval_us = ((f - last_time) * 1000 * 1000);
+
+ if (interval_us > SBUS_INTER_FRAME_TIMEOUT) {
+ if (partial_frame_count != 0) {
+ warnx("[ %08.4fs ] INTERVAL: %u - FRAME RESET, DROPPED %d bytes",
+ interval_us, f, partial_frame_count);
+
+ printf("\t\tdropped: ");
+ for (int i = 0; i < partial_frame_count; i++) {
+ printf("%02X ", frame[i]);
+ }
+ printf("\n");
+
+ sbus_frame_resets++;
+ }
+
partial_frame_count = 0;
- warnx("FRAME RESET\n\n");
}
+ last_time = f;
+
frame[partial_frame_count] = x;
partial_frame_count++;
//warnx("%f: 0x%02x, first: 0x%02x, last: 0x%02x, pcount: %u", (double)f, x, frame[0], frame[24], partial_frame_count);
- if (partial_frame_count == sizeof(frame))
+ if (partial_frame_count == sizeof(frame)) {
partial_frame_count = 0;
-
- last_time = f;
+ warnx("FRAME SIZE OVERFLOW!\n\n\n");
+ }
// Pipe the data into the parser
hrt_abstime now = hrt_absolute_time();
- //if (partial_frame_count % 25 == 0)
- //sbus_parse(now, frame, &partial_frame_count, rc_values, &num_values, &sbus_failsafe, &sbus_frame_drop, max_channels);
+ if (rate_limiter % byte_offset == 0) {
+ bool result = sbus_parse(now, frame, &partial_frame_count, rc_values, &num_values,
+ &sbus_failsafe, &sbus_frame_drop, &sbus_frame_drops, max_channels);
+
+ if (result)
+ warnx("decoded packet");
+ }
+
+ if (last_drop != (sbus_frame_drops + sbus_frame_resets))
+ warnx("frame dropped, now #%d", (sbus_frame_drops + sbus_frame_resets));
+
+ rate_limiter++;
}
if (ret == EOF) {
@@ -72,4 +115,4 @@ int main(int argc, char *argv[]) {
warnx("Test aborted, errno: %d", ret);
}
-}
+} \ No newline at end of file