| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __SENSORS_PRIV_H__ |
| #define __SENSORS_PRIV_H__ |
| |
| #include <inttypes.h> |
| #include <sensors.h> |
| #include <seos.h> |
| |
| struct Sensor { |
| const struct SensorInfo *si; |
| uint32_t handle; /* here 0 means invalid */ |
| uint64_t currentLatency; /* here 0 means no batching */ |
| uint32_t currentRate; /* here 0 means off */ |
| TaggedPtr callInfo; /* pointer to ops struct or app tid */ |
| void *callData; |
| uint32_t initComplete:1; /* sensor finished initializing */ |
| uint32_t hasOnchange :1; /* sensor supports onchange and wants to be notified to send new clients current state */ |
| uint32_t hasOndemand :1; /* sensor supports ondemand and wants to get triggers */ |
| }; |
| |
| struct SensorsInternalEvent { |
| union { |
| struct { |
| uint32_t handle; |
| uint32_t value1; |
| uint64_t value2; |
| }; |
| struct SensorRateChangeEvent rateChangeEvt; |
| struct SensorPowerEvent externalPowerEvt; |
| struct SensorSetRateEvent externalSetRateEvt; |
| struct SensorCfgDataEvent externalCfgDataEvt; |
| struct SensorSendDirectEventEvent externalSendDirectEvt; |
| struct SensorMarshallUserEventEvent externalMarshallEvt; |
| }; |
| }; |
| |
| struct SensorsClientRequest { |
| uint32_t handle; |
| uint32_t clientTid; |
| uint64_t latency; |
| uint32_t rate; |
| }; |
| |
| #define MAX_INTERNAL_EVENTS 32 //also used for external app sensors' setRate() calls |
| #define MAX_CLI_SENS_MATRIX_SZ 64 /* MAX(numClients * numSensors) */ |
| |
| #define SENSOR_RATE_OFF UINT32_C(0x00000000) /* used in sensor state machine */ |
| #define SENSOR_RATE_POWERING_ON UINT32_C(0xFFFFFFF0) /* used in sensor state machine */ |
| #define SENSOR_RATE_POWERING_OFF UINT32_C(0xFFFFFFF1) /* used in sensor state machine */ |
| #define SENSOR_RATE_FW_UPLOADING UINT32_C(0xFFFFFFF2) /* used in sensor state machine */ |
| #define SENSOR_RATE_IMPOSSIBLE UINT32_C(0xFFFFFFF3) /* used in rate calc to indicate impossible combinations */ |
| #define SENSOR_LATENCY_INVALID UINT64_C(0xFFFFFFFFFFFFFFFF) |
| |
| #define HANDLE_TO_TID(handle) (((handle) >> (32 - TASK_TID_BITS)) & TASK_TID_MASK) |
| #define EXT_APP_TID(s) HANDLE_TO_TID(s->handle) |
| #define LOCAL_APP_OPS(s) ((const struct SensorOps*)taggedPtrToPtr(s->callInfo)) |
| #define IS_LOCAL_APP(s) (taggedPtrIsPtr(s->callInfo)) |
| |
| struct Sensor* sensorFindByHandle(uint32_t handle); |
| |
| #endif // __SENSORS_PRIV_H__ |