summaryrefslogtreecommitdiffstats
path: root/chromeos/accelerometer
diff options
context:
space:
mode:
authorbattre <battre@chromium.org>2014-09-17 05:54:59 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-17 12:55:16 +0000
commit59fb217ef1e758e1541415b0795b584f30d5a7f0 (patch)
tree4b4c116fe39ff667c443c1a96e7ab5517cdf0da0 /chromeos/accelerometer
parent8268a8d05679be82f45be5922445544ccf3df854 (diff)
downloadchromium_src-59fb217ef1e758e1541415b0795b584f30d5a7f0.zip
chromium_src-59fb217ef1e758e1541415b0795b584f30d5a7f0.tar.gz
chromium_src-59fb217ef1e758e1541415b0795b584f30d5a7f0.tar.bz2
Revert of Use chromeos accelerometer reader and support only lid accelerometer. (patchset #3 id:60001 of https://codereview.chromium.org/574113002/)
Reason for revert: Breaks ChromeOS compilation http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Full/builds/11155/steps/compile/logs/stdio Original issue's description: > Use chromeos accelerometer reader in athena and support only lid accelerometer. > > BUG=380831 > TEST=Glimmer/clapper still work, manually tested not having a base accelerometer. > > Committed: https://crrev.com/2aa8d2e93a06cc7673c872704c04e933bd6cc252 > Cr-Commit-Position: refs/heads/master@{#295258} TBR=derat@chromium.org,oshima@chromium.org,flackr@chromium.org NOTREECHECKS=true NOTRY=true BUG=380831 Review URL: https://codereview.chromium.org/571283006 Cr-Commit-Position: refs/heads/master@{#295262}
Diffstat (limited to 'chromeos/accelerometer')
-rw-r--r--chromeos/accelerometer/accelerometer_reader.cc136
-rw-r--r--chromeos/accelerometer/accelerometer_reader.h18
2 files changed, 58 insertions, 96 deletions
diff --git a/chromeos/accelerometer/accelerometer_reader.cc b/chromeos/accelerometer/accelerometer_reader.cc
index ae5e6a6..24ec490 100644
--- a/chromeos/accelerometer/accelerometer_reader.cc
+++ b/chromeos/accelerometer/accelerometer_reader.cc
@@ -27,29 +27,28 @@ const base::FilePath::CharType kAccelerometerDevicePath[] =
const base::FilePath::CharType kAccelerometerIioBasePath[] =
FILE_PATH_LITERAL("/sys/bus/iio/devices/");
-// File within the device in kAccelerometerIioBasePath containing the scale of
+// Files within the device in kAccelerometerIioBasePath containing the scales of
// the accelerometers.
-const base::FilePath::CharType kScaleNameFormatString[] = "in_accel_%s_scale";
+const base::FilePath::CharType kAccelerometerBaseScaleName[] =
+ FILE_PATH_LITERAL("in_accel_base_scale");
+const base::FilePath::CharType kAccelerometerLidScaleName[] =
+ FILE_PATH_LITERAL("in_accel_lid_scale");
// The filename giving the path to read the scan index of each accelerometer
// axis.
const char kAccelerometerScanIndexPath[] =
"scan_elements/in_accel_%s_%s_index";
-// The names of the accelerometers. Matches up with the enum AccelerometerSource
-// in ui/accelerometer/accelerometer_types.h.
-const char kAccelerometerNames[ui::ACCELEROMETER_SOURCE_COUNT][5] = {
- "lid", "base"};
-
-// The axes on each accelerometer.
-const char kAccelerometerAxes[][2] = {"y", "x", "z"};
+// The names of the accelerometers and axes in the order we want to read them.
+const char kAccelerometerNames[][5] = {"base", "lid"};
+const char kAccelerometerAxes[][2] = {"x", "y", "z"};
+const size_t kTriggerDataValues =
+ arraysize(kAccelerometerNames) * arraysize(kAccelerometerAxes);
+const size_t kTriggerDataLength = kTriggerDataValues * 2;
// The length required to read uint values from configuration files.
const size_t kMaxAsciiUintLength = 21;
-// The size of individual values.
-const size_t kDataSize = 2;
-
// The time to wait between reading the accelerometer.
const int kDelayBetweenReadsMs = 100;
@@ -58,14 +57,15 @@ const float kMeanGravity = 9.80665f;
// Reads |path| to the unsigned int pointed to by |value|. Returns true on
// success or false on failure.
-bool ReadFileToInt(const base::FilePath& path, int* value) {
+bool ReadFileToUint(const base::FilePath& path, unsigned int* value) {
std::string s;
DCHECK(value);
if (!base::ReadFileToString(path, &s, kMaxAsciiUintLength)) {
+ LOG(ERROR) << "Failed to read " << path.value();
return false;
}
base::TrimWhitespaceASCII(s, base::TRIM_ALL, &s);
- if (!base::StringToInt(s, value)) {
+ if (!base::StringToUint(s, value)) {
LOG(ERROR) << "Failed to parse \"" << s << "\" from " << path.value();
return false;
}
@@ -90,62 +90,41 @@ bool DetectAndReadAccelerometerConfiguration(
base::FilePath iio_path(base::FilePath(kAccelerometerIioBasePath).Append(
device));
- // Read configuration of each accelerometer axis from each accelerometer from
- // /sys/bus/iio/devices/iio:deviceX/.
- for (size_t i = 0; i < arraysize(kAccelerometerNames); ++i) {
- // Read scale of accelerometer.
- std::string accelerometer_scale_path = base::StringPrintf(
- kScaleNameFormatString, kAccelerometerNames[i]);
- int scale_divisor;
- if (!ReadFileToInt(iio_path.Append(accelerometer_scale_path.c_str()),
- &scale_divisor)) {
- configuration->data.has[i] = false;
- continue;
- }
+ // Read accelerometer scales
+ if (!ReadFileToUint(iio_path.Append(kAccelerometerBaseScaleName),
+ &(configuration->data.base_scale))) {
+ return false;
+ }
+ if (!ReadFileToUint(iio_path.Append(kAccelerometerLidScaleName),
+ &(configuration->data.lid_scale))) {
+ return false;
+ }
- configuration->data.has[i] = true;
- configuration->data.count++;
+ // Read indices of each accelerometer axis from each accelerometer from
+ // /sys/bus/iio/devices/iio:deviceX/scan_elements/in_accel_{x,y,z}_%s_index
+ for (size_t i = 0; i < arraysize(kAccelerometerNames); ++i) {
for (size_t j = 0; j < arraysize(kAccelerometerAxes); ++j) {
- configuration->data.scale[i][j] = kMeanGravity / scale_divisor;
std::string accelerometer_index_path = base::StringPrintf(
kAccelerometerScanIndexPath, kAccelerometerAxes[j],
kAccelerometerNames[i]);
- if (!ReadFileToInt(iio_path.Append(accelerometer_index_path.c_str()),
- &(configuration->data.index[i][j]))) {
+ unsigned int index = 0;
+ if (!ReadFileToUint(iio_path.Append(accelerometer_index_path.c_str()),
+ &index)) {
return false;
}
- }
- }
-
- // Adjust the directions of accelerometers to match the AccelerometerUpdate
- // type specified in ui/accelerometer/accelerometer_types.h.
- configuration->data.scale[ui::ACCELEROMETER_SOURCE_SCREEN][0] *= -1.0f;
- for (int i = 0; i < 3; ++i) {
- configuration->data.scale[ui::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD][i] *=
- -1.0f;
- }
-
- // Verify indices are within bounds.
- for (int i = 0; i < ui::ACCELEROMETER_SOURCE_COUNT; ++i) {
- if (!configuration->data.has[i])
- continue;
- for (int j = 0; j < 3; ++j) {
- if (configuration->data.index[i][j] < 0 ||
- configuration->data.index[i][j] >=
- 3 * static_cast<int>(configuration->data.count)) {
- LOG(ERROR) << "Field index for " << kAccelerometerNames[i] << " "
- << kAccelerometerAxes[j] << " axis out of bounds.";
+ if (index >= kTriggerDataValues) {
+ LOG(ERROR) << "Field index from " << accelerometer_index_path
+ << " out of bounds: " << index;
return false;
}
+ configuration->data.index.push_back(index);
}
}
- configuration->data.length = kDataSize * 3 * configuration->data.count;
return true;
}
bool ReadAccelerometer(
- scoped_refptr<AccelerometerReader::Reading> reading,
- size_t length) {
+ scoped_refptr<AccelerometerReader::Reading> reading) {
// Initiate the trigger to read accelerometers simultaneously
int bytes_written = base::WriteFile(
base::FilePath(kAccelerometerTriggerPath), "1\n", 2);
@@ -156,10 +135,10 @@ bool ReadAccelerometer(
// Read resulting sample from /dev/cros-ec-accel.
int bytes_read = base::ReadFile(base::FilePath(kAccelerometerDevicePath),
- reading->data, length);
- if (bytes_read < static_cast<int>(length)) {
+ reading->data, kTriggerDataLength);
+ if (bytes_read < static_cast<int>(kTriggerDataLength)) {
LOG(ERROR) << "Read " << bytes_read << " byte(s), expected "
- << length << " bytes from accelerometer";
+ << kTriggerDataLength << " bytes from accelerometer";
return false;
}
return true;
@@ -167,24 +146,16 @@ bool ReadAccelerometer(
} // namespace
-AccelerometerReader::ConfigurationData::ConfigurationData()
- : count(0) {
- for (int i = 0; i < ui::ACCELEROMETER_SOURCE_COUNT; ++i) {
- has[i] = false;
- for (int j = 0; j < 3; ++j) {
- scale[i][j] = 0;
- index[i][j] = -1;
- }
- }
+AccelerometerReader::ConfigurationData::ConfigurationData() {
}
AccelerometerReader::ConfigurationData::~ConfigurationData() {
}
AccelerometerReader::AccelerometerReader(
- base::TaskRunner* blocking_task_runner,
+ base::TaskRunner* task_runner,
AccelerometerReader::Delegate* delegate)
- : task_runner_(blocking_task_runner),
+ : task_runner_(task_runner),
delegate_(delegate),
configuration_(new AccelerometerReader::Configuration()),
weak_factory_(this) {
@@ -215,8 +186,7 @@ void AccelerometerReader::TriggerRead() {
new AccelerometerReader::Reading());
base::PostTaskAndReplyWithResult(task_runner_.get(),
FROM_HERE,
- base::Bind(&ReadAccelerometer, reading,
- configuration_->data.length),
+ base::Bind(&ReadAccelerometer, reading),
base::Bind(&AccelerometerReader::OnDataRead,
weak_factory_.GetWeakPtr(),
reading));
@@ -228,19 +198,17 @@ void AccelerometerReader::OnDataRead(
DCHECK(!task_runner_->RunsTasksOnCurrentThread());
if (success) {
- for (int i = 0; i < ui::ACCELEROMETER_SOURCE_COUNT; ++i) {
- if (!configuration_->data.has[i])
- continue;
-
- int16* values = reinterpret_cast<int16*>(reading->data);
- update_.Set(static_cast<ui::AccelerometerSource>(i),
- values[configuration_->data.index[i][0]] *
- configuration_->data.scale[i][0],
- values[configuration_->data.index[i][1]] *
- configuration_->data.scale[i][1],
- values[configuration_->data.index[i][2]] *
- configuration_->data.scale[i][2]);
- }
+ int16* values = reinterpret_cast<int16*>(reading->data);
+ float lid_scale = kMeanGravity / configuration_->data.lid_scale;
+ update_.Set(ui::ACCELEROMETER_SOURCE_SCREEN,
+ -values[configuration_->data.index[4]] * lid_scale,
+ values[configuration_->data.index[3]] * lid_scale,
+ values[configuration_->data.index[5]] * lid_scale);
+ float base_scale = kMeanGravity / configuration_->data.base_scale;
+ update_.Set(ui::ACCELEROMETER_SOURCE_ATTACHED_KEYBOARD,
+ -values[configuration_->data.index[1]] * base_scale,
+ -values[configuration_->data.index[0]] * base_scale,
+ -values[configuration_->data.index[2]] * base_scale);
delegate_->HandleAccelerometerUpdate(update_);
}
diff --git a/chromeos/accelerometer/accelerometer_reader.h b/chromeos/accelerometer/accelerometer_reader.h
index a66b12c..c3c4efd 100644
--- a/chromeos/accelerometer/accelerometer_reader.h
+++ b/chromeos/accelerometer/accelerometer_reader.h
@@ -5,6 +5,8 @@
#ifndef CHROMEOS_ACCELEROMETER_ACCELEROMETER_READER_H_
#define CHROMEOS_ACCELEROMETER_ACCELEROMETER_READER_H_
+#include <vector>
+
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
@@ -26,20 +28,12 @@ class CHROMEOS_EXPORT AccelerometerReader {
ConfigurationData();
~ConfigurationData();
- // Number of accelerometers on device.
- size_t count;
-
- // Length of accelerometer updates.
- size_t length;
-
- // Which accelerometers are present on device.
- bool has[ui::ACCELEROMETER_SOURCE_COUNT];
-
- // Scale of accelerometers (i.e. raw value * scale = m/s^2).
- float scale[ui::ACCELEROMETER_SOURCE_COUNT][3];
+ // Scale of accelerometers (i.e. raw value * 1.0f / scale = G's).
+ unsigned int base_scale;
+ unsigned int lid_scale;
// Index of each accelerometer axis in data stream.
- int index[ui::ACCELEROMETER_SOURCE_COUNT][3];
+ std::vector<unsigned int> index;
};
typedef base::RefCountedData<ConfigurationData> Configuration;
typedef base::RefCountedData<char[12]> Reading;