Данные пульта дистанционного управления DJI равны нулю

#android #dji-sdk

#Android #dji-sdk

Вопрос:

Контекст

Я пытаюсь получить следующие данные с пульта дистанционного управления: имя, более низкий уровень сигнала между двумя антеннами и данными GPS.

Проблема

Все эти данные обнуляются. Единственным исключением является Phantom 4 Pro V2, в котором имя заменяется символом (черный бриллиант с белым вопросительным знаком).

Код

 @NonNull
public RemoteControllerInfo getRemoteControllerInfo() {
  final String name = (String) getValueFromDjiKey(
    RemoteControllerKey.create(RemoteControllerKey.NAME)
  );
  
  final LightbridgeAntennaRSSI antennas =
    (LightbridgeAntennaRSSI) getValueFromDjiKey(
      AirLinkKey.create(AirLinkKey.REMOTE_CONTROLLER_ANTENNA_RSSI)
    );
  final Integer signalStrengthInPercent = antennas == null
    ? null
    : Math.min(antennas.getAntenna1(), antennas.getAntenna2());
  
  final RemoteControllerGps remoteControllerGps;
  final GPSData gpsData = (GPSData) getValueFromDjiKey(
    RemoteControllerKey.create(RemoteControllerKey.GPS_DATA)
  );
  if (gpsData != null amp;amp; gpsData.isValid()) {
    final GPSData.GPSLocation gpsLocation = gpsData.getLocation();
    final GPSData.Time gpsDateTime = gpsData.getTime();
    remoteControllerGps = RemoteControllerGps.builder()
      .latitude(gpsLocation.getLatitude())
      .longitude(gpsLocation.getLongitude())
      .year(gpsDateTime.getYear())
      .month((int) gpsDateTime.getMonth())
      .day((int) gpsDateTime.getDay())
      .hour((int) gpsDateTime.getHour())
      .minute((int) gpsDateTime.getMinute())
      .second((int) gpsDateTime.getSecond())
      .build();
  }
  
  return RemoteControllerInfo.builder()
    .name(name)
    .signalStrengthPercentage(signalStrengthInPercent)
    .remoteControllerGps(remoteControllerGps)
    .build();
}

@Nullable
private Object getValueFromDjiKey(@Nullable final DJIKey key) {
  final Object[] result = new Object[1];
  
  final CountDownLatch onFinishSignal = new CountDownLatch(1);
  KeyManager.getInstance().getValue(key, new GetCallback() {
    @Override
    public void onSuccess(@NonNull final Object o) {
      result[0] = o;
      
      onFinishSignal.countDown();
    }
    
    @Override
    public void onFailure(@NonNull final DJIError djiError) {
      onFinishSignal.countDown();
    }
  });
  synchronized (onFinishSignal) {
    try {
      onFinishSignal.await();
    } catch (final InterruptedException ignored) {
    }
  }
  
  return result[0];
}
  

Окружающая среда:

  • Phantom 4 Pro / Pro V2 / Расширенный / Стандартный
  • Android 9
  • MSDK v4.13.1

Ответ №1:

Если я понимаю вашу проблему, вы вызываете SDK для считывания данных GPS с пульта дистанционного управления для контроллера серии Phantom?

Контроллер для самолетов Phantom не имеет встроенного GPS, поэтому значения будут равны нулю.

Если я правильно помню, только контроллеры серии Inspire (и, возможно, другие контроллеры самолетов более высокого класса) включают GPS.

Комментарии:

1. Это объясняет часть GPS, но есть ли у вас какие-либо подсказки о том, почему имя и антенны также обнуляются?

2. Необходимо просмотреть документацию, но я не верю, что P4 является Airlink, поэтому он будет нулевым.