]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
ROBOT_DEMO: add publishers for "crane_cmd" and "magnet_cmd"
[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","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;
71
72     static {
73         System.loadLibrary("jorte");     
74     }
75
76     @Override
77     protected void onResume() {
78         super.onResume();
79
80         mWakeLock.acquire();
81     }
82
83     @Override
84     protected void onPause() {
85         super.onPause();
86         
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");
92         }
93         
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");
99         }
100
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");
106         }
107
108         if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
109                 if (voltageDialog.isShowing())
110                         voltageDialog.dismiss();
111                         pwr_voltage.cancel();
112         }
113         
114         mWakeLock.release();
115     }
116     
117     @Override
118     protected void onDestroy() {
119         super.onDestroy();
120         
121         if (crane_cmd != null && !crane_cmd.isCancelled()) {
122                 crane_cmd.cancel();
123         }
124         
125         if (magnet_cmd != null && !crane_cmd.isCancelled()) {
126                 magnet_cmd.cancel();
127         }
128         
129         if (appDomain != null) {
130                 appDomain.destroy();
131                 appDomain = null;
132         }
133         
134         if (manager != null) {
135                 manager.destroy();
136                 manager = null;
137         }
138     }
139         
140         @Override
141     public void onCreate(Bundle savedInstanceState) {
142         super.onCreate(savedInstanceState);
143         setContentView(R.layout.hokuyo_view);
144         
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() {
150                         @Override
151                         public void onClick(View arg0) {
152                                 voltageDialog.dismiss();
153                                 pwr_voltage.cancel();
154                         }
155                 });
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);
160                 
161         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
162         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
163         
164         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
165         mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
166         
167         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
168         
169         manager = new Manager(mgrs);
170
171         appDomain = new DomainApp();
172         magnet_cmd = new MagnetCmdPublish(appDomain);
173         magnet_cmd.start();
174         crane_cmd = new CraneCmdPublish(appDomain);
175         crane_cmd.start();
176     }
177     
178         @Override
179         public boolean onCreateOptionsMenu(Menu menu) {
180                 getMenuInflater().inflate(R.menu.activity_main, menu);
181
182                 return true;
183         }
184         
185         @Override
186         public boolean onOptionsItemSelected (MenuItem item) {
187                 System.out.println(item.getTitle());
188                 
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");
198                 }
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");
204                 }
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");
213                 }
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");
219                 }
220                 else if (item.getTitle().equals("Start LRF")) {
221                         if (hokuyo_scan == null)
222                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
223                         hokuyo_scan.start();
224                         hokuyo_view.run(true);
225                         hokuyo_view.invalidate();
226                         hokuyo_item = item;
227                         item.setTitle("Stop LRF");
228                 }
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");
234                 }
235                 else if (item.getTitle().equals("Lift up")) {
236                         crane_cmd.send((short)0x100);
237                         item.setTitle("Lift down");
238                 }
239                 else if (item.getTitle().equals("Lift down")) {
240                         crane_cmd.send((short)0x190);
241                         item.setTitle("Lift up");
242                 }
243                 else if (item.getTitle().equals("Magnet on")) {
244                         magnet_cmd.send((short)1);
245                         item.setTitle("Magnet off");                    
246                 }
247                 else if (item.getTitle().equals("Magnet off")) {
248                         magnet_cmd.send((short)0);
249                         item.setTitle("Magnet on");                     
250                 }
251                 else if (item.getTitle().equals("Voltage monitor")) {
252                         if (pwr_voltage == null)
253                                 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
254                         pwr_voltage.start();
255                         voltageDialog.show();
256                 }
257                 else if (item.getTitle().equals("Exit")) {
258                         finish();
259                 }
260                 
261                 return true;
262         }
263         
264     private class HandleAccelerometer implements SensorEventListener {
265
266         @Override
267         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
268
269         @Override
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]);
274                  }
275         }
276     }
277 }