Merge "Camera: fix unknown bufId issue" into qt-dev
diff --git a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h
index 7082566..87010ce 100644
--- a/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h
+++ b/automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h
@@ -60,6 +60,8 @@
};
struct VmsLayerAndPublisher {
+ VmsLayerAndPublisher(VmsLayer layer, int publisher_id)
+ : layer(layer), publisher_id(publisher_id) {}
VmsLayer layer;
int publisher_id;
};
@@ -162,12 +164,16 @@
std::unique_ptr<VehiclePropValue> createSubscriptionsRequest();
// Creates a VehiclePropValue containing a message of type VmsMessageType.DATA.
-// Returns a nullptr if the byte string in bytes is empty.
+// Returns a nullptr if the vms_packet string in bytes is empty or if the layer_publisher
+// information in VmsLayerAndPublisher format is missing the later or publisher
+// information.
//
// For example, to build a VehiclePropValue message containing a proto, the caller
-// should convert the proto to a byte string using the SerializeToString proto
-// API, then use this inteface to build the VehicleProperty.
-std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes);
+// should first convert the proto to a byte string (vms_packet) using the
+// SerializeToString proto API. Then, it use this interface to build the VehicleProperty
+// by passing publisher and layer information (layer_publisher) and the vms_packet.
+std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo(
+ const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet);
// Creates a VehiclePropValue containing a message of type
// VmsMessageType.PUBLISHER_ID_REQUEST with the given publisher information.
diff --git a/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp b/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp
index 111f6ea..f16489c 100644
--- a/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp
+++ b/automotive/vehicle/2.0/default/common/src/VmsUtils.cpp
@@ -126,10 +126,13 @@
return result;
}
-std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes) {
- auto result = createBaseVmsMessage(kMessageTypeSize);
- result->value.int32Values = hidl_vec<int32_t>{toInt(VmsMessageType::DATA)};
- result->value.bytes = std::vector<uint8_t>(bytes.begin(), bytes.end());
+std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo(
+ const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet) {
+ auto result = createBaseVmsMessage(kMessageTypeSize + kLayerAndPublisherSize);
+ result->value.int32Values = hidl_vec<int32_t>{
+ toInt(VmsMessageType::DATA), layer_publisher.layer.type, layer_publisher.layer.subtype,
+ layer_publisher.layer.version, layer_publisher.publisher_id};
+ result->value.bytes = std::vector<uint8_t>(vms_packet.begin(), vms_packet.end());
return result;
}
diff --git a/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp b/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp
index 2b3efc7..8a434c8 100644
--- a/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp
+++ b/automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp
@@ -139,12 +139,23 @@
}
TEST(VmsUtilsTest, dataMessage) {
- std::string bytes = "aaa";
- auto message = createDataMessage(bytes);
+ const std::string bytes = "aaa";
+ const VmsLayerAndPublisher layer_and_publisher(VmsLayer(2, 0, 1), 123);
+ auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes);
ASSERT_NE(message, nullptr);
EXPECT_TRUE(isValidVmsMessage(*message));
EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE));
- EXPECT_EQ(message->value.int32Values.size(), 0x1ul);
+ EXPECT_EQ(message->value.int32Values.size(), 0x5ul);
+ EXPECT_EQ(message->value.int32Values[0], toInt(VmsMessageType::DATA));
+
+ // Layer
+ EXPECT_EQ(message->value.int32Values[1], 2);
+ EXPECT_EQ(message->value.int32Values[2], 0);
+ EXPECT_EQ(message->value.int32Values[3], 1);
+
+ // Publisher ID
+ EXPECT_EQ(message->value.int32Values[4], 123);
+
EXPECT_EQ(parseMessageType(*message), VmsMessageType::DATA);
EXPECT_EQ(message->value.bytes.size(), bytes.size());
EXPECT_EQ(memcmp(message->value.bytes.data(), bytes.data(), bytes.size()), 0);
@@ -164,8 +175,9 @@
}
TEST(VmsUtilsTest, parseDataMessage) {
- std::string bytes = "aaa";
- auto message = createDataMessage(bytes);
+ const std::string bytes = "aaa";
+ const VmsLayerAndPublisher layer_and_publisher(VmsLayer(1, 0, 1), 123);
+ auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes);
auto data_str = parseData(*message);
ASSERT_FALSE(data_str.empty());
EXPECT_EQ(data_str, bytes);
diff --git a/automotive/vehicle/2.0/types.hal b/automotive/vehicle/2.0/types.hal
index 6c76d7b..f6ebcdd 100644
--- a/automotive/vehicle/2.0/types.hal
+++ b/automotive/vehicle/2.0/types.hal
@@ -3287,16 +3287,6 @@
*/
enum VmsMessageType : int32_t {
/**
- * A notification indicating that the sender has been reset.
- *
- * The receiving party must reset its internal state and respond to the
- * sender with a START_SESSION message as acknowledgement.
- *
- * This message type uses enum VmsStartSessionMessageIntegerValuesIndex.
- */
- START_SESSION = 17,
-
- /**
* A request from the subscribers to the VMS service to subscribe to a layer.
*
* This message type uses enum VmsMessageWithLayerIntegerValuesIndex.
@@ -3412,6 +3402,16 @@
*/
PUBLISHER_INFORMATION_RESPONSE = 16,
+ /**
+ * A notification indicating that the sender has been reset.
+ *
+ * The receiving party must reset its internal state and respond to the
+ * sender with a START_SESSION message as acknowledgement.
+ *
+ * This message type uses enum VmsStartSessionMessageIntegerValuesIndex.
+ */
+ START_SESSION = 17,
+
LAST_VMS_MESSAGE_TYPE = START_SESSION,
};
diff --git a/camera/device/3.4/default/CameraDeviceSession.cpp b/camera/device/3.4/default/CameraDeviceSession.cpp
index 03b6050..b4ebe22 100644
--- a/camera/device/3.4/default/CameraDeviceSession.cpp
+++ b/camera/device/3.4/default/CameraDeviceSession.cpp
@@ -75,7 +75,7 @@
void CameraDeviceSession::configureStreams_3_4_Impl(
const StreamConfiguration& requestedConfiguration,
ICameraDeviceSession::configureStreams_3_4_cb _hidl_cb,
- uint32_t streamConfigCounter) {
+ uint32_t streamConfigCounter, bool useOverriddenFields) {
Status status = initStatus();
HalStreamConfiguration outStreams;
@@ -133,7 +133,8 @@
mStreamConfigCounter = streamConfigCounter;
hidl_vec<camera3_stream_t*> streams;
stream_list.session_parameters = paramBuffer;
- if (!preProcessConfigurationLocked_3_4(requestedConfiguration, &stream_list, &streams)) {
+ if (!preProcessConfigurationLocked_3_4(requestedConfiguration,
+ useOverriddenFields, &stream_list, &streams)) {
_hidl_cb(Status::INTERNAL_ERROR, outStreams);
return;
}
@@ -164,7 +165,7 @@
}
bool CameraDeviceSession::preProcessConfigurationLocked_3_4(
- const StreamConfiguration& requestedConfiguration,
+ const StreamConfiguration& requestedConfiguration, bool useOverriddenFields,
camera3_stream_configuration_t *stream_list /*out*/,
hidl_vec<camera3_stream_t*> *streams /*out*/) {
@@ -189,19 +190,31 @@
mStreamMap[id].data_space);
mCirculatingBuffers.emplace(stream.mId, CirculatingBuffers{});
} else {
- // width/height/format must not change, but usage/rotation might need to change
+ // width/height/format must not change, but usage/rotation might need to change.
+ // format and data_space may change.
if (mStreamMap[id].stream_type !=
(int) requestedConfiguration.streams[i].v3_2.streamType ||
mStreamMap[id].width != requestedConfiguration.streams[i].v3_2.width ||
mStreamMap[id].height != requestedConfiguration.streams[i].v3_2.height ||
- mStreamMap[id].format != (int) requestedConfiguration.streams[i].v3_2.format ||
- mStreamMap[id].data_space !=
- mapToLegacyDataspace( static_cast<android_dataspace_t> (
- requestedConfiguration.streams[i].v3_2.dataSpace)) ||
mPhysicalCameraIdMap[id] != requestedConfiguration.streams[i].physicalCameraId) {
ALOGE("%s: stream %d configuration changed!", __FUNCTION__, id);
return false;
}
+ if (useOverriddenFields) {
+ android_dataspace_t requestedDataSpace =
+ mapToLegacyDataspace(static_cast<android_dataspace_t>(
+ requestedConfiguration.streams[i].v3_2.dataSpace));
+ if (mStreamMap[id].format != (int) requestedConfiguration.streams[i].v3_2.format ||
+ mStreamMap[id].data_space != requestedDataSpace) {
+ ALOGE("%s: stream %d configuration changed!", __FUNCTION__, id);
+ return false;
+ }
+ } else {
+ mStreamMap[id].format =
+ (int) requestedConfiguration.streams[i].v3_2.format;
+ mStreamMap[id].data_space = (android_dataspace_t)
+ requestedConfiguration.streams[i].v3_2.dataSpace;
+ }
mStreamMap[id].rotation = (int) requestedConfiguration.streams[i].v3_2.rotation;
mStreamMap[id].usage = (uint32_t) requestedConfiguration.streams[i].v3_2.usage;
}
diff --git a/camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h b/camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h
index 1db7b41..280c4be 100644
--- a/camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h
+++ b/camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h
@@ -80,7 +80,7 @@
ICameraDeviceSession::configureStreams_3_4_cb _hidl_cb);
bool preProcessConfigurationLocked_3_4(
- const StreamConfiguration& requestedConfiguration,
+ const StreamConfiguration& requestedConfiguration, bool useOverriddenFields,
camera3_stream_configuration_t *stream_list /*out*/,
hidl_vec<camera3_stream_t*> *streams /*out*/);
void postProcessConfigurationLocked_3_4(const StreamConfiguration& requestedConfiguration);
@@ -91,7 +91,7 @@
const StreamConfiguration& requestedConfiguration,
ICameraDeviceSession::configureStreams_3_4_cb _hidl_cb,
// Optional argument for ICameraDeviceSession@3.5 impl
- uint32_t streamConfigCounter = 0);
+ uint32_t streamConfigCounter = 0, bool useOverriddenFields = true);
Return<void> processCaptureRequest_3_4(
const hidl_vec<V3_4::CaptureRequest>& requests,
diff --git a/camera/device/3.5/ICameraDeviceSession.hal b/camera/device/3.5/ICameraDeviceSession.hal
index d0cfe39..c868e1e 100644
--- a/camera/device/3.5/ICameraDeviceSession.hal
+++ b/camera/device/3.5/ICameraDeviceSession.hal
@@ -36,6 +36,12 @@
*
* - a streamConfigCounter counter is provided to check for race condition
* between configureStreams_3_5 and signalStreamFlush call.
+ * - In case the HAL overrides dataspace or format for
+ * IMPLEMENTATION_DEFINED pixel format, camera framework must use original
+ * dataspace and format in subsequent configureStreams_3_5 calls for the same
+ * stream. HAL is allowed to change the overriding behavior of format or
+ * dataspace for reconfiguration of the same stream depending on the stream
+ * combination.
*
* @return status Status code for the operation, one of:
* OK:
diff --git a/camera/device/3.5/default/CameraDeviceSession.cpp b/camera/device/3.5/default/CameraDeviceSession.cpp
index e812e50..44d067d 100644
--- a/camera/device/3.5/default/CameraDeviceSession.cpp
+++ b/camera/device/3.5/default/CameraDeviceSession.cpp
@@ -66,7 +66,7 @@
const StreamConfiguration& requestedConfiguration,
ICameraDeviceSession::configureStreams_3_5_cb _hidl_cb) {
configureStreams_3_4_Impl(requestedConfiguration.v3_4, _hidl_cb,
- requestedConfiguration.streamConfigCounter);
+ requestedConfiguration.streamConfigCounter, false /*useOverriddenFields*/);
return Void();
}
diff --git a/current.txt b/current.txt
index 5742d66..47e7d72 100644
--- a/current.txt
+++ b/current.txt
@@ -455,6 +455,7 @@
09ab9b24994429d9bb32a3fb420b6f6be3e47eb655139a2c08c4e80d3f33ff95 android.hardware.camera.device@3.5::ICameraDevice
06237de53c42890029e3f8fe7d1480d078469c0d07608e51c37b4d485d342992 android.hardware.camera.device@3.5::ICameraDeviceCallback
08c68b196e2fc4e5ba67ba0d0917bde828a87cbe2cffec19d04733972da9eb49 android.hardware.camera.device@3.5::ICameraDeviceSession
+feabf0b7caa947757bf74375aceb4919a5aa99dd6a36216843553b6adec7eb5d android.hardware.camera.device@3.5::ICameraDeviceSession # b/131864007
f9b8b388c0c76669e4b9189e4943efd2982f9bda5c10e276f96cc91bc8e818d6 android.hardware.camera.device@3.5::types
f727d5f350f55a6d3354aad2feb64e43200de77c10d9d642465566bc260bb8ec android.hardware.camera.metadata@3.4::types
0fb39a7809ad1c52b3efbbed5ef4749b06c2a4f1f19cdc3efa2e3d9b28f1205c android.hardware.camera.provider@2.5::ICameraProvider
@@ -545,6 +546,7 @@
08d439c463e4044fa78874037d8e8379aa3cabecde32f08a775897eea5a538af android.hardware.secure_element@1.1::ISecureElement
b53ac9d61c24efb16a2d63a861cef20680f6d57adb244a03b9778c675550628b android.hardware.secure_element@1.1::ISecureElementHalCallback
3702b1c52c0bb3427244618e9e7975c05228bf4ceb8720da7a93603a71cb0368 android.hardware.sensors@2.0::ISensors
+c36670945ea09d92ae90a557147352ed9bd5223f957d347b367c2acb6f94870f android.hardware.sensors@2.0::ISensors # b/135216821
ae5faa38538a9f50eb71eb7f9b998271124d2c64b761cb11c4d820c7732b4ddc android.hardware.sensors@2.0::ISensorsCallback
3a98242a57d0820dacaca0f7db52bec433eae1f21c498763c6f1ece611c3967b android.hardware.sensors@2.0::types
ce4b98211959449361146d4b1e5554dc841ceb4d4577154d7b2fb6d1eb504f76 android.hardware.soundtrigger@2.2::ISoundTriggerHw
diff --git a/graphics/composer/2.2/vts/functional/Android.bp b/graphics/composer/2.2/vts/functional/Android.bp
index b62f302..4cb0bdf 100644
--- a/graphics/composer/2.2/vts/functional/Android.bp
+++ b/graphics/composer/2.2/vts/functional/Android.bp
@@ -25,6 +25,7 @@
// TODO(b/64437680): Assume these libs are always available on the device.
shared_libs: [
"libfmq",
+ "libhidlbase",
"libhidltransport",
"libsync",
],
diff --git a/graphics/composer/2.3/vts/functional/Android.bp b/graphics/composer/2.3/vts/functional/Android.bp
index 7548cb5..ce675ee 100644
--- a/graphics/composer/2.3/vts/functional/Android.bp
+++ b/graphics/composer/2.3/vts/functional/Android.bp
@@ -22,6 +22,7 @@
// TODO(b/64437680): Assume these libs are always available on the device.
shared_libs: [
"libfmq",
+ "libhidlbase",
"libhidltransport",
"libsync",
],
diff --git a/health/storage/1.0/vts/functional/Android.bp b/health/storage/1.0/vts/functional/Android.bp
index 250a7dc..b18e36f 100644
--- a/health/storage/1.0/vts/functional/Android.bp
+++ b/health/storage/1.0/vts/functional/Android.bp
@@ -20,7 +20,8 @@
srcs: ["VtsHalHealthStorageV1_0TargetTest.cpp"],
static_libs: ["android.hardware.health.storage@1.0"],
shared_libs: [
- "libhidltransport"
+ "libhidlbase",
+ "libhidltransport",
],
test_suites: ["general-tests"],
}
diff --git a/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp b/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp
index 3d37e9f..6f75a97 100644
--- a/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp
+++ b/keymaster/4.0/vts/functional/keymaster_hidl_hal_test.cpp
@@ -4219,28 +4219,6 @@
}
/*
- * AttestationTest.RsaAttestationRequiresCorrectAppId
- *
- * Verifies that attesting to RSA requires the correct app ID.
- */
-TEST_F(AttestationTest, RsaAttestationRequiresCorrectAppId) {
- ASSERT_EQ(ErrorCode::OK,
- GenerateKey(AuthorizationSetBuilder()
- .Authorization(TAG_NO_AUTH_REQUIRED)
- .RsaSigningKey(2048, 65537)
- .Digest(Digest::NONE)
- .Padding(PaddingMode::NONE)
- .Authorization(TAG_APPLICATION_ID, HidlBuf("lol"))));
-
- hidl_vec<hidl_vec<uint8_t>> cert_chain;
- EXPECT_EQ(ErrorCode::ATTESTATION_APPLICATION_ID_MISSING,
- AttestKey(AuthorizationSetBuilder()
- .Authorization(TAG_ATTESTATION_CHALLENGE, HidlBuf("challenge"))
- .Authorization(TAG_APPLICATION_ID, HidlBuf("heh")),
- &cert_chain));
-}
-
-/*
* AttestationTest.EcAttestation
*
* Verifies that attesting to EC keys works and generates the expected output.
diff --git a/radio/config/1.1/vts/functional/radio_config_hidl_hal_api.cpp b/radio/config/1.1/vts/functional/radio_config_hidl_hal_api.cpp
index 122ce58..5d0e867 100644
--- a/radio/config/1.1/vts/functional/radio_config_hidl_hal_api.cpp
+++ b/radio/config/1.1/vts/functional/radio_config_hidl_hal_api.cpp
@@ -130,7 +130,8 @@
EXPECT_EQ(std::cv_status::no_timeout, wait());
EXPECT_EQ(RadioResponseType::SOLICITED, radioConfigRsp->rspInfo.type);
EXPECT_EQ(serial, radioConfigRsp->rspInfo.serial);
- ALOGI("getModemsConfig, rspInfo.error = %s\n", toString(radioConfigRsp->rspInfo.error).c_str());
+ ALOGI("setPreferredDataModem, rspInfo.error = %s\n",
+ toString(radioConfigRsp->rspInfo.error).c_str());
ASSERT_TRUE(CheckAnyOfErrors(
radioConfigRsp->rspInfo.error,
@@ -149,7 +150,8 @@
EXPECT_EQ(std::cv_status::no_timeout, wait());
EXPECT_EQ(RadioResponseType::SOLICITED, radioConfigRsp->rspInfo.type);
EXPECT_EQ(serial, radioConfigRsp->rspInfo.serial);
- ALOGI("getModemsConfig, rspInfo.error = %s\n", toString(radioConfigRsp->rspInfo.error).c_str());
+ ALOGI("setPreferredDataModem, rspInfo.error = %s\n",
+ toString(radioConfigRsp->rspInfo.error).c_str());
ASSERT_TRUE(CheckAnyOfErrors(radioConfigRsp->rspInfo.error,
{RadioError::INVALID_ARGUMENTS, RadioError::RADIO_NOT_AVAILABLE,
diff --git a/radio/config/1.1/vts/functional/radio_config_hidl_hal_test.cpp b/radio/config/1.1/vts/functional/radio_config_hidl_hal_test.cpp
index a8c257d..39e6487 100644
--- a/radio/config/1.1/vts/functional/radio_config_hidl_hal_test.cpp
+++ b/radio/config/1.1/vts/functional/radio_config_hidl_hal_test.cpp
@@ -34,9 +34,6 @@
count_ = 0;
radioConfig->setResponseFunctions(radioConfigRsp, nullptr);
- EXPECT_EQ(RadioResponseType::SOLICITED, radioConfigRsp->rspInfo.type);
- EXPECT_EQ(serial, radioConfigRsp->rspInfo.serial);
- EXPECT_EQ(RadioError::NONE, radioConfigRsp->rspInfo.error);
}
/*
@@ -66,4 +63,4 @@
}
count_--;
return status;
-}
\ No newline at end of file
+}
diff --git a/radio/config/1.1/vts/functional/radio_config_response.cpp b/radio/config/1.1/vts/functional/radio_config_response.cpp
index ce3dfdf..bd8c4cf 100644
--- a/radio/config/1.1/vts/functional/radio_config_response.cpp
+++ b/radio/config/1.1/vts/functional/radio_config_response.cpp
@@ -38,16 +38,21 @@
return Void();
}
-Return<void> RadioConfigResponse::setPreferredDataModemResponse(
- const RadioResponseInfo& /* info */) {
+Return<void> RadioConfigResponse::setPreferredDataModemResponse(const RadioResponseInfo& info) {
+ rspInfo = info;
+ parent.notify(info.serial);
return Void();
}
-Return<void> RadioConfigResponse::getModemsConfigResponse(const RadioResponseInfo& /* info */,
+Return<void> RadioConfigResponse::getModemsConfigResponse(const RadioResponseInfo& info,
const ModemsConfig& /* mConfig */) {
+ rspInfo = info;
+ parent.notify(info.serial);
return Void();
}
-Return<void> RadioConfigResponse::setModemsConfigResponse(const RadioResponseInfo& /* info */) {
+Return<void> RadioConfigResponse::setModemsConfigResponse(const RadioResponseInfo& info) {
+ rspInfo = info;
+ parent.notify(info.serial);
return Void();
}
diff --git a/sensors/2.0/ISensors.hal b/sensors/2.0/ISensors.hal
index 3a9af46..a84c56e 100644
--- a/sensors/2.0/ISensors.hal
+++ b/sensors/2.0/ISensors.hal
@@ -99,7 +99,11 @@
* Lock FMQ. When the HAL reads the data from the Wake Lock FMQ, the HAL
* decrements its current count of unprocessed WAKE_UP events and releases
* its wake_lock if the current count of unprocessed WAKE_UP events is
- * zero.
+ * zero. It is important to note that the HAL must acquire the wake lock and
+ * update its internal state regarding the number of outstanding WAKE_UP
+ * events _before_ posting the event to the Wake Lock FMQ, in order to avoid
+ * a race condition that can lead to loss of wake lock synchronization with
+ * the framework.
*
* The framework must use the WakeLockQueueFlagBits::DATA_WRITTEN value to
* notify the HAL that data has been written to the Wake Lock FMQ and must
diff --git a/sensors/2.0/vts/functional/SensorsHidlEnvironmentV2_0.cpp b/sensors/2.0/vts/functional/SensorsHidlEnvironmentV2_0.cpp
index be7415b..0525bdc 100644
--- a/sensors/2.0/vts/functional/SensorsHidlEnvironmentV2_0.cpp
+++ b/sensors/2.0/vts/functional/SensorsHidlEnvironmentV2_0.cpp
@@ -109,11 +109,15 @@
void SensorsHidlEnvironmentV2_0::HidlTearDown() {
mStopThread = true;
- // Wake up the event queue so the poll thread can exit
- mEventQueueFlag->wake(asBaseType(EventQueueFlagBits::READ_AND_PROCESS));
- mPollThread.join();
+ if (mEventQueueFlag != nullptr) {
+ // Wake up the event queue so the poll thread can exit
+ mEventQueueFlag->wake(asBaseType(EventQueueFlagBits::READ_AND_PROCESS));
+ if (mPollThread.joinable()) {
+ mPollThread.join();
+ }
- EventFlag::deleteEventFlag(&mEventQueueFlag);
+ EventFlag::deleteEventFlag(&mEventQueueFlag);
+ }
}
void SensorsHidlEnvironmentV2_0::startPollingThread() {
@@ -135,6 +139,7 @@
size_t eventsToRead = std::min(availableEvents, mEventBuffer.size());
if (eventsToRead > 0) {
if (mEventQueue->read(mEventBuffer.data(), eventsToRead)) {
+ mEventQueueFlag->wake(asBaseType(EventQueueFlagBits::EVENTS_READ));
for (size_t i = 0; i < eventsToRead; i++) {
addEvent(mEventBuffer[i]);
}
diff --git a/wifi/1.3/default/Android.mk b/wifi/1.3/default/Android.mk
index 1f91861..0a3809c 100644
--- a/wifi/1.3/default/Android.mk
+++ b/wifi/1.3/default/Android.mk
@@ -155,11 +155,11 @@
LOCAL_STATIC_LIBRARIES := \
libgmock \
libgtest \
- libhidlbase \
android.hardware.wifi@1.0-service-lib
LOCAL_SHARED_LIBRARIES := \
libbase \
libcutils \
+ libhidlbase \
libhidltransport \
liblog \
libnl \