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

Unified Diff: chromeos/accelerometer/accelerometer_reader.cc

Issue 2198543002: Accelerometer: find trigger name (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Accelerometer: find trigger name Created 4 years, 5 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/accelerometer/accelerometer_reader.cc
diff --git a/chromeos/accelerometer/accelerometer_reader.cc b/chromeos/accelerometer/accelerometer_reader.cc
index e07eb53e78b652d70a5a19068f6d56f29a16d59a..8e46534476819b7862dcc0f640394553e39040f0 100644
--- a/chromeos/accelerometer/accelerometer_reader.cc
+++ b/chromeos/accelerometer/accelerometer_reader.cc
@@ -32,13 +32,18 @@ namespace chromeos {
namespace {
// Paths to access necessary data from the accelerometer device.
-const base::FilePath::CharType kAccelerometerTriggerPath[] =
- FILE_PATH_LITERAL("/sys/bus/iio/devices/trigger0/trigger_now");
const base::FilePath::CharType kAccelerometerDevicePath[] =
FILE_PATH_LITERAL("/dev/cros-ec-accel");
const base::FilePath::CharType kAccelerometerIioBasePath[] =
FILE_PATH_LITERAL("/sys/bus/iio/devices/");
+// Trigger created by accelerometer-init.sh to query the sensors.
+const char kTriggerPrefix[] = "trigger";
+const char kTriggerName[] = "sysfstrig0\n";
+
+// Sysfs entry to trigger readings.
+const base::FilePath::CharType kTriggerNow[] = "trigger_now";
+
// This is the per source scale file in use on kernels older than 3.18. We
// should remove this when all devices having accelerometers are on kernel 3.18
// or later or have been patched to use new format: http://crbug.com/510831
@@ -165,6 +170,9 @@ class AccelerometerFileReader
// Number of accelerometers on device.
size_t count;
+ // sysfs entry to trigger readings.
+ base::FilePath trigger_now;
+
// Which accelerometers are present on device.
bool has[ACCELEROMETER_SOURCE_COUNT];
@@ -240,10 +248,39 @@ void AccelerometerFileReader::Initialize(
}
return;
}
- if (!base::PathExists(base::FilePath(kAccelerometerTriggerPath))) {
+
+ // Find trigger to use:
+ base::FileEnumerator trigger_dir(base::FilePath(kAccelerometerIioBasePath),
+ false, base::FileEnumerator::DIRECTORIES);
+ std::string prefix = kTriggerPrefix;
+ for (base::FilePath name = trigger_dir.Next(); !name.empty();
+ name = trigger_dir.Next()) {
+ if (name.BaseName().value().substr(0, prefix.size()) != prefix)
+ continue;
+ std::string trigger_name;
+ if (!base::ReadFileToString(name.Append("name"), &trigger_name)) {
+ if (base::SysInfo::IsRunningOnChromeOS()) {
+ LOG(WARNING) << "Unable to read the trigger name at " << name.value();
+ }
+ continue;
+ }
+ if (trigger_name == kTriggerName) {
+ base::FilePath trigger_now = name.Append(kTriggerNow);
+ if (!base::PathExists(trigger_now)) {
+ if (base::SysInfo::IsRunningOnChromeOS()) {
+ LOG(ERROR) << "Accelerometer trigger does not exist at "
+ << trigger_now.value();
+ }
+ return;
+ } else {
+ configuration_.trigger_now = trigger_now;
+ break;
+ }
+ }
+ }
+ if (configuration_.trigger_now.empty()) {
if (base::SysInfo::IsRunningOnChromeOS()) {
- LOG(ERROR) << "Accelerometer trigger does not exist at"
- << kAccelerometerTriggerPath;
+ LOG(ERROR) << "Accelerometer trigger not found";
}
return;
}
@@ -426,8 +463,7 @@ void AccelerometerFileReader::ReadFileAndNotify() {
DCHECK(initialization_successful_);
// Initiate the trigger to read accelerometers simultaneously
- int bytes_written = base::WriteFile(
- base::FilePath(kAccelerometerTriggerPath), "1\n", 2);
+ int bytes_written = base::WriteFile(configuration_.trigger_now, "1\n", 2);
if (bytes_written < 2) {
PLOG(ERROR) << "Accelerometer trigger failure: " << bytes_written;
return;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698