Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.airdurance.onboard;
- import android.os.Handler;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.Spinner;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.google.android.gms.common.ConnectionResult;
- import com.o3dr.android.client.ControlTower;
- import com.o3dr.android.client.Drone;
- import com.o3dr.android.client.interfaces.DroneListener;
- import com.o3dr.android.client.interfaces.TowerListener;
- import com.o3dr.services.android.lib.coordinate.LatLong;
- import com.o3dr.services.android.lib.coordinate.LatLongAlt;
- import com.o3dr.services.android.lib.drone.attribute.AttributeEvent;
- import com.o3dr.services.android.lib.drone.attribute.AttributeType;
- import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
- import com.o3dr.services.android.lib.drone.connection.ConnectionType;
- import com.o3dr.services.android.lib.drone.property.Altitude;
- import com.o3dr.services.android.lib.drone.property.Gps;
- import com.o3dr.services.android.lib.drone.property.Home;
- import com.o3dr.services.android.lib.drone.property.Speed;
- import com.o3dr.services.android.lib.drone.property.State;
- import com.o3dr.services.android.lib.drone.property.Type;
- import com.o3dr.services.android.lib.drone.property.VehicleMode;
- import java.util.List;
- public class MainActivity extends AppCompatActivity implements DroneListener, TowerListener {
- private ControlTower controlTower;
- private Drone drone;
- private int droneType = Type.TYPE_UNKNOWN;
- private final Handler handler = new Handler();
- Spinner modeSelector;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // Initialize the service manager
- this.controlTower = new ControlTower(getApplicationContext());
- // this.serviceManager = new ServiceManager(getApplicationContext());
- this.drone = new Drone(this);
- this.modeSelector = (Spinner)findViewById(R.id.modeSelect);
- this.modeSelector.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- onFlightModeSelected(view);
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- // Do nothing
- }
- });
- }
- public void onBtnConnectTap(View view) {
- if(this.drone.isConnected()) {
- this.drone.disconnect();
- } else {
- Bundle extraParams = new Bundle();
- extraParams.putInt(ConnectionType.EXTRA_UDP_SERVER_PORT, 14550); // Set default port to 14550
- //ConnectionParameter connectionParams = new ConnectionParameter(ConnectionType.TYPE_UDP, extraParams);
- ConnectionParameter connectionParameter = ConnectionParameter.newUdpConnection(14550, null);
- //ConnectionParameter connectionParameter = new ConnectionParameter()
- this.drone.connect(connectionParameter);
- }
- }
- protected void alertUser(String message) {
- Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
- }
- protected void updateConnectedButton(Boolean isConnected) {
- Button connectButton = (Button)findViewById(R.id.btnConnect);
- if (isConnected) {
- connectButton.setText("Disconnect");
- } else {
- connectButton.setText("Connect");
- }
- }
- @Override
- public void onStart() {
- super.onStart();
- this.controlTower.connect(this);
- }
- @Override
- public void onStop() {
- super.onStop();
- if (this.drone.isConnected()) {
- this.drone.disconnect();
- updateConnectedButton(false);
- }
- this.controlTower.unregisterDrone(this.drone);
- this.controlTower.disconnect();
- }
- // 3DR Services Listener
- @Override
- public void onTowerConnected() {
- this.controlTower.registerDrone(this.drone, this.handler);
- this.drone.registerDroneListener(this);
- }
- @Override
- public void onTowerDisconnected() {
- }
- @Override
- public void onDroneEvent(String event, Bundle extras) {
- switch (event) {
- case AttributeEvent.STATE_CONNECTED:
- alertUser("Drone Connected");
- updateConnectedButton(this.drone.isConnected());
- break;
- case AttributeEvent.STATE_DISCONNECTED:
- alertUser("Drone Disconnected");
- updateConnectedButton(this.drone.isConnected());
- break;
- case AttributeEvent.STATE_VEHICLE_MODE:
- updateVehicleMode();
- break;
- case AttributeEvent.TYPE_UPDATED:
- Type newDroneType = this.drone.getAttribute(AttributeType.TYPE);
- if (newDroneType.getDroneType() != this.droneType) {
- this.droneType = newDroneType.getDroneType();
- updateVehicleModesForType(this.droneType);
- }
- break;
- case AttributeEvent.SPEED_UPDATED:
- updateAltitude();
- updateSpeed();
- break;
- case AttributeEvent.HOME_UPDATED:
- updateDistanceFromHome();
- break;
- default:
- break;
- }
- }
- // @Override
- public void onDroneConnectionFailed(ConnectionResult result) {
- }
- @Override
- public void onDroneServiceInterrupted(String errorMsg) {
- }
- public void onFlightModeSelected(View view) {
- VehicleMode vehicleMode = (VehicleMode) this.modeSelector.getSelectedItem();
- State vehicleState = this.drone.getAttribute(AttributeType.STATE);
- // ve.changeVehicleMode(vehicleMode);
- vehicleState.setVehicleMode(vehicleMode);
- }
- protected void updateVehicleModesForType(int droneType) {
- List<VehicleMode> vehicleModes = VehicleMode.getVehicleModePerDroneType(droneType);
- ArrayAdapter<VehicleMode> vehicleModeArrayAdapter = new ArrayAdapter<VehicleMode>(this, android.R.layout.simple_spinner_item, vehicleModes);
- vehicleModeArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- this.modeSelector.setAdapter(vehicleModeArrayAdapter);
- }
- protected void updateVehicleMode() {
- State vehicleState = this.drone.getAttribute(AttributeType.STATE);
- VehicleMode vehicleMode = vehicleState.getVehicleMode();
- ArrayAdapter arrayAdapter = (ArrayAdapter)this.modeSelector.getAdapter();
- this.modeSelector.setSelection(arrayAdapter.getPosition(vehicleMode));
- }
- protected void updateAltitude() {
- TextView altitudeTextView = (TextView)findViewById(R.id.altitudeValueTextView);
- Altitude droneAltitude = this.drone.getAttribute(AttributeType.ALTITUDE);
- altitudeTextView.setText(String.format("%3.1f", droneAltitude.getAltitude()) + "m");
- }
- protected void updateSpeed() {
- TextView speedTextView = (TextView)findViewById(R.id.speedValueTextView);
- Speed droneSpeed = this.drone.getAttribute(AttributeType.SPEED);
- speedTextView.setText(String.format("%3.1f", droneSpeed.getGroundSpeed()) + "m/s");
- }
- protected void updateDistanceFromHome() {
- TextView distanceTextView = (TextView)findViewById(R.id.distanceValueTextView);
- Altitude droneAltitude = this.drone.getAttribute(AttributeType.ALTITUDE);
- double vehicleAltitude = droneAltitude.getAltitude();
- Gps droneGps = this.drone.getAttribute(AttributeType.GPS);
- LatLong vehiclePosition = droneGps.getPosition();
- double distanceFromHome = 0;
- if (droneGps.isValid()) {
- LatLongAlt vehicle3DPosition = new LatLongAlt(vehiclePosition.getLatitude(), vehiclePosition.getLongitude(), vehicleAltitude);
- Home droneHome = this.drone.getAttribute(AttributeType.HOME);
- distanceFromHome = distanceBetweenPoints(droneHome.getCoordinate(), vehicle3DPosition);
- } else {
- distanceFromHome = 0;
- }
- distanceTextView.setText(String.format("%3.1f", distanceFromHome) + "m");
- }
- protected double distanceBetweenPoints(LatLongAlt pointA, LatLongAlt pointB) {
- if (pointA == null || pointB == null) {
- return 0;
- }
- double dx = pointA.getLatitude() - pointB.getLatitude();
- double dy = pointA.getLongitude() - pointB.getLongitude();
- double dz = pointA.getAltitude() - pointB.getAltitude();
- return Math.sqrt(dx*dx + dy*dy + dz*dz);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement