1 package org.ocera.orte.demo;
3 import org.ocera.orte.DomainApp;
4 import org.ocera.orte.Manager;
6 import android.app.Activity;
7 import android.app.Dialog;
8 import android.content.Context;
9 import android.content.pm.ActivityInfo;
10 import android.hardware.Sensor;
11 import android.hardware.SensorEvent;
12 import android.hardware.SensorEventListener;
13 import android.hardware.SensorManager;
14 import android.os.Bundle;
15 import android.os.Handler;
16 import android.os.Message;
17 import android.os.PowerManager;
18 import android.os.PowerManager.WakeLock;
19 import android.view.Menu;
20 import android.view.MenuItem;
21 import android.view.View;
22 import android.view.View.OnClickListener;
23 import android.widget.Button;
24 import android.widget.EditText;
26 public class MainActivity extends Activity {
27 private Dialog voltageDialog = null;
28 static EditText voltage33 = null;
29 static EditText voltage50 = null;
30 static EditText voltage80 = null;
31 static EditText voltageBAT = null;
32 static Handler dialogHandler = new Handler() {
34 public void handleMessage(Message msg) {
35 double[] values = msg.getData().getDoubleArray("voltages");
37 if (voltage33 != null) {
38 voltage33.setText(Double.toString(values[0]));
40 if (voltage50 != null) {
41 voltage50.setText(Double.toString(values[1]));
43 if (voltage80 != null) {
44 voltage80.setText(Double.toString(values[2]));
46 if (voltageBAT != null) {
47 voltageBAT.setText(Double.toString(values[3]));
53 private Manager manager = null;
54 private String[] mgrs = {"192.168.1.5","192.168.1.8","192.168.1.29","10.1.1.1"};
55 private MotionSpeedPublish motion_speed_publ = null;
56 private MotionSpeedSubscribe motion_speed_subs = null;
57 private HokuyoScanSubscribe hokuyo_scan = null;
58 private PwrVoltageSubscribe pwr_voltage = null;
59 private MagnetCmdPublish magnet_cmd = null;
60 private CraneCmdPublish crane_cmd = null;
61 private SensorManager mSensorManager = null;
62 private Sensor mGravity = null;
63 private SensorEventListener accel = null;
64 private PowerManager mPowerManager = null;
65 private WakeLock mWakeLock = null;
66 private DomainApp appDomain = null;
67 private HokuyoView hokuyo_view = null;
68 private MenuItem speed_publ_item = null;
69 private MenuItem speed_subs_item = null;
70 private MenuItem hokuyo_item = null;
73 System.loadLibrary("jorte");
77 protected void onResume() {
84 protected void onPause() {
87 if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
88 motion_speed_publ.cancel();
89 mSensorManager.unregisterListener(accel);
90 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
91 speed_publ_item.setTitle("Start motion control");
94 if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
95 hokuyo_view.runMotion(false);
96 motion_speed_subs.cancel();
97 hokuyo_view.invalidate();
98 speed_subs_item.setTitle("Start motion monitor");
101 if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
102 hokuyo_view.run(false);
103 hokuyo_scan.cancel();
104 hokuyo_view.invalidate();
105 hokuyo_item.setTitle("Start LRF");
108 if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
109 if (voltageDialog.isShowing())
110 voltageDialog.dismiss();
111 pwr_voltage.cancel();
118 protected void onDestroy() {
121 if (crane_cmd != null && !crane_cmd.isCancelled()) {
125 if (magnet_cmd != null && !crane_cmd.isCancelled()) {
129 if (appDomain != null) {
134 if (manager != null) {
141 public void onCreate(Bundle savedInstanceState) {
142 super.onCreate(savedInstanceState);
143 setContentView(R.layout.hokuyo_view);
145 voltageDialog = new Dialog(this,R.style.voltage_dialog);
146 voltageDialog.setCancelable(false);
147 voltageDialog.setContentView(R.layout.status_dialog);
148 Button okButton = (Button)voltageDialog.findViewById(R.id.button1);
149 okButton.setOnClickListener(new OnClickListener() {
151 public void onClick(View arg0) {
152 voltageDialog.dismiss();
153 pwr_voltage.cancel();
156 voltage33 = (EditText)voltageDialog.findViewById(R.id.editText1);
157 voltage50 = (EditText)voltageDialog.findViewById(R.id.editText2);
158 voltage80 = (EditText)voltageDialog.findViewById(R.id.editText3);
159 voltageBAT = (EditText)voltageDialog.findViewById(R.id.editText4);
161 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
162 mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
164 mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
165 mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
167 hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
169 manager = new Manager(mgrs);
171 appDomain = new DomainApp();
172 magnet_cmd = new MagnetCmdPublish(appDomain);
174 crane_cmd = new CraneCmdPublish(appDomain);
179 public boolean onCreateOptionsMenu(Menu menu) {
180 getMenuInflater().inflate(R.menu.activity_main, menu);
186 public boolean onOptionsItemSelected (MenuItem item) {
187 System.out.println(item.getTitle());
189 if(item.getTitle().equals("Start motion control")) {
190 accel = new HandleAccelerometer();
191 mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
192 if (motion_speed_publ == null)
193 motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
194 motion_speed_publ.start();
195 speed_publ_item = item;
196 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
197 item.setTitle("Stop motion control");
199 else if (item.getTitle().equals("Stop motion control")) {
200 mSensorManager.unregisterListener(accel);
201 motion_speed_publ.cancel();
202 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
203 item.setTitle("Start motion control");
205 else if (item.getTitle().equals("Start motion monitor")) {
206 if (motion_speed_subs == null)
207 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
208 motion_speed_subs.start();
209 hokuyo_view.runMotion(true);
210 hokuyo_view.invalidate();
211 speed_subs_item = item;
212 item.setTitle("Stop motion monitor");
214 else if (item.getTitle().equals("Stop motion monitor")) {
215 hokuyo_view.runMotion(false);
216 motion_speed_subs.cancel();
217 hokuyo_view.invalidate();
218 item.setTitle("Start motion monitor");
220 else if (item.getTitle().equals("Start LRF")) {
221 if (hokuyo_scan == null)
222 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
224 hokuyo_view.run(true);
225 hokuyo_view.invalidate();
227 item.setTitle("Stop LRF");
229 else if (item.getTitle().equals("Stop LRF")) {
230 hokuyo_view.run(false);
231 hokuyo_scan.cancel();
232 hokuyo_view.invalidate();
233 item.setTitle("Start LRF");
235 else if (item.getTitle().equals("Lift up")) {
236 crane_cmd.send((short)0x100);
237 item.setTitle("Lift down");
239 else if (item.getTitle().equals("Lift down")) {
240 crane_cmd.send((short)0x190);
241 item.setTitle("Lift up");
243 else if (item.getTitle().equals("Magnet on")) {
244 magnet_cmd.send((short)1);
245 item.setTitle("Magnet off");
247 else if (item.getTitle().equals("Magnet off")) {
248 magnet_cmd.send((short)0);
249 item.setTitle("Magnet on");
251 else if (item.getTitle().equals("Voltage monitor")) {
252 if (pwr_voltage == null)
253 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
255 voltageDialog.show();
257 else if (item.getTitle().equals("Exit")) {
264 private class HandleAccelerometer implements SensorEventListener {
267 public void onAccuracyChanged(Sensor sensor, int accuracy) {}
270 public void onSensorChanged(SensorEvent event) {
271 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
272 if (motion_speed_publ != null)
273 motion_speed_publ.setSpeed(event.values[0], event.values[1]);