public static State getState(MavLinkDrone drone, boolean isConnected, Vibration vibration) { if (drone == null) return new State(); org.droidplanner.services.android.core.drone.variables.State droneState = drone.getState(); ApmModes droneMode = droneState.getMode(); AccelCalibration accelCalibration = drone.getCalibrationSetup(); String calibrationMessage = accelCalibration != null && accelCalibration.isCalibrating() ? accelCalibration.getMessage() : null; final msg_ekf_status_report ekfStatus = droneState.getEkfStatus(); final EkfStatus proxyEkfStatus = ekfStatus == null ? new EkfStatus() : new EkfStatus( ekfStatus.flags, ekfStatus.compass_variance, ekfStatus.pos_horiz_variance, ekfStatus.terrain_alt_variance, ekfStatus.velocity_variance, ekfStatus.pos_vert_variance); return new State( isConnected, CommonApiUtils.getVehicleMode(droneMode), droneState.isArmed(), droneState.isFlying(), droneState.getErrorId(), drone.getMavlinkVersion(), calibrationMessage, droneState.getFlightStartTime(), proxyEkfStatus, isConnected && drone.isConnectionAlive(), vibration); }