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

Unified Diff: device/generic_sensor/linux/sensor_data_linux.cc

Issue 2533793002: [sensors](CrOS/Linux) Implement Sensor device manager for sensors (Closed)
Patch Set: construct manager Created 4 years 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
Index: device/generic_sensor/linux/sensor_data_linux.cc
diff --git a/device/generic_sensor/linux/sensor_data_linux.cc b/device/generic_sensor/linux/sensor_data_linux.cc
index 1d937c8b25ccc7ea9ea31f139e67b4609a67bf16..8a78ea731de413bfcd2757e4930afa137998ddd7 100644
--- a/device/generic_sensor/linux/sensor_data_linux.cc
+++ b/device/generic_sensor/linux/sensor_data_linux.cc
@@ -23,12 +23,11 @@ const char kChangedAxisKernelVersion[] = "3.18.0";
const base::FilePath::CharType* kSensorsBasePath =
FILE_PATH_LITERAL("/sys/bus/iio/devices");
-void InitAmbientLightSensorData(SensorDataLinux* data) {
+void InitAmbientLightSensorData(SensorPathsLinux* data) {
std::vector<std::string> file_names{
"in_illuminance0_input", "in_illuminance_input", "in_illuminance0_raw",
"in_illuminance_raw"};
data->sensor_file_names.push_back(std::move(file_names));
- data->reporting_mode = mojom::ReportingMode::ON_CHANGE;
data->default_configuration =
PlatformSensorConfiguration(kDefaultAmbientLightFrequencyHz);
}
@@ -41,7 +40,7 @@ void MaybeCheckKernelVersionAndAssignFileNames(
const std::vector<std::string>& file_names_x,
const std::vector<std::string>& file_names_y,
const std::vector<std::string>& file_names_z,
- SensorDataLinux* data) {
+ SensorPathsLinux* data) {
#if defined(OS_CHROMEOS)
const base::Version checked_kernel_version(kChangedAxisKernelVersion);
DCHECK(checked_kernel_version.IsValid());
@@ -62,7 +61,7 @@ void MaybeCheckKernelVersionAndAssignFileNames(
}
// TODO(maksims): add support for lid accelerometer on chromeos.
-void InitAccelerometerSensorData(SensorDataLinux* data) {
+void InitAccelerometerSensorData(SensorPathsLinux* data) {
std::vector<std::string> file_names_x{"in_accel_x_base_raw",
"in_accel_x_raw"};
std::vector<std::string> file_names_y{"in_accel_y_base_raw",
@@ -72,32 +71,35 @@ void InitAccelerometerSensorData(SensorDataLinux* data) {
#if defined(OS_CHROMEOS)
data->sensor_scale_name = "in_accel_base_scale";
- data->apply_scaling_func =
- base::Bind([](double scaling_value, SensorReading& reading) {
- double scaling = kMeanGravity / scaling_value;
+ data->sensor_frequency_file_name = "in_accel_base_sampling_frequency";
+ data->apply_scaling_func = base::Bind(
+ [](double scaling_value, double offset, SensorReading& reading) {
+ double scaling = (kMeanGravity / scaling_value) + offset;
reading.values[0] = scaling * reading.values[0];
reading.values[1] = scaling * reading.values[1];
reading.values[2] = scaling * reading.values[2];
});
#else
data->sensor_scale_name = "in_accel_scale";
- data->apply_scaling_func =
- base::Bind([](double scaling_value, SensorReading& reading) {
+ data->sensor_offset_file_name = "in_accel_offset";
+ data->sensor_frequency_file_name = "in_accel_sampling_frequency";
+ data->apply_scaling_func = base::Bind(
+ [](double scaling_value, double offset, SensorReading& reading) {
+ double scaling = scaling_value + offset;
// Adapt Linux reading values to generic sensor api specs.
- reading.values[0] = -scaling_value * reading.values[0];
- reading.values[1] = -scaling_value * reading.values[1];
- reading.values[2] = -scaling_value * reading.values[2];
+ reading.values[0] = -scaling * reading.values[0];
+ reading.values[1] = -scaling * reading.values[1];
+ reading.values[2] = -scaling * reading.values[2];
});
#endif
MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y,
file_names_z, data);
- data->reporting_mode = mojom::ReportingMode::CONTINUOUS;
data->default_configuration =
PlatformSensorConfiguration(kDefaultAccelerometerFrequencyHz);
}
-void InitGyroscopeSensorData(SensorDataLinux* data) {
+void InitGyroscopeSensorData(SensorPathsLinux* data) {
std::vector<std::string> file_names_x{"in_anglvel_x_base_raw",
"in_anglvel_x_raw"};
std::vector<std::string> file_names_y{"in_anglvel_y_base_raw",
@@ -106,10 +108,11 @@ void InitGyroscopeSensorData(SensorDataLinux* data) {
"in_anglvel_z_raw"};
#if defined(OS_CHROMEOS)
data->sensor_scale_name = "in_anglvel_base_scale";
- data->apply_scaling_func =
- base::Bind([](double scaling_value, SensorReading& reading) {
+ data->sensor_frequency_file_name = "in_anglvel_base_frequency";
+ data->apply_scaling_func = base::Bind(
+ [](double scaling_value, double offset, SensorReading& reading) {
double scaling =
- kMeanGravity * kRadiansInDegreesPerSecond / scaling_value;
+ kMeanGravity * kRadiansInDegreesPerSecond / scaling_value + offset;
// Adapt CrOS reading values to generic sensor api specs.
reading.values[0] = -scaling * reading.values[0];
reading.values[1] = -scaling * reading.values[1];
@@ -117,54 +120,60 @@ void InitGyroscopeSensorData(SensorDataLinux* data) {
});
#else
data->sensor_scale_name = "in_anglvel_scale";
- data->apply_scaling_func =
- base::Bind([](double scaling_value, SensorReading& reading) {
- reading.values[0] = scaling_value * reading.values[0];
- reading.values[1] = scaling_value * reading.values[1];
- reading.values[2] = scaling_value * reading.values[2];
+ data->sensor_offset_file_name = "in_anglvel_offset";
+ data->sensor_frequency_file_name = "in_anglvel_sampling_frequency";
+ data->apply_scaling_func = base::Bind(
+ [](double scaling_value, double offset, SensorReading& reading) {
+ double scaling = scaling_value + offset;
+ reading.values[0] = scaling * reading.values[0];
+ reading.values[1] = scaling * reading.values[1];
+ reading.values[2] = scaling * reading.values[2];
});
#endif
MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y,
file_names_z, data);
- data->reporting_mode = mojom::ReportingMode::CONTINUOUS;
data->default_configuration =
PlatformSensorConfiguration(kDefaultGyroscopeFrequencyHz);
}
// TODO(maksims): Verify magnitometer works correctly on a chromebook when
// I get one with that sensor onboard.
-void InitMagnitometerSensorData(SensorDataLinux* data) {
+void InitMagnitometerSensorData(SensorPathsLinux* data) {
std::vector<std::string> file_names_x{"in_magn_x_raw"};
std::vector<std::string> file_names_y{"in_magn_y_raw"};
std::vector<std::string> file_names_z{"in_magn_z_raw"};
data->sensor_scale_name = "in_magn_scale";
- data->apply_scaling_func = base::Bind([](double scaling_value,
- SensorReading& reading) {
- reading.values[0] = scaling_value * kMicroteslaInGauss * reading.values[0];
- reading.values[1] = scaling_value * kMicroteslaInGauss * reading.values[1];
- reading.values[2] = scaling_value * kMicroteslaInGauss * reading.values[2];
- });
+ data->sensor_offset_file_name = "in_magn_offset";
+ data->sensor_frequency_file_name = "in_magn_sampling_frequency";
+ data->apply_scaling_func = base::Bind(
+ [](double scaling_value, double offset, SensorReading& reading) {
+ double scaling = scaling_value + offset;
+ reading.values[0] = scaling * kMicroteslaInGauss * reading.values[0];
+ reading.values[1] = scaling * kMicroteslaInGauss * reading.values[1];
+ reading.values[2] = scaling * kMicroteslaInGauss * reading.values[2];
+ });
MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y,
file_names_z, data);
- data->reporting_mode = mojom::ReportingMode::CONTINUOUS;
data->default_configuration =
PlatformSensorConfiguration(kDefaultMagnetometerFrequencyHz);
}
} // namespace
-SensorDataLinux::SensorDataLinux() : base_path_sensor_linux(kSensorsBasePath) {}
+SensorPathsLinux::SensorPathsLinux()
+ : base_path_sensor_linux(kSensorsBasePath) {}
-SensorDataLinux::~SensorDataLinux() = default;
+SensorPathsLinux::~SensorPathsLinux() = default;
-SensorDataLinux::SensorDataLinux(const SensorDataLinux& other) = default;
+SensorPathsLinux::SensorPathsLinux(const SensorPathsLinux& other) = default;
-bool InitSensorData(SensorType type, SensorDataLinux* data) {
+bool InitSensorData(SensorType type, SensorPathsLinux* data) {
DCHECK(data);
+ data->type = type;
switch (type) {
case SensorType::AMBIENT_LIGHT:
InitAmbientLightSensorData(data);
@@ -179,11 +188,28 @@ bool InitSensorData(SensorType type, SensorDataLinux* data) {
InitMagnitometerSensorData(data);
break;
default:
- NOTIMPLEMENTED();
return false;
}
return true;
}
+SensorInfoLinux::SensorInfoLinux(
+ const std::string& sensor_device_node,
+ double sensor_device_frequency,
+ double sensor_device_scaling_value,
+ double sensor_device_offset_value,
+ mojom::ReportingMode mode,
+ SensorPathsLinux::ReaderFunctor scaling_func,
+ std::vector<base::FilePath> device_reading_files)
+ : device_node(sensor_device_node),
+ device_frequency(sensor_device_frequency),
+ device_scaling_value(sensor_device_scaling_value),
+ device_offset_value(sensor_device_offset_value),
+ reporting_mode(mode),
+ apply_scaling_func(scaling_func),
+ device_reading_files(std::move(device_reading_files)) {}
+
+SensorInfoLinux::~SensorInfoLinux() = default;
+
} // namespace device

Powered by Google App Engine
This is Rietveld 408576698