Loading sensors/1.0/ISensors.hal +56 −0 Original line number Diff line number Diff line Loading @@ -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); }; sensors/1.0/default/Sensors.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -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, Loading sensors/1.0/default/Sensors.h +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading sensors/1.0/types.hal +96 −3 Original line number Diff line number Diff line Loading @@ -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, }; /* Loading Loading @@ -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 { Loading Loading @@ -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
sensors/1.0/ISensors.hal +56 −0 Original line number Diff line number Diff line Loading @@ -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); };
sensors/1.0/default/Sensors.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
sensors/1.0/default/Sensors.h +9 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
sensors/1.0/types.hal +96 −3 Original line number Diff line number Diff line Loading @@ -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, }; /* Loading Loading @@ -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 { Loading Loading @@ -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. };