#include #include #include #include #include #include #include #include #include #include #include "LogReader.h" #include #include #include #include #include "MsgHandler.h" #define streq(x, y) (!strcmp(x, y)) extern const AP_HAL::HAL& hal; LogReader::LogReader(AP_AHRS &_ahrs, AP_InertialSensor &_ins, AP_Baro &_baro, Compass &_compass, AP_GPS &_gps, AP_Airspeed &_airspeed, DataFlash_Class &_dataflash) : vehicle(VehicleType::VEHICLE_UNKNOWN), ahrs(_ahrs), ins(_ins), baro(_baro), compass(_compass), gps(_gps), airspeed(_airspeed), dataflash(_dataflash), accel_mask(7), gyro_mask(7), last_timestamp_usec(0), installed_vehicle_specific_parsers(false) {} struct log_Format deferred_formats[LOGREADER_MAX_FORMATS]; // some log entries (e.g. "NTUN") are used by the different vehicle // types with wildy varying payloads. We thus can't use the same // parser for just any e.g. NTUN message. We defer the registration // of a parser for these messages until we know what model we're // dealing with. void LogReader::maybe_install_vehicle_specific_parsers() { if (! installed_vehicle_specific_parsers && vehicle != VehicleType::VEHICLE_UNKNOWN) { switch(vehicle) { case VehicleType::VEHICLE_COPTER: for (uint8_t i = 0; istop_clock(last_timestamp_usec); } LR_MsgHandler *p = msgparser[f.type]; if (p == NULL) { return true; } p->process_message(msg); maybe_install_vehicle_specific_parsers(); return true; } bool LogReader::wait_type(const char *wtype) { while (true) { char type[5]; if (!update(type)) { return false; } if (streq(type,wtype)) { break; } } return true; } bool LogReader::set_parameter(const char *name, float value) { if (parameter_handler == NULL) { ::printf("No parameter format message found"); return false; } return parameter_handler->set_parameter(name, value); }