/* * 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 #include #include 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__