Merge "[sensors] new functions and types for direct report mode"
This commit is contained in:
commit
823cc0b37b
4 changed files with 187 additions and 3 deletions
|
@ -121,4 +121,60 @@ interface ISensors {
|
|||
* BAD_VALUE if sensor event cannot be injected
|
||||
*/
|
||||
injectSensorData(Event event) generates (Result result);
|
||||
|
||||
/*
|
||||
* Register direct report channel.
|
||||
*
|
||||
* Register a direct channel with supplied shared memory information. Upon
|
||||
* return, the sensor hardware is responsible for resetting the memory
|
||||
* content to initial value (depending on memory format settings).
|
||||
*
|
||||
* @param mem shared memory info data structure.
|
||||
* @return result OK on success; BAD_VALUE if shared memory information is
|
||||
* not consistent; NO_MEMORY if shared memory cannot be used by
|
||||
* sensor system; INVALID_OPERATION if functionality is not
|
||||
* supported.
|
||||
* @return channelHandle a positive integer used for referencing registered
|
||||
* direct channel (>0) in configureDirectReport and
|
||||
* unregisterDirectChannel if result is OK, -1 otherwise.
|
||||
*/
|
||||
registerDirectChannel(SharedMemInfo mem)
|
||||
generates (Result result, int32_t channelHandle);
|
||||
|
||||
/*
|
||||
* Unregister direct report channel.
|
||||
*
|
||||
* Unregister a direct channel previously registered using
|
||||
* registerDirectChannel. If there is still active sensor report configured
|
||||
* in the direct channel, HAL should remove them.
|
||||
*
|
||||
* @param channelHandle handle of direct channel to be unregistered.
|
||||
* @return result OK if direct report is supported; INVALID_OPERATION
|
||||
* otherwise.
|
||||
*/
|
||||
unregisterDirectChannel(int32_t channelHandle) generates (Result result);
|
||||
|
||||
/*
|
||||
* Configure direct sensor event report in direct channel.
|
||||
*
|
||||
* This function start, modify rate or stop direct report of a sensor in a
|
||||
* certain direct channel.
|
||||
*
|
||||
* @param sensorHandle handle of sensor to be configured. When combined
|
||||
* with STOP rate, sensorHandle can be -1 to denote all active
|
||||
* sensors in the direct channel specified by channel Handle.
|
||||
* @param channelHandle handle of direct channel to be configured.
|
||||
* @param rate rate level, see RateLevel enum.
|
||||
*
|
||||
* @return result OK on success; BAD_VALUE if parameter is invalid (such as
|
||||
* rate level is not supported by sensor, channelHandle does not
|
||||
* exist, etc); INVALID_OPERATION if functionality is not
|
||||
* supported.
|
||||
* @return reportToken positive integer to identify multiple sensors of
|
||||
* the same type in a single direct channel. Ignored if rate is
|
||||
* STOP. See SharedMemFormat.
|
||||
*/
|
||||
configDirectReport(
|
||||
int32_t sensorHandle, int32_t channelHandle, RateLevel rate)
|
||||
generates (Result result, int32_t reportToken);
|
||||
};
|
||||
|
|
|
@ -234,6 +234,32 @@ Return<Result> Sensors::injectSensorData(const Event& event) {
|
|||
mSensorDevice->inject_sensor_data(mSensorDevice, &out));
|
||||
}
|
||||
|
||||
Return<void> Sensors::registerDirectChannel(
|
||||
const SharedMemInfo& mem, registerDirectChannel_cb _aidl_cb) {
|
||||
//TODO(b/30985702): finish implementation
|
||||
(void) mem;
|
||||
_aidl_cb(Result::INVALID_OPERATION, -1);
|
||||
return Void();
|
||||
}
|
||||
|
||||
Return<Result> Sensors::unregisterDirectChannel(int32_t channelHandle) {
|
||||
//TODO(b/30985702): finish implementation
|
||||
(void) channelHandle;
|
||||
return Result::INVALID_OPERATION;
|
||||
}
|
||||
|
||||
Return<void> Sensors::configDirectReport(
|
||||
int32_t sensorHandle, int32_t channelHandle, RateLevel rate,
|
||||
configDirectReport_cb _hidl_cb) {
|
||||
//TODO(b/30985702): finish implementation
|
||||
(void) sensorHandle;
|
||||
(void) channelHandle;
|
||||
(void) rate;
|
||||
|
||||
_hidl_cb(Result::INVALID_OPERATION, -1);
|
||||
return Void();
|
||||
}
|
||||
|
||||
// static
|
||||
void Sensors::convertFromSensorEvents(
|
||||
size_t count,
|
||||
|
|
|
@ -54,6 +54,15 @@ struct Sensors : public ::android::hardware::sensors::V1_0::ISensors {
|
|||
|
||||
Return<Result> injectSensorData(const Event& event) override;
|
||||
|
||||
Return<void> registerDirectChannel(
|
||||
const SharedMemInfo& mem, registerDirectChannel_cb _aidl_cb) override;
|
||||
|
||||
Return<Result> unregisterDirectChannel(int32_t channelHandle) override;
|
||||
|
||||
Return<void> configDirectReport(
|
||||
int32_t sensorHandle, int32_t channelHandle, RateLevel rate,
|
||||
configDirectReport_cb _hidl_cb) override;
|
||||
|
||||
private:
|
||||
status_t mInitCheck;
|
||||
sensors_module_t *mSensorModule;
|
||||
|
|
|
@ -25,9 +25,10 @@ package android.hardware.sensors@1.0;
|
|||
/* Type enumerating various result codes returned from ISensors methods */
|
||||
enum Result : int32_t {
|
||||
OK,
|
||||
BAD_VALUE,
|
||||
PERMISSION_DENIED,
|
||||
INVALID_OPERATION,
|
||||
PERMISSION_DENIED = -1,
|
||||
NO_MEMORY = -12,
|
||||
BAD_VALUE = -22,
|
||||
INVALID_OPERATION = -38,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -748,6 +749,35 @@ enum SensorFlagBits : uint64_t {
|
|||
* See ADDITIONAL_INFO and AdditionalInfo for details.
|
||||
*/
|
||||
SENSOR_FLAG_ADDITIONAL_INFO = 0x40,
|
||||
|
||||
/*
|
||||
* Set this flag if sensor suppor direct channel backed by ashmem.
|
||||
* See SharedMemType and registerDirectChannel for more details.
|
||||
*/
|
||||
SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM = 0x400,
|
||||
|
||||
/*
|
||||
* Set this flag if sensor suppor direct channel backed by gralloc HAL memory.
|
||||
* See SharedMemType and registerDirectChannel for more details.
|
||||
*/
|
||||
SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC = 0x800,
|
||||
|
||||
/*
|
||||
* Flags mask for reporting mode of sensor.
|
||||
*/
|
||||
SENSOR_FLAG_MASK_REPORTING_MODE = 0xE,
|
||||
|
||||
/*
|
||||
* Flags mask for direct report maximum rate level support.
|
||||
* See RateLevel.
|
||||
*/
|
||||
SENSOR_FLAG_MASK_DIRECT_REPORT = 0x380,
|
||||
|
||||
/*
|
||||
* Flags mask for all direct channel support bits.
|
||||
* See SharedMemType.
|
||||
*/
|
||||
SENSOR_FLAG_MASK_DIRECT_CHANNEL = 0xC00,
|
||||
};
|
||||
|
||||
struct SensorInfo {
|
||||
|
@ -1085,3 +1115,66 @@ struct Event {
|
|||
/* Union discriminated on sensorType */
|
||||
EventPayload u;
|
||||
};
|
||||
|
||||
/**
|
||||
* Direct report rate level definition. Except for SENSOR_DIRECT_RATE_STOP, each
|
||||
* rate level covers the range (55%, 220%] * nominal report rate. For example,
|
||||
* if config direct report specify a rate level SENSOR_DIRECT_RATE_FAST, sensor
|
||||
* hardware should report event at a rate greater than 110Hz, and less or equal
|
||||
* to 440Hz.
|
||||
*/
|
||||
@export(name="direct_rate_level_t", value_prefix="SENSOR_DIRECT_RATE_")
|
||||
enum RateLevel : int32_t {
|
||||
STOP, // stop
|
||||
NORMAL, // nominal 50Hz
|
||||
FAST, // nominal 200Hz
|
||||
VERY_FAST, // nominal 800Hz
|
||||
};
|
||||
|
||||
/**
|
||||
* Direct channel shared memory types. See struct SharedMemInfo.
|
||||
*/
|
||||
@export(name="direct_mem_type_t", value_prefix="SENSOR_DIRECT_MEM_TYPE_")
|
||||
enum SharedMemType : int32_t {
|
||||
// handle contains 1 fd (ashmem handle) and 0 int.
|
||||
ASHMEM = 1,
|
||||
// handle definition matches gralloc HAL.
|
||||
GRALLOC
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Direct channel lock-free queue format, this defines how the shared memory
|
||||
* should be interpreted by both sensor hardware and application. See struct
|
||||
* SharedMemInfo.
|
||||
*/
|
||||
@export(name="direct_format_t", value_prefix="SENSOR_DIRECT_FMT_")
|
||||
enum SharedMemFormat : int32_t {
|
||||
SENSORS_EVENT = 1, // shared memory is formated as an array of data
|
||||
// elements, each sized 104 bytes. Details of fields:
|
||||
//
|
||||
// offset type name
|
||||
//-----------------------------------
|
||||
// 0x0000 int32_t size (always 104)
|
||||
// 0x0004 int32_t sensor report token
|
||||
// 0x0008 int32_t type (see SensorType)
|
||||
// 0x000C int32_t atomic counter
|
||||
// 0x0010 int64_t timestamp (see Event)
|
||||
// 0x0014 float[16]/ data
|
||||
// int64_t[8]
|
||||
// 0x0058 int32_t[4] reserved
|
||||
//
|
||||
// Upon return of channel registration call, the
|
||||
// shared memory space must be formated to all 0 by HAL.
|
||||
};
|
||||
|
||||
/**
|
||||
* Shared memory information for a direct channel
|
||||
*/
|
||||
struct SharedMemInfo {
|
||||
SharedMemType type; // shared memory type
|
||||
SharedMemFormat format;
|
||||
uint32_t size; // size of the memory region, in bytes
|
||||
handle memoryHandle; // shared memory handle, it is interpreted
|
||||
// depending on type field, see SharedMemType.
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue