11795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol/*
21795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * Copyright (C) 2016 The Android Open Source Project
31795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol *
41795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
51795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * you may not use this file except in compliance with the License.
61795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * You may obtain a copy of the License at
71795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol *
81795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
91795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol *
101795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * Unless required by applicable law or agreed to in writing, software
111795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
121795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * See the License for the specific language governing permissions and
141795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol * limitations under the License.
151795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol */
161795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
171795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#ifndef CHRE_CORE_SENSOR_REQUEST_MANAGER_H_
181795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#define CHRE_CORE_SENSOR_REQUEST_MANAGER_H_
191795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
201795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#include "chre/core/request_multiplexer.h"
21cb8312e5ce53430576e2343e4863af84676c93adAndrew Rossignol#include "chre/core/sensor.h"
224446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#include "chre/core/sensor_request.h"
231795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#include "chre/util/fixed_size_vector.h"
241795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#include "chre/util/non_copyable.h"
251795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#include "chre/util/optional.h"
261795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
271795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignolnamespace chre {
281795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
291795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignolclass SensorRequestManager : public NonCopyable {
301795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol public:
311795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  /**
321795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * Performs initialization of the SensorRequestManager and populates the
331795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * sensor list with platform sensors.
341795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   */
351795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  SensorRequestManager();
361795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
371795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  /**
381795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * Destructs the sensor request manager and releases platform sensor resources
391795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * if requested.
401795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   */
411795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  ~SensorRequestManager();
421795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
431795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  /**
441795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * Determines whether the runtime is aware of a given sensor type. The
451795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * supplied sensorHandle is only populated if the sensor type is known.
461795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   *
471795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * @param sensorType The type of the sensor.
481795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * @param sensorHandle A non-null pointer to a uint32_t to use as a sensor
491795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   *                     handle for nanoapps.
501795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   * @return true if the supplied sensor type is available for use.
511795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   */
521795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  bool getSensorHandle(SensorType sensorType, uint32_t *sensorHandle) const;
531795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
548d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol  /**
558d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * Sets a sensor request for the given nanoapp for the provided sensor handle.
568d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * If the nanoapp has made a previous request, it is replaced by this request.
578d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * If the request changes the mode to SensorMode::Off the request is removed.
588d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   *
598d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * @param nanoapp A non-null pointer to the nanoapp requesting this change.
608d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * @param sensorHandle The sensor handle for which this sensor request is
618d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   *        directed at.
628d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * @param request The new sensor request for this nanoapp.
638d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * @return true if the request was set successfully. If the sensorHandle is
648d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   *         out of range or the platform sensor fails to update to the new
658d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   *         request false will be returned.
668d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   */
678d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol  bool setSensorRequest(Nanoapp *nanoapp, uint32_t sensorHandle,
688d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol                        const SensorRequest& sensorRequest);
698d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol
7048fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung  /**
7148fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   * Populates the supplied info struct if the sensor handle exists.
7248fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   *
7348fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   * @param sensorHandle The handle of the sensor.
7453cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie   * @param nanoapp The nanoapp requesting this change.
7548fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   * @param info A non-null pointer to a chreSensorInfo struct.
7648fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   * @return true if the supplied sensor handle exists.
7748fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung   */
7853cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie  bool getSensorInfo(uint32_t sensorHandle, const Nanoapp& nanoapp,
7948fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung                     struct chreSensorInfo *info) const;
80cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  /*
81cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   * Removes all requests of a sensorType and unregisters all nanoapps for its
82cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   * events.
83cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   *
84cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   * @param sensorType The sensor type whose requests are to be removed.
85cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   * @return true if all requests of the sensor type have been successfully
86cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   *         removed.
87cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung   */
88cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung  bool removeAllRequests(SensorType sensorType);
8948fda6e1eedf6ba80ae7596fc7676f8318a1e88eMeng-hsuan Chung
9067de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung  /**
9167de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung   * Obtains a pointer to the Sensor of the specified sensorType.
9267de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung   *
9367de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung   * @param sensorType The SensorType of the sensor.
9453cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie   * @return A pointer to the Sensor of sensorType, or nullptr if sensorType is
9553cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie   *         invalid or the requested SensorType is not supported on the current
9653cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie   *         platform.
9767de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung   */
9867de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung  Sensor *getSensor(SensorType sensorType);
9967de3f239af66c0d5733950a916bc5566f2017f0Meng-hsuan Chung
10059e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung  /**
10159e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   * Populates the supplied sampling status struct if the sensor handle exists.
10259e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   *
10359e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   * @param sensorHandle The handle of the sensor.
10459e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   * @param status A non-null pointer to a chreSensorSamplingStatus struct.
10559e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   * @return true if the supplied sensor handle exists.
10659e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung   */
10759e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung  bool getSensorSamplingStatus(uint32_t sensorHandle,
10859e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung                               struct chreSensorSamplingStatus *status) const;
10959e4cbe02c3dbfd3375dd39ac2691065c813353bMeng-hsuan Chung
11086bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung  /**
11186bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung   * Obtains the list of open requests of the specified SensorType.
11286bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung   *
11386bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung   * @param sensorType The SensorType of the sensor.
11486bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung   * @return The list of open requests of this sensor in a DynamicVector.
11586bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung   */
11686bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung  const DynamicVector<SensorRequest>& getRequests(SensorType sensorType) const;
11786bb62ca9e700b72f182d2473300a6accd9c4818Meng-hsuan Chung
118d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro  /**
119d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * Prints state in a string buffer. Must only be called from the context of
120d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * the main CHRE thread.
121d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   *
122d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * @param buffer Pointer to the start of the buffer.
123d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * @param bufferPos Pointer to buffer position to start the print (in-out).
124d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * @param size Size of the buffer in bytes.
125d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   *
126d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   * @return true if entire log printed, false if overflow or error.
127d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro   */
128d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro  bool logStateToBuffer(char *buffer, size_t *bufferPos,
129d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro                        size_t bufferSize) const;
130d0530f420d8bdaee755ec2834af407424de195e0Arthur Ishiguro
1311795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol private:
1321795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  /**
1338d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol   * This allows tracking the state of a sensor with the various requests for it
13401d59972774453f9b0b7b92035f2919f8b6a5b35Meng-hsuan Chung   * and can trigger a change in mode/rate/latency when required.
1351795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol   */
1361795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  struct SensorRequests {
13753cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie    //! The sensor associated with this request multiplexer. If this Optional
13853cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie    //! container does not have a value, then the platform does not support this
13953cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie    //! type of sensor.
14053cec69ff23e5ffabf9f29d824c14fbdb18dc856Brian Duddie    Optional<Sensor> sensor;
1411795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
1421795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol    //! The request multiplexer for this sensor.
1438d7fbecab6b025243dcdb6dc28f49e37430dc650Andrew Rossignol    RequestMultiplexer<SensorRequest> multiplexer;
1442d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol
1452d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    /**
1462d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * Searches through the list of sensor requests for a request owned by the
1472d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * given nanoapp. The provided non-null index pointer is populated with the
1482d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * index of the request if it is found.
1492d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *
1502d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param nanoapp The nanoapp whose request is being searched for.
1512d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param index A non-null pointer to an index that is populated if a request
1522d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        for this nanoapp is found.
1532d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @return A pointer to a SensorRequest that is owned by the provided nanoapp
1542d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *         if one is found otherwise nullptr.
1552d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     */
1562d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    const SensorRequest *find(const Nanoapp *nanoapp, size_t *index) const;
1572d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol
1582d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    /**
1592d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * Adds a new sensor request to the request multiplexer for this sensor.
1602d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *
1612d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param request The request to add to the multiplexer.
1622d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param requestChanged A non-null pointer to a bool to indicate that the
1632d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        net request made to the sensor has changed. This boolean is always
1642d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        assigned to the status of the request changing (true or false).
1652d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @return true if the add operation was successful.
1662d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     */
1672d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    bool add(const SensorRequest& request, bool *requestChanged);
1682d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol
1692d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    /**
1702d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * Removes a sensor request from the request multiplexer for this sensor.
1712d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * The provided index must fall in the range of the sensor requests managed
1722d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * by the multiplexer.
1732d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *
1742d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param removeIndex The index to remove the request from.
1752d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param requestChanged A non-null pointer to a bool to indicate that the
1762d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        net request made to the sensor has changed. This boolean is always
1772d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        assigned to the status of the request changing (true or false).
1782d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @return true if the remove operation was successful.
1792d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     */
1802d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    bool remove(size_t removeIndex, bool *requestChanged);
1812d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol
1822d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    /**
1832d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * Updates a sensor request in the request multiplexer for this sensor. The
1842d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * provided index must fall in range of the sensor requests managed by the
1852d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * multiplexer.
1862d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *
1872d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param updateIndex The index to update the request at.
1882d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @param request The new sensor request to replace the existing request
1892d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     *        with.
1902d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     * @return true if the update operation was successful.
1912d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol     */
1922d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol    bool update(size_t updateIndex, const SensorRequest& request,
1932d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol                bool *requestChanged);
194cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung
195cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung    /**
196cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     * Removes all requests and consolidates all the maximal request changes
197cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     * into one sensor configuration update.
198cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     *
199cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     * @return true if all the requests have been removed and sensor
200cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     *         configuration successfully updated.
201cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung     */
202cea64a899fafc0e75dc0e63dbe699ca5679564adMeng-hsuan Chung    bool removeAll();
2031795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  };
2041795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
2051795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  //! The list of sensor requests
2061795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  FixedSizeVector<SensorRequests, getSensorTypeCount()> mSensorRequests;
2071795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol};
2081795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
2091795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol}  // namespace chre
2101795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
2111795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol#endif  // CHRE_CORE_SENSOR_REQUEST_MANAGER_H_
212