blob: 41a662ca69f3d44bc8edab6352dfaf4908b6be0a [file] [log] [blame]
// Copyright 2017 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 SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_ACCELEROMETER_MAC_H_
#define SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_ACCELEROMETER_MAC_H_
#include <memory>
#include "base/timer/timer.h"
#include "services/device/generic_sensor/platform_sensor.h"
class SuddenMotionSensor;
namespace device {
// Implementation of PlatformSensor for macOS to query the accelerometer
// 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 PlatformSensorAccelerometerMac : public PlatformSensor {
public:
// Construct a platform sensor of type ACCELEROMETER, given a buffer |mapping|
// where readings will be written.
PlatformSensorAccelerometerMac(mojo::ScopedSharedBufferMapping mapping,
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:
~PlatformSensorAccelerometerMac() override;
bool CheckSensorConfiguration(
const PlatformSensorConfiguration& configuration) override;
PlatformSensorConfiguration GetDefaultConfiguration() override;
private:
void PollForData();
std::unique_ptr<SuddenMotionSensor> sudden_motion_sensor_;
SensorReading reading_;
// Repeating timer for data polling.
base::RepeatingTimer timer_;
DISALLOW_COPY_AND_ASSIGN(PlatformSensorAccelerometerMac);
};
} // namespace device
#endif // SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_ACCELEROMETER_MAC_H_