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);
  }