forked from community/device-mgt-plugins
Merge pull request #293 from WarunaS/rapid_accelarations
rapid acceleration and turns- android senserevert-dabc3590
commit
a2c54eb91c
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.iot.android.sense.event.streams.Speed;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class SpeedData {
|
||||
private float speed; // speed
|
||||
private String turnAxis; // turns
|
||||
private long timestamp;
|
||||
|
||||
SpeedData(float speed, String turnAxis) {
|
||||
this.speed = speed;
|
||||
this.turnAxis = turnAxis;
|
||||
timestamp = new Date().getTime();
|
||||
|
||||
}
|
||||
|
||||
public float getSpeed() {
|
||||
return speed;
|
||||
}
|
||||
|
||||
public void setSpeed(float speed) {
|
||||
this.speed = speed;
|
||||
}
|
||||
|
||||
public String getTurns() {
|
||||
return turnAxis;
|
||||
}
|
||||
|
||||
public void setTurns(String turnAxis) {
|
||||
this.turnAxis = turnAxis;
|
||||
}
|
||||
|
||||
public long getTimeStamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
public void setTimeStamp(long timeStamp) {
|
||||
timestamp = timeStamp;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.iot.android.sense.event.streams.Speed;
|
||||
|
||||
import org.wso2.carbon.iot.android.sense.event.streams.DataReader;
|
||||
import org.wso2.carbon.iot.android.sense.event.streams.Sensor.SensorData;
|
||||
import org.wso2.carbon.iot.android.sense.realtimeviewer.sensorlisting.SupportedSensors;
|
||||
import org.wso2.carbon.iot.android.sense.util.SenseDataHolder;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.hardware.Sensor;
|
||||
import android.hardware.SensorEvent;
|
||||
import android.hardware.SensorEventListener;
|
||||
import android.hardware.SensorManager;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Log;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import android.content.BroadcastReceiver;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.app.Activity;
|
||||
import org.wso2.carbon.iot.android.sense.event.streams.Location.LocationDataReader;
|
||||
|
||||
|
||||
|
||||
public class SpeedDataReader extends DataReader implements SensorEventListener {
|
||||
|
||||
SpeedData data;
|
||||
private SensorManager mSensorManager;
|
||||
private Map<String, SensorData> senseDataStruct = new HashMap<>();
|
||||
private Vector<SensorData> sensorVector = new Vector<>();
|
||||
private static final String TAG = SpeedDataReader.class.getName();
|
||||
private float last_x, last_y, last_z;
|
||||
private long lastUpdate;
|
||||
private String xTurnAxis;
|
||||
float speed;
|
||||
private float x,y,z;
|
||||
Context ctx;
|
||||
private List<Sensor> sensorList = new ArrayList<>();
|
||||
private SupportedSensors supportedSensors = SupportedSensors.getInstance();
|
||||
|
||||
@Override
|
||||
public void onSensorChanged(SensorEvent event) {
|
||||
|
||||
Sensor devSensor = event.sensor;
|
||||
|
||||
if (devSensor.getType() == Sensor.TYPE_ACCELEROMETER) {
|
||||
x = event.values[0];
|
||||
y = event.values[1];
|
||||
z = event.values[2];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public SpeedDataReader(Context context) {
|
||||
ctx = context;
|
||||
SharedPreferences sharedPreferences = ctx.getSharedPreferences(SupportedSensors.SELECTED_SENSORS, Context
|
||||
.MODE_MULTI_PROCESS);
|
||||
Set<String> selectedSet = sharedPreferences.getStringSet(SupportedSensors.SELECTED_SENSORS_BY_USER, null);
|
||||
mSensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);
|
||||
selectedSensorList(selectedSet);
|
||||
for (Sensor sensor : sensorList) {
|
||||
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
|
||||
}
|
||||
|
||||
LocalBroadcastManager.getInstance(ctx).registerReceiver(mMessageReceiver,
|
||||
new IntentFilter("speedUpdate"));
|
||||
|
||||
}
|
||||
|
||||
private void collectSensorData() {
|
||||
for (Sensor sensor : sensorList) {
|
||||
try {
|
||||
if (senseDataStruct.containsKey(sensor.getName())) {
|
||||
SensorData sensorInfo = senseDataStruct.get(sensor.getName());
|
||||
sensorVector.add(sensorInfo);
|
||||
Log.d(TAG, "Sensor Name " + sensor.getName() + ", Type " + sensor.getType() + " " +
|
||||
", sensorValue :" + sensorInfo.getSensorValues());
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
Log.d(TAG, "error on sensors");
|
||||
}
|
||||
}
|
||||
mSensorManager.unregisterListener(this);
|
||||
}
|
||||
|
||||
|
||||
public String getTurns() {
|
||||
|
||||
if(Round(x,4)>10.0000){
|
||||
Log.d("sensor", "X Right axis: " + x);
|
||||
xTurnAxis = "Right";
|
||||
return xTurnAxis;
|
||||
}else if(Round(x,4)<-10.0000){
|
||||
Log.d("sensor", "X Left axis: " + x);
|
||||
xTurnAxis = "Left";
|
||||
return xTurnAxis;
|
||||
}else {
|
||||
xTurnAxis = "No Turns";
|
||||
|
||||
}
|
||||
return xTurnAxis;
|
||||
}
|
||||
|
||||
public float getSpeed(){
|
||||
|
||||
return speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||
// can be safely ignored for this demo
|
||||
}
|
||||
|
||||
public static float Round(float Rval, int Rpl) {
|
||||
float p = (float)Math.pow(10,Rpl);
|
||||
Rval = Rval * p;
|
||||
float tmp = Math.round(Rval);
|
||||
Log.d("round", "round: " + tmp/p);
|
||||
|
||||
return tmp/p;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Log.d(TAG, "running - Device Speed");
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10000);
|
||||
// String trn = getTurns();
|
||||
// double spd = getSpeed();
|
||||
//if (trn != 0 && spd != 0) {
|
||||
data = new SpeedData(getSpeed(), getTurns());
|
||||
SenseDataHolder.getSpeedDataHolder().add(data);
|
||||
collectSensorData();
|
||||
|
||||
//}
|
||||
} catch (InterruptedException e) {
|
||||
// Restore the interrupted status
|
||||
Thread.currentThread().interrupt();
|
||||
Log.e(TAG, " Speed Data Retrieval Failed");
|
||||
}
|
||||
}
|
||||
|
||||
public void selectedSensorList(Set<String> set) {
|
||||
if (set != null) {
|
||||
String[] sensorsSet = set.toArray(new String[set.size()]);
|
||||
for (String s : sensorsSet) {
|
||||
sensorList.add(mSensorManager.getDefaultSensor(supportedSensors.getType(s.toLowerCase())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// Get extra data included in the Intent
|
||||
speed = intent.getFloatExtra("speed",speed);
|
||||
|
||||
Log.d("receiver", "Got message: " + speed);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
Loading…
Reference in new issue