diff --git a/Makefile b/Makefile index fb3a5d3fb7ecfd5db405e71cb52969a518762fe7..29cca0ceae155821927de8e086213afef27ee6af 100755 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ LDFLAGS := BUILD := ./build OBJ_DIR := $(BUILD) TARGET := mavdecoder -INCLUDE := +INCLUDE := -Imavlink_skyward_lib/ SRC := src/mavdecoder.cpp src/decoders.cpp OBJECTS := $(SRC:%.cpp=$(OBJ_DIR)/%.o) diff --git a/generate.py b/generate.py index ddf539d13a5cce1759eee484a23c73d70ebdac21..79a3bc1776ca78ceb5988d039a4de006d98cb9c8 100755 --- a/generate.py +++ b/generate.py @@ -89,7 +89,7 @@ def parseMessages(filename): struct = mav_source[start:end] - rgx = re.compile(r'(?P<type>[\w\d_]+)\s(?P<name>[\w\d_]+);') + rgx = re.compile(r'(?P<type>[\w\d_]+)\s(?P<name>[\w\d_]+)(\[(?P<mult>\d+)\]){0,1};') has_match = True i = 0 out['vars'] = [] @@ -99,6 +99,7 @@ def parseMessages(filename): i = vars_match.end() vartype = vars_match.group('type') varname = vars_match.group('name') + #varmult = int(vars_match.groupdict().get('mult', 0)) out['vars'] += [(vartype, varname)] else: has_match = False diff --git a/mavlink_skyward_lib b/mavlink_skyward_lib index 0aad2a6c74962d19ae744c9ed1b389fcd4ae19bf..a87afcaba8d6644b2078c6b6b45bce871cc71a05 160000 --- a/mavlink_skyward_lib +++ b/mavlink_skyward_lib @@ -1 +1 @@ -Subproject commit 0aad2a6c74962d19ae744c9ed1b389fcd4ae19bf +Subproject commit a87afcaba8d6644b2078c6b6b45bce871cc71a05 diff --git a/src/decoders.cpp b/src/decoders.cpp index 28ee8071a18f9aaf1451ad433edfae9d5b96d106..b6472c8d1839d6c7e68177635e74c62487594243 100755 --- a/src/decoders.cpp +++ b/src/decoders.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2019 Skyward Experimental Rocketry * Author: Erbetta Luca * @@ -27,62 +27,60 @@ ****************************************************************************** */ -// Generation date: 2019-09-11 16:12:10.827357 +// Generation date: 2019-11-06 01:44:05.542490 + #include "decoders.h" void instantiate_decoders(vector<TelemetryDecoderBase*>& vec) { - vec.push_back( - new TelemetryDecoder<MavAckTmData, mavlink_ack_tm_t>(130, "ack_tm")); - vec.push_back( - new TelemetryDecoder<MavAdaTmData, mavlink_ada_tm_t>(167, "ada_tm")); - vec.push_back( - new TelemetryDecoder<MavAdcTmData, mavlink_adc_tm_t>(169, "adc_tm")); - vec.push_back( - new TelemetryDecoder<MavAdisTmData, mavlink_adis_tm_t>(170, "adis_tm")); - vec.push_back( - new TelemetryDecoder<MavCanTmData, mavlink_can_tm_t>(168, "can_tm")); - vec.push_back( - new TelemetryDecoder<MavDplTmData, mavlink_dpl_tm_t>(166, "dpl_tm")); - vec.push_back( - new TelemetryDecoder<MavFmmTmData, mavlink_fmm_tm_t>(161, "fmm_tm")); - vec.push_back( - new TelemetryDecoder<MavGpsTmData, mavlink_gps_tm_t>(172, "gps_tm")); - vec.push_back( - new TelemetryDecoder<MavHrTmData, mavlink_hr_tm_t>(180, "hr_tm")); - vec.push_back( - new TelemetryDecoder<MavIgnTmData, mavlink_ign_tm_t>(165, "ign_tm")); - vec.push_back(new TelemetryDecoder<MavLoggerTmData, mavlink_logger_tm_t>( - 162, "logger_tm")); - vec.push_back( - new TelemetryDecoder<MavLrTmData, mavlink_lr_tm_t>(181, "lr_tm")); - vec.push_back( - new TelemetryDecoder<MavMpuTmData, mavlink_mpu_tm_t>(171, "mpu_tm")); - vec.push_back( - new TelemetryDecoder<MavNackTmData, mavlink_nack_tm_t>(131, "nack_tm")); - vec.push_back(new TelemetryDecoder<MavNoargTcData, mavlink_noarg_tc_t>( - 10, "noarg_tc")); - vec.push_back( - new TelemetryDecoder<MavPingTcData, mavlink_ping_tc_t>(1, "ping_tc")); - vec.push_back( - new TelemetryDecoder<MavRawEventTcData, mavlink_raw_event_tc_t>( - 80, "raw_event_tc")); - vec.push_back( - new TelemetryDecoder<MavSmTmData, mavlink_sm_tm_t>(164, "sm_tm")); - vec.push_back( - new TelemetryDecoder<MavStartLaunchTcData, mavlink_start_launch_tc_t>( - 20, "start_launch_tc")); - vec.push_back( - new TelemetryDecoder<MavSysTmData, mavlink_sys_tm_t>(160, "sys_tm")); - vec.push_back(new TelemetryDecoder<MavTelemetryRequestTcData, - mavlink_telemetry_request_tc_t>( - 30, "telemetry_request_tc")); - vec.push_back( - new TelemetryDecoder<MavTestTmData, mavlink_test_tm_t>(182, "test_tm")); - vec.push_back( - new TelemetryDecoder<MavTmtcTmData, mavlink_tmtc_tm_t>(163, "tmtc_tm")); - vec.push_back(new TelemetryDecoder<MavUploadSettingTcData, - mavlink_upload_setting_tc_t>( - 21, "upload_setting_tc")); + vec.push_back( + new TelemetryDecoder<MavLoggerTmData, mavlink_logger_tm_t>(162, "logger_tm")); + vec.push_back( + new TelemetryDecoder<MavAckTmData, mavlink_ack_tm_t>(130, "ack_tm")); + vec.push_back( + new TelemetryDecoder<MavNoargTcData, mavlink_noarg_tc_t>(10, "noarg_tc")); + vec.push_back( + new TelemetryDecoder<MavSysTmData, mavlink_sys_tm_t>(160, "sys_tm")); + vec.push_back( + new TelemetryDecoder<MavAdaTmData, mavlink_ada_tm_t>(167, "ada_tm")); + vec.push_back( + new TelemetryDecoder<MavPingTcData, mavlink_ping_tc_t>(1, "ping_tc")); + vec.push_back( + new TelemetryDecoder<MavRawEventTcData, mavlink_raw_event_tc_t>(80, "raw_event_tc")); + vec.push_back( + new TelemetryDecoder<MavFmmTmData, mavlink_fmm_tm_t>(161, "fmm_tm")); + vec.push_back( + new TelemetryDecoder<MavLrTmData, mavlink_lr_tm_t>(181, "lr_tm")); + vec.push_back( + new TelemetryDecoder<MavHrTmData, mavlink_hr_tm_t>(180, "hr_tm")); + vec.push_back( + new TelemetryDecoder<MavCanTmData, mavlink_can_tm_t>(168, "can_tm")); + vec.push_back( + new TelemetryDecoder<MavAdcTmData, mavlink_adc_tm_t>(169, "adc_tm")); + vec.push_back( + new TelemetryDecoder<MavTmtcTmData, mavlink_tmtc_tm_t>(163, "tmtc_tm")); + vec.push_back( + new TelemetryDecoder<MavNackTmData, mavlink_nack_tm_t>(131, "nack_tm")); + vec.push_back( + new TelemetryDecoder<MavAdisTmData, mavlink_adis_tm_t>(170, "adis_tm")); + vec.push_back( + new TelemetryDecoder<MavMpuTmData, mavlink_mpu_tm_t>(171, "mpu_tm")); + vec.push_back( + new TelemetryDecoder<MavTestTmData, mavlink_test_tm_t>(182, "test_tm")); + vec.push_back( + new TelemetryDecoder<MavTelemetryRequestTcData, mavlink_telemetry_request_tc_t>(30, "telemetry_request_tc")); + vec.push_back( + new TelemetryDecoder<MavDplTmData, mavlink_dpl_tm_t>(166, "dpl_tm")); + vec.push_back( + new TelemetryDecoder<MavIgnTmData, mavlink_ign_tm_t>(165, "ign_tm")); + vec.push_back( + new TelemetryDecoder<MavSmTmData, mavlink_sm_tm_t>(164, "sm_tm")); + vec.push_back( + new TelemetryDecoder<MavUploadSettingTcData, mavlink_upload_setting_tc_t>(21, "upload_setting_tc")); + vec.push_back( + new TelemetryDecoder<MavGpsTmData, mavlink_gps_tm_t>(172, "gps_tm")); + vec.push_back( + new TelemetryDecoder<MavStartLaunchTcData, mavlink_start_launch_tc_t>(20, "start_launch_tc")); + } \ No newline at end of file diff --git a/src/decoders.h b/src/decoders.h index 9c93be3df6871b68289d990585803f48f3f3d48c..20de1a5e520a39e3ceaedcb82bd09c2ea55e0a9d 100755 --- a/src/decoders.h +++ b/src/decoders.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2019 Skyward Experimental Rocketry * Author: Erbetta Luca * @@ -25,10 +25,11 @@ #include "messages.h" +#include <fstream> #include <iostream> #include <string> #include <vector> -#include <fstream> +#include "../mavlink_skyward_lib/mavlink_lib/hermes/mavlink.h" using std::ofstream; using std::string; @@ -50,13 +51,11 @@ public: file.close(); } - virtual void writeHeader() = 0; + virtual void writeHeader() = 0; virtual void decode(MavData packet_data, uint8_t* msg_start) = 0; - int msgId() - { - return id; - } + int msgId() { return id; } + protected: ofstream file; int id; @@ -66,11 +65,7 @@ template <class MavDataT, class mav_packet_t> class TelemetryDecoder : public TelemetryDecoderBase { public: - TelemetryDecoder(int id, string name) - : TelemetryDecoderBase(id, name) - { - - } + TelemetryDecoder(int id, string name) : TelemetryDecoderBase(id, name) {} void writeHeader() override { @@ -81,13 +76,16 @@ public: void decode(MavData packet_data, uint8_t* msg_start) override { - packet_data.print(file); - file << ","; - MavDataT data; memcpy(&data.mav_pkt, msg_start, sizeof(mav_packet_t)); - data.print(file); + for (unsigned int i = 0; i < MavDataT::messagesPerPacket(); i++) + { + packet_data.print(file); + file << ","; + + data.print(file, i); + } } }; diff --git a/src/mavdecoder.cpp b/src/mavdecoder.cpp index b7ec41a9a0199828e6538bbab3d9c2b390f73f7d..977ee294db86a5f3afb6715f0375dfe92902f366 100755 --- a/src/mavdecoder.cpp +++ b/src/mavdecoder.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2019 Skyward Experimental Rocketry * Author: Erbetta Luca * @@ -34,6 +34,8 @@ using namespace std; +static constexpr bool USE_MAVLINK_PARSER = true; + int main(int argc, char** argv) { if (argc < 2) @@ -52,12 +54,12 @@ int main(int argc, char** argv) instantiate_decoders(decoders); vector<uint8_t> buf; - + string logfile{argv[1]}; - struct stat buffer; + struct stat buffer; // Check file existance - if(stat(logfile.c_str(), &buffer) != 0) + if (stat(logfile.c_str(), &buffer) != 0) { cout << "File " << logfile << " does not exist!\n"; return 1; @@ -86,31 +88,65 @@ int main(int argc, char** argv) fclose(f); - // Manually decode mavlink messages skipping CRC verification + mavlink_message_t msg; + mavlink_status_t status; + unsigned int i = 0; - do + + while (i < buf.size()) { - if (buf.at(i) == 0xFE) // Mavlink start delimiter + if (USE_MAVLINK_PARSER) { - MavData d; - // Read packet header - memcpy(&d, buf.data() + i, sizeof(MavData)); + uint8_t parse_result = + mavlink_parse_char(MAVLINK_COMM_0, buf.at(i), &msg, &status); - bool decoded = false; - for (TelemetryDecoderBase* td : decoders) + if (parse_result == 1) { - if (td->msgId() == d.msg_id) + MavData d; + d.comp_id = msg.compid; + d.len = msg.len; + d.msg_id = msg.msgid; + d.seq = msg.seq; + d.start = msg.magic; + d.sys_id = msg.sysid; + + for (TelemetryDecoderBase* td : decoders) { - td->decode(d, buf.data() + i + sizeof(MavData)); - decoded = true; + if (td->msgId() == msg.msgid) + { + // uint8_t payload[33*8]; + + // memcpy(payload, msg.payload64, 33*8); + + td->decode(d, (uint8_t*)msg.payload64); + } } } + } + else + { + if (buf.at(i) == 0xFE) // Mavlink start delimiter + { + MavData d; + // Read packet header + memcpy(&d, buf.data() + i, sizeof(MavData)); + + // bool decoded = false; + for (TelemetryDecoderBase* td : decoders) + { + if (td->msgId() == d.msg_id) + { + td->decode(d, buf.data() + i + sizeof(MavData)); + // decoded = true; + } + } - // if (!decoded) - // printf("Unknown message id (%d) @ %X\n", d.msg_id, i); + // if (!decoded) + // printf("Unknown message id (%d) @ %X\n", d.msg_id, i); + } } i++; - } while (i < buf.size()); + } printf(".\n.\n.\nMessages decoded successfully!\n"); diff --git a/src/messages.h b/src/messages.h index db97206144c67446e4834ee5621343a878979dba..23eae2076931c9ece2681a8bb8795e4eef323a7d 100755 --- a/src/messages.h +++ b/src/messages.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 2019 Skyward Experimental Rocketry * Author: Erbetta Luca * @@ -21,11 +21,20 @@ * THE SOFTWARE. */ -// Generation date: 2019-09-11 16:12:10.827357 +/* + ****************************************************************************** + * THIS FILE IS AUTOGENERATED. DO NOT EDIT. * + * You should copy the content of this file in messages.h and * + * perform eventual edits there. * + ****************************************************************************** + */ + +// Generation date: 2019-11-06 01:40:14.848380 #pragma once #include "../mavlink_skyward_lib/mavlink_lib/hermes/mavlink.h" +#include "../mavlink_skyward_lib/bitpacking/hermes/HermesPackets.h" #include <iostream> #include <string> @@ -50,124 +59,162 @@ struct MavData void print(ostream &os) { - os << (int)start << "," << (int)len << "," << (int)seq << "," + os << (int)start << "," << (int)len << "," << (int)seq << "," << (int)sys_id << "," << (int)comp_id << "," << (int)msg_id; } }; +struct MavLoggerTmData +{ + mavlink_logger_tm_t mav_pkt; + + static void header(ostream &os) + { + os << "timestamp,statTooLargeSamples,statDroppedSamples,statQueuedSamples,statBufferFilled,statBufferWritten,statWriteFailed,statWriteError,statWriteTime,statMaxWriteTime,statLogNumber\n"; + } + + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.statTooLargeSamples << "," << mav_pkt.statDroppedSamples << "," << mav_pkt.statQueuedSamples << "," << mav_pkt.statBufferFilled << "," << mav_pkt.statBufferWritten << "," << mav_pkt.statWriteFailed << "," << mav_pkt.statWriteError << "," << mav_pkt.statWriteTime << "," << mav_pkt.statMaxWriteTime << "," << mav_pkt.statLogNumber << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; + } +}; + struct MavAckTmData { mavlink_ack_tm_t mav_pkt; - static void header(ostream &os) { os << "recv_msgid,seq_ack\n"; } + static void header(ostream &os) + { + os << "recv_msgid,seq_ack\n"; + } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { + (void)index; // Avoid unused warnings + os << (int)mav_pkt.recv_msgid << "," << (int)mav_pkt.seq_ack << "\n"; } + + static unsigned int messagesPerPacket() + { + return 1; + } }; -struct MavAdaTmData +struct MavNoargTcData { - mavlink_ada_tm_t mav_pkt; + mavlink_noarg_tc_t mav_pkt; static void header(ostream &os) { - os << "timestamp,target_dpl_altitude,kalman_x0,kalman_x1,kalman_x2,ref_" - "pressure,msl_pressure,ref_pressure_mean,ref_pressure_stddev,ref_" - "pressure_nsamples,ref_altitude,ref_temperature,msl_temperature," - "state\n"; + os << "command_id\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << (int)mav_pkt.command_id << "\n"; + } + + static unsigned int messagesPerPacket() { - os << mav_pkt.timestamp << "," << mav_pkt.target_dpl_altitude << "," - << mav_pkt.kalman_x0 << "," << mav_pkt.kalman_x1 << "," - << mav_pkt.kalman_x2 << "," << mav_pkt.ref_pressure << "," - << mav_pkt.msl_pressure << "," << mav_pkt.ref_pressure_mean << "," - << mav_pkt.ref_pressure_stddev << "," - << mav_pkt.ref_pressure_nsamples << "," << mav_pkt.ref_altitude - << "," << mav_pkt.ref_temperature << "," << mav_pkt.msl_temperature - << "," << (int)mav_pkt.state << "\n"; + return 1; } }; -struct MavAdcTmData +struct MavSysTmData { - mavlink_adc_tm_t mav_pkt; + mavlink_sys_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,hw_baro_volt,nxp_baro_volt,hw_baro_pressure,nxp_baro_" - "pressure,battery_voltage,current_sense_1,current_sense_2,hw_" - "baro_flag,nxp_baro_flag\n"; + os << "timestamp,death_stack,logger,ev_broker,pin_obs,fmm,sensor_manager,ada,tmtc,ign,dpl\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.hw_baro_volt << "," - << mav_pkt.nxp_baro_volt << "," << mav_pkt.hw_baro_pressure << "," - << mav_pkt.nxp_baro_pressure << "," << mav_pkt.battery_voltage << "," - << mav_pkt.current_sense_1 << "," << mav_pkt.current_sense_2 << "," - << (int)mav_pkt.hw_baro_flag << "," << (int)mav_pkt.nxp_baro_flag - << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << (int)mav_pkt.death_stack << "," << (int)mav_pkt.logger << "," << (int)mav_pkt.ev_broker << "," << (int)mav_pkt.pin_obs << "," << (int)mav_pkt.fmm << "," << (int)mav_pkt.sensor_manager << "," << (int)mav_pkt.ada << "," << (int)mav_pkt.tmtc << "," << (int)mav_pkt.ign << "," << (int)mav_pkt.dpl << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavAdisTmData +struct MavAdaTmData { - mavlink_adis_tm_t mav_pkt; + mavlink_ada_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,compass_x," - "compass_y,compass_z,temp,supply_out,aux_adc\n"; + os << "timestamp,target_dpl_altitude,kalman_x0,kalman_x1,kalman_x2,kalman_acc_x0,kalman_acc_x1,kalman_acc_x2,ref_pressure,msl_pressure,ref_pressure_mean,ref_pressure_stddev,ref_pressure_nsamples,ref_altitude,ref_temperature,msl_temperature,state\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.acc_x << "," << mav_pkt.acc_y - << "," << mav_pkt.acc_z << "," << mav_pkt.gyro_x << "," - << mav_pkt.gyro_y << "," << mav_pkt.gyro_z << "," - << mav_pkt.compass_x << "," << mav_pkt.compass_y << "," - << mav_pkt.compass_z << "," << mav_pkt.temp << "," - << mav_pkt.supply_out << "," << mav_pkt.aux_adc << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.target_dpl_altitude << "," << mav_pkt.kalman_x0 << "," << mav_pkt.kalman_x1 << "," << mav_pkt.kalman_x2 << "," << mav_pkt.kalman_acc_x0 << "," << mav_pkt.kalman_acc_x1 << "," << mav_pkt.kalman_acc_x2 << "," << mav_pkt.ref_pressure << "," << mav_pkt.msl_pressure << "," << mav_pkt.ref_pressure_mean << "," << mav_pkt.ref_pressure_stddev << "," << mav_pkt.ref_pressure_nsamples << "," << mav_pkt.ref_altitude << "," << mav_pkt.ref_temperature << "," << mav_pkt.msl_temperature << "," << (int)mav_pkt.state << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavCanTmData +struct MavPingTcData { - mavlink_can_tm_t mav_pkt; + mavlink_ping_tc_t mav_pkt; static void header(ostream &os) { - os << "last_sent_ts,last_rcv_ts,n_sent,n_rcv,last_sent,last_rcv\n"; + os << "timestamp\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.last_sent_ts << "," << mav_pkt.last_rcv_ts << "," - << mav_pkt.n_sent << "," << mav_pkt.n_rcv << "," - << (int)mav_pkt.last_sent << "," << (int)mav_pkt.last_rcv << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavDplTmData +struct MavRawEventTcData { - mavlink_dpl_tm_t mav_pkt; + mavlink_raw_event_tc_t mav_pkt; static void header(ostream &os) { - os << "timestamp,fsm_state,motor_active,motor_last_direction,cutter_" - "state\n"; + os << "Event_id,Topic_id\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << (int)mav_pkt.fsm_state << "," - << (int)mav_pkt.motor_active << "," - << (int)mav_pkt.motor_last_direction << "," - << (int)mav_pkt.cutter_state << "\n"; + (void)index; // Avoid unused warnings + + os << (int)mav_pkt.Event_id << "," << (int)mav_pkt.Topic_id << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; @@ -177,138 +224,268 @@ struct MavFmmTmData static void header(ostream &os) { - os << "timestamp,pin_launch_last_change,pin_nosecone_last_change,state," - "pin_launch_num_changes,pin_launch_state,pin_nosecone_num_" - "changes,pin_nosecone_state\n"; + os << "timestamp,pin_launch_last_change,pin_nosecone_last_change,state,pin_launch_num_changes,pin_launch_state,pin_nosecone_num_changes,pin_nosecone_state\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.pin_launch_last_change << "," - << mav_pkt.pin_nosecone_last_change << "," << (int)mav_pkt.state - << "," << (int)mav_pkt.pin_launch_num_changes << "," - << (int)mav_pkt.pin_launch_state << "," - << (int)mav_pkt.pin_nosecone_num_changes << "," - << (int)mav_pkt.pin_nosecone_state << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.pin_launch_last_change << "," << mav_pkt.pin_nosecone_last_change << "," << (int)mav_pkt.state << "," << (int)mav_pkt.pin_launch_num_changes << "," << (int)mav_pkt.pin_launch_state << "," << (int)mav_pkt.pin_nosecone_num_changes << "," << (int)mav_pkt.pin_nosecone_state << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavGpsTmData +struct MavLrTmData { - mavlink_gps_tm_t mav_pkt; + mavlink_lr_tm_t mav_pkt; + LowRateTMPacker p{mav_pkt.payload}; + + static void header(ostream &os) + { + os << "liftoff_ts,liftoff_max_acc_ts,liftoff_max_acc,max_zspeed_ts,max_" + "zspeed,max_speed_altitude,apogee_ts,nxp_min_pressure,hw_min_" + "pressure,kalman_min_pressure,digital_min_pressure,baro_max_" + "altitutde " + ",gps_max_altitude,apogee_lat,apogee_lon,drogue_dpl_ts,drogue_" + "dpl_max_acc,main_dpl_ts,main_dpl_altitude,main_dpl_zspeed,main_" + "dpl_acc\n"; + } + + void print(ostream &os, unsigned int index = 0) + { + (void)index; + + long long t; + float f; + + p.unpackLiftoffTs(&t, 0); + os << t << ","; + p.unpackLiftoffMaxAccTs(&t, 0); + os << t << ","; + p.unpackLiftoffMaxAcc(&f, 0); + os << f << ","; + p.unpackMaxZspeedTs(&t, 0); + os << t << ","; + p.unpackMaxZspeed(&f, 0); + os << f << ","; + p.unpackMaxSpeedAltitude(&f, 0); + os << f << ","; + p.unpackApogeeTs(&t, 0); + os << t << ","; + p.unpackNxpMinPressure(&f, 0); + os << f << ","; + p.unpackHwMinPressure(&f, 0); + os << f << ","; + p.unpackKalmanMinPressure(&f, 0); + os << f << ","; + p.unpackDigitalMinPressure(&f, 0); + os << f << ","; + p.unpackBaroMaxAltitutde(&f, 0); + os << f << ","; + p.unpackGpsMaxAltitude(&f, 0); + os << f << ","; + p.unpackApogeeLat(&f, 0); + os << f << ","; + p.unpackApogeeLon(&f, 0); + os << f << ","; + p.unpackDrogueDplTs(&t, 0); + os << t << ","; + p.unpackDrogueDplMaxAcc(&f, 0); + os << f << ","; + p.unpackMainDplTs(&t, 0); + os << t << ","; + p.unpackMainDplAltitude(&f, 0); + os << f << ","; + p.unpackMainDplZspeed(&f, 0); + os << f << ","; + p.unpackMainDplAcc(&f, 0); + os << f << "\n"; + } + + static unsigned int messagesPerPacket() { return 1; } +}; + +struct MavHrTmData +{ + mavlink_hr_tm_t mav_pkt; + HighRateTMPacker p{mav_pkt.payload}; static void header(ostream &os) { - os << "timestamp,lat,lon,altitude,vel_north,vel_east,vel_down,vel_mag," - "n_satellites,fix\n"; + os << "timestamp,pressure_ada,pressure_digi,msl_altitude,agl_altitude," + "vert_speed,vert_speed_2,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z," + "gps_lat,gps_lon,gps_alt,temperature,fmm_state,dpl_state,pin_" + "launch,pin_nosecone,gps_fix\n"; + } + + void print(ostream &os, unsigned int i = 0) + { + long long t; + float f; + double d; + uint8_t b; + + p.unpackTimestamp(&t, i); + os << t << ","; + p.unpackPressureAda(&f, i); + os << f << ","; + p.unpackPressureDigi(&f, i); + os << f << ","; + p.unpackMslAltitude(&f, i); + os << f << ","; + p.unpackAglAltitude(&f, i); + os << f << ","; + p.unpackVertSpeed(&f, i); + os << f << ","; + p.unpackVertSpeed2(&f, i); + os << f << ","; + p.unpackAccX(&f, i); + os << f << ","; + p.unpackAccY(&f, i); + os << f << ","; + p.unpackAccZ(&f, i); + os << f << ","; + p.unpackGyroX(&f, i); + os << f << ","; + p.unpackGyroY(&f, i); + os << f << ","; + p.unpackGyroZ(&f, i); + os << f << ","; + p.unpackGpsLat(&d, i); + os << d << ","; + p.unpackGpsLon(&d, i); + os << d << ","; + p.unpackGpsAlt(&f, i); + os << f << ","; + p.unpackTemperature(&f, i); + os << f << ","; + p.unpackFmmState(&b, i); + os << (int)b << ","; + p.unpackDplState(&b, i); + os << (int)b << ","; + p.unpackPinLaunch(&b, i); + os << (int)b << ","; + p.unpackPinNosecone(&b, i); + os << (int)b << ","; + p.unpackGpsFix(&b, i); + os << (int)b << "\n"; + } + + static unsigned int messagesPerPacket() { return 4; } +}; + +struct MavCanTmData +{ + mavlink_can_tm_t mav_pkt; + + static void header(ostream &os) + { + os << "last_sent_ts,last_rcv_ts,n_sent,n_rcv,last_sent,last_rcv\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.lat << "," << mav_pkt.lon - << "," << mav_pkt.altitude << "," << mav_pkt.vel_north << "," - << mav_pkt.vel_east << "," << mav_pkt.vel_down << "," - << mav_pkt.vel_mag << "," << mav_pkt.n_satellites << "," - << (int)mav_pkt.fix << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.last_sent_ts << "," << mav_pkt.last_rcv_ts << "," << mav_pkt.n_sent << "," << mav_pkt.n_rcv << "," << (int)mav_pkt.last_sent << "," << (int)mav_pkt.last_rcv << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavHrTmData +struct MavAdcTmData { - mavlink_hr_tm_t mav_pkt; + mavlink_adc_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,pressure,z_acc,gps_lat,gps_lon,kal_alt,kal_v_speed," - "temperature,fmm_state,dpl_state,gps_fix,nc_pin,launch_pin\n"; + os << "timestamp,hw_baro_volt,nxp_baro_volt,hw_baro_pressure,nxp_baro_pressure,battery_voltage,current_sense_1,current_sense_2,hw_baro_flag,nxp_baro_flag\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - // Manually edited to decode bitfields - uint8_t fmm_state = (mav_pkt.bitfield_1 & 0xF0) >> 4; - uint8_t dpl_state = (mav_pkt.bitfield_1 & 0x0F); - - uint8_t launch = mav_pkt.bitfield_2 & 0x1; - uint8_t nc = (mav_pkt.bitfield_2 & 0x2) >> 1; - uint8_t fix = (mav_pkt.bitfield_2 & 0x4) >> 2; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.hw_baro_volt << "," << mav_pkt.nxp_baro_volt << "," << mav_pkt.hw_baro_pressure << "," << mav_pkt.nxp_baro_pressure << "," << mav_pkt.battery_voltage << "," << mav_pkt.current_sense_1 << "," << mav_pkt.current_sense_2 << "," << (int)mav_pkt.hw_baro_flag << "," << (int)mav_pkt.nxp_baro_flag << "\n"; + } - os << mav_pkt.timestamp << "," << mav_pkt.pressure << "," - << mav_pkt.z_acc << "," << mav_pkt.gps_lat << "," << mav_pkt.gps_lon - << "," << mav_pkt.kal_alt << "," << mav_pkt.kal_v_speed << "," - << (int)mav_pkt.temperature << "," << (int)fmm_state << "," - << (int)dpl_state << "," << (int)fix << "," << (int)nc << "," - << (int)launch << "\n"; + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavIgnTmData +struct MavTmtcTmData { - mavlink_ign_tm_t mav_pkt; + mavlink_tmtc_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,n_sent_messages,n_rcv_message,fsm_state,last_event," - "cmd_bitfield,stm32_bitfield,avr_bitfield\n"; + os << "timestamp,parse_state,n_send_queue,max_send_queue,n_send_errors,packet_rx_success_count,packet_rx_drop_count,msg_received,buffer_overrun,parse_error,packet_idx,current_rx_seq,current_tx_seq\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.n_sent_messages << "," - << mav_pkt.n_rcv_message << "," << (int)mav_pkt.fsm_state << "," - << (int)mav_pkt.last_event << "," << (int)mav_pkt.cmd_bitfield << "," - << (int)mav_pkt.stm32_bitfield << "," << (int)mav_pkt.avr_bitfield - << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.parse_state << "," << mav_pkt.n_send_queue << "," << mav_pkt.max_send_queue << "," << mav_pkt.n_send_errors << "," << mav_pkt.packet_rx_success_count << "," << mav_pkt.packet_rx_drop_count << "," << (int)mav_pkt.msg_received << "," << (int)mav_pkt.buffer_overrun << "," << (int)mav_pkt.parse_error << "," << (int)mav_pkt.packet_idx << "," << (int)mav_pkt.current_rx_seq << "," << (int)mav_pkt.current_tx_seq << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavLoggerTmData +struct MavNackTmData { - mavlink_logger_tm_t mav_pkt; + mavlink_nack_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,statTooLargeSamples,statDroppedSamples," - "statQueuedSamples,statBufferFilled,statBufferWritten," - "statWriteFailed,statWriteError,statWriteTime,statMaxWriteTime," - "statLogNumber\n"; + os << "recv_msgid,seq_ack\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << (int)mav_pkt.recv_msgid << "," << (int)mav_pkt.seq_ack << "\n"; + } + + static unsigned int messagesPerPacket() { - os << mav_pkt.timestamp << "," << mav_pkt.statTooLargeSamples << "," - << mav_pkt.statDroppedSamples << "," << mav_pkt.statQueuedSamples - << "," << mav_pkt.statBufferFilled << "," - << mav_pkt.statBufferWritten << "," << mav_pkt.statWriteFailed << "," - << mav_pkt.statWriteError << "," << mav_pkt.statWriteTime << "," - << mav_pkt.statMaxWriteTime << "," << mav_pkt.statLogNumber << "\n"; + return 1; } }; -struct MavLrTmData +struct MavAdisTmData { - mavlink_lr_tm_t mav_pkt; + mavlink_adis_tm_t mav_pkt; static void header(ostream &os) { - os << "t_liftoff,t_max_acc,acc_pf,t_max_speed,v_speed_max,alt_max_" - "speed,t_apogee,hw_min_press,nxp_min_press,kal_min_press,kal_max_" - "alt,gps_max_alt,lat_apogee,lon_apogee,t_drogue_dpl,max_drogue_" - "acc,t_main_dpl,alt_main_dpl,v_speed_main_dpl,max_main_acc\n"; + os << "timestamp,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,compass_x,compass_y,compass_z,temp,supply_out,aux_adc\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.acc_x << "," << mav_pkt.acc_y << "," << mav_pkt.acc_z << "," << mav_pkt.gyro_x << "," << mav_pkt.gyro_y << "," << mav_pkt.gyro_z << "," << mav_pkt.compass_x << "," << mav_pkt.compass_y << "," << mav_pkt.compass_z << "," << mav_pkt.temp << "," << mav_pkt.supply_out << "," << mav_pkt.aux_adc << "\n"; + } + + static unsigned int messagesPerPacket() { - os << mav_pkt.t_liftoff << "," << mav_pkt.t_max_acc << "," - << mav_pkt.acc_pf << "," << mav_pkt.t_max_speed << "," - << mav_pkt.v_speed_max << "," << mav_pkt.alt_max_speed << "," - << mav_pkt.t_apogee << "," << mav_pkt.hw_min_press << "," - << mav_pkt.nxp_min_press << "," << mav_pkt.kal_min_press << "," - << mav_pkt.kal_max_alt << "," << mav_pkt.gps_max_alt << "," - << mav_pkt.lat_apogee << "," << mav_pkt.lon_apogee << "," - << mav_pkt.t_drogue_dpl << "," << mav_pkt.max_drogue_acc << "," - << mav_pkt.t_main_dpl << "," << mav_pkt.alt_main_dpl << "," - << mav_pkt.v_speed_main_dpl << "," << mav_pkt.max_main_acc << "\n"; + return 1; } }; @@ -318,59 +495,107 @@ struct MavMpuTmData static void header(ostream &os) { - os << "timestamp,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,compass_x," - "compass_y,compass_z,temp\n"; + os << "timestamp,acc_x,acc_y,acc_z,gyro_x,gyro_y,gyro_z,compass_x,compass_y,compass_z,temp\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.acc_x << "," << mav_pkt.acc_y << "," << mav_pkt.acc_z << "," << mav_pkt.gyro_x << "," << mav_pkt.gyro_y << "," << mav_pkt.gyro_z << "," << mav_pkt.compass_x << "," << mav_pkt.compass_y << "," << mav_pkt.compass_z << "," << mav_pkt.temp << "\n"; + } + + static unsigned int messagesPerPacket() { - os << mav_pkt.timestamp << "," << mav_pkt.acc_x << "," << mav_pkt.acc_y - << "," << mav_pkt.acc_z << "," << mav_pkt.gyro_x << "," - << mav_pkt.gyro_y << "," << mav_pkt.gyro_z << "," - << mav_pkt.compass_x << "," << mav_pkt.compass_y << "," - << mav_pkt.compass_z << "," << mav_pkt.temp << "\n"; + return 1; } }; -struct MavNackTmData +struct MavTestTmData { - mavlink_nack_tm_t mav_pkt; + mavlink_test_tm_t mav_pkt; - static void header(ostream &os) { os << "recv_msgid,seq_ack\n"; } + static void header(ostream &os) + { + os << "timestamp,pressure_hw,temp_analog,temp_imu,battery_volt,th_cut_1,th_cut_2,gps_nsats\n"; + } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << (int)mav_pkt.recv_msgid << "," << (int)mav_pkt.seq_ack << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.pressure_hw << "," << mav_pkt.temp_analog << "," << mav_pkt.temp_imu << "," << mav_pkt.battery_volt << "," << mav_pkt.th_cut_1 << "," << mav_pkt.th_cut_2 << "," << (int)mav_pkt.gps_nsats << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavNoargTcData +struct MavTelemetryRequestTcData { - mavlink_noarg_tc_t mav_pkt; + mavlink_telemetry_request_tc_t mav_pkt; + + static void header(ostream &os) + { + os << "board_id\n"; + } - static void header(ostream &os) { os << "command_id\n"; } + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << (int)mav_pkt.board_id << "\n"; + } - void print(ostream &os) { os << (int)mav_pkt.command_id << "\n"; } + static unsigned int messagesPerPacket() + { + return 1; + } }; -struct MavPingTcData +struct MavDplTmData { - mavlink_ping_tc_t mav_pkt; + mavlink_dpl_tm_t mav_pkt; + + static void header(ostream &os) + { + os << "timestamp,cutter_1_test_current,cutter_2_test_current,fsm_state,cutter_state\n"; + } - static void header(ostream &os) { os << "timestamp\n"; } + void print(ostream &os, unsigned int index = 0) + { + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.cutter_1_test_current << "," << mav_pkt.cutter_2_test_current << "," << (int)mav_pkt.fsm_state << "," << (int)mav_pkt.cutter_state << "\n"; + } - void print(ostream &os) { os << mav_pkt.timestamp << "\n"; } + static unsigned int messagesPerPacket() + { + return 1; + } }; -struct MavRawEventTcData +struct MavIgnTmData { - mavlink_raw_event_tc_t mav_pkt; + mavlink_ign_tm_t mav_pkt; - static void header(ostream &os) { os << "Event_id,Topic_id\n"; } + static void header(ostream &os) + { + os << "timestamp,n_sent_messages,n_rcv_message,fsm_state,last_event,cmd_bitfield,stm32_bitfield,avr_bitfield\n"; + } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << (int)mav_pkt.Event_id << "," << (int)mav_pkt.Topic_id << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.n_sent_messages << "," << mav_pkt.n_rcv_message << "," << (int)mav_pkt.fsm_state << "," << (int)mav_pkt.last_event << "," << (int)mav_pkt.cmd_bitfield << "," << (int)mav_pkt.stm32_bitfield << "," << (int)mav_pkt.avr_bitfield << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; @@ -380,124 +605,89 @@ struct MavSmTmData static void header(ostream &os) { - os << "timestamp,task_10hz_min,task_10hz_max,task_10hz_mean,task_10hz_" - "stddev,task_20hz_min,task_20hz_max,task_20hz_mean,task_20hz_" - "stddev,task_250hz_min,task_250hz_max,task_250hz_mean,task_250hz_" - "stddev,sensor_state,state\n"; + os << "timestamp,task_10hz_min,task_10hz_max,task_10hz_mean,task_10hz_stddev,task_20hz_min,task_20hz_max,task_20hz_mean,task_20hz_stddev,task_250hz_min,task_250hz_max,task_250hz_mean,task_250hz_stddev,sensor_state,state\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.task_10hz_min << "," - << mav_pkt.task_10hz_max << "," << mav_pkt.task_10hz_mean << "," - << mav_pkt.task_10hz_stddev << "," << mav_pkt.task_20hz_min << "," - << mav_pkt.task_20hz_max << "," << mav_pkt.task_20hz_mean << "," - << mav_pkt.task_20hz_stddev << "," << mav_pkt.task_250hz_min << "," - << mav_pkt.task_250hz_max << "," << mav_pkt.task_250hz_mean << "," - << mav_pkt.task_250hz_stddev << "," << mav_pkt.sensor_state << "," - << (int)mav_pkt.state << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.task_10hz_min << "," << mav_pkt.task_10hz_max << "," << mav_pkt.task_10hz_mean << "," << mav_pkt.task_10hz_stddev << "," << mav_pkt.task_20hz_min << "," << mav_pkt.task_20hz_max << "," << mav_pkt.task_20hz_mean << "," << mav_pkt.task_20hz_stddev << "," << mav_pkt.task_250hz_min << "," << mav_pkt.task_250hz_max << "," << mav_pkt.task_250hz_mean << "," << mav_pkt.task_250hz_stddev << "," << mav_pkt.sensor_state << "," << (int)mav_pkt.state << "\n"; } -}; -struct MavStartLaunchTcData -{ - mavlink_start_launch_tc_t mav_pkt; - - static void header(ostream &os) { os << "launch_code\n"; } - - void print(ostream &os) { os << mav_pkt.launch_code << "\n"; } + static unsigned int messagesPerPacket() + { + return 1; + } }; -struct MavSysTmData +struct MavUploadSettingTcData { - mavlink_sys_tm_t mav_pkt; + mavlink_upload_setting_tc_t mav_pkt; static void header(ostream &os) { - os << "timestamp,death_stack,logger,ev_broker,pin_obs,fmm,sensor_" - "manager,ada,tmtc,ign,dpl\n"; + os << "setting,setting_id\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << (int)mav_pkt.death_stack << "," - << (int)mav_pkt.logger << "," << (int)mav_pkt.ev_broker << "," - << (int)mav_pkt.pin_obs << "," << (int)mav_pkt.fmm << "," - << (int)mav_pkt.sensor_manager << "," << (int)mav_pkt.ada << "," - << (int)mav_pkt.tmtc << "," << (int)mav_pkt.ign << "," - << (int)mav_pkt.dpl << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.setting << "," << (int)mav_pkt.setting_id << "\n"; } -}; -struct MavTelemetryRequestTcData -{ - mavlink_telemetry_request_tc_t mav_pkt; - - static void header(ostream &os) { os << "board_id\n"; } - - void print(ostream &os) { os << (int)mav_pkt.board_id << "\n"; } + static unsigned int messagesPerPacket() + { + return 1; + } }; -struct MavTestTmData +struct MavGpsTmData { - mavlink_test_tm_t mav_pkt; + mavlink_gps_tm_t mav_pkt; static void header(ostream &os) { - os << "timestamp,pressure_nxp,pressure_hw,x_acc,z_acc,gps_lat,gps_lon," - "gps_altitude,temp_analog,temp_imu,battery_volt,th_cut_1,th_cut_" - "2,gps_fix,gps_nsats,pin_nosecone,pin_launch\n"; + os << "timestamp,lat,lon,altitude,vel_north,vel_east,vel_down,vel_mag,n_satellites,fix\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.pressure_nxp << "," - << mav_pkt.pressure_hw << "," << mav_pkt.x_acc << "," - << mav_pkt.z_acc << "," << mav_pkt.gps_lat << "," << mav_pkt.gps_lon - << "," << mav_pkt.gps_altitude << "," << mav_pkt.temp_analog << "," - << mav_pkt.temp_imu << "," << mav_pkt.battery_volt << "," - << mav_pkt.th_cut_1 << "," << mav_pkt.th_cut_2 << "," - << (int)mav_pkt.gps_fix << "," << (int)mav_pkt.gps_nsats << "," - << (int)mav_pkt.pin_nosecone << "," << (int)mav_pkt.pin_launch - << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.timestamp << "," << mav_pkt.lat << "," << mav_pkt.lon << "," << mav_pkt.altitude << "," << mav_pkt.vel_north << "," << mav_pkt.vel_east << "," << mav_pkt.vel_down << "," << mav_pkt.vel_mag << "," << mav_pkt.n_satellites << "," << (int)mav_pkt.fix << "\n"; + } + + static unsigned int messagesPerPacket() + { + return 1; } }; -struct MavTmtcTmData +struct MavStartLaunchTcData { - mavlink_tmtc_tm_t mav_pkt; + mavlink_start_launch_tc_t mav_pkt; static void header(ostream &os) { - os << "timestamp,parse_state,n_send_queue,max_send_queue,n_send_errors," - "packet_rx_success_count,packet_rx_drop_count,msg_received," - "buffer_overrun,parse_error,packet_idx,current_rx_seq,current_tx_" - "seq\n"; + os << "launch_code\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { - os << mav_pkt.timestamp << "," << mav_pkt.parse_state << "," - << mav_pkt.n_send_queue << "," << mav_pkt.max_send_queue << "," - << mav_pkt.n_send_errors << "," << mav_pkt.packet_rx_success_count - << "," << mav_pkt.packet_rx_drop_count << "," - << (int)mav_pkt.msg_received << "," << (int)mav_pkt.buffer_overrun - << "," << (int)mav_pkt.parse_error << "," << (int)mav_pkt.packet_idx - << "," << (int)mav_pkt.current_rx_seq << "," - << (int)mav_pkt.current_tx_seq << "\n"; + (void)index; // Avoid unused warnings + + os << mav_pkt.launch_code << "\n"; } -}; - -struct MavUploadSettingTcData -{ - mavlink_upload_setting_tc_t mav_pkt; - - static void header(ostream &os) { os << "setting,setting_id\n"; } - void print(ostream &os) + static unsigned int messagesPerPacket() { - os << mav_pkt.setting << "," << (int)mav_pkt.setting_id << "\n"; + return 1; } }; + + #pragma pack(pop) + diff --git a/src/msg_data_struct.template b/src/msg_data_struct.template index a987fd70488b0cfbd95ccfd119e4e86deab3b75b..df7dc27bcca5728b94ff0d30ed66aa11b3b32abc 100755 --- a/src/msg_data_struct.template +++ b/src/msg_data_struct.template @@ -7,9 +7,16 @@ struct $classname os << "$headers\n"; } - void print(ostream &os) + void print(ostream &os, unsigned int index = 0) { + (void)index; // Avoid unused warnings + os << $ostream << "\n"; } + + static unsigned int messagesPerPacket() + { + return 1; + } };