static bool DeclareInner(Port &port, const Declaration &declaration, const Waypoint *home, OperationEnvironment &env) { assert(declaration.Size() >= 2); VLAPI vl(port, 38400L, env); if (vl.connect(20) != VLA_ERR_NOERR) return false; memset(&vl.database, 0, sizeof(vl.database)); memset(&vl.declaration, 0, sizeof(vl.declaration)); CopyToNarrowBuffer(vl.declaration.flightinfo.pilot, sizeof(vl.declaration.flightinfo.pilot), declaration.pilot_name); CopyToNarrowBuffer(vl.declaration.flightinfo.gliderid, sizeof(vl.declaration.flightinfo.gliderid), declaration.aircraft_registration); CopyToNarrowBuffer(vl.declaration.flightinfo.glidertype, sizeof(vl.declaration.flightinfo.glidertype), declaration.aircraft_type); if (home != NULL) CopyWaypoint(vl.declaration.flightinfo.homepoint, *home); // start.. CopyTurnPoint(vl.declaration.task.startpoint, declaration.turnpoints.front()); // rest of task... const unsigned n = std::min(declaration.Size() - 2, 12u); for (unsigned i = 0; i < n; ++i) CopyTurnPoint(vl.declaration.task.turnpoints[i], declaration.turnpoints[i + 1]); // Finish CopyTurnPoint(vl.declaration.task.finishpoint, declaration.turnpoints.back()); vl.declaration.task.nturnpoints = n; bool success = vl.write_db_and_declaration() == VLA_ERR_NOERR; Volkslogger::Reset(port, env); return success; }
static bool DeclareInner(VLAPI &vl, const Declaration &declaration, const Waypoint *home) { assert(declaration.Size() >= 2); if (vl.open(20, 38400L) != VLA_ERR_NOERR || vl.read_info() != VLA_ERR_NOERR) return false; memset(&vl.database, 0, sizeof(vl.database)); memset(&vl.declaration, 0, sizeof(vl.declaration)); CopyToNarrowBuffer(vl.declaration.flightinfo.pilot, sizeof(vl.declaration.flightinfo.pilot), declaration.pilot_name); CopyToNarrowBuffer(vl.declaration.flightinfo.gliderid, sizeof(vl.declaration.flightinfo.gliderid), declaration.aircraft_registration); CopyToNarrowBuffer(vl.declaration.flightinfo.glidertype, sizeof(vl.declaration.flightinfo.glidertype), declaration.aircraft_type); if (home != NULL) CopyWaypoint(vl.declaration.flightinfo.homepoint, *home); // start.. CopyTurnPoint(vl.declaration.task.startpoint, declaration.turnpoints.front()); // rest of task... const unsigned n = std::min(declaration.Size() - 2, 12u); for (unsigned i = 0; i < n; ++i) CopyTurnPoint(vl.declaration.task.turnpoints[i], declaration.turnpoints[i + 1]); // Finish CopyTurnPoint(vl.declaration.task.finishpoint, declaration.turnpoints.back()); vl.declaration.task.nturnpoints = n; return vl.write_db_and_declaration() == VLA_ERR_NOERR; }