1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_SHARED_BUFFER_READER_H_
6 #define SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_SHARED_BUFFER_READER_H_
7 
8 #include <memory>
9 
10 #include "base/macros.h"
11 #include "mojo/public/cpp/system/buffer.h"
12 
13 namespace device {
14 
15 union SensorReading;
16 struct SensorReadingSharedBuffer;
17 
18 class SensorReadingSharedBufferReader {
19  public:
20   // Creates a new SensorReadingSharedBufferReader instance that reads
21   // sensor readings from the shared buffer.
22   static std::unique_ptr<SensorReadingSharedBufferReader> Create(
23       mojo::ScopedSharedBufferHandle reading_buffer_handle,
24       uint64_t reading_buffer_offset);
25 
26   ~SensorReadingSharedBufferReader();
27 
28   // Get sensor reading from shared buffer.
29   bool GetReading(SensorReading* result);
30   static bool GetReading(const SensorReadingSharedBuffer* buffer,
31                          SensorReading* result);
32 
33  private:
34   explicit SensorReadingSharedBufferReader(
35       mojo::ScopedSharedBufferHandle shared_buffer_handle,
36       mojo::ScopedSharedBufferMapping shared_buffer);
37 
38   static bool TryReadFromBuffer(const SensorReadingSharedBuffer* buffer,
39                                 SensorReading* result);
40 
41   mojo::ScopedSharedBufferHandle shared_buffer_handle_;
42   mojo::ScopedSharedBufferMapping shared_buffer_;
43 
44   DISALLOW_COPY_AND_ASSIGN(SensorReadingSharedBufferReader);
45 };
46 
47 }  // namespace device
48 
49 #endif  // SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_SHARED_BUFFER_READER_H_
50