static bool DeclareInner(Port &port, const Declaration &declaration, OperationEnvironment &env) { assert(declaration.Size() >= 2); assert(declaration.Size() <= 12); char user_data[2500]; if (!TryConnectRetry(port, user_data, sizeof(user_data), env)) return false; char *p = strstr(user_data, "USER DETAILS"); if (p != NULL) *p = 0; port.Write('\x18'); // start to upload file if (!port.FullWriteString(user_data, env, 5000) || !port.FullWriteString("USER DETAILS\r\n--------------\r\n\r\n", env, 1000)) return false; WritePair(port, "Pilot Name", declaration.pilot_name.c_str(), env); WritePair(port, "Competition ID", declaration.competition_id.c_str(), env); WritePair(port, "Aircraft Type", declaration.aircraft_type.c_str(), env); WritePair(port, "Aircraft ID", declaration.aircraft_registration.c_str(), env); if (!port.FullWriteString("\r\nFLIGHT DECLARATION\r\n-------------------\r\n\r\n", env, 1000)) return false; WritePair(port, "Description", _T("XCSoar task declaration"), env); for (unsigned i = 0; i < 11; i++) { if (env.IsCancelled()) return false; if (i+1>= declaration.Size()) { port.FullWriteString("TP LatLon: 0000000N00000000E TURN POINT\r\n", env, 1000); } else { const Waypoint &wp = declaration.GetWaypoint(i); if (i == 0) { if (!EWMicroRecorderWriteWaypoint(port, "Take Off LatLong", wp, env) || !EWMicroRecorderWriteWaypoint(port, "Start LatLon", wp, env)) return false; } else if (i + 1 < declaration.Size()) { if (!EWMicroRecorderWriteWaypoint(port, "TP LatLon", wp, env)) return false; } } } const Waypoint &wp = declaration.GetLastWaypoint(); if (!EWMicroRecorderWriteWaypoint(port, "Finish LatLon", wp, env) || !EWMicroRecorderWriteWaypoint(port, "Land LatLon", wp, env) || env.IsCancelled()) return false; port.Write('\x03'); // finish sending user file return port.ExpectString("uploaded successfully", env, 5000); }
static bool DeclareInner(Port &port, const Declaration &declaration, OperationEnvironment &env) { assert(declaration.size() >= 2); assert(declaration.size() <= 12); char user_data[2500]; if (!TryConnect(port, user_data) || env.IsCancelled()) return false; char *p = strstr(user_data, "USER DETAILS"); if (p != NULL) *p = 0; port.Write('\x18'); // start to upload file port.Write(user_data); port.Write("USER DETAILS\r\n--------------\r\n\r\n"); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Pilot Name:"), declaration.PilotName.c_str()); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Competition ID:"), declaration.CompetitionId.c_str()); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Aircraft Type:"), declaration.AircraftType.c_str()); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Aircraft ID:"), declaration.AircraftReg.c_str()); port.Write("\r\nFLIGHT DECLARATION\r\n-------------------\r\n\r\n"); EWMicroRecorderPrintf(port, _T("%-15s %s\r\n"), _T("Description:"), _T("XCSoar task declaration")); for (unsigned i = 0; i < 11; i++) { if (env.IsCancelled()) return false; if (i+1>= declaration.size()) { EWMicroRecorderPrintf(port, _T("%-17s %s\r\n"), _T("TP LatLon:"), _T("0000000N00000000E TURN POINT")); } else { const Waypoint &wp = declaration.get_waypoint(i); if (i == 0) { EWMicroRecorderWriteWaypoint(port, wp, _T("Take Off LatLong:")); EWMicroRecorderWriteWaypoint(port, wp, _T("Start LatLon:")); } else if (i + 1 < declaration.size()) { EWMicroRecorderWriteWaypoint(port, wp, _T("TP LatLon:")); } } } const Waypoint &wp = declaration.get_last_waypoint(); EWMicroRecorderWriteWaypoint(port, wp, _T("Finish LatLon:")); EWMicroRecorderWriteWaypoint(port, wp, _T("Land LatLon:")); if (env.IsCancelled()) return false; port.Write('\x03'); // finish sending user file return port.ExpectString("uploaded successfully"); }