Loading automotive/remoteaccess/impl/default/client/Android.bp 0 → 100644 +66 −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", "libgrpc++", "libprotobuf-cpp-full", ], cflags: [ "-Wno-unused-parameter", ], } 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", "wakeup_client_protos", ], shared_libs: [ "libbase", "libbinder_ndk", "liblog", "libutils", "libgrpc++", "libprotobuf-cpp-full", ], cflags: [ "-Wno-unused-parameter", ], } automotive/remoteaccess/impl/default/client/include/RemoteAccessService.h 0 → 100644 +83 −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 <android-base/thread_annotations.h> #include <wakeup_client.grpc.pb.h> #include <string> #include <thread> namespace android { namespace hardware { namespace automotive { namespace remoteaccess { class RemoteAccessService : public aidl::android::hardware::automotive::remoteaccess::BnRemoteAccess { public: explicit RemoteAccessService(WakeupClient::StubInterface* grpcStub); ~RemoteAccessService(); ndk::ScopedAStatus getDeviceId(std::string* deviceId) override; ndk::ScopedAStatus getWakeupServiceName(std::string* wakeupServiceName) 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; private: // For testing. friend class RemoteAccessServiceUnitTest; WakeupClient::StubInterface* mGrpcStub; std::thread mThread; std::mutex mLock; std::condition_variable mCv; std::shared_ptr<aidl::android::hardware::automotive::remoteaccess::IRemoteTaskCallback> mRemoteTaskCallback GUARDED_BY(mLock); std::unique_ptr<grpc::ClientContext> mGetRemoteTasksContext GUARDED_BY(mLock); // Associated with mCv to notify the task loop to stop waiting and exit. bool mTaskWaitStopped GUARDED_BY(mLock); // A mutex to make sure startTaskLoop does not overlap with stopTaskLoop. std::mutex mStartStopTaskLoopLock; bool mTaskLoopRunning GUARDED_BY(mStartStopTaskLoopLock); // Default wait time before retry connecting to remote access client is 10s. size_t mRetryWaitInMs = 10'000; void runTaskLoop(); void maybeStartTaskLoop(); void maybeStopTaskLoop(); void setRetryWaitInMs(size_t retryWaitInMs) { mRetryWaitInMs = retryWaitInMs; } }; } // namespace remoteaccess } // namespace automotive } // namespace hardware } // namespace android automotive/remoteaccess/impl/default/client/remoteaccess-default-service.rc 0 → 100644 +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 automotive/remoteaccess/impl/default/client/remoteaccess-default-service.xml 0 → 100644 +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> automotive/remoteaccess/impl/default/client/src/RemoteAccessImpl.cpp 0 → 100644 +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. */ #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..."); // TODO(b/241483300): Create GrpcClientStub here. auto service = ndk::SharedRefBase::make< android::hardware::automotive::remoteaccess::RemoteAccessService>(nullptr); 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
automotive/remoteaccess/impl/default/client/Android.bp 0 → 100644 +66 −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", "libgrpc++", "libprotobuf-cpp-full", ], cflags: [ "-Wno-unused-parameter", ], } 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", "wakeup_client_protos", ], shared_libs: [ "libbase", "libbinder_ndk", "liblog", "libutils", "libgrpc++", "libprotobuf-cpp-full", ], cflags: [ "-Wno-unused-parameter", ], }
automotive/remoteaccess/impl/default/client/include/RemoteAccessService.h 0 → 100644 +83 −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 <android-base/thread_annotations.h> #include <wakeup_client.grpc.pb.h> #include <string> #include <thread> namespace android { namespace hardware { namespace automotive { namespace remoteaccess { class RemoteAccessService : public aidl::android::hardware::automotive::remoteaccess::BnRemoteAccess { public: explicit RemoteAccessService(WakeupClient::StubInterface* grpcStub); ~RemoteAccessService(); ndk::ScopedAStatus getDeviceId(std::string* deviceId) override; ndk::ScopedAStatus getWakeupServiceName(std::string* wakeupServiceName) 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; private: // For testing. friend class RemoteAccessServiceUnitTest; WakeupClient::StubInterface* mGrpcStub; std::thread mThread; std::mutex mLock; std::condition_variable mCv; std::shared_ptr<aidl::android::hardware::automotive::remoteaccess::IRemoteTaskCallback> mRemoteTaskCallback GUARDED_BY(mLock); std::unique_ptr<grpc::ClientContext> mGetRemoteTasksContext GUARDED_BY(mLock); // Associated with mCv to notify the task loop to stop waiting and exit. bool mTaskWaitStopped GUARDED_BY(mLock); // A mutex to make sure startTaskLoop does not overlap with stopTaskLoop. std::mutex mStartStopTaskLoopLock; bool mTaskLoopRunning GUARDED_BY(mStartStopTaskLoopLock); // Default wait time before retry connecting to remote access client is 10s. size_t mRetryWaitInMs = 10'000; void runTaskLoop(); void maybeStartTaskLoop(); void maybeStopTaskLoop(); void setRetryWaitInMs(size_t retryWaitInMs) { mRetryWaitInMs = retryWaitInMs; } }; } // namespace remoteaccess } // namespace automotive } // namespace hardware } // namespace android
automotive/remoteaccess/impl/default/client/remoteaccess-default-service.rc 0 → 100644 +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
automotive/remoteaccess/impl/default/client/remoteaccess-default-service.xml 0 → 100644 +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>
automotive/remoteaccess/impl/default/client/src/RemoteAccessImpl.cpp 0 → 100644 +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. */ #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..."); // TODO(b/241483300): Create GrpcClientStub here. auto service = ndk::SharedRefBase::make< android::hardware::automotive::remoteaccess::RemoteAccessService>(nullptr); 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; }