package com.o3dr.android.client.apis.solo; import android.os.Bundle; import com.o3dr.android.client.Drone; import com.o3dr.android.client.utils.TxPowerComplianceCountries; import com.o3dr.services.android.lib.drone.attribute.error.CommandExecutionError; 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.model.AbstractCommandListener; import com.o3dr.services.android.lib.model.action.Action; import java.util.concurrent.ConcurrentHashMap; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_REFRESH_SOLO_VERSIONS; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_UPDATE_BUTTON_SETTINGS; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_UPDATE_CONTROLLER_MODE; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_UPDATE_CONTROLLER_UNIT; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_UPDATE_TX_POWER_COMPLIANCE_COUNTRY; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.ACTION_UPDATE_WIFI_SETTINGS; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_BUTTON_SETTINGS; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_CONTROLLER_MODE; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_CONTROLLER_UNIT; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_TX_POWER_COMPLIANT_COUNTRY_CODE; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_WIFI_PASSWORD; import static com.o3dr.services.android.lib.drone.companion.solo.action.SoloConfigActions.EXTRA_WIFI_SSID; /** * Created by Fredia Huya-Kouadio on 7/31/15. */ public class SoloConfigApi extends SoloApi { private static final ConcurrentHashMap<Drone, SoloConfigApi> soloConfigApiCache = new ConcurrentHashMap<>(); private static final Builder<SoloConfigApi> apiBuilder = new Builder<SoloConfigApi>() { @Override public SoloConfigApi build(Drone drone) { return new SoloConfigApi(drone); } }; /** * Retrieves a sololink api instance. * * @param drone target vehicle * @return a SoloLinkApi instance. */ public static SoloConfigApi getApi(final Drone drone) { return getApi(drone, soloConfigApiCache, apiBuilder); } protected SoloConfigApi(Drone drone) { super(drone); } /** * Updates the wifi settings for the solo vehicle. * * @param wifiSsid Updated wifi ssid * @param wifiPassword Updated wifi password * @param listener Register a callback to receive update of the command execution status. */ public void updateWifiSettings(String wifiSsid, String wifiPassword, AbstractCommandListener listener) { Bundle params = new Bundle(); params.putString(EXTRA_WIFI_SSID, wifiSsid); params.putString(EXTRA_WIFI_PASSWORD, wifiPassword); drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_WIFI_SETTINGS, params), listener); } /** * Updates the button settings for the solo vehicle. * * @param buttonSettings Updated button settings. * @param listener Register a callback to receive update of the command execution status. */ public void updateButtonSettings(SoloButtonSettingSetter buttonSettings, AbstractCommandListener listener) { Bundle params = new Bundle(); params.putParcelable(EXTRA_BUTTON_SETTINGS, buttonSettings); drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_BUTTON_SETTINGS, params), listener); } /** * Updates the controller mode (joystick mapping) * * @param controllerMode Controller mode. @see {@link com.o3dr.services.android.lib.drone.companion.solo.controller.SoloControllerMode.ControllerMode} * @param listener Register a callback to receive update of the command execution status. */ public void updateControllerMode(@SoloControllerMode.ControllerMode int controllerMode, AbstractCommandListener listener) { Bundle params = new Bundle(); params.putInt(EXTRA_CONTROLLER_MODE, controllerMode); drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_CONTROLLER_MODE, params), listener); } /** * Updates the tx power compliance to the specified country. * * @param compliantCountry Country code which the controller will be compliant. * @param listener Register a callback to receive update of the command execution status. */ public void updateTxPowerComplianceCountry(TxPowerComplianceCountries compliantCountry, AbstractCommandListener listener) { Bundle params = new Bundle(); params.putString(EXTRA_TX_POWER_COMPLIANT_COUNTRY_CODE, compliantCountry.name()); drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_TX_POWER_COMPLIANCE_COUNTRY, params), listener); } /** * Refresh the solo versions info. */ public void refreshSoloVersions(){ drone.performAsyncActionOnDroneThread(new Action(ACTION_REFRESH_SOLO_VERSIONS), null); } /** * Updates the controller unit system. * @param controllerUnit Controller unit system. @see {@link com.o3dr.services.android.lib.drone.companion.solo.controller.SoloControllerUnits.ControllerUnit} * @param listener Register a callback that receive update of the command execution status. */ public void updateControllerUnit(@SoloControllerUnits.ControllerUnit String controllerUnit, final AbstractCommandListener listener){ if(SoloControllerUnits.UNKNOWN.equals(controllerUnit)){ if(listener != null) { drone.post(new Runnable() { @Override public void run() { listener.onError(CommandExecutionError.COMMAND_DENIED); } }); } return; } Bundle params = new Bundle(); params.putString(EXTRA_CONTROLLER_UNIT, controllerUnit); drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_CONTROLLER_UNIT, params), listener); } }