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

Side by Side Diff: device/generic_sensor/platform_sensor_ambient_light_mac.cc

Issue 2417643006: [sensors][mac] Make sure to update the sensor value when initializing the sensor. (Closed)
Patch Set: Created 4 years, 2 months 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 | « device/generic_sensor/platform_sensor_ambient_light_mac.h ('k') | no next file » | 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 "device/generic_sensor/platform_sensor_ambient_light_mac.h" 5 #include "device/generic_sensor/platform_sensor_ambient_light_mac.h"
6 6
7 #include <IOKit/IOMessage.h> 7 #include <IOKit/IOMessage.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "device/base/synchronization/shared_memory_seqlock_buffer.h" 10 #include "device/base/synchronization/shared_memory_seqlock_buffer.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 default_configuration.set_frequency(kDefaultAmbientLightFrequencyHz); 47 default_configuration.set_frequency(kDefaultAmbientLightFrequencyHz);
48 return default_configuration; 48 return default_configuration;
49 } 49 }
50 50
51 void PlatformSensorAmbientLightMac::IOServiceCallback(void* context, 51 void PlatformSensorAmbientLightMac::IOServiceCallback(void* context,
52 io_service_t service, 52 io_service_t service,
53 natural_t message_type, 53 natural_t message_type,
54 void* message_argument) { 54 void* message_argument) {
55 PlatformSensorAmbientLightMac* sensor = 55 PlatformSensorAmbientLightMac* sensor =
56 static_cast<PlatformSensorAmbientLightMac*>(context); 56 static_cast<PlatformSensorAmbientLightMac*>(context);
57 uint32_t scalar_output_count = 2; 57 sensor->ReadSensorValue();
timvolodine 2016/10/18 19:26:13 would it make sense to make ReadSensorValue return
darktears 2016/10/18 19:56:58 The idea here was that at some point we will need
58 uint64_t lux_values[2];
59 kern_return_t kr = IOConnectCallMethod(
60 sensor->light_sensor_object_, LmuFunctionIndex::kGetSensorReadingID,
61 nullptr, 0, nullptr, 0, lux_values, &scalar_output_count, nullptr, 0);
62
63 if (kr == KERN_SUCCESS)
64 sensor->UpdateReading(lux_values);
65 } 58 }
66 59
67 bool PlatformSensorAmbientLightMac::StartSensor( 60 bool PlatformSensorAmbientLightMac::StartSensor(
68 const PlatformSensorConfiguration& configuration) { 61 const PlatformSensorConfiguration& configuration) {
69 // Tested and verified by riju that the following call works on 62 // Tested and verified by riju that the following call works on
70 // MacBookPro9,1 : Macbook Pro 15" (Mid 2012 model) 63 // MacBookPro9,1 : Macbook Pro 15" (Mid 2012 model)
71 // MacBookPro10,1 : Macbook Pro 15" (Retina Display, Early 2013 model). 64 // MacBookPro10,1 : Macbook Pro 15" (Retina Display, Early 2013 model).
72 // MacBookPro10,2 : Macbook Pro 13" (Retina Display, Early 2013 model). 65 // MacBookPro10,2 : Macbook Pro 13" (Retina Display, Early 2013 model).
73 // MacBookAir5,2 : Macbook Air 13" (Mid 2012 model) (by François Beaufort). 66 // MacBookAir5,2 : Macbook Air 13" (Mid 2012 model) (by François Beaufort).
74 // MacBookAir6,2 : Macbook Air 13" (Mid 2013 model). 67 // MacBookAir6,2 : Macbook Air 13" (Mid 2013 model).
(...skipping 18 matching lines...) Expand all
93 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)); 86 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0));
94 87
95 kern_return_t kr = IOServiceAddInterestNotification( 88 kern_return_t kr = IOServiceAddInterestNotification(
96 light_sensor_port_.get(), light_sensor_service_, kIOGeneralInterest, 89 light_sensor_port_.get(), light_sensor_service_, kIOGeneralInterest,
97 IOServiceCallback, this, light_sensor_notification_.InitializeInto()); 90 IOServiceCallback, this, light_sensor_notification_.InitializeInto());
98 if (kr != KERN_SUCCESS) 91 if (kr != KERN_SUCCESS)
99 return false; 92 return false;
100 93
101 kr = IOServiceOpen(light_sensor_service_, mach_task_self(), 0, 94 kr = IOServiceOpen(light_sensor_service_, mach_task_self(), 0,
102 light_sensor_object_.InitializeInto()); 95 light_sensor_object_.InitializeInto());
96 if (kr != KERN_SUCCESS)
97 return false;
103 98
104 return kr == KERN_SUCCESS; 99 return ReadSensorValue();
timvolodine 2016/10/18 19:26:13 is it possible that ReadSensorValue returns false
darktears 2016/10/18 19:56:58 Yes then we can clean it up.
105 } 100 }
106 101
107 void PlatformSensorAmbientLightMac::StopSensor() { 102 void PlatformSensorAmbientLightMac::StopSensor() {
108 light_sensor_port_.reset(); 103 light_sensor_port_.reset();
109 light_sensor_notification_.reset(); 104 light_sensor_notification_.reset();
110 light_sensor_object_.reset(); 105 light_sensor_object_.reset();
111 current_lux_ = 0.0; 106 current_lux_ = 0.0;
112 } 107 }
113 108
114 void PlatformSensorAmbientLightMac::UpdateReading(uint64_t lux_values[2]) { 109 bool PlatformSensorAmbientLightMac::ReadSensorValue() {
timvolodine 2016/10/18 19:26:13 maybe better name something like: ReadAndUpdate..
darktears 2016/10/18 19:56:58 I will change.
110 uint32_t scalar_output_count = 2;
111 uint64_t lux_values[2];
112 kern_return_t kr = IOConnectCallMethod(
113 light_sensor_object_, LmuFunctionIndex::kGetSensorReadingID, nullptr, 0,
114 nullptr, 0, lux_values, &scalar_output_count, nullptr, 0);
115
116 if (kr != KERN_SUCCESS)
117 return false;
118
115 uint64_t mean = (lux_values[0] + lux_values[1]) / 2; 119 uint64_t mean = (lux_values[0] + lux_values[1]) / 2;
116 double lux = LMUvalueToLux(mean); 120 double lux = LMUvalueToLux(mean);
117 if (lux == current_lux_) 121 if (lux == current_lux_)
118 return; 122 return true;
119 current_lux_ = lux; 123 current_lux_ = lux;
120 124
121 SensorReading reading; 125 SensorReading reading;
122 reading.timestamp = (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF(); 126 reading.timestamp = (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
123 reading.values[0] = current_lux_; 127 reading.values[0] = current_lux_;
124 UpdateSensorReading(reading, true); 128 UpdateSensorReading(reading, true);
129 return true;
125 } 130 }
126 131
127 } // namespace device 132 } // namespace device
OLDNEW
« no previous file with comments | « device/generic_sensor/platform_sensor_ambient_light_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698