180b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol/*
280b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * Copyright (C) 2016 The Android Open Source Project
380b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol *
480b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
580b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * you may not use this file except in compliance with the License.
680b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * You may obtain a copy of the License at
780b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol *
880b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
980b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol *
1080b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * Unless required by applicable law or agreed to in writing, software
1180b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
1280b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1380b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * See the License for the specific language governing permissions and
1480b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol * limitations under the License.
1580b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol */
1680b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
174446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#ifndef CHRE_CORE_SENSOR_REQUEST_IMPL_H_
184446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#define CHRE_CORE_SENSOR_REQUEST_IMPL_H_
1980b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
204446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#include "chre/core/sensor_request.h"
2180b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
2280b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignolnamespace chre {
2380b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
2480b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignolconstexpr bool sensorModeIsActive(SensorMode sensorMode) {
2580b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol  return (sensorMode == SensorMode::ActiveContinuous
2680b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol      || sensorMode == SensorMode::ActiveOneShot);
2780b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol}
2880b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
29f4f692d5178bf2ff40e33f7ebce86c84811d1178Meng-hsuan Chungconstexpr bool sensorModeIsPassive(SensorMode sensorMode) {
30f4f692d5178bf2ff40e33f7ebce86c84811d1178Meng-hsuan Chung  return (sensorMode == SensorMode::PassiveContinuous
31f4f692d5178bf2ff40e33f7ebce86c84811d1178Meng-hsuan Chung      || sensorMode == SensorMode::PassiveOneShot);
32f4f692d5178bf2ff40e33f7ebce86c84811d1178Meng-hsuan Chung}
33f4f692d5178bf2ff40e33f7ebce86c84811d1178Meng-hsuan Chung
344dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chungconstexpr bool sensorModeIsContinuous(SensorMode sensorMode) {
354dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung  return (sensorMode == SensorMode::ActiveContinuous
364dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung      || sensorMode == SensorMode::PassiveContinuous);
374dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung}
384dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung
394dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chungconstexpr bool sensorModeIsOneShot(SensorMode sensorMode) {
404dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung  return (sensorMode == SensorMode::ActiveOneShot
414dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung      || sensorMode == SensorMode::PassiveOneShot);
424dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung}
434dd71d062b3f466f42ea912831bb1cc79b0f0a1dMeng-hsuan Chung
441795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignolconstexpr size_t getSensorTypeArrayIndex(SensorType sensorType) {
451795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  return static_cast<size_t>(sensorType) - 1;
461795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol}
471795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
481795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignolconstexpr size_t getSensorTypeCount() {
491795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  // The number of valid entries in the SensorType enum (not including Unknown).
501795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol  return static_cast<size_t>(SensorType::SENSOR_TYPE_COUNT) - 1;
511795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol}
521795db1e2282dac8454cf59d23314f70b6930f7bAndrew Rossignol
5378a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignolconstexpr uint32_t getSensorHandleFromSensorType(SensorType sensorType) {
5478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  return static_cast<uint32_t>(sensorType);
5578a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol}
5678a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol
5778a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignolconstexpr SensorType getSensorTypeFromSensorHandle(uint32_t handle) {
5878a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  return (handle > static_cast<uint32_t>(SensorType::Unknown)
5978a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol          && handle < static_cast<uint32_t>(SensorType::SENSOR_TYPE_COUNT))
6078a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol      ? static_cast<SensorType>(handle) : SensorType::Unknown;
6178a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol}
6278a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol
6380b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol}  // namespace chre
6480b6b0c6ea5ce4c72ac738c560015de82edd788dAndrew Rossignol
654446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#endif  // CHRE_CORE_SENSOR_REQUEST_IMPL_H_
66