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",
55 "10.1.1.1","10.1.1.2","10.1.1.3","10.1.1.4","10.1.1.5","10.1.1.6","10.1.1.7","10.1.1.8","10.1.1.9","10.1.1.10",
56 "10.1.1.11","10.1.1.12","10.1.1.13","10.1.1.14","10.1.1.15","10.1.1.16","10.1.1.17","10.1.1.18","10.1.1.19","10.1.1.20"};
57 private MotionSpeedPublish motion_speed_publ = null;
58 private MotionSpeedSubscribe motion_speed_subs = null;
59 private HokuyoScanSubscribe hokuyo_scan = null;
60 private PwrVoltageSubscribe pwr_voltage = null;
61 private MagnetCmdPublish magnet_cmd = null;
62 private CraneCmdPublish crane_cmd = null;
63 private SensorManager mSensorManager = null;
64 private Sensor mGravity = null;
65 private SensorEventListener accel = null;
66 private PowerManager mPowerManager = null;
67 private WakeLock mWakeLock = null;
68 private DomainApp appDomain = null;
69 private HokuyoView hokuyo_view = null;
70 private MenuItem speed_publ_item = null;
71 private MenuItem speed_subs_item = null;
72 private MenuItem hokuyo_item = null;
75 System.loadLibrary("jorte");
79 protected void onResume() {
86 protected void onPause() {
89 if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
90 motion_speed_publ.cancel();
91 mSensorManager.unregisterListener(accel);
92 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
93 speed_publ_item.setTitle("Start motion control");
96 if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
97 hokuyo_view.runMotion(false);
98 motion_speed_subs.cancel();
99 hokuyo_view.invalidate();
100 speed_subs_item.setTitle("Start motion monitor");
103 if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
104 hokuyo_view.run(false);
105 hokuyo_scan.cancel();
106 hokuyo_view.invalidate();
107 hokuyo_item.setTitle("Start LRF");
110 if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
111 if (voltageDialog.isShowing())
112 voltageDialog.dismiss();
113 pwr_voltage.cancel();
120 protected void onDestroy() {
123 if (crane_cmd != null && !crane_cmd.isCancelled()) {
127 if (magnet_cmd != null && !crane_cmd.isCancelled()) {
131 if (appDomain != null) {
136 if (manager != null) {
143 public void onCreate(Bundle savedInstanceState) {
144 super.onCreate(savedInstanceState);
145 setContentView(R.layout.hokuyo_view);
147 voltageDialog = new Dialog(this,R.style.voltage_dialog);
148 voltageDialog.setCancelable(false);
149 voltageDialog.setContentView(R.layout.status_dialog);
150 Button okButton = (Button)voltageDialog.findViewById(R.id.button1);
151 okButton.setOnClickListener(new OnClickListener() {
153 public void onClick(View arg0) {
154 voltageDialog.dismiss();
155 pwr_voltage.cancel();
158 voltage33 = (EditText)voltageDialog.findViewById(R.id.editText1);
159 voltage50 = (EditText)voltageDialog.findViewById(R.id.editText2);
160 voltage80 = (EditText)voltageDialog.findViewById(R.id.editText3);
161 voltageBAT = (EditText)voltageDialog.findViewById(R.id.editText4);
163 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
164 mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
166 mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
167 mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
169 hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
171 manager = new Manager(mgrs);
173 appDomain = new DomainApp();
174 magnet_cmd = new MagnetCmdPublish(appDomain);
176 crane_cmd = new CraneCmdPublish(appDomain);
181 public boolean onCreateOptionsMenu(Menu menu) {
182 getMenuInflater().inflate(R.menu.activity_main, menu);
188 public boolean onOptionsItemSelected (MenuItem item) {
189 System.out.println(item.getTitle());
191 if(item.getTitle().equals("Start motion control")) {
192 accel = new HandleAccelerometer();
193 mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
194 if (motion_speed_publ == null)
195 motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
196 motion_speed_publ.start();
197 speed_publ_item = item;
198 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
199 item.setTitle("Stop motion control");
201 else if (item.getTitle().equals("Stop motion control")) {
202 mSensorManager.unregisterListener(accel);
203 motion_speed_publ.cancel();
204 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
205 item.setTitle("Start motion control");
207 else if (item.getTitle().equals("Start motion monitor")) {
208 if (motion_speed_subs == null)
209 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
210 motion_speed_subs.start();
211 hokuyo_view.runMotion(true);
212 hokuyo_view.invalidate();
213 speed_subs_item = item;
214 item.setTitle("Stop motion monitor");
216 else if (item.getTitle().equals("Stop motion monitor")) {
217 hokuyo_view.runMotion(false);
218 motion_speed_subs.cancel();
219 hokuyo_view.invalidate();
220 item.setTitle("Start motion monitor");
222 else if (item.getTitle().equals("Start LRF")) {
223 if (hokuyo_scan == null)
224 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
226 hokuyo_view.run(true);
227 hokuyo_view.invalidate();
229 item.setTitle("Stop LRF");
231 else if (item.getTitle().equals("Stop LRF")) {
232 hokuyo_view.run(false);
233 hokuyo_scan.cancel();
234 hokuyo_view.invalidate();
235 item.setTitle("Start LRF");
237 else if (item.getTitle().equals("Crane up")) {
238 crane_cmd.send(0x100);
239 item.setTitle("Crane down");
241 else if (item.getTitle().equals("Crane down")) {
242 crane_cmd.send(0x190);
243 item.setTitle("Crane up");
245 else if (item.getTitle().equals("Magnet on")) {
247 item.setTitle("Magnet off");
249 else if (item.getTitle().equals("Magnet off")) {
251 item.setTitle("Magnet on");
253 else if (item.getTitle().equals("Voltage monitor")) {
254 if (pwr_voltage == null)
255 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
257 voltageDialog.show();
259 else if (item.getTitle().equals("Exit")) {
266 private class HandleAccelerometer implements SensorEventListener {
269 public void onAccuracyChanged(Sensor sensor, int accuracy) {}
272 public void onSensorChanged(SensorEvent event) {
273 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
274 if (motion_speed_publ != null)
275 motion_speed_publ.setSpeed(event.values[0], event.values[1]);