Index: third_party/sudden_motion_sensor/sudden_motion_sensor_mac.cc |
diff --git a/content/browser/device_orientation/accelerometer_mac.cc b/third_party/sudden_motion_sensor/sudden_motion_sensor_mac.cc |
similarity index 79% |
copy from content/browser/device_orientation/accelerometer_mac.cc |
copy to third_party/sudden_motion_sensor/sudden_motion_sensor_mac.cc |
index eec575167e4e7100e7f92999958ec8fe8c5f4416..869763f9262ebc8098cd8d2819a61aab38da95c7 100644 |
--- a/content/browser/device_orientation/accelerometer_mac.cc |
+++ b/third_party/sudden_motion_sensor/sudden_motion_sensor_mac.cc |
@@ -48,7 +48,7 @@ |
// Wakefield, MA 01880 |
// (781) 665-0053 |
-#include "content/browser/device_orientation/accelerometer_mac.h" |
+#include "sudden_motion_sensor_mac.h" |
#include <math.h> |
#include <sys/sysctl.h> |
@@ -56,11 +56,8 @@ |
#include "base/logging.h" |
#include "base/mac/scoped_cftyperef.h" |
#include "base/memory/scoped_ptr.h" |
-#include "content/browser/device_orientation/orientation.h" |
-namespace device_orientation { |
- |
-struct AccelerometerMac::GenericMacbookSensor { |
+struct SuddenMotionSensor::GenericMacbookSensor { |
// Name of device to be read. |
const char* service_name; |
@@ -80,7 +77,7 @@ struct AccelerometerMac::GenericMacbookSensor { |
unsigned int record_size; |
}; |
-struct AccelerometerMac::AxisData { |
+struct SuddenMotionSensor::AxisData { |
// Location of the first byte representing the axis in the sensor data. |
int index; |
@@ -89,7 +86,7 @@ struct AccelerometerMac::AxisData { |
}; |
// Sudden Motion Sensor descriptor. |
-struct AccelerometerMac::SensorDescriptor { |
+struct SuddenMotionSensor::SensorDescriptor { |
// Prefix of model to be tested. |
const char* model_name; |
@@ -101,8 +98,8 @@ struct AccelerometerMac::SensorDescriptor { |
}; |
// Typical sensor parameters in MacBook models. |
-const AccelerometerMac::GenericMacbookSensor |
- AccelerometerMac::kGenericSensor = { |
+const SuddenMotionSensor::GenericMacbookSensor |
+ SuddenMotionSensor::kGenericSensor = { |
"SMCMotionSensor", 2, |
0, 251, |
5, 40 |
@@ -111,8 +108,8 @@ const AccelerometerMac::GenericMacbookSensor |
// Supported sensor descriptors. Add entries here to enhance compatibility. |
// Tested in order; place more specific entries before more general ones. (All |
// non-tested entries from SMSLib have been removed.) |
-const AccelerometerMac::SensorDescriptor |
- AccelerometerMac::kSupportedSensors[] = { |
+const SuddenMotionSensor::SensorDescriptor |
+ SuddenMotionSensor::kSupportedSensors[] = { |
// Tested by tommyw on a 13" MacBook. |
{ "MacBook1,1", NULL, { { 0, true }, { 2, true }, { 4, false } } }, |
@@ -212,31 +209,23 @@ const AccelerometerMac::SensorDescriptor |
{ "", NULL, { { 0, true }, { 2, true }, { 4, false } } } |
}; |
-// Create a AccelerometerMac object and return NULL if no valid sensor found. |
-DataFetcher* AccelerometerMac::Create() { |
- scoped_ptr<AccelerometerMac> accelerometer(new AccelerometerMac); |
+// Create a SuddenMotionSensor object and return NULL if no valid sensor found. |
+SuddenMotionSensor* SuddenMotionSensor::Create() { |
+ scoped_ptr<SuddenMotionSensor> accelerometer(new SuddenMotionSensor); |
return accelerometer->Init() ? accelerometer.release() : NULL; |
} |
-AccelerometerMac::~AccelerometerMac() { |
+SuddenMotionSensor::~SuddenMotionSensor() { |
IOServiceClose(io_connection_); |
} |
-AccelerometerMac::AccelerometerMac() |
+SuddenMotionSensor::SuddenMotionSensor() |
: sensor_(NULL), |
io_connection_(0) { |
} |
// Retrieve per-axis accelerometer values. |
-// |
-// Axes and angles are defined according to the W3C DeviceOrientation Draft. |
-// See here: http://dev.w3.org/geo/api/spec-source-orientation.html |
-// |
-// Note: only beta and gamma angles are provided. Alpha is set to zero. |
-// |
-// Returns false in case of error or non-properly initialized object. |
-// |
-bool AccelerometerMac::GetOrientation(Orientation* orientation) { |
+bool SuddenMotionSensor::ReadSensorValues(float axes[3]) { |
DCHECK(sensor_); |
// Reset output record memory buffer. |
@@ -285,61 +274,16 @@ bool AccelerometerMac::GetOrientation(Orientation* orientation) { |
axis_value[i] = -axis_value[i]; |
} |
- // Transform the accelerometer values to W3C draft angles. |
- // |
- // Accelerometer values are just dot products of the sensor axes |
- // by the gravity vector 'g' with the result for the z axis inverted. |
- // |
- // To understand this transformation calculate the 3rd row of the z-x-y |
- // Euler angles rotation matrix (because of the 'g' vector, only 3rd row |
- // affects to the result). Note that z-x-y matrix means R = Ry * Rx * Rz. |
- // Then, assume alpha = 0 and you get this: |
- // |
- // x_acc = sin(gamma) |
- // y_acc = - cos(gamma) * sin(beta) |
- // z_acc = cos(beta) * cos(gamma) |
- // |
- // After that the rest is just a bit of trigonometry. |
- // |
- // Also note that alpha can't be provided but it's assumed to be always zero. |
- // This is necessary in order to provide enough information to solve |
- // the equations. |
- // |
- const double kRad2deg = 180.0 / M_PI; |
- |
- orientation->alpha_ = 0.0; |
- orientation->beta_ = kRad2deg * atan2(-axis_value[1], axis_value[2]); |
- orientation->gamma_ = kRad2deg * asin(axis_value[0]); |
- orientation->absolute_ = false; |
- |
- // Make sure that the interval boundaries comply with the specification. At |
- // this point, beta is [-180, 180] and gamma is [-90, 90], but the spec has |
- // the upper bound open on both. |
- if (orientation->beta_ == 180.0) { |
- orientation->beta_ = -180.0; // -180 == 180 (upside-down) |
- } |
- if (orientation->gamma_ == 90.0) { |
- static double just_less_than_90 = nextafter(90, 0); |
- orientation->gamma_ = just_less_than_90; |
- } |
- |
- // At this point, DCHECKing is paranoia. Never hurts. |
- DCHECK_GE(orientation->beta_, -180.0); |
- DCHECK_LT(orientation->beta_, 180.0); |
- DCHECK_GE(orientation->gamma_, -90.0); |
- DCHECK_LT(orientation->gamma_, 90.0); |
- |
- orientation->can_provide_alpha_ = false; |
- orientation->can_provide_beta_ = true; |
- orientation->can_provide_gamma_ = true; |
- orientation->can_provide_absolute_ = false; |
+ axes[0] = axis_value[0]; |
+ axes[1] = axis_value[1]; |
+ axes[2] = axis_value[2]; |
return true; |
} |
// Probe the local hardware looking for a supported sensor device |
// and initialize an I/O connection to it. |
-bool AccelerometerMac::Init() { |
+bool SuddenMotionSensor::Init() { |
// Request model name from the kernel. |
char local_model[32]; // size from SMSLib |
size_t local_model_size = sizeof(local_model); |
@@ -426,12 +370,12 @@ bool AccelerometerMac::Init() { |
output_record_.resize(kGenericSensor.record_size, 0x00); |
// Try to retrieve the current orientation. |
- Orientation test_orientation; |
- return GetOrientation(&test_orientation); |
+ float test_axes[3]; |
+ return ReadSensorValues(test_axes); |
} |
// Extend the sign of an integer of less than 32 bits to a 32-bit integer. |
-int AccelerometerMac::ExtendSign(int value, size_t size) { |
+int SuddenMotionSensor::ExtendSign(int value, size_t size) { |
switch (size) { |
case 1: |
if (value & 0x00000080) |
@@ -454,5 +398,3 @@ int AccelerometerMac::ExtendSign(int value, size_t size) { |
return value; |
} |
- |
-} // namespace device_orientation |