Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: device/generic_sensor/linux/sensor_data_linux.cc

Issue 2570693004: [sensors](CrOS/Linux) Fix calculations with offset (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | device/generic_sensor/platform_sensor_and_provider_unittest_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698