Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a810fb25 authored by Hao Chen's avatar Hao Chen
Browse files

Complete VHAL GRPC Interfaces

Add missing operations from IVehicleHardware.h

Bug: 266001013
Test: `atest GRPCVehicleHardwareUnitTest GRPCVehicleProxyServerUnitTest`

Change-Id: Ida3533dedce49c49c4762b2f9a43997317f5d2c4
parent 32d46706
Loading
Loading
Loading
Loading
+38 −10
Original line number Diff line number Diff line
@@ -152,21 +152,49 @@ void GRPCVehicleHardware::registerOnPropertySetErrorEvent(
    mOnSetErr = std::move(callback);
}

DumpResult GRPCVehicleHardware::dump(const std::vector<std::string>& /* options */) {
    // TODO(chenhaosjtuacm): To be implemented.
DumpResult GRPCVehicleHardware::dump(const std::vector<std::string>& options) {
    ::grpc::ClientContext context;
    proto::DumpOptions protoDumpOptions;
    proto::DumpResult protoDumpResult;
    for (const auto& option : options) {
        protoDumpOptions.add_options(option);
    }
    auto grpc_status = mGrpcStub->Dump(&context, protoDumpOptions, &protoDumpResult);
    if (!grpc_status.ok()) {
        LOG(ERROR) << __func__ << ": GRPC Dump Failed: " << grpc_status.error_message();
        return {};
    }
    return {
            .callerShouldDumpState = protoDumpResult.caller_should_dump_state(),
            .buffer = protoDumpResult.buffer(),
    };
}

aidlvhal::StatusCode GRPCVehicleHardware::checkHealth() {
    // TODO(chenhaosjtuacm): To be implemented.
    return aidlvhal::StatusCode::OK;
    ::grpc::ClientContext context;
    proto::VehicleHalCallStatus protoStatus;
    auto grpc_status = mGrpcStub->CheckHealth(&context, ::google::protobuf::Empty(), &protoStatus);
    if (!grpc_status.ok()) {
        LOG(ERROR) << __func__ << ": GRPC CheckHealth Failed: " << grpc_status.error_message();
        return aidlvhal::StatusCode::INTERNAL_ERROR;
    }
    return static_cast<aidlvhal::StatusCode>(protoStatus.status_code());
}

aidlvhal::StatusCode GRPCVehicleHardware::updateSampleRate(int32_t /* propId */,
                                                           int32_t /* areaId */,
                                                           float /* sampleRate */) {
    // TODO(chenhaosjtuacm): To be implemented.
    return aidlvhal::StatusCode::OK;
aidlvhal::StatusCode GRPCVehicleHardware::updateSampleRate(int32_t propId, int32_t areaId,
                                                           float sampleRate) {
    ::grpc::ClientContext context;
    proto::UpdateSampleRateRequest request;
    proto::VehicleHalCallStatus protoStatus;
    request.set_prop(propId);
    request.set_area_id(areaId);
    request.set_sample_rate(sampleRate);
    auto grpc_status = mGrpcStub->UpdateSampleRate(&context, request, &protoStatus);
    if (!grpc_status.ok()) {
        LOG(ERROR) << __func__ << ": GRPC UpdateSampleRate Failed: " << grpc_status.error_message();
        return aidlvhal::StatusCode::INTERNAL_ERROR;
    }
    return static_cast<aidlvhal::StatusCode>(protoStatus.status_code());
}

bool GRPCVehicleHardware::waitForConnected(std::chrono::milliseconds waitTime) {
+27 −0
Original line number Diff line number Diff line
@@ -155,6 +155,33 @@ GrpcVehicleProxyServer::GrpcVehicleProxyServer(std::string serverAddr,
    return ::grpc::Status::OK;
}

::grpc::Status GrpcVehicleProxyServer::UpdateSampleRate(
        ::grpc::ServerContext* context, const proto::UpdateSampleRateRequest* request,
        proto::VehicleHalCallStatus* status) {
    const auto status_code = mHardware->updateSampleRate(request->prop(), request->area_id(),
                                                         request->sample_rate());
    status->set_status_code(static_cast<proto::StatusCode>(status_code));
    return ::grpc::Status::OK;
}

::grpc::Status GrpcVehicleProxyServer::CheckHealth(::grpc::ServerContext* context,
                                                   const ::google::protobuf::Empty*,
                                                   proto::VehicleHalCallStatus* status) {
    status->set_status_code(static_cast<proto::StatusCode>(mHardware->checkHealth()));
    return ::grpc::Status::OK;
}

::grpc::Status GrpcVehicleProxyServer::Dump(::grpc::ServerContext* context,
                                            const proto::DumpOptions* options,
                                            proto::DumpResult* result) {
    std::vector<std::string> dumpOptionStrings(options->options().begin(),
                                               options->options().end());
    auto dumpResult = mHardware->dump(dumpOptionStrings);
    result->set_caller_should_dump_state(dumpResult.callerShouldDumpState);
    result->set_buffer(dumpResult.buffer);
    return ::grpc::Status::OK;
}

::grpc::Status GrpcVehicleProxyServer::StartPropertyValuesStream(
        ::grpc::ServerContext* context, const ::google::protobuf::Empty* request,
        ::grpc::ServerWriter<proto::VehiclePropValues>* stream) {
+10 −0
Original line number Diff line number Diff line
@@ -53,6 +53,16 @@ class GrpcVehicleProxyServer : public proto::VehicleServer::Service {
                             const proto::VehiclePropValueRequests* requests,
                             proto::GetValueResults* results) override;

    ::grpc::Status UpdateSampleRate(::grpc::ServerContext* context,
                                    const proto::UpdateSampleRateRequest* request,
                                    proto::VehicleHalCallStatus* status) override;

    ::grpc::Status CheckHealth(::grpc::ServerContext* context, const ::google::protobuf::Empty*,
                               proto::VehicleHalCallStatus* status) override;

    ::grpc::Status Dump(::grpc::ServerContext* context, const proto::DumpOptions* options,
                        proto::DumpResult* result) override;

    ::grpc::Status StartPropertyValuesStream(
            ::grpc::ServerContext* context, const ::google::protobuf::Empty* request,
            ::grpc::ServerWriter<proto::VehiclePropValues>* stream) override;
+8 −8
Original line number Diff line number Diff line
@@ -18,20 +18,14 @@ syntax = "proto3";

package android.hardware.automotive.vehicle.proto;

import "android/hardware/automotive/vehicle/DumpOptions.proto";
import "android/hardware/automotive/vehicle/DumpResult.proto";
import "android/hardware/automotive/vehicle/StatusCode.proto";
import "android/hardware/automotive/vehicle/VehiclePropConfig.proto";
import "android/hardware/automotive/vehicle/VehiclePropValue.proto";
import "android/hardware/automotive/vehicle/VehiclePropValueRequest.proto";
import "google/protobuf/empty.proto";

message VehicleHalCallStatus {
    StatusCode status_code = 1;
}

message VehiclePropValues {
    repeated VehiclePropValue values = 1;
}

service VehicleServer {
    rpc GetAllPropertyConfig(google.protobuf.Empty) returns (stream VehiclePropConfig) {}

@@ -39,5 +33,11 @@ service VehicleServer {

    rpc GetValues(VehiclePropValueRequests) returns (GetValueResults) {}

    rpc UpdateSampleRate(UpdateSampleRateRequest) returns (VehicleHalCallStatus) {}

    rpc CheckHealth(google.protobuf.Empty) returns (VehicleHalCallStatus) {}

    rpc Dump(DumpOptions) returns (DumpResult) {}

    rpc StartPropertyValuesStream(google.protobuf.Empty) returns (stream VehiclePropValues) {}
}
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ genrule {
        ":VehicleHalProtoFiles",
    ],
    out: [
        "android/hardware/automotive/vehicle/DumpOptions.pb.h",
        "android/hardware/automotive/vehicle/DumpResult.pb.h",
        "android/hardware/automotive/vehicle/StatusCode.pb.h",
        "android/hardware/automotive/vehicle/VehicleAreaConfig.pb.h",
@@ -63,6 +64,7 @@ genrule {
        ":VehicleHalProtoFiles",
    ],
    out: [
        "android/hardware/automotive/vehicle/DumpOptions.pb.cc",
        "android/hardware/automotive/vehicle/DumpResult.pb.cc",
        "android/hardware/automotive/vehicle/StatusCode.pb.cc",
        "android/hardware/automotive/vehicle/VehicleAreaConfig.pb.cc",
Loading