diff options
| author | Dan Pasanen <dan.pasanen@gmail.com> | 2017-04-05 07:25:23 -0500 |
|---|---|---|
| committer | Dan Pasanen <dan.pasanen@gmail.com> | 2017-04-05 07:25:23 -0500 |
| commit | 050200471390125a6c2ed9d255c330a8761c1072 (patch) | |
| tree | d71f57a3e3a34020a663cdfc695774543188579e | |
| parent | 721e37cd8539d996a88b6c636bcfbb4c41d151f9 (diff) | |
| parent | d6aebac3ab0b2cddc4a3751986b69f8e48b68556 (diff) | |
| download | android_hardware_libhardware-cm-14.1.tar.gz android_hardware_libhardware-cm-14.1.tar.bz2 android_hardware_libhardware-cm-14.1.zip | |
Merge tag 'android-7.1.2_r2' into cm-14.1staging/cm-14.1_android-7.1.2_r2cm-14.1
Android 7.1.2 Release 2 (N2G47E)
# gpg: Signature made Mon 03 Apr 2017 01:41:48 AM CDT
# gpg: using DSA key E8AD3F819AB10E78
# gpg: Can't check signature: No public key
| -rw-r--r-- | include/hardware/bluetooth.h | 1 | ||||
| -rw-r--r-- | include/hardware/hw_auth_token.h | 2 | ||||
| -rw-r--r-- | include/hardware/keymaster_defs.h | 2 | ||||
| -rw-r--r-- | modules/sensors/multihal.cpp | 44 |
4 files changed, 44 insertions, 5 deletions
diff --git a/include/hardware/bluetooth.h b/include/hardware/bluetooth.h index 5a03cf8b..c169c9fe 100644 --- a/include/hardware/bluetooth.h +++ b/include/hardware/bluetooth.h @@ -267,6 +267,7 @@ typedef struct /** Bluetooth Out Of Band data for bonding */ typedef struct { + uint8_t le_bt_dev_addr[7]; /* LE Bluetooth Device Address */ uint8_t c192[16]; /* Simple Pairing Hash C-192 */ uint8_t r192[16]; /* Simple Pairing Randomizer R-192 */ uint8_t c256[16]; /* Simple Pairing Hash C-256 */ diff --git a/include/hardware/hw_auth_token.h b/include/hardware/hw_auth_token.h index f471d1ab..3305f2c8 100644 --- a/include/hardware/hw_auth_token.h +++ b/include/hardware/hw_auth_token.h @@ -23,7 +23,7 @@ extern "C" { #endif // __cplusplus -const uint8_t HW_AUTH_TOKEN_VERSION = 0; +#define HW_AUTH_TOKEN_VERSION 0 typedef enum { HW_AUTH_NONE = 0, diff --git a/include/hardware/keymaster_defs.h b/include/hardware/keymaster_defs.h index 365fc4d1..65a69c4d 100644 --- a/include/hardware/keymaster_defs.h +++ b/include/hardware/keymaster_defs.h @@ -529,7 +529,7 @@ inline keymaster_key_param_t keymaster_param_date(keymaster_tag_t tag, uint64_t #define KEYMASTER_SIMPLE_COMPARE(a, b) (a < b) ? -1 : ((a > b) ? 1 : 0) inline int keymaster_param_compare(const keymaster_key_param_t* a, const keymaster_key_param_t* b) { - int retval = KEYMASTER_SIMPLE_COMPARE(a->tag, b->tag); + int retval = KEYMASTER_SIMPLE_COMPARE((uint32_t)a->tag, (uint32_t)b->tag); if (retval != 0) return retval; diff --git a/modules/sensors/multihal.cpp b/modules/sensors/multihal.cpp index 21a7c96c..683b4f1c 100644 --- a/modules/sensors/multihal.cpp +++ b/modules/sensors/multihal.cpp @@ -155,7 +155,11 @@ void *writerTask(void* ptr) { ALOGV("writerTask before poll() - bufferSize = %d", bufferSize); eventsPolled = device->poll(device, buffer, bufferSize); ALOGV("writerTask poll() got %d events.", eventsPolled); - if (eventsPolled == 0) { + if (eventsPolled <= 0) { + if (eventsPolled < 0) { + ALOGV("writerTask ignored error %d from %s", eventsPolled, device->common.module->name); + ALOGE("ERROR: Fix %s so it does not return error from poll()", device->common.module->name); + } continue; } pthread_mutex_lock(&queue_mutex); @@ -195,6 +199,7 @@ struct sensors_poll_context_t { int poll(sensors_event_t* data, int count); int batch(int handle, int flags, int64_t period_ns, int64_t timeout); int flush(int handle); + int inject_sensor_data(struct sensors_poll_device_1 *dev, const sensors_event_t *data); int close(); std::vector<hw_device_t*> sub_hw_devices; @@ -263,6 +268,11 @@ static bool halIsCompliant(sensors_poll_context_t *ctx, int handle) { return version != -1 && HAL_VERSION_IS_COMPLIANT(version); } +static bool halIsAPILevelCompliant(sensors_poll_context_t *ctx, int handle, int level) { + int version = ctx->get_device_version_by_handle(handle); + return version != -1 && (version >= level); +} + const char *apiNumToStr(int version) { switch(version) { case SENSORS_DEVICE_API_VERSION_1_0: @@ -273,6 +283,8 @@ const char *apiNumToStr(int version) { return "SENSORS_DEVICE_API_VERSION_1_2"; case SENSORS_DEVICE_API_VERSION_1_3: return "SENSORS_DEVICE_API_VERSION_1_3"; + case SENSORS_DEVICE_API_VERSION_1_4: + return "SENSORS_DEVICE_API_VERSION_1_4"; default: return "UNKNOWN"; } @@ -399,6 +411,25 @@ int sensors_poll_context_t::flush(int handle) { return retval; } +int sensors_poll_context_t::inject_sensor_data(struct sensors_poll_device_1 *dev, + const sensors_event_t *data) { + int retval = -EINVAL; + ALOGV("inject_sensor_data"); + // Get handle for the sensor owning the event being injected + int local_handle = get_local_handle(data->sensor); + sensors_poll_device_1_t* v1 = this->get_v1_device_by_handle(data->sensor); + if (halIsAPILevelCompliant(this, data->sensor, SENSORS_DEVICE_API_VERSION_1_4) && + local_handle >= 0 && v1) { + retval = v1->inject_sensor_data(dev, data); + } else { + ALOGE("IGNORED inject_sensor_data(type=%d, handle=%d) call to non-API-compliant sensor", + data->type, data->sensor); + } + ALOGV("retval %d", retval); + return retval; + +} + int sensors_poll_context_t::close() { ALOGV("close"); for (std::vector<hw_device_t*>::iterator it = this->sub_hw_devices.begin(); @@ -449,6 +480,12 @@ static int device__flush(struct sensors_poll_device_1 *dev, int handle) { return ctx->flush(handle); } +static int device__inject_sensor_data(struct sensors_poll_device_1 *dev, + const sensors_event_t *data) { + sensors_poll_context_t* ctx = (sensors_poll_context_t*) dev; + return ctx->inject_sensor_data(dev, data); +} + static int open_sensors(const struct hw_module_t* module, const char* name, struct hw_device_t** device); @@ -633,7 +670,7 @@ static int open_sensors(const struct hw_module_t* hw_module, const char* name, sensors_poll_context_t *dev = new sensors_poll_context_t(); memset(dev, 0, sizeof(sensors_poll_device_1_t)); dev->proxy_device.common.tag = HARDWARE_DEVICE_TAG; - dev->proxy_device.common.version = SENSORS_DEVICE_API_VERSION_1_3; + dev->proxy_device.common.version = SENSORS_DEVICE_API_VERSION_1_4; dev->proxy_device.common.module = const_cast<hw_module_t*>(hw_module); dev->proxy_device.common.close = device__close; dev->proxy_device.activate = device__activate; @@ -641,6 +678,7 @@ static int open_sensors(const struct hw_module_t* hw_module, const char* name, dev->proxy_device.poll = device__poll; dev->proxy_device.batch = device__batch; dev->proxy_device.flush = device__flush; + dev->proxy_device.inject_sensor_data = device__inject_sensor_data; dev->nextReadIndex = 0; @@ -652,7 +690,7 @@ static int open_sensors(const struct hw_module_t* hw_module, const char* name, int sub_open_result = sensors_module->common.methods->open(*it, name, &sub_hw_device); if (!sub_open_result) { if (!HAL_VERSION_IS_COMPLIANT(sub_hw_device->version)) { - ALOGE("SENSORS_DEVICE_API_VERSION_1_3 is required for all sensor HALs"); + ALOGE("SENSORS_DEVICE_API_VERSION_1_3 or newer is required for all sensor HALs"); ALOGE("This HAL reports non-compliant API level : %s", apiNumToStr(sub_hw_device->version)); ALOGE("Sensors belonging to this HAL will get ignored !"); |
