// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_GENERIC_PLATFORM_SENSOR_AMBIENT_LIGHT_SENSOR_MAC_H_ #define DEVICE_GENERIC_PLATFORM_SENSOR_AMBIENT_LIGHT_SENSOR_MAC_H_ #include #include "base/mac/scoped_ionotificationportref.h" #include "base/mac/scoped_ioobject.h" #include "services/device/generic_sensor/platform_sensor.h" namespace device { // Implementation of PlatformSensor for macOS to query the ambient light sensor. // This is a single instance object per browser process which is created by // The singleton PlatformSensorProviderMac. If there are no clients, this // instance is not created. class PlatformSensorAmbientLightMac : public PlatformSensor { public: // Construct a platform sensor of AMBIENT_LIGHT, given a buffer |mapping| // to write the result back. PlatformSensorAmbientLightMac(SensorReadingSharedBuffer* reading_buffer, PlatformSensorProvider* provider); mojom::ReportingMode GetReportingMode() override; // Can only be called once, the first time or after a StopSensor call. bool StartSensor(const PlatformSensorConfiguration& configuration) override; void StopSensor() override; protected: ~PlatformSensorAmbientLightMac() override; bool CheckSensorConfiguration( const PlatformSensorConfiguration& configuration) override; PlatformSensorConfiguration GetDefaultConfiguration() override; private: bool ReadAndUpdate(); static void IOServiceCallback(void* context, io_service_t service, natural_t message_type, void* message_argument); // IOService representing the LMU sensor. base::mac::ScopedIOObject light_sensor_service_; // Port used to get the notifications from the sensor. base::mac::ScopedIONotificationPortRef light_sensor_port_; // IO Object used to query the value of the sensor. base::mac::ScopedIOObject light_sensor_object_; // IO Notifications created by IOServiceAddInterestNotification. base::mac::ScopedIOObject light_sensor_notification_; // IO Notifications created by IOServiceAddInterestNotification when the // sensor is busy. base::mac::ScopedIOObject light_sensor_busy_notification_; double current_lux_; DISALLOW_COPY_AND_ASSIGN(PlatformSensorAmbientLightMac); }; } // namespace device #endif // DEVICE_GENERIC_PLATFORM_SENSOR_AMBIENT_LIGHT_SENSOR_MAC_H_