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

Commit 562c0f80 authored by Yu Shan's avatar Yu Shan
Browse files

Define remoteaccess grpc HAL.

Define a remote access HAL that talks with a wakeup client on
TCU through grpc.

Test: make android.hardware.automotive.remoteaccess
Bug: 241483300
Change-Id: I3bc6c8b837c157744f1d2b5f2e9c287e44a33883
parent cb6afed5
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

cc_binary {
    name: "android.hardware.automotive.remoteaccess@V1-default-service",
    vendor: true,
    vintf_fragments: ["remoteaccess-default-service.xml"],
    init_rc: ["remoteaccess-default-service.rc"],
    relative_install_path: "hw",
    srcs: ["src/RemoteAccessImpl.cpp"],
    whole_static_libs: [
        "RemoteAccessService",
    ],
    shared_libs: [
        "libbinder_ndk",
        "liblog",
        "libutils",
    ],
}

cc_library {
    name: "RemoteAccessService",
    vendor: true,
    local_include_dirs: ["include"],
    export_include_dirs: ["include"],
    srcs: [
        "src/RemoteAccessService.cpp",
    ],
    whole_static_libs: [
        "android.hardware.automotive.remoteaccess-V1-ndk",
    ],
    shared_libs: [
        "libbinder_ndk",
        "liblog",
        "libutils",
    ],
}
+51 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <aidl/android/hardware/automotive/remoteaccess/ApState.h>
#include <aidl/android/hardware/automotive/remoteaccess/BnRemoteAccess.h>
#include <aidl/android/hardware/automotive/remoteaccess/IRemoteTaskCallback.h>

#include <string>

namespace android {
namespace hardware {
namespace automotive {
namespace remoteaccess {

class RemoteAccessService
    : public aidl::android::hardware::automotive::remoteaccess::BnRemoteAccess {
  public:
    ndk::ScopedAStatus getDeviceId(std::string* deviceId) override;

    ndk::ScopedAStatus getWakeupServiceName(std::string* wakeupServerName) override;

    ndk::ScopedAStatus setRemoteTaskCallback(
            const std::shared_ptr<
                    aidl::android::hardware::automotive::remoteaccess::IRemoteTaskCallback>&
                    callback) override;

    ndk::ScopedAStatus clearRemoteTaskCallback() override;

    ndk::ScopedAStatus notifyApStateChange(
            const aidl::android::hardware::automotive::remoteaccess::ApState& newState) override;
};

}  // namespace remoteaccess
}  // namespace automotive
}  // namespace hardware
}  // namespace android
+4 −0
Original line number Diff line number Diff line
service vendor.remoteaccess-default /vendor/bin/hw/android.hardware.automotive.remoteaccess@V1-default-service
    class hal
    user vehicle_network
    group system inet
+7 −0
Original line number Diff line number Diff line
<manifest version="1.0" type="device">
    <hal format="aidl">
        <name>android.hardware.automotive.remoteaccess</name>
        <version>1</version>
        <fqname>IRemoteAccess/default</fqname>
    </hal>
</manifest>
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#define LOG_TAG "RemoteAccessImpl"

#include "RemoteAccessService.h"

#include <android/binder_manager.h>
#include <android/binder_process.h>
#include <utils/Log.h>

int main(int /* argc */, char* /* argv */[]) {
    ALOGI("Registering RemoteAccessService as service...");

    auto service = ndk::SharedRefBase::make<
            android::hardware::automotive::remoteaccess::RemoteAccessService>();

    binder_exception_t err = AServiceManager_addService(
            service->asBinder().get(), "android.hardware.automotive.remote.IRemoteAccess/default");
    if (err != EX_NONE) {
        ALOGE("failed to register android.hardware.automotive.remote.IRemoteAccess service, "
              "exception: %d",
              err);
        return 1;
    }

    if (!ABinderProcess_setThreadPoolMaxThreadCount(1)) {
        ALOGE("%s", "failed to set thread pool max thread count");
        return 1;
    }
    ABinderProcess_startThreadPool();

    ALOGI("RemoteAccess service Ready");

    ABinderProcess_joinThreadPool();

    ALOGW("Should not reach here");

    return 0;
}
Loading