]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
ROBOT_DEMO: implement voltage monitor
[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 SensorManager mSensorManager = null;
60     private Sensor mGravity = null;
61     private SensorEventListener accel = null;
62     private PowerManager mPowerManager = null;
63     private WakeLock mWakeLock = null;
64     private DomainApp appDomain = null;
65     private HokuyoView hokuyo_view = null;
66     private MenuItem speed_publ_item = null;
67     private MenuItem speed_subs_item = null;
68     private MenuItem hokuyo_item = null;
69
70     static {
71         System.loadLibrary("jorte");     
72     }
73
74     @Override
75     protected void onResume() {
76         super.onResume();
77
78         mWakeLock.acquire();
79     }
80
81     @Override
82     protected void onPause() {
83         super.onPause();
84         
85         if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
86                 motion_speed_publ.cancel();
87             mSensorManager.unregisterListener(accel);
88             this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
89                 speed_publ_item.setTitle("Start motion control");
90         }
91         
92         if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
93                 hokuyo_view.runMotion(false);
94                 motion_speed_subs.cancel();
95                 hokuyo_view.invalidate();
96                 speed_subs_item.setTitle("Start motion monitor");
97         }
98
99         if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
100                         hokuyo_view.run(false);
101                         hokuyo_scan.cancel();
102                         hokuyo_view.invalidate();
103                         hokuyo_item.setTitle("Start LRF");
104         }
105
106         if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
107                 if (voltageDialog.isShowing())
108                         voltageDialog.dismiss();
109                         pwr_voltage.cancel();
110         }
111         
112         mWakeLock.release();
113     }
114     
115     @Override
116     protected void onDestroy() {
117         super.onDestroy();
118         
119         if (appDomain != null) {
120                 appDomain.destroy();
121                 appDomain = null;
122         }
123         
124         if (manager != null) {
125                 manager.destroy();
126                 manager = null;
127         }
128     }
129         
130         @Override
131     public void onCreate(Bundle savedInstanceState) {
132         super.onCreate(savedInstanceState);
133         setContentView(R.layout.hokuyo_view);
134         
135         voltageDialog = new Dialog(this,R.style.voltage_dialog);
136         voltageDialog.setCancelable(false);
137                 voltageDialog.setContentView(R.layout.status_dialog);
138                 Button okButton = (Button)voltageDialog.findViewById(R.id.button1);
139                 okButton.setOnClickListener(new OnClickListener() {
140                         @Override
141                         public void onClick(View arg0) {
142                                 voltageDialog.dismiss();
143                                 pwr_voltage.cancel();
144                         }
145                 });
146                 voltage33 = (EditText)voltageDialog.findViewById(R.id.editText1);
147                 voltage50 = (EditText)voltageDialog.findViewById(R.id.editText2);
148                 voltage80 = (EditText)voltageDialog.findViewById(R.id.editText3);
149                 voltageBAT = (EditText)voltageDialog.findViewById(R.id.editText4);
150
151         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
152         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
153         
154         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
155         mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
156         
157         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
158         
159         manager = new Manager(mgrs);
160
161         appDomain = new DomainApp();
162     }
163     
164         @Override
165         public boolean onCreateOptionsMenu(Menu menu) {
166                 getMenuInflater().inflate(R.menu.activity_main, menu);
167
168                 return true;
169         }
170         
171         @Override
172         public boolean onOptionsItemSelected (MenuItem item) {
173                 System.out.println(item.getTitle());
174                 
175                 if(item.getTitle().equals("Start motion control")) {
176                         accel = new HandleAccelerometer();
177                         mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
178                         if (motion_speed_publ == null)
179                                 motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
180                         motion_speed_publ.start();
181                         speed_publ_item = item;
182                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
183                         item.setTitle("Stop motion control");
184                 }
185                 else if (item.getTitle().equals("Stop motion control")) {
186                         mSensorManager.unregisterListener(accel);
187                         motion_speed_publ.cancel();
188                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
189                         item.setTitle("Start motion control");
190                 }
191                 else if (item.getTitle().equals("Start motion monitor")) {
192                         if (motion_speed_subs == null)
193                                 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
194                         motion_speed_subs.start();
195                         hokuyo_view.runMotion(true);
196                         hokuyo_view.invalidate();
197                         speed_subs_item = item;
198                         item.setTitle("Stop motion monitor");
199                 }
200                 else if (item.getTitle().equals("Stop motion monitor")) {
201                         hokuyo_view.runMotion(false);
202                         motion_speed_subs.cancel();
203                         hokuyo_view.invalidate();
204                         item.setTitle("Start motion monitor");
205                 }
206                 else if (item.getTitle().equals("Start LRF")) {
207                         if (hokuyo_scan == null)
208                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
209                         hokuyo_scan.start();
210                         hokuyo_view.run(true);
211                         hokuyo_view.invalidate();
212                         hokuyo_item = item;
213                         item.setTitle("Stop LRF");
214                 }
215                 else if (item.getTitle().equals("Stop LRF")) {
216                         hokuyo_view.run(false);
217                         hokuyo_scan.cancel();
218                         hokuyo_view.invalidate();
219                         item.setTitle("Start LRF");
220                 }
221                 else if (item.getTitle().equals("Lift up")) {
222                         
223                 }
224                 else if (item.getTitle().equals("Lift down")) {
225                         
226                 }
227                 else if (item.getTitle().equals("Magnet on")) {
228                         
229                 }
230                 else if (item.getTitle().equals("Magnet off")) {
231                         
232                 }
233                 else if (item.getTitle().equals("Voltage monitor")) {
234                         if (pwr_voltage == null)
235                                 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
236                         pwr_voltage.start();
237                         voltageDialog.show();
238                 }
239                 else if (item.getTitle().equals("Exit")) {
240                         finish();
241                 }
242                 
243                 return true;
244         }
245         
246     private class HandleAccelerometer implements SensorEventListener {
247
248         @Override
249         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
250
251         @Override
252         public void onSensorChanged(SensorEvent event) {
253                  if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
254                          if (motion_speed_publ != null)
255                                  motion_speed_publ.setSpeed(event.values[0], event.values[1]);
256                  }
257         }
258     }
259 }