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 |