Advertisement
Guest User

main

a guest
Apr 23rd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.95 KB | None | 0 0
  1. package com.airdurance.onboard;
  2.  
  3. import android.os.Handler;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.AdapterView;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.Button;
  10. import android.widget.Spinner;
  11. import android.widget.TextView;
  12. import android.widget.Toast;
  13.  
  14. import com.google.android.gms.common.ConnectionResult;
  15. import com.o3dr.android.client.ControlTower;
  16. import com.o3dr.android.client.Drone;
  17. import com.o3dr.android.client.interfaces.DroneListener;
  18. import com.o3dr.android.client.interfaces.TowerListener;
  19. import com.o3dr.services.android.lib.coordinate.LatLong;
  20. import com.o3dr.services.android.lib.coordinate.LatLongAlt;
  21. import com.o3dr.services.android.lib.drone.attribute.AttributeEvent;
  22. import com.o3dr.services.android.lib.drone.attribute.AttributeType;
  23. import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
  24. import com.o3dr.services.android.lib.drone.connection.ConnectionType;
  25. import com.o3dr.services.android.lib.drone.property.Altitude;
  26. import com.o3dr.services.android.lib.drone.property.Gps;
  27. import com.o3dr.services.android.lib.drone.property.Home;
  28. import com.o3dr.services.android.lib.drone.property.Speed;
  29. import com.o3dr.services.android.lib.drone.property.State;
  30. import com.o3dr.services.android.lib.drone.property.Type;
  31. import com.o3dr.services.android.lib.drone.property.VehicleMode;
  32.  
  33. import java.util.List;
  34.  
  35. public class MainActivity extends AppCompatActivity implements DroneListener, TowerListener {
  36.  
  37.     private ControlTower controlTower;
  38.  
  39.     private Drone drone;
  40.     private int droneType = Type.TYPE_UNKNOWN;
  41.     private final Handler handler = new Handler();
  42.     Spinner modeSelector;
  43.  
  44.     @Override
  45.     protected void onCreate(Bundle savedInstanceState) {
  46.         super.onCreate(savedInstanceState);
  47.         setContentView(R.layout.activity_main);
  48.  
  49.         // Initialize the service manager
  50.         this.controlTower = new ControlTower(getApplicationContext());
  51.        // this.serviceManager = new ServiceManager(getApplicationContext());
  52.         this.drone = new Drone(this);
  53.  
  54.         this.modeSelector = (Spinner)findViewById(R.id.modeSelect);
  55.         this.modeSelector.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
  56.             @Override
  57.             public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  58.                 onFlightModeSelected(view);
  59.             }
  60.             @Override
  61.             public void onNothingSelected(AdapterView<?> parent) {
  62.                 // Do nothing
  63.             }
  64.         });
  65.     }
  66.  
  67.  
  68.     public void onBtnConnectTap(View view) {
  69.         if(this.drone.isConnected()) {
  70.             this.drone.disconnect();
  71.         } else {
  72.             Bundle extraParams = new Bundle();
  73.             extraParams.putInt(ConnectionType.EXTRA_UDP_SERVER_PORT, 14550); // Set default port to 14550
  74.  
  75.             //ConnectionParameter connectionParams = new ConnectionParameter(ConnectionType.TYPE_UDP, extraParams);
  76.             ConnectionParameter connectionParameter = ConnectionParameter.newUdpConnection(14550, null);
  77.             //ConnectionParameter connectionParameter = new ConnectionParameter()
  78.             this.drone.connect(connectionParameter);
  79.         }
  80.     }
  81.  
  82.     protected void alertUser(String message) {
  83.         Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
  84.     }
  85.  
  86.     protected void updateConnectedButton(Boolean isConnected) {
  87.         Button connectButton = (Button)findViewById(R.id.btnConnect);
  88.         if (isConnected) {
  89.             connectButton.setText("Disconnect");
  90.         } else {
  91.             connectButton.setText("Connect");
  92.         }
  93.     }
  94.  
  95.  
  96.     @Override
  97.     public void onStart() {
  98.         super.onStart();
  99.         this.controlTower.connect(this);
  100.  
  101.     }
  102.  
  103.     @Override
  104.     public void onStop() {
  105.         super.onStop();
  106.  
  107.         if (this.drone.isConnected()) {
  108.             this.drone.disconnect();
  109.             updateConnectedButton(false);
  110.         }
  111.         this.controlTower.unregisterDrone(this.drone);
  112.  
  113.         this.controlTower.disconnect();
  114.     }
  115.  
  116.     // 3DR Services Listener
  117.     @Override
  118.     public void onTowerConnected() {
  119.         this.controlTower.registerDrone(this.drone, this.handler);
  120.         this.drone.registerDroneListener(this);
  121.     }
  122.  
  123.     @Override
  124.     public void onTowerDisconnected() {
  125.  
  126.     }
  127.  
  128.     @Override
  129.     public void onDroneEvent(String event, Bundle extras) {
  130.         switch (event) {
  131.             case AttributeEvent.STATE_CONNECTED:
  132.                 alertUser("Drone Connected");
  133.                 updateConnectedButton(this.drone.isConnected());
  134.                 break;
  135.  
  136.             case AttributeEvent.STATE_DISCONNECTED:
  137.                 alertUser("Drone Disconnected");
  138.                 updateConnectedButton(this.drone.isConnected());
  139.                 break;
  140.  
  141.             case AttributeEvent.STATE_VEHICLE_MODE:
  142.                 updateVehicleMode();
  143.                 break;
  144.  
  145.             case AttributeEvent.TYPE_UPDATED:
  146.                 Type newDroneType = this.drone.getAttribute(AttributeType.TYPE);
  147.                 if (newDroneType.getDroneType() != this.droneType) {
  148.                     this.droneType = newDroneType.getDroneType();
  149.                     updateVehicleModesForType(this.droneType);
  150.                 }
  151.                 break;
  152.  
  153.  
  154.             case AttributeEvent.SPEED_UPDATED:
  155.                 updateAltitude();
  156.                 updateSpeed();
  157.                 break;
  158.  
  159.             case AttributeEvent.HOME_UPDATED:
  160.                 updateDistanceFromHome();
  161.                 break;
  162.  
  163.             default:
  164.                 break;
  165.         }
  166.     }
  167.  
  168.    // @Override
  169.     public void onDroneConnectionFailed(ConnectionResult result) {
  170.  
  171.     }
  172.  
  173.     @Override
  174.     public void onDroneServiceInterrupted(String errorMsg) {
  175.  
  176.     }
  177.  
  178.  
  179.     public void onFlightModeSelected(View view) {
  180.         VehicleMode vehicleMode = (VehicleMode) this.modeSelector.getSelectedItem();
  181.         State vehicleState = this.drone.getAttribute(AttributeType.STATE);
  182.        // ve.changeVehicleMode(vehicleMode);
  183.         vehicleState.setVehicleMode(vehicleMode);
  184.  
  185.     }
  186.  
  187.     protected void updateVehicleModesForType(int droneType) {
  188.         List<VehicleMode> vehicleModes =  VehicleMode.getVehicleModePerDroneType(droneType);
  189.         ArrayAdapter<VehicleMode> vehicleModeArrayAdapter = new ArrayAdapter<VehicleMode>(this, android.R.layout.simple_spinner_item, vehicleModes);
  190.         vehicleModeArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  191.         this.modeSelector.setAdapter(vehicleModeArrayAdapter);
  192.     }
  193.  
  194.     protected void updateVehicleMode() {
  195.         State vehicleState = this.drone.getAttribute(AttributeType.STATE);
  196.         VehicleMode vehicleMode = vehicleState.getVehicleMode();
  197.         ArrayAdapter arrayAdapter = (ArrayAdapter)this.modeSelector.getAdapter();
  198.         this.modeSelector.setSelection(arrayAdapter.getPosition(vehicleMode));
  199.     }
  200.  
  201.     protected void updateAltitude() {
  202.         TextView altitudeTextView = (TextView)findViewById(R.id.altitudeValueTextView);
  203.         Altitude droneAltitude = this.drone.getAttribute(AttributeType.ALTITUDE);
  204.         altitudeTextView.setText(String.format("%3.1f", droneAltitude.getAltitude()) + "m");
  205.     }
  206.  
  207.     protected void updateSpeed() {
  208.         TextView speedTextView = (TextView)findViewById(R.id.speedValueTextView);
  209.         Speed droneSpeed = this.drone.getAttribute(AttributeType.SPEED);
  210.         speedTextView.setText(String.format("%3.1f", droneSpeed.getGroundSpeed()) + "m/s");
  211.     }
  212.  
  213.     protected void updateDistanceFromHome() {
  214.         TextView distanceTextView = (TextView)findViewById(R.id.distanceValueTextView);
  215.         Altitude droneAltitude = this.drone.getAttribute(AttributeType.ALTITUDE);
  216.         double vehicleAltitude = droneAltitude.getAltitude();
  217.         Gps droneGps = this.drone.getAttribute(AttributeType.GPS);
  218.         LatLong vehiclePosition = droneGps.getPosition();
  219.  
  220.         double distanceFromHome =  0;
  221.  
  222.         if (droneGps.isValid()) {
  223.             LatLongAlt vehicle3DPosition = new LatLongAlt(vehiclePosition.getLatitude(), vehiclePosition.getLongitude(), vehicleAltitude);
  224.             Home droneHome = this.drone.getAttribute(AttributeType.HOME);
  225.             distanceFromHome = distanceBetweenPoints(droneHome.getCoordinate(), vehicle3DPosition);
  226.         } else {
  227.             distanceFromHome = 0;
  228.         }
  229.  
  230.         distanceTextView.setText(String.format("%3.1f", distanceFromHome) + "m");
  231.     }
  232.  
  233.     protected double distanceBetweenPoints(LatLongAlt pointA, LatLongAlt pointB) {
  234.         if (pointA == null || pointB == null) {
  235.             return 0;
  236.         }
  237.         double dx = pointA.getLatitude() - pointB.getLatitude();
  238.         double dy  = pointA.getLongitude() - pointB.getLongitude();
  239.         double dz = pointA.getAltitude() - pointB.getAltitude();
  240.         return Math.sqrt(dx*dx + dy*dy + dz*dz);
  241.     }
  242.  
  243.  
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement