| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/sys_info.h" | 5 #include "base/sys_info.h" |
| 6 #include "base/version.h" | 6 #include "base/version.h" |
| 7 #include "device/generic_sensor/generic_sensor_consts.h" | 7 #include "device/generic_sensor/generic_sensor_consts.h" |
| 8 #include "device/generic_sensor/linux/sensor_data_linux.h" | 8 #include "device/generic_sensor/linux/sensor_data_linux.h" |
| 9 #include "device/generic_sensor/public/cpp/sensor_reading.h" | 9 #include "device/generic_sensor/public/cpp/sensor_reading.h" |
| 10 | 10 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 std::vector<std::string> file_names_y{"in_accel_y_base_raw", | 67 std::vector<std::string> file_names_y{"in_accel_y_base_raw", |
| 68 "in_accel_y_raw"}; | 68 "in_accel_y_raw"}; |
| 69 std::vector<std::string> file_names_z{"in_accel_z_base_raw", | 69 std::vector<std::string> file_names_z{"in_accel_z_base_raw", |
| 70 "in_accel_z_raw"}; | 70 "in_accel_z_raw"}; |
| 71 | 71 |
| 72 #if defined(OS_CHROMEOS) | 72 #if defined(OS_CHROMEOS) |
| 73 data->sensor_scale_name = "in_accel_base_scale"; | 73 data->sensor_scale_name = "in_accel_base_scale"; |
| 74 data->sensor_frequency_file_name = "in_accel_base_sampling_frequency"; | 74 data->sensor_frequency_file_name = "in_accel_base_sampling_frequency"; |
| 75 data->apply_scaling_func = base::Bind( | 75 data->apply_scaling_func = base::Bind( |
| 76 [](double scaling_value, double offset, SensorReading& reading) { | 76 [](double scaling_value, double offset, SensorReading& reading) { |
| 77 double scaling = (kMeanGravity / scaling_value) + offset; | 77 double scaling = kMeanGravity / scaling_value; |
| 78 reading.values[0] = scaling * reading.values[0]; | 78 reading.values[0] = scaling * (reading.values[0] + offset); |
| 79 reading.values[1] = scaling * reading.values[1]; | 79 reading.values[1] = scaling * (reading.values[1] + offset); |
| 80 reading.values[2] = scaling * reading.values[2]; | 80 reading.values[2] = scaling * (reading.values[2] + offset); |
| 81 }); | 81 }); |
| 82 #else | 82 #else |
| 83 data->sensor_scale_name = "in_accel_scale"; | 83 data->sensor_scale_name = "in_accel_scale"; |
| 84 data->sensor_offset_file_name = "in_accel_offset"; | 84 data->sensor_offset_file_name = "in_accel_offset"; |
| 85 data->sensor_frequency_file_name = "in_accel_sampling_frequency"; | 85 data->sensor_frequency_file_name = "in_accel_sampling_frequency"; |
| 86 data->apply_scaling_func = base::Bind( | 86 data->apply_scaling_func = base::Bind( |
| 87 [](double scaling_value, double offset, SensorReading& reading) { | 87 [](double scaling_value, double offset, SensorReading& reading) { |
| 88 double scaling = scaling_value + offset; | |
| 89 // Adapt Linux reading values to generic sensor api specs. | 88 // Adapt Linux reading values to generic sensor api specs. |
| 90 reading.values[0] = -scaling * reading.values[0]; | 89 reading.values[0] = -scaling_value * (reading.values[0] + offset); |
| 91 reading.values[1] = -scaling * reading.values[1]; | 90 reading.values[1] = -scaling_value * (reading.values[1] + offset); |
| 92 reading.values[2] = -scaling * reading.values[2]; | 91 reading.values[2] = -scaling_value * (reading.values[2] + offset); |
| 93 }); | 92 }); |
| 94 #endif | 93 #endif |
| 95 | 94 |
| 96 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, | 95 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, |
| 97 file_names_z, data); | 96 file_names_z, data); |
| 98 data->default_configuration = | 97 data->default_configuration = |
| 99 PlatformSensorConfiguration(kDefaultAccelerometerFrequencyHz); | 98 PlatformSensorConfiguration(kDefaultAccelerometerFrequencyHz); |
| 100 } | 99 } |
| 101 | 100 |
| 102 void InitGyroscopeSensorData(SensorPathsLinux* data) { | 101 void InitGyroscopeSensorData(SensorPathsLinux* data) { |
| 103 std::vector<std::string> file_names_x{"in_anglvel_x_base_raw", | 102 std::vector<std::string> file_names_x{"in_anglvel_x_base_raw", |
| 104 "in_anglvel_x_raw"}; | 103 "in_anglvel_x_raw"}; |
| 105 std::vector<std::string> file_names_y{"in_anglvel_y_base_raw", | 104 std::vector<std::string> file_names_y{"in_anglvel_y_base_raw", |
| 106 "in_anglvel_y_raw"}; | 105 "in_anglvel_y_raw"}; |
| 107 std::vector<std::string> file_names_z{"in_anglvel_z_base_raw", | 106 std::vector<std::string> file_names_z{"in_anglvel_z_base_raw", |
| 108 "in_anglvel_z_raw"}; | 107 "in_anglvel_z_raw"}; |
| 109 #if defined(OS_CHROMEOS) | 108 #if defined(OS_CHROMEOS) |
| 110 data->sensor_scale_name = "in_anglvel_base_scale"; | 109 data->sensor_scale_name = "in_anglvel_base_scale"; |
| 111 data->sensor_frequency_file_name = "in_anglvel_base_frequency"; | 110 data->sensor_frequency_file_name = "in_anglvel_base_frequency"; |
| 112 data->apply_scaling_func = base::Bind( | 111 data->apply_scaling_func = base::Bind([](double scaling_value, double offset, |
| 113 [](double scaling_value, double offset, SensorReading& reading) { | 112 SensorReading& reading) { |
| 114 double scaling = | 113 double scaling = kMeanGravity * kRadiansInDegreesPerSecond / scaling_value; |
| 115 kMeanGravity * kRadiansInDegreesPerSecond / scaling_value + offset; | 114 // Adapt CrOS reading values to generic sensor api specs. |
| 116 // Adapt CrOS reading values to generic sensor api specs. | 115 reading.values[0] = -scaling * (reading.values[0] + offset); |
| 117 reading.values[0] = -scaling * reading.values[0]; | 116 reading.values[1] = -scaling * (reading.values[1] + offset); |
| 118 reading.values[1] = -scaling * reading.values[1]; | 117 reading.values[2] = -scaling * (reading.values[2] + offset); |
| 119 reading.values[2] = -scaling * reading.values[2]; | 118 }); |
| 120 }); | |
| 121 #else | 119 #else |
| 122 data->sensor_scale_name = "in_anglvel_scale"; | 120 data->sensor_scale_name = "in_anglvel_scale"; |
| 123 data->sensor_offset_file_name = "in_anglvel_offset"; | 121 data->sensor_offset_file_name = "in_anglvel_offset"; |
| 124 data->sensor_frequency_file_name = "in_anglvel_sampling_frequency"; | 122 data->sensor_frequency_file_name = "in_anglvel_sampling_frequency"; |
| 125 data->apply_scaling_func = base::Bind( | 123 data->apply_scaling_func = base::Bind( |
| 126 [](double scaling_value, double offset, SensorReading& reading) { | 124 [](double scaling_value, double offset, SensorReading& reading) { |
| 127 double scaling = scaling_value + offset; | 125 reading.values[0] = scaling_value * (reading.values[0] + offset); |
| 128 reading.values[0] = scaling * reading.values[0]; | 126 reading.values[1] = scaling_value * (reading.values[1] + offset); |
| 129 reading.values[1] = scaling * reading.values[1]; | 127 reading.values[2] = scaling_value * (reading.values[2] + offset); |
| 130 reading.values[2] = scaling * reading.values[2]; | |
| 131 }); | 128 }); |
| 132 #endif | 129 #endif |
| 133 | 130 |
| 134 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, | 131 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, |
| 135 file_names_z, data); | 132 file_names_z, data); |
| 136 data->default_configuration = | 133 data->default_configuration = |
| 137 PlatformSensorConfiguration(kDefaultGyroscopeFrequencyHz); | 134 PlatformSensorConfiguration(kDefaultGyroscopeFrequencyHz); |
| 138 } | 135 } |
| 139 | 136 |
| 140 // TODO(maksims): Verify magnitometer works correctly on a chromebook when | 137 // TODO(maksims): Verify magnitometer works correctly on a chromebook when |
| 141 // I get one with that sensor onboard. | 138 // I get one with that sensor onboard. |
| 142 void InitMagnitometerSensorData(SensorPathsLinux* data) { | 139 void InitMagnitometerSensorData(SensorPathsLinux* data) { |
| 143 std::vector<std::string> file_names_x{"in_magn_x_raw"}; | 140 std::vector<std::string> file_names_x{"in_magn_x_raw"}; |
| 144 std::vector<std::string> file_names_y{"in_magn_y_raw"}; | 141 std::vector<std::string> file_names_y{"in_magn_y_raw"}; |
| 145 std::vector<std::string> file_names_z{"in_magn_z_raw"}; | 142 std::vector<std::string> file_names_z{"in_magn_z_raw"}; |
| 146 | 143 |
| 147 data->sensor_scale_name = "in_magn_scale"; | 144 data->sensor_scale_name = "in_magn_scale"; |
| 148 data->sensor_offset_file_name = "in_magn_offset"; | 145 data->sensor_offset_file_name = "in_magn_offset"; |
| 149 data->sensor_frequency_file_name = "in_magn_sampling_frequency"; | 146 data->sensor_frequency_file_name = "in_magn_sampling_frequency"; |
| 150 data->apply_scaling_func = base::Bind( | 147 data->apply_scaling_func = base::Bind( |
| 151 [](double scaling_value, double offset, SensorReading& reading) { | 148 [](double scaling_value, double offset, SensorReading& reading) { |
| 152 double scaling = scaling_value + offset; | 149 double scaling = scaling_value * kMicroteslaInGauss; |
| 153 reading.values[0] = scaling * kMicroteslaInGauss * reading.values[0]; | 150 reading.values[0] = scaling * (reading.values[0] + offset); |
| 154 reading.values[1] = scaling * kMicroteslaInGauss * reading.values[1]; | 151 reading.values[1] = scaling * (reading.values[1] + offset); |
| 155 reading.values[2] = scaling * kMicroteslaInGauss * reading.values[2]; | 152 reading.values[2] = scaling * (reading.values[2] + offset); |
| 156 }); | 153 }); |
| 157 | 154 |
| 158 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, | 155 MaybeCheckKernelVersionAndAssignFileNames(file_names_x, file_names_y, |
| 159 file_names_z, data); | 156 file_names_z, data); |
| 160 data->default_configuration = | 157 data->default_configuration = |
| 161 PlatformSensorConfiguration(kDefaultMagnetometerFrequencyHz); | 158 PlatformSensorConfiguration(kDefaultMagnetometerFrequencyHz); |
| 162 } | 159 } |
| 163 | 160 |
| 164 } // namespace | 161 } // namespace |
| 165 | 162 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 device_frequency(sensor_device_frequency), | 203 device_frequency(sensor_device_frequency), |
| 207 device_scaling_value(sensor_device_scaling_value), | 204 device_scaling_value(sensor_device_scaling_value), |
| 208 device_offset_value(sensor_device_offset_value), | 205 device_offset_value(sensor_device_offset_value), |
| 209 reporting_mode(mode), | 206 reporting_mode(mode), |
| 210 apply_scaling_func(scaling_func), | 207 apply_scaling_func(scaling_func), |
| 211 device_reading_files(std::move(device_reading_files)) {} | 208 device_reading_files(std::move(device_reading_files)) {} |
| 212 | 209 |
| 213 SensorInfoLinux::~SensorInfoLinux() = default; | 210 SensorInfoLinux::~SensorInfoLinux() = default; |
| 214 | 211 |
| 215 } // namespace device | 212 } // namespace device |
| OLD | NEW |