package org.droidplanner.services.android.impl.utils; import android.os.RemoteException; import android.util.Pair; import org.droidplanner.services.android.impl.core.drone.autopilot.Drone; import org.droidplanner.services.android.impl.core.drone.autopilot.apm.solo.ArduSolo; import org.droidplanner.services.android.impl.core.drone.autopilot.apm.solo.SoloComp; import com.o3dr.services.android.lib.drone.attribute.error.CommandExecutionError; import com.o3dr.services.android.lib.drone.companion.solo.SoloState; import com.o3dr.services.android.lib.drone.companion.solo.controller.SoloControllerMode; import com.o3dr.services.android.lib.drone.companion.solo.controller.SoloControllerUnits; import com.o3dr.services.android.lib.drone.companion.solo.tlv.SoloButtonSettingSetter; import com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVPacket; import com.o3dr.services.android.lib.model.ICommandListener; import timber.log.Timber; /** * Created by Fredia Huya-Kouadio on 7/29/15. */ public class SoloApiUtils { //Private to prevent instantiation. private SoloApiUtils() { } public static SoloState getSoloLinkState(ArduSolo arduSolo) { if (arduSolo == null) return null; final SoloComp soloComp = arduSolo.getSoloComp(); final Pair<String, String> wifiSettings = soloComp.getWifiSettings(); return new SoloState(soloComp.getAutopilotVersion(), soloComp.getControllerFirmwareVersion(), soloComp.getControllerVersion(), soloComp.getVehicleVersion(), wifiSettings.second, wifiSettings.first, soloComp.getTxPowerCompliantCountry(), soloComp.getButtonSettings(), soloComp.getGimbalVersion(), soloComp.getControllerMode(), soloComp.getControllerUnit()); } public static boolean isSoloLinkFeatureAvailable(Drone drone, ICommandListener listener) { if (drone == null) return false; if(!(drone instanceof ArduSolo)){ if (listener != null) { try { listener.onError(CommandExecutionError.COMMAND_UNSUPPORTED); } catch (RemoteException e) { Timber.e(e, e.getMessage()); } } return false; } return true; } public static void sendSoloLinkMessage(ArduSolo arduSolo, TLVPacket messageData, ICommandListener listener) { if (!isSoloLinkFeatureAvailable(arduSolo, listener) || messageData == null) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.sendSoloLinkMessage(messageData, listener); } public static void updateSoloLinkWifiSettings(ArduSolo arduSolo, String wifiSsid, String wifiPassword, ICommandListener listener) { if (!isSoloLinkFeatureAvailable(arduSolo, listener)) return; if (android.text.TextUtils.isEmpty(wifiSsid) && android.text.TextUtils.isEmpty(wifiPassword)) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.updateWifiSettings(wifiSsid, wifiPassword, listener); } public static void updateSoloLinkButtonSettings(ArduSolo arduSolo, SoloButtonSettingSetter buttonSettings, ICommandListener listener) { if (!isSoloLinkFeatureAvailable(arduSolo, listener) || buttonSettings == null) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.pushButtonSettings(buttonSettings, listener); } public static void updateSoloLinkControllerMode(ArduSolo arduSolo, @SoloControllerMode.ControllerMode int mode, ICommandListener listener) { if (!isSoloLinkFeatureAvailable(arduSolo, listener)) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.updateControllerMode(mode, listener); } public static void updateSoloControllerUnit(ArduSolo arduSolo, @SoloControllerUnits.ControllerUnit String unit, ICommandListener listener){ if(!isSoloLinkFeatureAvailable(arduSolo, listener)) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.updateControllerUnit(unit, listener); } public static void updateSoloLinkTxPowerComplianceCountry(ArduSolo arduSolo, String compliantCountry, ICommandListener listener){ if(!isSoloLinkFeatureAvailable(arduSolo, listener)) return; final SoloComp soloComp = arduSolo.getSoloComp(); soloComp.updateTxPowerComplianceCountry(compliantCountry, listener); } }