#pragma once12#include <AP_Logger/LogStructure.h>3#include <AP_Math/vector3.h>4#include <AP_Math/vector2.h>5#include <AP_Math/matrix3.h>6#include <AP_Math/quaternion.h>78#define LOG_IDS_FROM_DAL \9LOG_RFRH_MSG, \10LOG_RFRF_MSG, \11LOG_REV2_MSG, \12LOG_RSO2_MSG, \13LOG_RWA2_MSG, \14LOG_REV3_MSG, \15LOG_RSO3_MSG, \16LOG_RWA3_MSG, \17LOG_REY3_MSG, \18LOG_RFRN_MSG, \19LOG_RISH_MSG, \20LOG_RISI_MSG, \21LOG_RBRH_MSG, \22LOG_RBRI_MSG, \23LOG_RRNH_MSG, \24LOG_RRNI_MSG, \25LOG_RGPH_MSG, \26LOG_RGPI_MSG, \27LOG_RGPJ_MSG, \28LOG_RASH_MSG, \29LOG_RASI_MSG, \30LOG_RBCH_MSG, \31LOG_RBCI_MSG, \32LOG_RVOH_MSG, \33LOG_RMGH_MSG, \34LOG_RMGI_MSG, \35LOG_ROFH_MSG, \36LOG_REPH_MSG, \37LOG_RSLL_MSG, \38LOG_REVH_MSG, \39LOG_RWOH_MSG, \40LOG_RBOH_MSG, \41LOG_RTER_MSG4243// @LoggerMessage: RFRH44// @Description: Replay FRame Header45// @Field: TimeUS: Time since system startup46// @Field: TF: Time flying47struct log_RFRH {48uint64_t time_us;49uint32_t time_flying_ms;50uint8_t _end;51};5253// @LoggerMessage: RFRF54// @Description: Replay FRame data - Finished frame55// @Field: FTypes: accumulated method calls made during frame56// @FieldBitmaskEnum: FTypes: AP_DAL::FrameType57// @Field: Slow: true if we are not keeping up with IMU loop rate58struct log_RFRF {59uint8_t frame_types;60uint8_t core_slow;61uint8_t _end;62};6364// @LoggerMessage: RFRN65// @Description: Replay FRame - aNother frame header66// @Field: HLat: home latitude67// @Field: HLon: home latitude68// @Field: HAlt: home altitude AMSL69// @Field: E2T: EAS to TAS factor70// @Field: AM: available memory71// @Field: TX: AHRS trim X72// @Field: TY: AHRS trim Y73// @Field: TZ: AHRS trim Z74// @Field: VC: AHRS Vehicle Class75// @Field: EKT: configured EKF type76// @FieldValueEnum: EKT: AP_DAL::EKFType77// @Field: Flags: bitmask of boolean state78// @FieldBitmaskEnum: Flags: AP_DAL::RFRNFlags79struct log_RFRN {80int32_t lat;81int32_t lng;82int32_t alt;83float EAS2TAS;84uint32_t available_memory;85Vector3f ahrs_trim;86uint8_t vehicle_class;87uint8_t ekf_type;88uint8_t armed:1;89uint8_t unused:1; // was get_compass_is_null90uint8_t fly_forward:1;91uint8_t ahrs_airspeed_sensor_enabled:1;92uint8_t opticalflow_enabled:1;93uint8_t wheelencoder_enabled:1;94uint8_t takeoff_expected:1;95uint8_t touchdown_expected:1;96uint8_t _end;97};9899// @LoggerMessage: RISH100// @Description: Replay Inertial Sensor header101// @Field: LR: INS loop rate102// @Field: PG: primary gyro index103// @Field: PA: primary accel index104// @Field: LD: INS loop-delta-t105// @Field: AC: accel count106// @Field: GC: gyro count107struct log_RISH {108uint16_t loop_rate_hz;109uint8_t first_usable_gyro;110uint8_t first_usable_accel;111float loop_delta_t;112uint8_t accel_count;113uint8_t gyro_count;114uint8_t _end;115};116117// @LoggerMessage: RISI118// @Description: Replay Inertial Sensor instance data119// @Field: DVX: x-axis delta-velocity120// @Field: DVY: y-axis delta-velocity121// @Field: DVZ: z-axis delta-velocity122// @Field: DAX: x-axis delta-angle123// @Field: DAY: y-axis delta-angle124// @Field: DAZ: z-axis delta-angle125// @Field: DVDT: delta-velocity-delta-time126// @Field: DADT: delta-angle-delta-time127// @Field: Flags: use-accel, use-gyro, delta-vel-valid, delta-accel-valid128// @Field: I: IMU instance129struct log_RISI {130Vector3f delta_velocity;131Vector3f delta_angle;132float delta_velocity_dt;133float delta_angle_dt;134uint8_t use_accel:1;135uint8_t use_gyro:1;136uint8_t get_delta_velocity_ret:1;137uint8_t get_delta_angle_ret:1;138uint8_t instance;139uint8_t _end;140};141142// @LoggerMessage: REV2143// @Description: Replay Event (EKF2)144// @Field: Event: external event injected into EKF145// @FieldValueEnum: Event: AP_DAL::Event146struct log_REV2 {147uint8_t event;148uint8_t _end;149};150151// @LoggerMessage: RSO2152// @Description: Replay Set Origin event (EKF2)153// @Field: Lat: origin latitude154// @Field: Lon: origin longitude155// @Field: Alt: origin altitude156struct log_RSO2 {157int32_t lat;158int32_t lng;159int32_t alt;160uint8_t _end;161};162163// @LoggerMessage: RWA2164// @Description: Replay set-default-airspeed event (EKF2)165// @Field: Airspeed: default airspeed166// @Field: uncertainty: uncertainty in default airspeed167struct log_RWA2 {168float airspeed;169float uncertainty;170uint8_t _end;171};172173// same structures for EKF3174// @LoggerMessage: REV3175// @Description: Replay Event (EKF3)176// @Field: Event: external event injected into EKF177// @FieldValueEnum: Event: AP_DAL::Event178#define log_REV3 log_REV2179180// @LoggerMessage: RSO3181// @Description: Replay Set Origin event (EKF3)182// @Field: Lat: origin latitude183// @Field: Lon: origin longitude184// @Field: Alt: origin altitude185#define log_RSO3 log_RSO2186187// @LoggerMessage: RWA3188// @Description: Replay set-default-airspeed event (EKF3)189// @Field: Airspeed: default airspeed190// @Field: Uncertainty: uncertainty in default airspeed191#define log_RWA3 log_RWA2192193// @LoggerMessage: REY3194// @Description: Replay Euler Yaw event195// @Field: yawangle: externally supplied yaw angle196// @Field: yawangleerr: error in externally supplied yaw angle197// @Field: timestamp_ms: timestamp associated with yaw angle and yaw angle error198// @Field: type: number that needs documenting199struct log_REY3 {200float yawangle;201float yawangleerr;202uint32_t timestamp_ms;203uint8_t type;204uint8_t _end;205};206207// @LoggerMessage: RBRH208// @Description: Replay Data Barometer Header209// @Field: Primary: primary barometer instance number210// @Field: NumInst: number of barometer sensors211struct log_RBRH {212uint8_t primary;213uint8_t num_instances;214uint8_t _end;215};216217// @LoggerMessage: RBRI218// @Description: Replay Data Barometer Instance219// @Field: LastUpdate: timestamp of barometer data220// @Field: Alt: barometer altitude estimate221// @Field: H: barometer sensor health indication222// @Field: I: barometer instance number223struct log_RBRI {224uint32_t last_update_ms;225float altitude; // from get_altitude226bool healthy;227uint8_t instance;228uint8_t _end;229};230231// @LoggerMessage: RRNH232// @Description: Replay Data Rangefinder Header233// @Field: GCl: rangefinder ground clearance for downward-facing rangefinders234// @Field: MaxD: rangefinder maximum distance for downward-facing rangefinders235// @Field: NumSensors: number of rangefinder instances236struct log_RRNH {237// this is rotation-pitch-270!238float ground_clearance;239float max_distance;240uint8_t num_sensors;241uint8_t _end;242};243244// @LoggerMessage: RRNI245// @Description: Replay Data Rangefinder Instance246// @Field: PX: rangefinder body-frame offset, X-axis247// @Field: PY: rangefinder body-frame offset, Y-axis248// @Field: PZ: rangefinder body-frame offset, Z-axis249// @Field: Dist: Measured rangefinder distance250// @Field: Orient: orientation251// @Field: Status: status252// @Field: I: rangefinder instance number253struct log_RRNI {254Vector3f pos_offset;255float distance;256uint8_t orientation;257uint8_t status;258uint8_t instance;259uint8_t _end;260};261262// @LoggerMessage: RGPH263// @Description: Replay Data GPS Header264// @Field: NumInst: number of GPS sensors265// @Field: Primary: instance number of primary sensor266struct log_RGPH {267uint8_t num_sensors;268uint8_t primary_sensor;269uint8_t _end;270};271272// @LoggerMessage: RGPI273// @Description: Replay Data GPS Instance, infrequently changing data274// @Field: OX: antenna body-frame offset, X-axis275// @Field: OY: antenna body-frame offset, Y-axis276// @Field: OZ: antenna body-frame offset, Z-axis277// @Field: Lg: GPS time lag278// @Field: Flags: various GPS flags279// @FieldBits: Flags: have_vertical_velocity,horizontal_accuracy_returncode,vertical_accuracy_returncode,get_lag_returncode,speed_accuracy_returncode,gps_yaw_deg_returncode280// @Field: Stat: GPS fix status281// @Field: NSats: number of satellites GPS is using282// @Field: I: GPS sensor instance number283struct log_RGPI {284Vector3f antenna_offset;285float lag_sec;286uint8_t have_vertical_velocity:1;287uint8_t horizontal_accuracy_returncode:1;288uint8_t vertical_accuracy_returncode:1;289uint8_t get_lag_returncode:1;290uint8_t speed_accuracy_returncode:1;291uint8_t gps_yaw_deg_returncode:1;292uint8_t status;293uint8_t num_sats;294uint8_t instance;295uint8_t _end;296};297298// @LoggerMessage: RGPJ299// @Description: Replay Data GPS Instance - rapidly changing data300// @Field: TS: GPS data timestamp301// @Field: VX: GPS velocity, North302// @Field: VY: GPS velocity, East303// @Field: VZ: GPS velocity, Down304// @Field: SA: speed accuracy305// @Field: Y: GPS yaw306// @Field: YA: GPS yaw accuracy307// @Field: YT: timestamp of GPS yaw estimate308// @Field: Lat: latitude309// @Field: Lon: longitude310// @Field: Alt: altitude311// @Field: HA: horizontal accuracy312// @Field: VA: vertical accuracy313// @Field: HD: HDOP314// @Field: I: GPS sensor instance number315struct log_RGPJ {316uint32_t last_message_time_ms;317Vector3f velocity;318float sacc;319float yaw_deg;320float yaw_accuracy_deg;321uint32_t yaw_deg_time_ms;322int32_t lat;323int32_t lng;324int32_t alt;325float hacc;326float vacc;327uint16_t hdop;328uint8_t instance;329uint8_t _end;330};331332// @LoggerMessage: RASH333// @Description: Replay Airspeed Sensor Header334// @Field: Primary: airspeed instance number335// @Field: NumInst: number of airspeed instances336struct log_RASH {337uint8_t num_sensors;338uint8_t primary;339uint8_t _end;340};341342// @LoggerMessage: RASI343// @Description: Replay Airspeed Sensor Instance data344// @Field: pd: measured airspeed345// @Field: UpdateMS: timestamp of measured airspeed346// @Field: H: indicator of airspeed sensor health347// @Field: Use: true if airspeed is configured to be used348// @Field: I: airspeed instance number349struct log_RASI {350float airspeed;351uint32_t last_update_ms;352bool healthy;353bool use;354uint8_t instance;355uint8_t _end;356};357358// @LoggerMessage: RMGH359// @Description: Replay Data Magnetometer Header360// @Field: Dec: vehicle declination361// @Field: Avail: true if the compass library is marking itself as available362// @Field: NumInst: number of compass instances363// @Field: AutoDec: true if compass autodeclination is enabled364// @Field: NumEna: number of enabled compass instances365// @Field: LOE: true if compass learning of offsets is enabled366// @Field: C: true if compasses are consistent367// @Field: FUsable: index of first usable compass368struct log_RMGH {369float declination;370bool available;371uint8_t count;372bool auto_declination_enabled;373uint8_t num_enabled;374bool learn_offsets_enabled;375bool consistent;376uint8_t first_usable;377uint8_t _end;378};379380// @LoggerMessage: RMGI381// @Description: Replay Data Magnetometer Instance382// @Field: LU: last update time for magnetometer data383// @Field: OX: mag sensor offset, X-axis384// @Field: OY: mag sensor offset, Y-axis385// @Field: OZ: mag sensor offset, Z-axis386// @Field: FX: field strength, X-axis387// @Field: FY: field strength, Y-axis388// @Field: FZ: field strength, Z-axis389// @Field: UFY: true if compass is being used for yaw390// @Field: H: sensor health391// @Field: HSF: compass has scale factor392// @Field: I: magnetometer instance number393struct log_RMGI {394uint32_t last_update_usec;395Vector3f offsets;396Vector3f field;397bool use_for_yaw;398bool healthy;399bool have_scale_factor;400uint8_t instance;401uint8_t _end;402};403404// @LoggerMessage: RBCH405// @Description: Replay Data Beacon Header406// @Field: PX: zero, unused407// @Field: PY: zero, unused408// @Field: PZ: zero, unused409// @Field: AE: zero, unused410// @Field: OLat: origin latitude411// @Field: OLng: origin longitude412// @Field: OAlt: origin altitude413// @Field: Flags: vehicle_position_ned_returncode,get_origin_returncode,enabled414// @Field: NumInst: number of beacons415struct log_RBCH {416Vector3f vehicle_position_ned;417float accuracy_estimate;418int32_t origin_lat;419int32_t origin_lng;420int32_t origin_alt;421uint8_t get_vehicle_position_ned_returncode:1;422uint8_t get_origin_returncode:1;423uint8_t enabled:1;424uint8_t count;425uint8_t _end;426};427428// @LoggerMessage: RBCI429// @Description: Replay Data Beacon Instance430// @Field: LU: last update from this beacon instance431// @Field: PX: beacon distance from origin, X-axis432// @Field: PY: beacon distance from origin, Y-axis433// @Field: PZ: beacon distance from origin, Z-axis434// @Field: Dist: distance to beacon435// @Field: H: beacon data health436// @Field: I: beacon instance number437struct log_RBCI {438uint32_t last_update_ms;439Vector3f position;440float distance;441uint8_t healthy;442uint8_t instance;443uint8_t _end;444};445446// @LoggerMessage: RVOH447// @Description: Replay Data Visual Odometry data448// @Field: OX: offset, x-axis449// @Field: OY: offset, y-axis450// @Field: OZ: offset, z-axis451// @Field: Del: data delay452// @Field: H: sensor health453// @Field: Ena: sensor enabled454struct log_RVOH {455Vector3f pos_offset;456uint32_t delay_ms;457uint8_t healthy;458bool enabled;459uint8_t _end;460};461462// @LoggerMessage: ROFH463// @Description: Replay optical flow data464// @Field: FX: raw flow rate, X-axis465// @Field: FY: raw flow rate, Y-axis466// @Field: GX: gyro rate, X-axis467// @Field: GY: gyro rate, Y-axis468// @Field: Tms: measurement timestamp469// @Field: PX:gyro rate, X-axis470// @Field: PY: body-frame offset, Y-axis471// @Field: PZ: body-frame offset, Z-axis472// @Field: HgtOvr: sensor height override473// @Field: Qual: flow quality measurement474struct log_ROFH {475Vector2f rawFlowRates;476Vector2f rawGyroRates;477uint32_t msecFlowMeas;478Vector3f posOffset;479float heightOverride;480uint8_t rawFlowQuality;481uint8_t _end;482};483484// @LoggerMessage: REPH485// @Description: Replay external position data486// @Field: PX: external position estimate, X-axis487// @Field: PY: external position estimate, Y-axis488// @Field: PZ: external position estimate, Z-axis489// @Field: Q1: external attitude quaternion490// @Field: Q2: external attitude quaternion491// @Field: Q3: external attitude quaternion492// @Field: Q4: external attitude quaternion493// @Field: PEr: external position error estimate494// @Field: AEr: external attitude error estimate495// @Field: TS: timestamp on external error estimate496// @Field: RT: timestamp of last external reset497// @Field: D: delay on external data498struct log_REPH {499Vector3f pos;500Quaternion quat;501float posErr;502float angErr;503uint32_t timeStamp_ms;504uint32_t resetTime_ms;505uint16_t delay_ms;506uint8_t _end;507};508509// @LoggerMessage: RSLL510// @Description: Replay Set Lat Lng event511// @Field: Lat: latitude512// @Field: Lng: longitude513// @Field: PosAccSD: position accuracy, 1-StD514// @Field: TS: timestamp of latitude/longitude515struct log_RSLL {516int32_t lat; // WGS-84 latitude in 1E-7 degrees517int32_t lng; // WGS-84 longitude in 1E7 degrees518float posAccSD; // horizontal position 1 STD uncertainty (m)519uint32_t timestamp_ms;520uint8_t _end;521};522523// @LoggerMessage: REVH524// @Description: Replay external velocity data525// @Field: VX: external velocity estimate, X-axis526// @Field: VY: external velocity estimate, Y-axis527// @Field: VZ: external velocity estimate, Z-axis528// @Field: Er: error in velocity estimate529// @Field: TS: timestamp of velocity estimate530// @Field: D: delay in external velocity data531struct log_REVH {532Vector3f vel;533float err;534uint32_t timeStamp_ms;535uint16_t delay_ms;536uint8_t _end;537};538539// @LoggerMessage: RWOH540// @Description: Replay wheel odometry data541// @Field: DA: delta-angle542// @Field: DT: delta-time543// @Field: TS: data timestamp544// @Field: PX: sensor body-frame offset, x-axis545// @Field: PY: sensor body-frame offset, y-axis546// @Field: PZ: sensor body-frame offset, z-axis547// @Field: R: wheel radius548struct log_RWOH {549float delAng;550float delTime;551uint32_t timeStamp_ms;552Vector3f posOffset;553float radius;554uint8_t _end;555};556557// @LoggerMessage: RBOH558// @Description: Replay body odometry data559// @Field: Q: data quality measure560// @Field: DPX: delta-position-X561// @Field: DPY: delta-position-Y562// @Field: DPZ: delta-position-Z563// @Field: DAX: delta-angle-X564// @Field: DAY: delta-angle-Y565// @Field: DAZ: delta-angle-Z566// @Field: DT: delta-time567// @Field: TS: data timestamp568// @Field: OX: zero, unused569// @Field: OY: zero, unused570// @Field: OZ: zero, unused571// @Field: D: zero, unused572struct log_RBOH {573float quality;574Vector3f delPos;575Vector3f delAng;576float delTime;577uint32_t timeStamp_ms;578Vector3f posOffset;579uint16_t delay_ms;580uint8_t _end;581};582583// @LoggerMessage: RTER584// @Description: Replay Terrain SRTM Altitude585// @Field: Alt: altitude above origin in meters586struct log_RTER {587float alt_m;588uint8_t _end;589};590591#define RLOG_SIZE(sname) 3+offsetof(struct log_ ##sname,_end)592593#define LOG_STRUCTURE_FROM_DAL \594{ LOG_RFRH_MSG, RLOG_SIZE(RFRH), \595"RFRH", "QI", "TimeUS,TF", "s-", "F-" }, \596{ LOG_RFRF_MSG, RLOG_SIZE(RFRF), \597"RFRF", "BB", "FTypes,Slow", "--", "--" }, \598{ LOG_RFRN_MSG, RLOG_SIZE(RFRN), \599"RFRN", "IIIfIfffBBB", "HLat,HLon,HAlt,E2T,AM,TX,TY,TZ,VC,EKT,Flags", "DUm-bddd---", "GGB--------" }, \600{ LOG_REV2_MSG, RLOG_SIZE(REV2), \601"REV2", "B", "Event", "-", "-" }, \602{ LOG_RSO2_MSG, RLOG_SIZE(RSO2), \603"RSO2", "III", "Lat,Lon,Alt", "DUm", "GGB" }, \604{ LOG_RWA2_MSG, RLOG_SIZE(RWA2), \605"RWA2", "ff", "Airspeed,uncertainty", "nn", "00" }, \606{ LOG_REV3_MSG, RLOG_SIZE(REV3), \607"REV3", "B", "Event", "-", "-" }, \608{ LOG_RSO3_MSG, RLOG_SIZE(RSO3), \609"RSO3", "III", "Lat,Lon,Alt", "DUm", "GGB" }, \610{ LOG_RWA3_MSG, RLOG_SIZE(RWA3), \611"RWA3", "ff", "Airspeed,Uncertainty", "nn", "00" }, \612{ LOG_REY3_MSG, RLOG_SIZE(REY3), \613"REY3", "ffIB", "yawangle,yawangleerr,timestamp_ms,type", "???-", "???-" }, \614{ LOG_RISH_MSG, RLOG_SIZE(RISH), \615"RISH", "HBBfBB", "LR,PG,PA,LD,AC,GC", "------", "------" }, \616{ LOG_RISI_MSG, RLOG_SIZE(RISI), \617"RISI", "ffffffffBB", "DVX,DVY,DVZ,DAX,DAY,DAZ,DVDT,DADT,Flags,I", "---------#", "----------" }, \618{ LOG_RASH_MSG, RLOG_SIZE(RASH), \619"RASH", "BB", "Primary,NumInst", "--", "--" }, \620{ LOG_RASI_MSG, RLOG_SIZE(RASI), \621"RASI", "fIBBB", "pd,UpdateMS,H,Use,I", "----#", "-----" }, \622{ LOG_RBRH_MSG, RLOG_SIZE(RBRH), \623"RBRH", "BB", "Primary,NumInst", "--", "--" }, \624{ LOG_RBRI_MSG, RLOG_SIZE(RBRI), \625"RBRI", "IfBB", "LastUpdate,Alt,H,I", "---#", "----" }, \626{ LOG_RRNH_MSG, RLOG_SIZE(RRNH), \627"RRNH", "ffB", "GCl,MaxD,NumSensors", "mm-", "00-" }, \628{ LOG_RRNI_MSG, RLOG_SIZE(RRNI), \629"RRNI", "ffffBBB", "PX,PY,PZ,Dist,Orient,Status,I", "---m--#", "---0---" }, \630{ LOG_RGPH_MSG, RLOG_SIZE(RGPH), \631"RGPH", "BB", "NumInst,Primary", "--", "--" }, \632{ LOG_RGPI_MSG, RLOG_SIZE(RGPI), \633"RGPI", "ffffBBBB", "OX,OY,OZ,Lg,Flags,Stat,NSats,I", "-------#", "--------" }, \634{ LOG_RGPJ_MSG, RLOG_SIZE(RGPJ), \635"RGPJ", "IffffffIiiiffHB", "TS,VX,VY,VZ,SA,Y,YA,YT,Lat,Lon,Alt,HA,VA,HD,I", "--------------#", "---------------" }, \636{ LOG_RMGH_MSG, RLOG_SIZE(RMGH), \637"RMGH", "fBBBBBBB", "Dec,Avail,NumInst,AutoDec,NumEna,LOE,C,FUsable", "--------", "--------" }, \638{ LOG_RMGI_MSG, RLOG_SIZE(RMGI), \639"RMGI", "IffffffBBBB", "LU,OX,OY,OZ,FX,FY,FZ,UFY,H,HSF,I", "----------#", "-----------" }, \640{ LOG_RBCH_MSG, RLOG_SIZE(RBCH), \641"RBCH", "ffffiiiBB", "PX,PY,PZ,AE,OLat,OLng,OAlt,Flags,NumInst", "---------", "---------" }, \642{ LOG_RBCI_MSG, RLOG_SIZE(RBCI), \643"RBCI", "IffffBB", "LU,PX,PY,PZ,Dist,H,I", "smmmm-#", "?0000--" }, \644{ LOG_RVOH_MSG, RLOG_SIZE(RVOH), \645"RVOH", "fffIBB", "OX,OY,OZ,Del,H,Ena", "------", "------" }, \646{ LOG_ROFH_MSG, RLOG_SIZE(ROFH), \647"ROFH", "ffffIffffB", "FX,FY,GX,GY,Tms,PX,PY,PZ,HgtOvr,Qual", "----------", "----------" }, \648{ LOG_REPH_MSG, RLOG_SIZE(REPH), \649"REPH", "fffffffffIIH", "PX,PY,PZ,Q1,Q2,Q3,Q4,PEr,AEr,TS,RT,D", "------------", "------------" }, \650{ LOG_RSLL_MSG, RLOG_SIZE(RSLL), \651"RSLL", "IIfI", "Lat,Lng,PosAccSD,TS", "DU--", "GG--" }, \652{ LOG_REVH_MSG, RLOG_SIZE(REVH), \653"REVH", "ffffIH", "VX,VY,VZ,Er,TS,D", "------", "------" }, \654{ LOG_RWOH_MSG, RLOG_SIZE(RWOH), \655"RWOH", "ffIffff", "DA,DT,TS,PX,PY,PZ,R", "-------", "-------" }, \656{ LOG_RBOH_MSG, RLOG_SIZE(RBOH), \657"RBOH", "ffffffffIfffH", "Q,DPX,DPY,DPZ,DAX,DAY,DAZ,DT,TS,OX,OY,OZ,D", "-------------", "-------------" }, \658{ LOG_RTER_MSG, RLOG_SIZE(RTER), \659"RTER", "f", "Alt", "m", "0" },660661662