Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.93 KB | None | 0 0
  1. package com.dji.simulatorDemo;
  2.  
  3. import android.Manifest;
  4. import android.app.Activity;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.os.Handler;
  10. import android.os.Looper;
  11. import android.os.Build;
  12. import android.support.v4.app.ActivityCompat;
  13. import android.os.Bundle;
  14. import android.util.Log;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.TextView;
  18. import android.widget.Toast;
  19.  
  20. import java.io.IOException;
  21. import java.net.InetAddress;
  22. import java.net.MulticastSocket;
  23. import java.util.Timer;
  24. import java.util.TimerTask;
  25.  
  26. import dji.common.flightcontroller.DJIFlightControllerCurrentState;
  27. import dji.common.flightcontroller.DJIVirtualStickFlightControlData;
  28. import dji.common.util.DJICommonCallbacks;
  29. import dji.sdk.flightcontroller.DJIFlightController;
  30. import dji.sdk.flightcontroller.DJIFlightControllerDelegate;
  31. import dji.sdk.products.DJIAircraft;
  32. import dji.sdk.base.DJIBaseProduct;
  33. import dji.common.error.DJIError;
  34.  
  35.  
  36. public class MainActivity extends Activity implements View.OnClickListener {
  37.  
  38. private static final String TAG = MainActivity.class.getName();
  39.  
  40. private DJIFlightController mFlightController;
  41.  
  42. protected TextView mConnectStatusTextView;
  43.  
  44. private Button mBtnEnableVirtualStick;
  45. private Button mBtnDisableVirtualStick;
  46. private Button mBtnTakeOff;
  47. private Button mBtnLand;
  48. private Button mBtnMove;
  49.  
  50. private TextView mTextView;
  51. private Timer mSendVirtualStickDataTimer;
  52.  
  53. private float mPitch;
  54. private float mRoll;
  55. private float mYaw;
  56. private float mThrottle;
  57.  
  58. @Override
  59. protected void onCreate(Bundle savedInstanceState) {
  60. super.onCreate(savedInstanceState);
  61. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  62. ActivityCompat.requestPermissions(this,
  63. new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.VIBRATE,
  64. Manifest.permission.INTERNET, Manifest.permission.ACCESS_WIFI_STATE,
  65. Manifest.permission.WAKE_LOCK, Manifest.permission.ACCESS_COARSE_LOCATION,
  66. Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_FINE_LOCATION,
  67. Manifest.permission.CHANGE_WIFI_STATE, Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
  68. Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SYSTEM_ALERT_WINDOW,
  69. Manifest.permission.READ_PHONE_STATE,
  70. }
  71. , 1);
  72. }
  73.  
  74. setContentView(R.layout.activity_main);
  75. initUI();
  76.  
  77.  
  78. IntentFilter filter = new IntentFilter();
  79. filter.addAction(DJISimulatorApplication.FLAG_CONNECTION_CHANGE);
  80. registerReceiver(mReceiver, filter);
  81.  
  82.  
  83. UDPConnection udpConnection = new UDPConnection(this);
  84. MulticastSocket socket = null;
  85. InetAddress addrs = null;
  86. try {
  87. socket = new MulticastSocket(13002);
  88. addrs = InetAddress.getByName("224.0.0.22");
  89. socket.joinGroup(addrs);
  90. udpConnection.stopTimer();
  91. udpConnection.startTimer(socket);
  92. udpConnection.scheduleTimer( 1, 30 );
  93. Log.i("JSON", "Leyendo JSON UDP");
  94.  
  95. } catch (IOException e) {
  96. e.printStackTrace();
  97. }
  98.  
  99.  
  100.  
  101. }
  102.  
  103.  
  104.  
  105.  
  106. protected BroadcastReceiver mReceiver = new BroadcastReceiver() {
  107.  
  108. @Override
  109. public void onReceive(Context context, Intent intent) {
  110. updateTitleBar();
  111. }
  112. };
  113.  
  114. public void showToast(final String msg) {
  115. runOnUiThread(new Runnable() {
  116. public void run() {
  117. Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
  118. }
  119. });
  120. }
  121.  
  122. private void updateTitleBar() {
  123. if(mConnectStatusTextView == null) return;
  124. boolean ret = false;
  125. DJIBaseProduct product = DJISimulatorApplication.getProductInstance();
  126. if (product != null) {
  127. if(product.isConnected()) {
  128. mConnectStatusTextView.setText(DJISimulatorApplication.getProductInstance().getModel() + " Connected");
  129. ret = true;
  130. } else {
  131. if(product instanceof DJIAircraft) {
  132. DJIAircraft aircraft = (DJIAircraft)product;
  133. if(aircraft.getRemoteController() != null && aircraft.getRemoteController().isConnected()) {
  134. mConnectStatusTextView.setText("only RC Connected");
  135. ret = true;
  136. }
  137. }
  138. }
  139. }
  140.  
  141. if(!ret) {
  142. mConnectStatusTextView.setText("Disconnected");
  143. }
  144. }
  145.  
  146. @Override
  147. public void onResume() {
  148. Log.e(TAG, "onResume");
  149. super.onResume();
  150. updateTitleBar();
  151. initFlightController();
  152. }
  153.  
  154. @Override
  155. public void onPause() {
  156. Log.e(TAG, "onPause");
  157. super.onPause();
  158. }
  159.  
  160. @Override
  161. public void onStop() {
  162. Log.e(TAG, "onStop");
  163. super.onStop();
  164. }
  165.  
  166. public void onReturn(View view){
  167. Log.e(TAG, "onReturn");
  168. this.finish();
  169. }
  170.  
  171. @Override
  172. protected void onDestroy() {
  173. Log.e(TAG, "onDestroy");
  174. unregisterReceiver(mReceiver);
  175. if (null != mSendVirtualStickDataTimer) {
  176.  
  177. mSendVirtualStickDataTimer.cancel();
  178. mSendVirtualStickDataTimer.purge();
  179. mSendVirtualStickDataTimer = null;
  180. }
  181. super.onDestroy();
  182. }
  183.  
  184.  
  185. private void initFlightController() {
  186. DJIAircraft aircraft = DJISimulatorApplication.getAircraftInstance();
  187.  
  188. showToast(aircraft + " AirCraft");
  189. if (aircraft == null || !aircraft.isConnected()) {
  190. showToast("Disconnected");
  191. mFlightController = null;
  192. return;
  193. } else {
  194. mFlightController = aircraft.getFlightController();
  195. mFlightController.setUpdateSystemStateCallback(new DJIFlightControllerDelegate.FlightControllerUpdateSystemStateCallback() {
  196. @Override
  197. public void onResult(final DJIFlightControllerCurrentState djiFlightControllerCurrentState) {
  198. new Handler(Looper.getMainLooper()).post(new Runnable() {
  199. @Override
  200. public void run() {
  201.  
  202. mPitch = (float) djiFlightControllerCurrentState.getAttitude().pitch;
  203. mYaw = (float)djiFlightControllerCurrentState.getAttitude().yaw;
  204. mRoll = (float)djiFlightControllerCurrentState.getAttitude().roll;
  205.  
  206. String yaw = String.format("%.2f", djiFlightControllerCurrentState.getAttitude().yaw);
  207. String pitch = String.format("%.2f", djiFlightControllerCurrentState.getAttitude().pitch);
  208. String roll = String.format("%.2f", djiFlightControllerCurrentState.getAttitude().roll);
  209. String positionX = String.format("%.2f", djiFlightControllerCurrentState.getAircraftLocation().getAltitude());
  210. String positionY = String.format("%.2f", djiFlightControllerCurrentState.getAircraftLocation().getLatitude());
  211. String positionZ = String.format("%.2f", djiFlightControllerCurrentState.getAircraftLocation().getLongitude());
  212. mTextView.setText("Yaw : " + yaw + ", Pitch : " + pitch + ", Roll : " + roll + "\n" + ", PosX : " + positionX +
  213. ", PosY : " + positionY +
  214. ", PosZ : " + positionZ);
  215. }
  216. });
  217.  
  218. }
  219. });
  220.  
  221.  
  222. }
  223.  
  224. }
  225.  
  226. private void initUI() {
  227.  
  228. mBtnEnableVirtualStick = (Button) findViewById(R.id.btn_enable_virtual_stick);
  229. mBtnDisableVirtualStick = (Button) findViewById(R.id.btn_disable_virtual_stick);
  230. mBtnTakeOff = (Button) findViewById(R.id.btn_take_off);
  231. mBtnLand = (Button) findViewById(R.id.btn_land);
  232. mBtnMove = (Button) findViewById(R.id.btn_move);
  233. mTextView = (TextView) findViewById(R.id.textview_simulator);
  234. mConnectStatusTextView = (TextView) findViewById(R.id.ConnectStatusTextView);
  235.  
  236. mBtnEnableVirtualStick.setOnClickListener(this);
  237. mBtnDisableVirtualStick.setOnClickListener(this);
  238. mBtnTakeOff.setOnClickListener(this);
  239. mBtnLand.setOnClickListener(this);
  240. mBtnMove.setOnClickListener(this);
  241.  
  242. }
  243.  
  244. @Override
  245. public void onClick(View v) {
  246. initFlightController();
  247. showToast(mFlightController + " mFlightController ");
  248.  
  249. switch (v.getId()) {
  250. case R.id.btn_enable_virtual_stick:
  251.  
  252. if (mFlightController != null){
  253. mFlightController.enableVirtualStickControlMode(
  254. new DJICommonCallbacks.DJICompletionCallback() {
  255. @Override
  256. public void onResult(DJIError djiError) {
  257. if (djiError == null) {
  258. showToast("enableVirtualStickControlMode: success");
  259. } else {
  260. showToast(djiError.getDescription());
  261. }
  262. }
  263. }
  264. );
  265. }
  266. break;
  267.  
  268. case R.id.btn_disable_virtual_stick:
  269. if (mFlightController != null){
  270. mFlightController.disableVirtualStickControlMode(
  271. new DJICommonCallbacks.DJICompletionCallback() {
  272. @Override
  273. public void onResult(DJIError djiError) {
  274. if (djiError != null) {
  275. showToast(djiError.getDescription());
  276. } else {
  277. showToast("Disable Virtual Stick Success");
  278. }
  279. }
  280. }
  281. );
  282. }
  283. break;
  284.  
  285. case R.id.btn_take_off:
  286.  
  287.  
  288. if (mFlightController != null){
  289. mFlightController.takeOff(
  290. new DJICommonCallbacks.DJICompletionCallback() {
  291. @Override
  292. public void onResult(DJIError djiError) {
  293. if (djiError != null) {
  294. showToast("Error al despegar" + djiError.getDescription() + " " + djiError.toString());
  295. } else {
  296. showToast("Take off Success");
  297. }
  298. }
  299. }
  300. );
  301. }
  302.  
  303. break;
  304.  
  305. case R.id.btn_land:
  306. if (mFlightController != null){
  307.  
  308. mFlightController.autoLanding(
  309. new DJICommonCallbacks.DJICompletionCallback() {
  310. @Override
  311. public void onResult(DJIError djiError) {
  312. if (djiError != null) {
  313. showToast(djiError.getDescription());
  314. } else {
  315. showToast("AutoLand Started");
  316. }
  317. }
  318. }
  319. );
  320.  
  321. }
  322.  
  323. break;
  324.  
  325. case R.id.btn_move:
  326. if (mFlightController != null){
  327.  
  328. mThrottle= 1;
  329.  
  330.  
  331. Timer timer = new Timer();
  332. final DJIVirtualStickFlightControlData flightControlData =
  333. new DJIVirtualStickFlightControlData(mPitch + -2f ,
  334. mRoll, mYaw, mThrottle);
  335.  
  336. mFlightController.sendVirtualStickFlightControlData(flightControlData,
  337. new DJICommonCallbacks.DJICompletionCallback() {
  338. @Override
  339. public void onResult(DJIError error) {
  340. if (error == null) {
  341. showToast(" P " + mPitch + " R " + mRoll + " Y " +
  342. mYaw + " Th " + mThrottle );
  343. } else {
  344. showToast(error.getDescription());
  345. }
  346. }
  347. });
  348.  
  349.  
  350.  
  351. }
  352. break;
  353. default:
  354. break;
  355. }
  356. }
  357.  
  358.  
  359. public void takeOff(){
  360. initFlightController();
  361. if (mFlightController != null){
  362. mFlightController.takeOff(
  363. new DJICommonCallbacks.DJICompletionCallback() {
  364. @Override
  365. public void onResult(DJIError djiError) {
  366. if (djiError != null) {
  367. showToast("Error al despegar" + djiError.getDescription() + " " + djiError.toString());
  368. } else {
  369. showToast("Take off Success");
  370. }
  371. }
  372. }
  373. );
  374. }
  375. }
  376.  
  377. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement