static bool ConvertDirectoryToRecordedFlightList(const std::vector<DIRENTRY> &dir, RecordedFlightList &flight_list) { RecordedFlightInfo flight_info; for (unsigned i=0; (i < dir.size()) && !flight_list.full(); i++) { const DIRENTRY &flight = dir[i]; /* * Only show logs with a takeoff detected */ if (flight.takeoff == 1) { if (!flight.firsttime.IsPlausible() || !flight.lasttime.IsPlausible()) return false; flight_info.date = {flight.firsttime.year, flight.firsttime.month, flight.firsttime.day}; flight_info.start_time = {flight.firsttime.hour, flight.firsttime.minute, flight.firsttime.second}; flight_info.end_time = {flight.lasttime.hour, flight.lasttime.minute, flight.lasttime.second}; flight_info.internal.volkslogger = i; flight_list.append(flight_info); } } return true; }
static bool ReadFlightListInner(Port &port, RecordedFlightList &flight_list, OperationEnvironment &env) { if (!LX::CommandMode(port, env)) return false; port.Flush(); if (!LX::SendCommand(port, LX::READ_FLIGHT_LIST)) return false; bool success = false; while (!flight_list.full()) { LX::FlightInfo flight; if (!LX::ReadCRC(port, &flight, sizeof(flight), env, 20000)) break; success = true; if (!flight.IsValid()) break; RecordedFlightInfo dest; if (Copy(dest, flight)) flight_list.append(dest); } return success; }
bool FlarmDevice::ReadFlightList(RecordedFlightList &flight_list, OperationEnvironment &env) { if (!BinaryMode(env)) return false; // Try to receive flight information until the list is full for (uint8_t i = 0; !flight_list.full(); ++i) { FLARM::MessageType ack_result = SelectFlight(i, env); // Last record reached -> bail out and return list if (ack_result == FLARM::MT_NACK) break; // If neither ACK nor NACK was received if (ack_result != FLARM::MT_ACK || env.IsCancelled()) { mode = Mode::UNKNOWN; return false; } RecordedFlightInfo flight_info; flight_info.internal.flarm = i; if (ReadFlightInfo(flight_info, env)) flight_list.append(flight_info); } return true; }
static bool ReadFlightListInner(Port &port, RecordedFlightList &flight_list, OperationEnvironment &env) { env.SetProgressRange(8); for (unsigned i = 0; i < 8 && !flight_list.full(); ++i) { CAI302::FileList file_list; if (!CAI302::UploadFileList(port, i, file_list, env)) break; for (unsigned j = 0; j < 8 && !flight_list.full(); ++j) { const CAI302::FileList::FileInfo &file = file_list.files[j]; if (file.start_utc.month > 0) Copy(flight_list.append(), i * 8 + j, file); } env.SetProgressPosition(i); } return !flight_list.empty() && !env.IsCancelled(); }