X-Git-Url: https://rtime.felk.cvut.cz/gitweb/orte.git/blobdiff_plain/6ad5121b762a8fba0b4a14e8516d3f6a3e4e0800..ea4f136bb262057076830be2e9150c4bab15f255:/orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java diff --git a/orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java b/orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java index 36f38c0..512f58d 100644 --- a/orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java +++ b/orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java @@ -4,27 +4,42 @@ import org.ocera.orte.DomainApp; import org.ocera.orte.Manager; import android.app.Activity; -import android.app.Dialog; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnDismissListener; +import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.net.wifi.WifiManager.WifiLock; +import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.os.PowerManager.WakeLock; +import android.text.format.Formatter; +import android.view.GestureDetector; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; import android.widget.EditText; +import android.widget.TextView; public class MainActivity extends Activity { - private Dialog voltageDialog = null; + private AlertDialog voltageDialog = null; + private AlertDialog aboutDialog = null; + private AlertDialog managersDialog = null; + private EditText managersField = null; + private TextView ownIP = null; + private NetworkInfo wifiInfoTask = null; static EditText voltage33 = null; static EditText voltage50 = null; static EditText voltage80 = null; @@ -51,33 +66,30 @@ public class MainActivity extends Activity { }; private Manager manager = null; - private String[] mgrs = {"192.168.1.5","192.168.1.8","192.168.1.29","10.1.1.1"}; + private String mgrs = null; private MotionSpeedPublish motion_speed_publ = null; private MotionSpeedSubscribe motion_speed_subs = null; private HokuyoScanSubscribe hokuyo_scan = null; private PwrVoltageSubscribe pwr_voltage = null; + private MagnetCmdPublish magnet_cmd = null; + private CraneCmdPublish crane_cmd = null; private SensorManager mSensorManager = null; private Sensor mGravity = null; private SensorEventListener accel = null; private PowerManager mPowerManager = null; + private WifiManager mWifiManager = null; private WakeLock mWakeLock = null; + private WakeLock mDimLock = null; + private WifiLock mWifiLock = null; private DomainApp appDomain = null; private HokuyoView hokuyo_view = null; - private MenuItem speed_publ_item = null; - private MenuItem speed_subs_item = null; - private MenuItem hokuyo_item = null; + private SharedPreferences prefs = null; + private GestureDetector gDetector = null; static { System.loadLibrary("jorte"); } - @Override - protected void onResume() { - super.onResume(); - - mWakeLock.acquire(); - } - @Override protected void onPause() { super.onPause(); @@ -86,35 +98,43 @@ public class MainActivity extends Activity { motion_speed_publ.cancel(); mSensorManager.unregisterListener(accel); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); - speed_publ_item.setTitle("Start motion control"); + mDimLock.release(); + mWifiLock.release(); } if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) { hokuyo_view.runMotion(false); motion_speed_subs.cancel(); hokuyo_view.invalidate(); - speed_subs_item.setTitle("Start motion monitor"); + mWakeLock.release(); + mWifiLock.release(); } if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) { hokuyo_view.run(false); hokuyo_scan.cancel(); hokuyo_view.invalidate(); - hokuyo_item.setTitle("Start LRF"); + mWakeLock.release(); + mWifiLock.release(); } - - if (pwr_voltage != null && !pwr_voltage.isCancelled()) { - if (voltageDialog.isShowing()) - voltageDialog.dismiss(); - pwr_voltage.cancel(); - } - - mWakeLock.release(); } @Override protected void onDestroy() { super.onDestroy(); + + if (pwr_voltage != null && !pwr_voltage.isCancelled()) { + if (voltageDialog.isShowing()) + voltageDialog.dismiss(); + } + + if (crane_cmd != null && !crane_cmd.isCancelled()) { + crane_cmd.cancel(); + } + + if (magnet_cmd != null && !crane_cmd.isCancelled()) { + magnet_cmd.cancel(); + } if (appDomain != null) { appDomain.destroy(); @@ -132,33 +152,102 @@ public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.hokuyo_view); - voltageDialog = new Dialog(this,R.style.voltage_dialog); - voltageDialog.setCancelable(false); - voltageDialog.setContentView(R.layout.status_dialog); - Button okButton = (Button)voltageDialog.findViewById(R.id.button1); - okButton.setOnClickListener(new OnClickListener() { + mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); + mWakeLock = mPowerManager.newWakeLock( + PowerManager.SCREEN_BRIGHT_WAKE_LOCK, + getClass().getName() + " Bright"); + mDimLock = mPowerManager.newWakeLock( + PowerManager.SCREEN_DIM_WAKE_LOCK, + getClass().getName() + " Dim"); + + mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); + mWifiLock = mWifiManager.createWifiLock( + android.os.Build.VERSION.SDK_INT >= 12 + ? WifiManager.WIFI_MODE_FULL_HIGH_PERF + : WifiManager.WIFI_MODE_FULL, getClass().getName()); + + prefs = getSharedPreferences("prefs", 0); + mgrs = prefs.getString("managers", "10.1.1.1"); + + AlertDialog.Builder voltageBuilder = new AlertDialog.Builder(this); + LayoutInflater inflater = getLayoutInflater(); + View voltageView = inflater.inflate(R.layout.status_dialog, null); + voltageBuilder.setView(voltageView); + voltageBuilder.setPositiveButton("OK",null); + voltageBuilder.setTitle("Voltages"); + voltageDialog = voltageBuilder.create(); + voltageDialog.setOnDismissListener(new OnDismissListener(){ @Override - public void onClick(View arg0) { + public void onDismiss(DialogInterface arg0) { voltageDialog.dismiss(); pwr_voltage.cancel(); + mDimLock.release(); } }); - voltage33 = (EditText)voltageDialog.findViewById(R.id.editText1); - voltage50 = (EditText)voltageDialog.findViewById(R.id.editText2); - voltage80 = (EditText)voltageDialog.findViewById(R.id.editText3); - voltageBAT = (EditText)voltageDialog.findViewById(R.id.editText4); - + voltage33 = (EditText)voltageView.findViewById(R.id.editText1); + voltage50 = (EditText)voltageView.findViewById(R.id.editText2); + voltage80 = (EditText)voltageView.findViewById(R.id.editText3); + voltageBAT = (EditText)voltageView.findViewById(R.id.editText4); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + View aboutView = inflater.inflate(R.layout.about_dialog, null); + builder.setView(aboutView); + builder.setPositiveButton("OK", null); + aboutDialog = builder.create(); + + AlertDialog.Builder managersBuilder = new AlertDialog.Builder(this); + View managersView = inflater.inflate(R.layout.managers_view, null); + ownIP = (TextView)managersView.findViewById(R.id.ownIP); + managersField = (EditText)managersView.findViewById(R.id.managers); + managersField.setText(mgrs); + + managersBuilder.setView(managersView); + managersBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SharedPreferences.Editor editor = prefs.edit(); + mgrs = managersField.getText().toString(); + editor.putString("managers", mgrs); + editor.commit(); + + if (manager != null) + manager.destroy(); + manager = new Manager(mgrs); + + managersDialog.dismiss(); + } + }); + managersBuilder.setNeutralButton("Cancel", null); + managersBuilder.setTitle("Set fellow managers"); + managersDialog = managersBuilder.create(); + managersDialog.setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss(DialogInterface arg0) { + managersField.setText(mgrs); + wifiInfoTask.cancel(false); + } + }); + mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); - mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); - mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); - hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view); - + gDetector = new GestureDetector(hokuyo_view.getContext(), new HokuyoGestures()); + hokuyo_view.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return gDetector.onTouchEvent(event); + } + + }); + manager = new Manager(mgrs); appDomain = new DomainApp(); + magnet_cmd = new MagnetCmdPublish(appDomain); + magnet_cmd.start(); + crane_cmd = new CraneCmdPublish(appDomain); + crane_cmd.start(); } @Override @@ -170,72 +259,40 @@ public class MainActivity extends Activity { @Override public boolean onOptionsItemSelected (MenuItem item) { - System.out.println(item.getTitle()); - - if(item.getTitle().equals("Start motion control")) { - accel = new HandleAccelerometer(); - mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME); - if (motion_speed_publ == null) - motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain); - motion_speed_publ.start(); - speed_publ_item = item; - this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - item.setTitle("Stop motion control"); - } - else if (item.getTitle().equals("Stop motion control")) { - mSensorManager.unregisterListener(accel); - motion_speed_publ.cancel(); - this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); - item.setTitle("Start motion control"); - } - else if (item.getTitle().equals("Start motion monitor")) { - if (motion_speed_subs == null) - motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view); - motion_speed_subs.start(); - hokuyo_view.runMotion(true); - hokuyo_view.invalidate(); - speed_subs_item = item; - item.setTitle("Stop motion monitor"); - } - else if (item.getTitle().equals("Stop motion monitor")) { - hokuyo_view.runMotion(false); - motion_speed_subs.cancel(); - hokuyo_view.invalidate(); - item.setTitle("Start motion monitor"); + if (item.getTitle().equals("Crane: up")) { + crane_cmd.send(0x190); + item.setTitle("Crane: down"); } - else if (item.getTitle().equals("Start LRF")) { - if (hokuyo_scan == null) - hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view); - hokuyo_scan.start(); - hokuyo_view.run(true); - hokuyo_view.invalidate(); - hokuyo_item = item; - item.setTitle("Stop LRF"); + else if (item.getTitle().equals("Crane: down")) { + crane_cmd.send(0x100); + item.setTitle("Crane: up"); } - else if (item.getTitle().equals("Stop LRF")) { - hokuyo_view.run(false); - hokuyo_scan.cancel(); - hokuyo_view.invalidate(); - item.setTitle("Start LRF"); - } - else if (item.getTitle().equals("Lift up")) { - - } - else if (item.getTitle().equals("Lift down")) { - - } - else if (item.getTitle().equals("Magnet on")) { - - } - else if (item.getTitle().equals("Magnet off")) { - + else if (item.getTitle().equals("Magnet")) { + if (!item.isChecked()) { + magnet_cmd.send(1); + item.setChecked(true); + } + else { + magnet_cmd.send(0); + item.setChecked(false); + } } else if (item.getTitle().equals("Voltage monitor")) { + mDimLock.acquire(); if (pwr_voltage == null) pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler); pwr_voltage.start(); voltageDialog.show(); } + else if (item.getTitle().equals("Fellow managers")) { + wifiInfoTask = new NetworkInfo(); + + managersDialog.show(); + wifiInfoTask.execute(); + } + else if (item.getTitle().equals("About")) { + aboutDialog.show(); + } else if (item.getTitle().equals("Exit")) { finish(); } @@ -256,4 +313,129 @@ public class MainActivity extends Activity { } } } + +// hokuyo_view.setOnTouchListener(new View.OnTouchListener() { + private class HokuyoGestures extends GestureDetector.SimpleOnGestureListener { + + @Override + public boolean onSingleTapConfirmed(MotionEvent event) { + // urceni orientace HokuyoView a poctu pixelu, ktere zabira hokuyo + double norm = (double)hokuyo_view.getWidth()/(2*HokuyoView.COSINUS); + boolean isVertical = true; + if (norm > hokuyo_view.getHeight()) { + norm = HokuyoView.COSINUS*hokuyo_view.getHeight()*2; + norm = (hokuyo_view.getWidth() - norm)/2; + isVertical = false; + } + else + norm = hokuyo_view.getHeight() - norm; + + // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti + double normSpeed = ((double)(isVertical ? hokuyo_view.getWidth() : hokuyo_view.getHeight())) * 0.375; + + if (event.getYPrecision()*event.getY() < normSpeed && + event.getXPrecision()*event.getX() < normSpeed) { + if(!hokuyo_view.isRunningMotion()) { + mWakeLock.acquire(); + mWifiLock.acquire(); + if (motion_speed_subs == null) + motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view); + motion_speed_subs.start(); + hokuyo_view.runMotion(true); + hokuyo_view.invalidate(); + } + else { + hokuyo_view.runMotion(false); + motion_speed_subs.cancel(); + hokuyo_view.invalidate(); + mWakeLock.release(); + mWifiLock.release(); + } + } + + if ((isVertical && event.getYPrecision()*event.getY() > norm) || + (!isVertical && event.getXPrecision()*event.getX() > norm && + event.getXPrecision()*event.getX() < hokuyo_view.getWidth() - norm)) { + if (!hokuyo_view.isRunning()) { + mWakeLock.acquire(); + mWifiLock.acquire(); + hokuyo_view.setData(new int[681]); + if (hokuyo_scan == null) + hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view); + hokuyo_scan.start(); + hokuyo_view.run(true); + hokuyo_view.invalidate(); + } + else { + hokuyo_view.run(false); + hokuyo_scan.cancel(); + hokuyo_view.invalidate(); + mWakeLock.release(); + mWifiLock.release(); + } + } + return true; + } + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public void onLongPress(MotionEvent event) { + // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti + double normSpeed = ((double)(hokuyo_view.getHeight() < hokuyo_view.getWidth() ? hokuyo_view.getHeight() : hokuyo_view.getWidth())) * 0.375; + + if (event.getYPrecision()*event.getY() < normSpeed && + event.getXPrecision()*event.getX() < normSpeed) { + if (motion_speed_publ == null || motion_speed_publ.isCancelled()) { + mDimLock.acquire(); + mWifiLock.acquire(); + accel = new HandleAccelerometer(); + mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME); + if (motion_speed_publ == null) + motion_speed_publ = new MotionSpeedPublish(appDomain); + motion_speed_publ.start(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + else { + mSensorManager.unregisterListener(accel); + motion_speed_publ.cancel(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + mDimLock.release(); + mWifiLock.release(); + } + } + } + } + + private class NetworkInfo extends AsyncTask { + @Override + protected Void doInBackground(Void... arg0) { + while (!isCancelled()) { + WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); + int ip = wifiInfo.getIpAddress(); + String ipAddress = Formatter.formatIpAddress(ip); + String ssid = wifiInfo.getSSID(); + + publishProgress("\nOwn IP Address: " + ipAddress + "\nNetwork SSID: " + ssid); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + return null; + } + + @Override + protected void onProgressUpdate(String... values) { + super.onProgressUpdate(values); + + ownIP.setText(values[0]); + } + } }