Revert "be more robust with handling unknown sensors"

This reverts commit 80ba0a6bae.
This commit is contained in:
Jean-Baptiste Queru
2013-08-02 17:31:54 -07:00
parent 83485dc920
commit 17548b3c70
2 changed files with 23 additions and 63 deletions

View File

@ -204,71 +204,37 @@ public final class Sensor {
// TODO(): The following arrays are fragile and error-prone. This needs to be refactored.
// Note: This needs to be updated, whenever a new sensor is added.
// Holds the reporting mode and maximum length of the values array
// associated with
// {@link SensorEvent} or {@link TriggerEvent} for the Sensor
private static final int[] sSensorReportingModes = {
0, 0, // padding because sensor types start at 1
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_ACCELEROMETER
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_GEOMAGNETIC_FIELD
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_ORIENTATION
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_GYROSCOPE
REPORTING_MODE_ON_CHANGE, 3, // SENSOR_TYPE_LIGHT
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_PRESSURE
REPORTING_MODE_ON_CHANGE, 3, // SENSOR_TYPE_TEMPERATURE
REPORTING_MODE_ON_CHANGE, 3, // SENSOR_TYPE_PROXIMITY
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_GRAVITY
REPORTING_MODE_CONTINUOUS, 3, // SENSOR_TYPE_LINEAR_ACCELERATION
REPORTING_MODE_CONTINUOUS, 5, // SENSOR_TYPE_ROTATION_VECTOR
REPORTING_MODE_ON_CHANGE, 3, // SENSOR_TYPE_RELATIVE_HUMIDITY
REPORTING_MODE_ON_CHANGE, 3, // SENSOR_TYPE_AMBIENT_TEMPERATURE
REPORTING_MODE_CONTINUOUS, 6, // SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED
REPORTING_MODE_CONTINUOUS, 4, // SENSOR_TYPE_GAME_ROTATION_VECTOR
REPORTING_MODE_CONTINUOUS, 6, // SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
REPORTING_MODE_ONE_SHOT, 1, // SENSOR_TYPE_SIGNIFICANT_MOTION
// added post 4.3
REPORTING_MODE_ON_CHANGE, 1, // SENSOR_TYPE_STEP_DETECTOR
REPORTING_MODE_ON_CHANGE, 1, // SENSOR_TYPE_STEP_COUNTER
REPORTING_MODE_CONTINUOUS, 5 // SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR
};
private static int[] sSensorReportingModes = {
REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS,
REPORTING_MODE_CONTINUOUS, REPORTING_MODE_ON_CHANGE, REPORTING_MODE_CONTINUOUS,
REPORTING_MODE_ON_CHANGE, REPORTING_MODE_ON_CHANGE, REPORTING_MODE_CONTINUOUS,
REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS, REPORTING_MODE_ON_CHANGE,
REPORTING_MODE_ON_CHANGE, REPORTING_MODE_CONTINUOUS, REPORTING_MODE_CONTINUOUS,
REPORTING_MODE_CONTINUOUS, REPORTING_MODE_ONE_SHOT };
// Note: This needs to be updated, whenever a new sensor is added.
// Holds the maximum length of the values array associated with {@link SensorEvent} or
// {@link TriggerEvent} for the Sensor
private static int[] sMaxLengthValuesArray = {
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3,
6, 4, 6, 1 };
static int getReportingMode(Sensor sensor) {
int offset = sensor.mType * 2;
if (offset >= sSensorReportingModes.length) {
// we don't know about this sensor, so this is probably a
// vendor-defined sensor, in that case, we figure out the reporting
// mode from the sensor meta-data.
int minDelay = sensor.mMinDelay;
if (minDelay == 0) {
return REPORTING_MODE_ON_CHANGE;
} else if (minDelay < 0) {
return REPORTING_MODE_ONE_SHOT;
} else {
return REPORTING_MODE_CONTINUOUS;
}
}
return sSensorReportingModes[offset];
// mType starts from offset 1.
return sSensorReportingModes[sensor.mType - 1];
}
static int getMaxLengthValuesArray(Sensor sensor, int sdkLevel) {
int type = sensor.mType;
// mType starts from offset 1.
int len = sMaxLengthValuesArray[sensor.mType - 1];
// RotationVector length has changed to 3 to 5 for API level 18
// Set it to 3 for backward compatibility.
if (type == Sensor.TYPE_ROTATION_VECTOR &&
if (sensor.getType() == Sensor.TYPE_ROTATION_VECTOR &&
sdkLevel <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return 3;
len = 3;
}
int offset = type * 2 + 1;
if (offset >= sSensorReportingModes.length) {
// we don't know about this sensor, so this is probably a
// vendor-defined sensor, in that case, we don't know how many value
// it has
// so we return the maximum and assume the app will know.
// FIXME: sensor HAL should advertise how much data is returned per
// sensor
return 16;
}
return sSensorReportingModes[offset];
return len;
}
/* Some of these fields are set only by the native bindings in

View File

@ -142,13 +142,7 @@ private:
while ((n = q->read(buffer, 16)) > 0) {
for (int i=0 ; i<n ; i++) {
if (buffer[i].type == SENSOR_TYPE_STEP_COUNTER) {
// step-counter returns a uint64, but the java API only deals with floats
float value = float(buffer[i].u64.step_counter);
env->SetFloatArrayRegion(mScratch, 0, 1, &value);
} else {
env->SetFloatArrayRegion(mScratch, 0, 16, buffer[i].data);
}
env->SetFloatArrayRegion(mScratch, 0, 16, buffer[i].data);
env->CallVoidMethod(mReceiverObject,
gBaseEventQueueClassInfo.dispatchSensorEvent,