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..28012e5e9e86a37c2bfd485408507faf8b85e0b7 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,25 @@ bool GetSensorFilePaths(const SensorDataLinux& data, |
| return true; |
| } |
| +double GetSensorScalingValues(const char* scale_file_name, |
|
Mikhail
2016/11/10 15:45:02
better to pass std::string
maksims (do not use this acc)
2016/11/11 08:52:02
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; |
| + base::TrimWhitespaceASCII(scale, base::TRIM_ALL, &scale); |
| + double scale_value = 1; |
|
Reilly Grant (use Gerrit)
2016/11/10 16:53:17
There's no reason to declare a new variable here.
maksims (do not use this acc)
2016/11/11 08:52:02
Done.
|
| + if (!base::StringToDouble(scale, &scale_value)) |
| + return scaling_value; |
| + scaling_value = scale_value; |
| + } |
| + |
| + return scaling_value; |
| +} |
| + |
| } // namespace |
| // static |
| @@ -61,11 +79,22 @@ 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))); |
| + |
| + base::FilePath sensor_base_path = sensor_paths.back().DirName(); |
|
Mikhail
2016/11/10 15:45:02
check that sensor_paths is not empty?
maksims (do not use this acc)
2016/11/11 08:52:02
Done.
|
| + double scaling_value = |
| + GetSensorScalingValues(data.sensor_scale_name.c_str(), sensor_base_path); |
| + |
| + 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 +116,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; |
| } |