diff options
author | battre <battre@chromium.org> | 2014-09-17 05:54:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-17 12:55:16 +0000 |
commit | 59fb217ef1e758e1541415b0795b584f30d5a7f0 (patch) | |
tree | 4b4c116fe39ff667c443c1a96e7ab5517cdf0da0 /chromeos/accelerometer | |
parent | 8268a8d05679be82f45be5922445544ccf3df854 (diff) | |
download | chromium_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.cc | 136 | ||||
-rw-r--r-- | chromeos/accelerometer/accelerometer_reader.h | 18 |
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; |