]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
ROBOT_DEMO: use higher sampling rate for accelerometer
[orte.git] / orte / Robot_Demo / src / org / ocera / orte / demo / MainActivity.java
1 package org.ocera.orte.demo;
2
3 import org.ocera.orte.DomainApp;
4 import org.ocera.orte.Manager;
5
6 import android.app.Activity;
7 import android.content.Context;
8 import android.hardware.Sensor;
9 import android.hardware.SensorEvent;
10 import android.hardware.SensorEventListener;
11 import android.hardware.SensorManager;
12 import android.os.Bundle;
13 import android.os.PowerManager;
14 import android.os.PowerManager.WakeLock;
15 import android.view.Menu;
16 import android.view.MenuItem;
17  
18 public class MainActivity extends Activity {
19         
20         private Manager manager = null;
21     private String[] mgrs = {"192.168.1.5","192.168.1.8","10.1.1.1"};
22         private MotionSpeedPublish motion_speed = null;
23         private HokuyoScanSubscribe hokuyo_scan = null;
24     private SensorManager mSensorManager = null;
25     private Sensor mGravity = null;
26     private SensorEventListener accel = null;
27     private PowerManager mPowerManager = null;
28     private WakeLock mWakeLock = null;
29     private DomainApp appDomain = null;
30     private HokuyoView hokuyo_view = null;
31     private MenuItem speed_item = null;
32     private MenuItem hokuyo_item = null;
33
34     static {
35         System.loadLibrary("jorte");     
36     }
37
38     @Override
39     protected void onResume() {
40         super.onResume();
41
42         mWakeLock.acquire();
43     }
44
45     @Override
46     protected void onPause() {
47         super.onPause();
48         
49         if (motion_speed != null && !motion_speed.isCancelled()) {
50                 motion_speed.cancel();
51             mSensorManager.unregisterListener(accel);
52                 speed_item.setTitle("Start speed");
53         }
54
55         if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
56                         hokuyo_view.run(false);
57                         hokuyo_scan.cancel();
58                         hokuyo_view.invalidate();
59                         hokuyo_item.setTitle("Start hokuyo");
60         }
61         
62         mWakeLock.release();
63     }
64     
65     @Override
66     protected void onDestroy() {
67         super.onDestroy();
68         
69         if (appDomain != null) {
70                 appDomain.destroy();
71                 appDomain = null;
72         }
73         
74         if (manager != null) {
75                 manager.destroy();
76                 manager = null;
77         }
78     }
79         
80     @Override
81     public void onCreate(Bundle savedInstanceState) {
82         super.onCreate(savedInstanceState);
83         setContentView(R.layout.hokuyo_view);
84         
85         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
86         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
87         
88         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
89         mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
90         
91         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
92         
93         manager = new Manager(mgrs);
94
95         appDomain = new DomainApp();
96     }
97     
98         @Override
99         public boolean onCreateOptionsMenu(Menu menu) {
100                 getMenuInflater().inflate(R.menu.activity_main, menu);
101
102                 return true;
103         }
104         
105         @Override
106         public boolean onOptionsItemSelected (MenuItem item) {
107                 System.out.println(item.getTitle());
108                 
109                 if(item.getTitle().equals("Start speed")) {
110                         accel = new HandleAccelerometer();
111                         mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
112                         if (motion_speed == null)
113                                 motion_speed = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
114                         motion_speed.start();
115                         speed_item = item;
116                         item.setTitle("Stop speed");
117                 }
118                 else if (item.getTitle().equals("Stop speed")) {
119                         mSensorManager.unregisterListener(accel);
120                         motion_speed.cancel();
121                         item.setTitle("Start speed");
122                 }
123                 else if (item.getTitle().equals("Start hokuyo")) {
124                         if (hokuyo_scan == null)
125                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
126                         hokuyo_scan.start();
127                         hokuyo_view.run(true);
128                         hokuyo_item = item;
129                         item.setTitle("Stop hokuyo");
130                 }
131                 else if (item.getTitle().equals("Stop hokuyo")) {
132                         hokuyo_view.run(false);
133                         hokuyo_scan.cancel();
134                         hokuyo_view.invalidate();
135                         item.setTitle("Start hokuyo");
136                 }
137                 else if (item.getTitle().equals("Lift up")) {
138                         
139                 }
140                 else if (item.getTitle().equals("Lift down")) {
141                         
142                 }
143                 else if (item.getTitle().equals("Magnet on")) {
144                         
145                 }
146                 else if (item.getTitle().equals("Magnet off")) {
147                         
148                 }
149                 else if (item.getTitle().equals("Exit")) {
150                         finish();
151                 }
152                 
153                 return true;
154         }
155         
156     private class HandleAccelerometer implements SensorEventListener {
157
158         @Override
159         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
160
161         @Override
162         public void onSensorChanged(SensorEvent event) {
163                  if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
164                          if (motion_speed != null)
165                                  motion_speed.setSpeed(event.values[0], event.values[1]);
166                  }
167         }
168     }
169 }