package org.ocera.orte.demo;
import org.ocera.orte.DomainApp;
-import org.ocera.orte.JOrte;
import org.ocera.orte.Manager;
-import org.ocera.orte.Publication;
-import org.ocera.orte.types.DomainProp;
-import org.ocera.orte.types.NtpTime;
-import org.ocera.orte.types.ORTEConstant;
-import org.ocera.orte.types.PublProp;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.Context;
+import android.content.DialogInterface;
+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.os.AsyncTask;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiManager.WifiLock;
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.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
-import android.widget.Button;
+import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
-
- private Button start_mgr = null;
- private Button stop_mgr = null;
- private Button start_pub = null;
- private Button stop_pub = null;
- private TextView textview = null;
+ private AlertDialog voltageDialog = null;
+ private AlertDialog aboutDialog = null;
+ private AlertDialog managersDialog = null;
+ private EditText managersField = null;
+ static EditText voltage33 = null;
+ static EditText voltage50 = null;
+ static EditText voltage80 = null;
+ static EditText voltageBAT = null;
+ static Handler dialogHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ double[] values = msg.getData().getDoubleArray("voltages");
+ if (values != null) {
+ if (voltage33 != null) {
+ voltage33.setText(Double.toString(values[0]));
+ }
+ if (voltage50 != null) {
+ voltage50.setText(Double.toString(values[1]));
+ }
+ if (voltage80 != null) {
+ voltage80.setText(Double.toString(values[2]));
+ }
+ if (voltageBAT != null) {
+ voltageBAT.setText(Double.toString(values[3]));
+ }
+ }
+ }
+ };
private Manager manager = null;
- private AsyncTask<Void, Short, Void> publisher = null;
-
+ 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 float accelData[] = new float[2];
- private Object lock = new Object();
-
private PowerManager mPowerManager = null;
+ private WifiManager mWifiManager = null;
private WakeLock mWakeLock = 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;
static {
System.loadLibrary("jorte");
}
-
- private class ComputeOnBackground extends AsyncTask<Void, Short, Void> {
-
- public static final int VMAX = 16000;
-
- private short[] calculateSpeed(float[] mAccel) {
- short[] speed = new short[2];
-
- double r=0.15;
- double angle = 0, lenght, v, omega;
-
- v = (double)mAccel[1]/mGravity.getMaximumRange();
- omega = (double)mAccel[0]/mGravity.getMaximumRange();
- lenght = Math.sqrt(Math.pow(v,2) + Math.pow(omega,2));
- /* if length is more than 1 is used unit circle */
- if (lenght >= 1) {
- /* computing new speed and omega */
- angle = Math.atan2(mAccel[1], mAccel[0]);
- v = Math.sin(angle);
- omega = Math.cos(angle);
- }
- omega *= 2;
-
- speed[0] = (short)(-((v + r*omega))*VMAX);
- speed[1] = (short)(-(v - r*omega)*VMAX);
-
- return speed;
- }
-
- @Override
- protected Void doInBackground(Void... arg0) {
- NtpTime persistence = new NtpTime(3);
- int strength = 100;
- MyEvents events = new MyEvents();
-
- DomainApp appDomain = new DomainApp(ORTEConstant.ORTE_DEFAULT_DOMAIN,
- DomainProp.defaultPropsCreate(),
- events,
- false);
-
- HelloMsg hellomsg = new HelloMsg(appDomain,"motion_speed");
-
- PublProp publProp = new PublProp(hellomsg.getTopic(),
- "motion_speed",
- persistence,
- strength);
-
- Publication pub = appDomain.createPublication(publProp,
- hellomsg);
-
- while(!isCancelled())
- {
- synchronized(lock) {
- short speed[] = calculateSpeed(accelData);
-
- hellomsg.left = speed[0];
- hellomsg.right = speed[1];
- pub.send(hellomsg);
- publishProgress(speed[0],speed[1]);
- }
- JOrte.sleepMs(100);
- }
-
- pub = null;
- System.gc();
- appDomain = null;
- System.gc();
-
- return null;
- }
-
- @Override
- protected void onProgressUpdate(Short... input) {
- textview.setText("Values: left = " + input[0] + ", right = " + input[1]);
- }
- }
-
- private class HandleAccelerometer implements SensorEventListener {
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy) {}
-
- @Override
- public void onSensorChanged(SensorEvent event) {
- if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
- synchronized(lock) {
- accelData[0] = event.values[0];
- accelData[1] = event.values[1];
- }
- }
- }
- }
-
@Override
protected void onResume() {
super.onResume();
-
+
mWakeLock.acquire();
+ mWifiLock.acquire();
}
@Override
protected void onPause() {
super.onPause();
- if (publisher != null) {
- publisher.cancel(false);
- publisher = null;
+ if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
+ motion_speed_publ.cancel();
+ mSensorManager.unregisterListener(accel);
+ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
+ speed_publ_item.setTitle("Start motion control");
}
- if (accel != null) {
- mSensorManager.unregisterListener(accel);
- accel = null;
+ 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");
+ }
+
+ if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
+ hokuyo_view.run(false);
+ hokuyo_scan.cancel();
+ hokuyo_view.invalidate();
+ hokuyo_item.setTitle("Start LRF");
+ }
+
+ if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
+ if (voltageDialog.isShowing())
+ voltageDialog.dismiss();
+ pwr_voltage.cancel();
}
-
- manager = null;
mWakeLock.release();
+ mWifiLock.release();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+
+ 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();
+ appDomain = null;
+ }
- System.gc();
+ if (manager != null) {
+ manager.destroy();
+ manager = null;
+ }
}
- @Override
+ @SuppressWarnings("deprecation")
+ @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- textview = (TextView)findViewById(R.id.textView1);
-
- start_mgr = (Button)findViewById(R.id.button1);
- stop_mgr = (Button)findViewById(R.id.button2);
- stop_mgr.setEnabled(false);
- start_pub = (Button)findViewById(R.id.button3);
- start_pub.setEnabled(false);
- stop_pub = (Button)findViewById(R.id.button4);
- stop_pub.setEnabled(false);
-
- mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
- mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+ setContentView(R.layout.hokuyo_view);
mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
- mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
-
- start_mgr.setOnClickListener(new View.OnClickListener() {
- String[] mgrs = {"192.168.1.5","192.168.1.8"};
-
- @Override
- public void onClick(View v) {
- start_mgr.setEnabled(false);
- stop_mgr.setEnabled(true);
- start_pub.setEnabled(true);
-
- manager = new Manager(mgrs);
- }
- });
+ mWakeLock = mPowerManager.newWakeLock(
+ PowerManager.SCREEN_BRIGHT_WAKE_LOCK
+ | PowerManager.ACQUIRE_CAUSES_WAKEUP
+ | PowerManager.ON_AFTER_RELEASE,
+ getClass().getName());
- stop_mgr.setOnClickListener(new View.OnClickListener() {
-
+ mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
+ mWifiLock = mWifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, getClass().getName());
+ WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+ int ip = wifiInfo.getIpAddress();
+ String ipAddress = Formatter.formatIpAddress(ip);
+
+ 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.setCancelable(false);
+ voltageBuilder.setView(voltageView);
+ voltageBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
- public void onClick(View v) {
- start_mgr.setEnabled(true);
- stop_mgr.setEnabled(false);
- start_pub.setEnabled(false);
- stop_pub.setEnabled(false);
-
- manager = null;
- System.gc();
+ public void onClick(DialogInterface dialog, int which) {
+ voltageDialog.dismiss();
+ pwr_voltage.cancel();
}
});
+ voltageBuilder.setTitle("Voltages");
+ voltageDialog = voltageBuilder.create();
+ 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);
- start_pub.setOnClickListener(new View.OnClickListener() {
-
+ 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);
+ TextView ownIP = (TextView)managersView.findViewById(R.id.ownIP);
+ ownIP.setText("\nOwn IP Address: " + ipAddress);
+ managersField = (EditText)managersView.findViewById(R.id.managers);
+ managersField.setText(mgrs);
+ managersBuilder.setCancelable(false);
+ managersBuilder.setView(managersView);
+ managersBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
- public void onClick(View v) {
- start_pub.setEnabled(false);
- stop_pub.setEnabled(true);
+ public void onClick(DialogInterface dialog, int which) {
+ SharedPreferences.Editor editor = prefs.edit();
+ mgrs = managersField.getText().toString();
+ System.out.println(mgrs);
+ editor.putString("managers", mgrs);
+ editor.commit();
+
+ manager = new Manager(mgrs);
- accel = new HandleAccelerometer();
- mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_UI);
- publisher = new ComputeOnBackground().execute();
+ appDomain = new DomainApp();
+ magnet_cmd = new MagnetCmdPublish(appDomain);
+ magnet_cmd.start();
+ crane_cmd = new CraneCmdPublish(appDomain);
+ crane_cmd.start();
+ managersDialog.dismiss();
}
});
+ managersBuilder.setTitle("Set fellow managers");
+ managersDialog = managersBuilder.create();
- stop_pub.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- start_pub.setEnabled(true);
- stop_pub.setEnabled(false);
+ mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
+ mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+
+ hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
+
+ managersDialog.show();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
- publisher.cancel(false);
- mSensorManager.unregisterListener(accel);
- publisher = null;
- accel = null;
- System.gc();
- }
- });
+ return true;
+ }
+
+ @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");
+ }
+ 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("Stop LRF")) {
+ hokuyo_view.run(false);
+ hokuyo_scan.cancel();
+ hokuyo_view.invalidate();
+ item.setTitle("Start LRF");
+ }
+ else if (item.getTitle().equals("Crane up")) {
+ crane_cmd.send(0x100);
+ item.setTitle("Crane down");
+ }
+ else if (item.getTitle().equals("Crane down")) {
+ crane_cmd.send(0x190);
+ item.setTitle("Crane up");
+ }
+ else if (item.getTitle().equals("Magnet on")) {
+ magnet_cmd.send(1);
+ item.setTitle("Magnet off");
+ }
+ else if (item.getTitle().equals("Magnet off")) {
+ magnet_cmd.send(0);
+ item.setTitle("Magnet on");
+ }
+ else if (item.getTitle().equals("Voltage monitor")) {
+ if (pwr_voltage == null)
+ pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
+ pwr_voltage.start();
+ voltageDialog.show();
+ }
+ else if (item.getTitle().equals("About")) {
+ aboutDialog.show();
+ }
+ else if (item.getTitle().equals("Exit")) {
+ finish();
+ }
+
+ return true;
+ }
+
+ private class HandleAccelerometer implements SensorEventListener {
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {}
+
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
+ if (motion_speed_publ != null)
+ motion_speed_publ.setSpeed(event.values[0], event.values[1]);
+ }
+ }
}
-}
\ No newline at end of file
+}