]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
d50b0fe9858edc634afd45b3f386d849f67211d6
[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.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;
25  
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() {
33                 @Override
34                 public void handleMessage(Message msg) {
35                         double[] values = msg.getData().getDoubleArray("voltages");
36                         if (values != null) {
37                                 if (voltage33 != null) {
38                                         voltage33.setText(Double.toString(values[0]));
39                                 }
40                                 if (voltage50 != null) {
41                                         voltage50.setText(Double.toString(values[1]));
42                                 }
43                                 if (voltage80 != null) {
44                                         voltage80.setText(Double.toString(values[2]));
45                                 }
46                                 if (voltageBAT != null) {
47                                         voltageBAT.setText(Double.toString(values[3]));
48                                 }
49                         }
50                 }
51     };
52         
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;
73
74     static {
75         System.loadLibrary("jorte");     
76     }
77
78     @Override
79     protected void onResume() {
80         super.onResume();
81
82         mWakeLock.acquire();
83     }
84
85     @Override
86     protected void onPause() {
87         super.onPause();
88         
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");
94         }
95         
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");
101         }
102
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");
108         }
109
110         if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
111                 if (voltageDialog.isShowing())
112                         voltageDialog.dismiss();
113                         pwr_voltage.cancel();
114         }
115         
116         mWakeLock.release();
117     }
118     
119     @Override
120     protected void onDestroy() {
121         super.onDestroy();
122         
123         if (crane_cmd != null && !crane_cmd.isCancelled()) {
124                 crane_cmd.cancel();
125         }
126         
127         if (magnet_cmd != null && !crane_cmd.isCancelled()) {
128                 magnet_cmd.cancel();
129         }
130         
131         if (appDomain != null) {
132                 appDomain.destroy();
133                 appDomain = null;
134         }
135         
136         if (manager != null) {
137                 manager.destroy();
138                 manager = null;
139         }
140     }
141         
142         @Override
143     public void onCreate(Bundle savedInstanceState) {
144         super.onCreate(savedInstanceState);
145         setContentView(R.layout.hokuyo_view);
146         
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() {
152                         @Override
153                         public void onClick(View arg0) {
154                                 voltageDialog.dismiss();
155                                 pwr_voltage.cancel();
156                         }
157                 });
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);
162                 
163         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
164         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
165         
166         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
167         mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
168         
169         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
170         
171         manager = new Manager(mgrs);
172
173         appDomain = new DomainApp();
174         magnet_cmd = new MagnetCmdPublish(appDomain);
175         magnet_cmd.start();
176         crane_cmd = new CraneCmdPublish(appDomain);
177         crane_cmd.start();
178     }
179     
180         @Override
181         public boolean onCreateOptionsMenu(Menu menu) {
182                 getMenuInflater().inflate(R.menu.activity_main, menu);
183
184                 return true;
185         }
186         
187         @Override
188         public boolean onOptionsItemSelected (MenuItem item) {
189                 System.out.println(item.getTitle());
190                 
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");
200                 }
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");
206                 }
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");
215                 }
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");
221                 }
222                 else if (item.getTitle().equals("Start LRF")) {
223                         if (hokuyo_scan == null)
224                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
225                         hokuyo_scan.start();
226                         hokuyo_view.run(true);
227                         hokuyo_view.invalidate();
228                         hokuyo_item = item;
229                         item.setTitle("Stop LRF");
230                 }
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");
236                 }
237                 else if (item.getTitle().equals("Crane up")) {
238                         crane_cmd.send(0x100);
239                         item.setTitle("Crane down");
240                 }
241                 else if (item.getTitle().equals("Crane down")) {
242                         crane_cmd.send(0x190);
243                         item.setTitle("Crane up");
244                 }
245                 else if (item.getTitle().equals("Magnet on")) {
246                         magnet_cmd.send(1);
247                         item.setTitle("Magnet off");                    
248                 }
249                 else if (item.getTitle().equals("Magnet off")) {
250                         magnet_cmd.send(0);
251                         item.setTitle("Magnet on");                     
252                 }
253                 else if (item.getTitle().equals("Voltage monitor")) {
254                         if (pwr_voltage == null)
255                                 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
256                         pwr_voltage.start();
257                         voltageDialog.show();
258                 }
259                 else if (item.getTitle().equals("Exit")) {
260                         finish();
261                 }
262                 
263                 return true;
264         }
265         
266     private class HandleAccelerometer implements SensorEventListener {
267
268         @Override
269         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
270
271         @Override
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]);
276                  }
277         }
278     }
279 }