OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "device/sensors/sensor_manager_android.h" | 5 #include "device/sensors/sensor_manager_android.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/android/context_utils.h" | 9 #include "base/android/context_utils.h" |
10 #include "base/android/jni_android.h" | 10 #include "base/android/jni_android.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 buffer->data.all_available_sensors_are_active = ready; | 48 buffer->data.all_available_sensors_are_active = ready; |
49 buffer->seqlock.WriteEnd(); | 49 buffer->seqlock.WriteEnd(); |
50 } | 50 } |
51 | 51 |
52 } // namespace | 52 } // namespace |
53 | 53 |
54 namespace device { | 54 namespace device { |
55 | 55 |
56 SensorManagerAndroid::SensorManagerAndroid() | 56 SensorManagerAndroid::SensorManagerAndroid() |
57 : number_active_device_motion_sensors_(0), | 57 : number_active_device_motion_sensors_(0), |
58 device_light_buffer_(nullptr), | |
59 device_motion_buffer_(nullptr), | 58 device_motion_buffer_(nullptr), |
60 device_orientation_buffer_(nullptr), | 59 device_orientation_buffer_(nullptr), |
61 motion_buffer_initialized_(false), | 60 motion_buffer_initialized_(false), |
62 orientation_buffer_initialized_(false), | 61 orientation_buffer_initialized_(false), |
63 is_shutdown_(false) { | 62 is_shutdown_(false) { |
64 DCHECK(thread_checker_.CalledOnValidThread()); | 63 DCHECK(thread_checker_.CalledOnValidThread()); |
65 memset(received_motion_data_, 0, sizeof(received_motion_data_)); | 64 memset(received_motion_data_, 0, sizeof(received_motion_data_)); |
66 device_sensors_.Reset(Java_DeviceSensors_getInstance( | 65 device_sensors_.Reset(Java_DeviceSensors_getInstance( |
67 AttachCurrentThread(), base::android::GetApplicationContext())); | 66 AttachCurrentThread(), base::android::GetApplicationContext())); |
68 } | 67 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 device_motion_buffer_->data.rotation_rate_gamma = gamma; | 189 device_motion_buffer_->data.rotation_rate_gamma = gamma; |
191 device_motion_buffer_->data.has_rotation_rate_gamma = true; | 190 device_motion_buffer_->data.has_rotation_rate_gamma = true; |
192 device_motion_buffer_->seqlock.WriteEnd(); | 191 device_motion_buffer_->seqlock.WriteEnd(); |
193 | 192 |
194 if (!motion_buffer_initialized_) { | 193 if (!motion_buffer_initialized_) { |
195 received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] = 1; | 194 received_motion_data_[RECEIVED_MOTION_DATA_ROTATION_RATE] = 1; |
196 CheckMotionBufferReadyToRead(); | 195 CheckMotionBufferReadyToRead(); |
197 } | 196 } |
198 } | 197 } |
199 | 198 |
200 void SensorManagerAndroid::GotLight(JNIEnv*, | |
201 const JavaParamRef<jobject>&, | |
202 double value) { | |
203 base::AutoLock autolock(light_buffer_lock_); | |
204 | |
205 if (!device_light_buffer_) | |
206 return; | |
207 | |
208 device_light_buffer_->seqlock.WriteBegin(); | |
209 device_light_buffer_->data.value = value; | |
210 device_light_buffer_->seqlock.WriteEnd(); | |
211 } | |
212 | |
213 bool SensorManagerAndroid::Start(ConsumerType consumer_type) { | 199 bool SensorManagerAndroid::Start(ConsumerType consumer_type) { |
214 DCHECK(thread_checker_.CalledOnValidThread()); | 200 DCHECK(thread_checker_.CalledOnValidThread()); |
215 DCHECK(!device_sensors_.is_null()); | 201 DCHECK(!device_sensors_.is_null()); |
216 int rate_in_microseconds = (consumer_type == CONSUMER_TYPE_LIGHT) | |
217 ? kLightSensorIntervalMicroseconds | |
218 : kDeviceSensorIntervalMicroseconds; | |
219 return Java_DeviceSensors_start( | 202 return Java_DeviceSensors_start( |
220 AttachCurrentThread(), device_sensors_, reinterpret_cast<intptr_t>(this), | 203 AttachCurrentThread(), device_sensors_, reinterpret_cast<intptr_t>(this), |
221 static_cast<jint>(consumer_type), rate_in_microseconds); | 204 static_cast<jint>(consumer_type), kDeviceSensorIntervalMicroseconds); |
222 } | 205 } |
223 | 206 |
224 void SensorManagerAndroid::Stop(ConsumerType consumer_type) { | 207 void SensorManagerAndroid::Stop(ConsumerType consumer_type) { |
225 DCHECK(thread_checker_.CalledOnValidThread()); | 208 DCHECK(thread_checker_.CalledOnValidThread()); |
226 DCHECK(!device_sensors_.is_null()); | 209 DCHECK(!device_sensors_.is_null()); |
227 Java_DeviceSensors_stop(AttachCurrentThread(), device_sensors_, | 210 Java_DeviceSensors_stop(AttachCurrentThread(), device_sensors_, |
228 static_cast<jint>(consumer_type)); | 211 static_cast<jint>(consumer_type)); |
229 } | 212 } |
230 | 213 |
231 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() { | 214 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() { |
232 DCHECK(thread_checker_.CalledOnValidThread()); | 215 DCHECK(thread_checker_.CalledOnValidThread()); |
233 DCHECK(!device_sensors_.is_null()); | 216 DCHECK(!device_sensors_.is_null()); |
234 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors( | 217 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors( |
235 AttachCurrentThread(), device_sensors_); | 218 AttachCurrentThread(), device_sensors_); |
236 } | 219 } |
237 | 220 |
238 SensorManagerAndroid::OrientationSensorType | 221 SensorManagerAndroid::OrientationSensorType |
239 SensorManagerAndroid::GetOrientationSensorTypeUsed() { | 222 SensorManagerAndroid::GetOrientationSensorTypeUsed() { |
240 DCHECK(!device_sensors_.is_null()); | 223 DCHECK(!device_sensors_.is_null()); |
241 return static_cast<SensorManagerAndroid::OrientationSensorType>( | 224 return static_cast<SensorManagerAndroid::OrientationSensorType>( |
242 Java_DeviceSensors_getOrientationSensorTypeUsed(AttachCurrentThread(), | 225 Java_DeviceSensors_getOrientationSensorTypeUsed(AttachCurrentThread(), |
243 device_sensors_)); | 226 device_sensors_)); |
244 } | 227 } |
245 | 228 |
246 // ----- Shared memory API methods | 229 // ----- Shared memory API methods |
247 | 230 |
248 // --- Device Light | |
249 | |
250 void SensorManagerAndroid::StartFetchingDeviceLightData( | |
251 DeviceLightHardwareBuffer* buffer) { | |
252 DCHECK(thread_checker_.CalledOnValidThread()); | |
253 DCHECK(buffer); | |
254 if (is_shutdown_) | |
255 return; | |
256 | |
257 { | |
258 base::AutoLock autolock(light_buffer_lock_); | |
259 device_light_buffer_ = buffer; | |
260 SetLightBufferValue(-1); | |
261 } | |
262 bool success = Start(CONSUMER_TYPE_LIGHT); | |
263 if (!success) { | |
264 base::AutoLock autolock(light_buffer_lock_); | |
265 SetLightBufferValue(std::numeric_limits<double>::infinity()); | |
266 } | |
267 } | |
268 | |
269 void SensorManagerAndroid::StopFetchingDeviceLightData() { | |
270 DCHECK(thread_checker_.CalledOnValidThread()); | |
271 if (is_shutdown_) | |
272 return; | |
273 | |
274 Stop(CONSUMER_TYPE_LIGHT); | |
275 { | |
276 base::AutoLock autolock(light_buffer_lock_); | |
277 if (device_light_buffer_) { | |
278 SetLightBufferValue(-1); | |
279 device_light_buffer_ = nullptr; | |
280 } | |
281 } | |
282 } | |
283 | |
284 void SensorManagerAndroid::SetLightBufferValue(double lux) { | |
285 device_light_buffer_->seqlock.WriteBegin(); | |
286 device_light_buffer_->data.value = lux; | |
287 device_light_buffer_->seqlock.WriteEnd(); | |
288 } | |
289 | |
290 // --- Device Motion | 231 // --- Device Motion |
291 | 232 |
292 void SensorManagerAndroid::StartFetchingDeviceMotionData( | 233 void SensorManagerAndroid::StartFetchingDeviceMotionData( |
293 DeviceMotionHardwareBuffer* buffer) { | 234 DeviceMotionHardwareBuffer* buffer) { |
294 DCHECK(thread_checker_.CalledOnValidThread()); | 235 DCHECK(thread_checker_.CalledOnValidThread()); |
295 DCHECK(buffer); | 236 DCHECK(buffer); |
296 if (is_shutdown_) | 237 if (is_shutdown_) |
297 return; | 238 return; |
298 | 239 |
299 { | 240 { |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 } | 390 } |
450 } | 391 } |
451 } | 392 } |
452 | 393 |
453 void SensorManagerAndroid::Shutdown() { | 394 void SensorManagerAndroid::Shutdown() { |
454 DCHECK(thread_checker_.CalledOnValidThread()); | 395 DCHECK(thread_checker_.CalledOnValidThread()); |
455 is_shutdown_ = true; | 396 is_shutdown_ = true; |
456 } | 397 } |
457 | 398 |
458 } // namespace device | 399 } // namespace device |
OLD | NEW |