<menu xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:id="@+id/speed"
- android:title="Motion control"
- android:showAsAction="never"
- android:checkable="true"
- android:orderInCategory="1">
- </item>
-
- <item android:id="@+id/speed_mon"
- android:title="Speed monitor"
- android:showAsAction="never"
- android:checkable="true"
- android:orderInCategory="2">
- </item>
-
- <item android:id="@+id/hokuyo"
- android:title="Hokuyo"
- android:showAsAction="never"
- android:checkable="true"
- android:orderInCategory="3">
- </item>
<item android:id="@+id/crane"
android:title="Crane: up"
- android:orderInCategory="4"
+ android:orderInCategory="1"
android:showAsAction="never">
</item>
<item android:id="@+id/magnet"
android:title="Magnet"
- android:orderInCategory="5"
+ android:orderInCategory="2"
android:checkable="true"
android:showAsAction="never">
</item>
<item android:id="@+id/voltage"
android:title="Voltage monitor"
- android:orderInCategory="6"
+ android:orderInCategory="3"
android:showAsAction="never">
</item>
<item android:id="@+id/managers"
android:title="Fellow managers"
- android:orderInCategory="7"
+ android:orderInCategory="4"
android:showAsAction="never">
</item>
<item android:id="@+id/about"
android:title="About"
- android:orderInCategory="8"
+ android:orderInCategory="5"
android:showAsAction="never">
</item>
<item android:id="@+id/exit"
android:title="Exit"
- android:orderInCategory="8"
+ android:orderInCategory="6"
android:showAsAction="never">
</item>
</menu>
protected void onDraw(Canvas canvas) {
rcLock.lock();
try {
- if (isRunning) {
- lock.lock();
- try {
- double norm = (double)getWidth()/(2*COSINUS);
- if (norm > getHeight())
- norm = getHeight();
- paint.setStyle(Style.STROKE);
- paint.setStrokeWidth(3);
- paint.setColor(Color.BLACK);
- canvas.drawLine((int)(getWidth()*0.95),
- (int)(getHeight()*0.97),
- (int)(getWidth()*0.95-norm/4),
- (int)(getHeight()*0.97),
- paint);
- paint.setStrokeWidth(2);
- canvas.drawText("1 m", (int)(getWidth()*0.95-norm/8), (int)(getHeight()*0.97-10), paint);
- paint.setStrokeWidth(3);
- paint.setStyle(Style.FILL);
- paint.setColor(Color.argb(40, 62, 62, 171));
- if (!hasBeenDrawn) {
- path.reset();
- path.moveTo(getWidth()/2, getHeight());
- for(int i = HOKUYO_INDEX_LOWER+1; i <= HOKUYO_INDEX_UPPER; i++) {
- if (data[i] > 4000)
- data[i] = 4000;
- data[i] = (int)(((double)data[i]/4000)*norm);
- if (data[i] < 5)
- data[i] = 5;
- int x = (int)(getWidth()/2) - (int)(data[i] * Math.sin(HOKUYO_INDEX_TO_RAD(i)));
- int y = getHeight() - (int)(data[i] * Math.cos(HOKUYO_INDEX_TO_RAD(i)));
- path.lineTo(x, y);
- }
- path.close();
- hasBeenDrawn = true;
+ lock.lock();
+ try {
+ double norm = (double)getWidth()/(2*COSINUS);
+ if (norm > getHeight())
+ norm = getHeight();
+ paint.setStyle(Style.STROKE);
+ paint.setStrokeWidth(3);
+ paint.setColor(isRunning ? Color.BLACK : Color.GRAY);
+ canvas.drawLine((int)(getWidth()*0.95),
+ (int)(getHeight()*0.97),
+ (int)(getWidth()*0.95-norm/4),
+ (int)(getHeight()*0.97),
+ paint);
+ paint.setStrokeWidth(2);
+ canvas.drawText("1 m", (int)(getWidth()*0.95-norm/8), (int)(getHeight()*0.97-10), paint);
+ paint.setStrokeWidth(3);
+ paint.setStyle(Style.FILL);
+ paint.setColor(isRunning ? Color.argb(40, 62, 62, 171) : Color.LTGRAY);
+ if (!hasBeenDrawn || !isRunning) {
+ path.reset();
+ path.moveTo(getWidth()/2, getHeight());
+ for(int i = HOKUYO_INDEX_LOWER+1; i <= HOKUYO_INDEX_UPPER; i++) {
+ if (data[i] > 4000)
+ data[i] = 4000;
+ data[i] = (int)(((double)data[i]/4000)*norm);
+ if (data[i] < 5)
+ data[i] = 5;
+ int x = (int)(getWidth()/2) - (int)((isRunning ? data[i] : norm) * Math.sin(HOKUYO_INDEX_TO_RAD(i)));
+ int y = getHeight() - (int)((isRunning ? data[i] : norm) * Math.cos(HOKUYO_INDEX_TO_RAD(i)));
+ path.lineTo(x, y);
}
- }
- finally {
- lock.unlock();
+ path.close();
+ hasBeenDrawn = true;
}
}
- else {
- path.reset();
+ finally {
+ lock.unlock();
}
canvas.drawPath(path, paint);
paint.setStyle(Style.STROKE);
- paint.setColor(Color.BLACK);
+ paint.setColor(isRunning ? Color.BLACK : Color.GRAY);
canvas.drawPath(path, paint);
- if (isMonitoring) {
+// if (isMonitoring) {
lockMotion.lock();
try {
double norm;
norm = getWidth()*0.125;
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(1);
- paint.setColor(Color.BLACK);
+ paint.setColor(isMonitoring ? Color.BLACK : Color.LTGRAY);
canvas.drawLine((int)(10),
(int)(10+norm*1.5),
(int)(10+norm*3),
(int)(10+norm*3),
paint);
paint.setStrokeWidth(4);
- paint.setColor(Color.BLUE);
+ paint.setColor(isMonitoring ? Color.BLUE : Color.GRAY);
canvas.drawLine((int)(10+norm*1.5),
(int)(10+norm*1.5),
(int)(speedCo[0]*norm+10+norm*1.5),
} finally {
lockMotion.unlock();
}
- }
+// }
} finally {
rcLock.unlock();
}
}
}
+ public boolean isRunning() {
+ Boolean retVal = false;
+
+ rcLock.lock();
+ try {
+ retVal = isRunning;
+ } finally {
+ rcLock.unlock();
+ }
+
+ return retVal;
+ }
+
+ public boolean isRunningMotion() {
+ Boolean retVal = false;
+
+ rcLock.lock();
+ try {
+ retVal = isMonitoring;
+ } finally {
+ rcLock.unlock();
+ }
+
+ return retVal;
+ }
+
public void setData(int[] data) {
if (lock.tryLock()) {
try {
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.text.format.Formatter;
+import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
private WifiLock mWifiLock = null;
private DomainApp appDomain = null;
private HokuyoView hokuyo_view = null;
- private MenuItem speed_publ_item = null;
- private MenuItem speed_subs_item = null;
- private MenuItem hokuyo_item = null;
private SharedPreferences prefs = null;
+ private GestureDetector gDetector = null;
static {
System.loadLibrary("jorte");
motion_speed_publ.cancel();
mSensorManager.unregisterListener(accel);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- speed_publ_item.setChecked(false);
mDimLock.release();
mWifiLock.release();
}
hokuyo_view.runMotion(false);
motion_speed_subs.cancel();
hokuyo_view.invalidate();
- speed_subs_item.setChecked(false);
mWakeLock.release();
mWifiLock.release();
}
hokuyo_view.run(false);
hokuyo_scan.cancel();
hokuyo_view.invalidate();
- hokuyo_item.setChecked(false);
mWakeLock.release();
mWifiLock.release();
}
mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
-
+ gDetector = new GestureDetector(hokuyo_view.getContext(), new HokuyoGestures());
+ hokuyo_view.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return gDetector.onTouchEvent(event);
+ }
+
+ });
+
manager = new Manager(mgrs);
appDomain = new DomainApp();
@Override
public boolean onOptionsItemSelected (MenuItem item) {
- if(item.getTitle().equals("Motion control")) {
- if (!item.isChecked()) {
- mDimLock.acquire();
- mWifiLock.acquire();
- accel = new HandleAccelerometer();
- mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
- if (motion_speed_publ == null)
- motion_speed_publ = new MotionSpeedPublish(appDomain);
- motion_speed_publ.start();
- speed_publ_item = item;
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- item.setChecked(true);
- }
- else {
- mSensorManager.unregisterListener(accel);
- motion_speed_publ.cancel();
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- item.setChecked(false);
- mDimLock.release();
- mWifiLock.release();
- }
- }
- else if (item.getTitle().equals("Speed monitor")) {
- if(!item.isChecked()) {
- mWakeLock.acquire();
- mWifiLock.acquire();
- if (motion_speed_subs == null)
- motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
- motion_speed_subs.start();
- hokuyo_view.runMotion(true);
- hokuyo_view.invalidate();
- speed_subs_item = item;
- item.setChecked(true);
- }
- else {
- hokuyo_view.runMotion(false);
- motion_speed_subs.cancel();
- hokuyo_view.invalidate();
- item.setChecked(false);
- mWakeLock.release();
- mWifiLock.release();
- }
- }
- else if (item.getTitle().equals("Hokuyo")) {
- if (!item.isChecked()) {
- mWakeLock.acquire();
- mWifiLock.acquire();
- if (hokuyo_scan == null)
- hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
- hokuyo_scan.start();
- hokuyo_view.run(true);
- hokuyo_view.invalidate();
- hokuyo_item = item;
- item.setChecked(true);
- }
- else {
- hokuyo_view.run(false);
- hokuyo_scan.cancel();
- hokuyo_view.invalidate();
- item.setChecked(false);
- mWakeLock.release();
- mWifiLock.release();
- }
- }
- else if (item.getTitle().equals("Crane: up")) {
+ if (item.getTitle().equals("Crane: up")) {
crane_cmd.send(0x190);
item.setTitle("Crane: down");
}
}
}
+// hokuyo_view.setOnTouchListener(new View.OnTouchListener() {
+ private class HokuyoGestures extends GestureDetector.SimpleOnGestureListener {
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent event) {
+ // urceni orientace HokuyoView a poctu pixelu, ktere zabira hokuyo
+ double norm = (double)hokuyo_view.getWidth()/(2*HokuyoView.COSINUS);
+ boolean isVertical = true;
+ if (norm > hokuyo_view.getHeight()) {
+ norm = HokuyoView.COSINUS*hokuyo_view.getHeight()*2;
+ norm = (hokuyo_view.getWidth() - norm)/2;
+ isVertical = false;
+ }
+ else
+ norm = hokuyo_view.getHeight() - norm;
+
+ // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti
+ double normSpeed = ((double)(isVertical ? hokuyo_view.getWidth() : hokuyo_view.getHeight())) * 0.375;
+
+ if (event.getYPrecision()*event.getY() < normSpeed &&
+ event.getXPrecision()*event.getX() < normSpeed) {
+ if(!hokuyo_view.isRunningMotion()) {
+ mWakeLock.acquire();
+ mWifiLock.acquire();
+ if (motion_speed_subs == null)
+ motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
+ motion_speed_subs.start();
+ hokuyo_view.runMotion(true);
+ hokuyo_view.invalidate();
+ }
+ else {
+ hokuyo_view.runMotion(false);
+ motion_speed_subs.cancel();
+ hokuyo_view.invalidate();
+ mWakeLock.release();
+ mWifiLock.release();
+ }
+ }
+
+ if ((isVertical && event.getYPrecision()*event.getY() > norm) ||
+ (!isVertical && event.getXPrecision()*event.getX() > norm &&
+ event.getXPrecision()*event.getX() < hokuyo_view.getWidth() - norm)) {
+ if (!hokuyo_view.isRunning()) {
+ mWakeLock.acquire();
+ mWifiLock.acquire();
+ hokuyo_view.setData(new int[681]);
+ if (hokuyo_scan == null)
+ hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
+ hokuyo_scan.start();
+ hokuyo_view.run(true);
+ hokuyo_view.invalidate();
+ }
+ else {
+ hokuyo_view.run(false);
+ hokuyo_scan.cancel();
+ hokuyo_view.invalidate();
+ mWakeLock.release();
+ mWifiLock.release();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onDown(MotionEvent e) {
+ return true;
+ }
+
+ @Override
+ public void onLongPress(MotionEvent event) {
+ // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti
+ double normSpeed = ((double)(hokuyo_view.getHeight() < hokuyo_view.getWidth() ? hokuyo_view.getHeight() : hokuyo_view.getWidth())) * 0.375;
+
+ if (event.getYPrecision()*event.getY() < normSpeed &&
+ event.getXPrecision()*event.getX() < normSpeed) {
+ if (motion_speed_publ == null || motion_speed_publ.isCancelled()) {
+ mDimLock.acquire();
+ mWifiLock.acquire();
+ accel = new HandleAccelerometer();
+ mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
+ if (motion_speed_publ == null)
+ motion_speed_publ = new MotionSpeedPublish(appDomain);
+ motion_speed_publ.start();
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+ else {
+ mSensorManager.unregisterListener(accel);
+ motion_speed_publ.cancel();
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
+ mDimLock.release();
+ mWifiLock.release();
+ }
+ }
+ }
+ }
+
private class NetworkInfo extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... arg0) {