bool EWMicroRecorderDevice::Declare(const Declaration *decl) { // Must have at least two, max 12 waypoints if (decl->size() < 2 || decl->size() > 12) return false; port->StopRxThread(); port->SetRxTimeout(500); // set RX timeout to 500[ms] if (!TryConnect()) return false; port->Write('\x18'); // start to upload file port->Write(user_data); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Pilot Name:"), decl->PilotName); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Competition ID:"), decl->AircraftRego); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Aircraft Type:"), decl->AircraftType); port->Write("Description: Declaration\r\n"); for (unsigned i = 0; i < 11; i++) { if (i+1>= decl->size()) { EWMicroRecorderPrintf(port, _T("%-17s %s\r\n"), _T("TP LatLon:"), _T("0000000N00000000E TURN POINT\r\n")); } else { const Waypoint &wp = decl->waypoints[i]; if (i == 0) { EWMicroRecorderWriteWayPoint(port, wp, _T("Take Off LatLong:")); EWMicroRecorderWriteWayPoint(port, wp, _T("Start LatLon:")); } else if (i + 1 < decl->size()) { EWMicroRecorderWriteWayPoint(port, wp, _T("TP LatLon:")); } } } const Waypoint &wp = decl->waypoints[decl->size() - 1]; EWMicroRecorderWriteWayPoint(port, wp, _T("Finish LatLon:")); EWMicroRecorderWriteWayPoint(port, wp, _T("Land LatLon:")); port->Write('\x03'); // finish sending user file bool success = ExpectStringWait(port, "uploaded successfully"); port->Write("!!\r\n"); // go back to NMEA mode port->SetRxTimeout(0); // clear timeout port->StartRxThread(); // restart RX thread return success; }
bool Nano::DownloadFlight(Port &port, const RecordedFlightInfo &flight, const TCHAR *path, OperationEnvironment &env) { port.StopRxThread(); FILE *file = _tfopen(path, _T("wb")); if (file == NULL) return false; bool success = DownloadFlightInner(port, flight.internal.lx.nano_filename, file, env); if (fclose(file) != 0) success = false; return success; }
bool EWDevice::Declare(const struct Declaration *decl, OperationEnvironment &env) { port->StopRxThread(); lLastBaudrate = port->SetBaudrate(9600L); // change to IO Mode baudrate port->SetRxTimeout(500); // set RX timeout to 500[ms] bool success = DeclareInner(decl, env); port->Write("NMEA\r\n"); // switch to NMEA mode port->SetBaudrate(lLastBaudrate); // restore baudrate port->SetRxTimeout(0); // clear timeout port->StartRxThread(); // restart RX thread return success; }
bool Nano::ReadFlightList(Port &port, RecordedFlightList &flight_list, OperationEnvironment &env) { port.StopRxThread(); PortNMEAReader reader(port, env); TimeoutClock timeout(2000); int nflights = GetNumberOfFlights(port, reader, env, timeout); if (nflights <= 0) return nflights == 0; env.SetProgressRange(nflights); unsigned requested_tail = 1; while (true) { const unsigned room = flight_list.max_size() - flight_list.size(); const unsigned remaining = nflights - requested_tail + 1; const unsigned nmax = std::min(room, remaining); if (nmax == 0) break; /* read 8 records at a time */ const unsigned nrequest = std::min(nmax, 8u); timeout = TimeoutClock(2000); if (!GetLogbookContents(port, reader, flight_list, requested_tail, nrequest, env, timeout)) return false; requested_tail += nrequest; env.SetProgressPosition(requested_tail - 1); } return true; }