mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 22:04:26 +00:00
Merge "Wait for all results to come before return." into main am: deb05c9993
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3168820 Change-Id: I78ffa7991a691a35a1e71980986ad967ce122f7a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -69,10 +69,13 @@ GrpcVehicleProxyServer::GrpcVehicleProxyServer(std::vector<std::string> serverAd
|
||||
const proto::VehiclePropValueRequests* requests,
|
||||
proto::SetValueResults* results) {
|
||||
std::vector<aidlvhal::SetValueRequest> aidlRequests;
|
||||
std::unordered_set<int64_t> requestIds;
|
||||
for (const auto& protoRequest : requests->requests()) {
|
||||
auto& aidlRequest = aidlRequests.emplace_back();
|
||||
aidlRequest.requestId = protoRequest.request_id();
|
||||
int64_t requestId = protoRequest.request_id();
|
||||
aidlRequest.requestId = requestId;
|
||||
proto_msg_converter::protoToAidl(protoRequest.value(), &aidlRequest.value);
|
||||
requestIds.insert(requestId);
|
||||
}
|
||||
auto waitMtx = std::make_shared<std::mutex>();
|
||||
auto waitCV = std::make_shared<std::condition_variable>();
|
||||
@@ -80,19 +83,27 @@ GrpcVehicleProxyServer::GrpcVehicleProxyServer(std::vector<std::string> serverAd
|
||||
auto tmpResults = std::make_shared<proto::SetValueResults>();
|
||||
auto aidlStatus = mHardware->setValues(
|
||||
std::make_shared<const IVehicleHardware::SetValuesCallback>(
|
||||
[waitMtx, waitCV, complete,
|
||||
tmpResults](std::vector<aidlvhal::SetValueResult> setValueResults) {
|
||||
for (const auto& aidlResult : setValueResults) {
|
||||
auto& protoResult = *tmpResults->add_results();
|
||||
protoResult.set_request_id(aidlResult.requestId);
|
||||
protoResult.set_status(
|
||||
static_cast<proto::StatusCode>(aidlResult.status));
|
||||
}
|
||||
[waitMtx, waitCV, complete, tmpResults,
|
||||
&requestIds](std::vector<aidlvhal::SetValueResult> setValueResults) {
|
||||
bool receivedAllResults = false;
|
||||
{
|
||||
std::lock_guard lck(*waitMtx);
|
||||
*complete = true;
|
||||
for (const auto& aidlResult : setValueResults) {
|
||||
auto& protoResult = *tmpResults->add_results();
|
||||
int64_t requestIdForResult = aidlResult.requestId;
|
||||
protoResult.set_request_id(requestIdForResult);
|
||||
protoResult.set_status(
|
||||
static_cast<proto::StatusCode>(aidlResult.status));
|
||||
requestIds.erase(requestIdForResult);
|
||||
}
|
||||
if (requestIds.empty()) {
|
||||
receivedAllResults = true;
|
||||
*complete = true;
|
||||
}
|
||||
}
|
||||
if (receivedAllResults) {
|
||||
waitCV->notify_all();
|
||||
}
|
||||
waitCV->notify_all();
|
||||
}),
|
||||
aidlRequests);
|
||||
if (aidlStatus != aidlvhal::StatusCode::OK) {
|
||||
@@ -114,10 +125,13 @@ GrpcVehicleProxyServer::GrpcVehicleProxyServer(std::vector<std::string> serverAd
|
||||
const proto::VehiclePropValueRequests* requests,
|
||||
proto::GetValueResults* results) {
|
||||
std::vector<aidlvhal::GetValueRequest> aidlRequests;
|
||||
std::unordered_set<int64_t> requestIds;
|
||||
for (const auto& protoRequest : requests->requests()) {
|
||||
auto& aidlRequest = aidlRequests.emplace_back();
|
||||
aidlRequest.requestId = protoRequest.request_id();
|
||||
int64_t requestId = protoRequest.request_id();
|
||||
aidlRequest.requestId = requestId;
|
||||
proto_msg_converter::protoToAidl(protoRequest.value(), &aidlRequest.prop);
|
||||
requestIds.insert(requestId);
|
||||
}
|
||||
auto waitMtx = std::make_shared<std::mutex>();
|
||||
auto waitCV = std::make_shared<std::condition_variable>();
|
||||
@@ -125,23 +139,31 @@ GrpcVehicleProxyServer::GrpcVehicleProxyServer(std::vector<std::string> serverAd
|
||||
auto tmpResults = std::make_shared<proto::GetValueResults>();
|
||||
auto aidlStatus = mHardware->getValues(
|
||||
std::make_shared<const IVehicleHardware::GetValuesCallback>(
|
||||
[waitMtx, waitCV, complete,
|
||||
tmpResults](std::vector<aidlvhal::GetValueResult> getValueResults) {
|
||||
for (const auto& aidlResult : getValueResults) {
|
||||
auto& protoResult = *tmpResults->add_results();
|
||||
protoResult.set_request_id(aidlResult.requestId);
|
||||
protoResult.set_status(
|
||||
static_cast<proto::StatusCode>(aidlResult.status));
|
||||
if (aidlResult.prop) {
|
||||
auto* valuePtr = protoResult.mutable_value();
|
||||
proto_msg_converter::aidlToProto(*aidlResult.prop, valuePtr);
|
||||
}
|
||||
}
|
||||
[waitMtx, waitCV, complete, tmpResults,
|
||||
&requestIds](std::vector<aidlvhal::GetValueResult> getValueResults) {
|
||||
bool receivedAllResults = false;
|
||||
{
|
||||
std::lock_guard lck(*waitMtx);
|
||||
*complete = true;
|
||||
for (const auto& aidlResult : getValueResults) {
|
||||
auto& protoResult = *tmpResults->add_results();
|
||||
int64_t requestIdForResult = aidlResult.requestId;
|
||||
protoResult.set_request_id(requestIdForResult);
|
||||
protoResult.set_status(
|
||||
static_cast<proto::StatusCode>(aidlResult.status));
|
||||
if (aidlResult.prop) {
|
||||
auto* valuePtr = protoResult.mutable_value();
|
||||
proto_msg_converter::aidlToProto(*aidlResult.prop, valuePtr);
|
||||
}
|
||||
requestIds.erase(requestIdForResult);
|
||||
}
|
||||
if (requestIds.empty()) {
|
||||
receivedAllResults = true;
|
||||
*complete = true;
|
||||
}
|
||||
}
|
||||
if (receivedAllResults) {
|
||||
waitCV->notify_all();
|
||||
}
|
||||
waitCV->notify_all();
|
||||
}),
|
||||
aidlRequests);
|
||||
if (aidlStatus != aidlvhal::StatusCode::OK) {
|
||||
|
||||
Reference in New Issue
Block a user