Chromium Code Reviews| Index: device/generic_sensor/linux/platform_sensor_utils_linux.cc |
| diff --git a/device/generic_sensor/linux/platform_sensor_utils_linux.cc b/device/generic_sensor/linux/platform_sensor_utils_linux.cc |
| index 49511ce8862187696eaafd1c764aee0711b44b88..d787095d731dac429c3e5a4932bea9e6c84ce656 100644 |
| --- a/device/generic_sensor/linux/platform_sensor_utils_linux.cc |
| +++ b/device/generic_sensor/linux/platform_sensor_utils_linux.cc |
| @@ -9,7 +9,6 @@ |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| #include "base/threading/thread_restrictions.h" |
| -#include "device/generic_sensor/linux/sensor_data_linux.h" |
| #include "device/generic_sensor/public/cpp/sensor_reading.h" |
| namespace device { |
| @@ -52,6 +51,23 @@ bool GetSensorFilePaths(const SensorDataLinux& data, |
| return true; |
| } |
| +double GetSensorScalingValues(std::string scale_file_name, |
|
Mikhail
2016/11/11 09:07:41
const std::string&
maksims (do not use this acc)
2016/11/11 09:27:45
Done.
|
| + const base::FilePath& sensor_base_path) { |
| + double scaling_value = 1; |
| + |
| + base::FilePath scale_path = sensor_base_path.Append(scale_file_name); |
| + if (base::PathExists(scale_path)) { |
| + std::string scale; |
| + if (!base::ReadFileToString(scale_path, &scale)) |
| + return scaling_value; |
|
Mikhail
2016/11/11 09:07:41
This looks like a fatal error, we should handle it
maksims (do not use this acc)
2016/11/11 09:27:45
Done.
|
| + base::TrimWhitespaceASCII(scale, base::TRIM_ALL, &scale); |
| + |
| + if (!base::StringToDouble(scale, &scaling_value)) |
|
Mikhail
2016/11/11 09:07:41
Ditto.
maksims (do not use this acc)
2016/11/11 09:27:45
Done.
|
| + scaling_value = 1; |
| + } |
| + return scaling_value; |
| +} |
| + |
| } // namespace |
| // static |
| @@ -61,11 +77,23 @@ std::unique_ptr<SensorReader> SensorReader::Create( |
| std::vector<base::FilePath> sensor_paths; |
| if (!GetSensorFilePaths(data, &sensor_paths)) |
| return nullptr; |
| - return base::WrapUnique(new SensorReader(std::move(sensor_paths))); |
| + |
| + DCHECK(!sensor_paths.empty()); |
| + base::FilePath sensor_base_path = sensor_paths.back().DirName(); |
| + double scaling_value = |
| + GetSensorScalingValues(data.sensor_scale_name.c_str(), sensor_base_path); |
|
Mikhail
2016/11/11 09:07:41
GetSensorScalingValues(data.sensor_scale_name, ..
|
| + |
| + return base::WrapUnique(new SensorReader( |
| + std::move(sensor_paths), scaling_value, data.apply_scaling_func)); |
| } |
| -SensorReader::SensorReader(std::vector<base::FilePath> sensor_paths) |
| - : sensor_paths_(std::move(sensor_paths)) { |
| +SensorReader::SensorReader( |
| + std::vector<base::FilePath> sensor_paths, |
| + double scaling_value, |
| + const SensorDataLinux::ReaderFunctor& apply_scaling_func) |
| + : sensor_paths_(std::move(sensor_paths)), |
| + scaling_value_(scaling_value), |
| + apply_scaling_func_(apply_scaling_func) { |
| DCHECK(!sensor_paths_.empty()); |
| } |
| @@ -87,6 +115,8 @@ bool SensorReader::ReadSensorReading(SensorReading* reading) { |
| return false; |
| readings.values[i++] = new_value; |
| } |
| + if (!apply_scaling_func_.is_null()) |
| + apply_scaling_func_.Run(scaling_value_, readings); |
| *reading = readings; |
| return true; |
| } |