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, gcc_unused OperationEnvironment &env) { using CAI302::UploadShort; unsigned size = declaration.Size(); env.SetProgressRange(6 + size); env.SetProgressPosition(0); CAI302::PilotMeta pilot_meta; if (!CAI302::UploadPilotMeta(port, pilot_meta, env)) return false; env.SetProgressPosition(1); CAI302::Pilot pilot; if (!CAI302::UploadPilot(port, 0, pilot, env)) return false; env.SetProgressPosition(2); CAI302::PolarMeta polar_meta; if (!CAI302::UploadPolarMeta(port, polar_meta, env)) return false; env.SetProgressPosition(3); CAI302::Polar polar; if (!CAI302::UploadPolar(port, polar, env)) return false; env.SetProgressPosition(4); if (!CAI302::DownloadMode(port, env)) return false; char GliderType[13], GliderID[13]; convert_string(GliderType, sizeof(GliderType), declaration.aircraft_type); convert_string(GliderID, sizeof(GliderID), declaration.aircraft_registration); convert_string(pilot.name, sizeof(pilot.name), declaration.pilot_name); if (!CAI302::DownloadPilot(port, pilot, 0, env)) return false; env.SetProgressPosition(5); convert_string(polar.glider_type, sizeof(polar.glider_type), declaration.aircraft_type); convert_string(polar.glider_id, sizeof(polar.glider_id), declaration.aircraft_registration); if (!CAI302::DownloadPolar(port, polar, env)) return false; env.SetProgressPosition(6); for (unsigned i = 0; i < size; ++i) { if (!cai302DeclAddWaypoint(port, i, declaration.GetWaypoint(i), env)) return false; env.SetProgressPosition(7 + i); } return CAI302::DeclareSave(port, env); }