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..ed17bca46e8a8af96139688cd9416e6a3258b7e3 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,24 @@ bool GetSensorFilePaths(const SensorDataLinux& data, |
| return true; |
| } |
| +double GetSensorScalingValues(const std::string& scale_file_name, |
|
Mikhail
2016/11/11 10:49:11
GetSensorScalingValue // it returns one value, ri
Mikhail
2016/11/11 10:49:11
add a comment describing what it returns in what c
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
|
| + const base::FilePath& sensor_base_path) { |
| + double scaling_value = 1; |
| + base::FilePath scale_path = sensor_base_path.Append(scale_file_name); |
|
Mikhail
2016/11/11 10:49:11
maybe it would be better to pass 'scale_path' as a
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
|
| + if (base::PathExists(scale_path)) { |
|
Mikhail
2016/11/11 10:49:11
would be simpler if:
if (!base::PathExists(scale_
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
|
| + std::string scale; |
| + if (!base::ReadFileToString(scale_path, &scale)) { |
| + scaling_value = -1; |
|
Mikhail
2016/11/11 10:49:11
return -1;
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
|
| + return scaling_value; |
| + } |
| + |
| + base::TrimWhitespaceASCII(scale, base::TRIM_ALL, &scale); |
| + if (!base::StringToDouble(scale, &scaling_value)) |
| + scaling_value = -1; |
|
Mikhail
2016/11/11 10:49:11
return -1;
maksims (do not use this acc)
2016/11/11 12:11:48
Done.
|
| + } |
| + return scaling_value; |
| +} |
| + |
| } // namespace |
| // static |
| @@ -61,11 +78,27 @@ 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, sensor_base_path); |
| + |
| + // A file with a scaling value is found, but couldn't be read. |
| + if (scaling_value == -1) |
| + return nullptr; |
| + |
| + 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 +120,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; |
| } |