Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: third_party/sudden_motion_sensor/sudden_motion_sensor_mac.cc

Issue 9844020: Move the Sudden Motion Sensor library into third_party. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DEPS: convert line endings Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/sudden_motion_sensor/sudden_motion_sensor_mac.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « third_party/sudden_motion_sensor/sudden_motion_sensor_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698