/* * Copyright (C) 2022 The Android Open Source Project * Copyright (C) 2024 KonstaKANG * * 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 #include #include "async_fd_watcher.h" #include "h4_protocol.h" #include "net_bluetooth_mgmt.h" namespace aidl::android::hardware::bluetooth::impl { class BluetoothDeathRecipient; // This Bluetooth HAL implementation connects with a serial port at dev_path_. class BluetoothHci : public BnBluetoothHci { public: BluetoothHci(); ndk::ScopedAStatus initialize( const std::shared_ptr& cb) override; ndk::ScopedAStatus sendHciCommand( const std::vector& packet) override; ndk::ScopedAStatus sendAclData(const std::vector& packet) override; ndk::ScopedAStatus sendScoData(const std::vector& packet) override; ndk::ScopedAStatus sendIsoData(const std::vector& packet) override; ndk::ScopedAStatus close() override; private: int mFd{-1}; std::shared_ptr mCb = nullptr; std::shared_ptr<::android::hardware::bluetooth::hci::H4Protocol> mH4; std::shared_ptr mDeathRecipient; ::android::hardware::bluetooth::async::AsyncFdWatcher mFdWatcher; [[nodiscard]] ndk::ScopedAStatus send( ::android::hardware::bluetooth::hci::PacketType type, const std::vector& packet); std::unique_ptr management_{}; // Don't close twice or open before close is complete std::mutex mStateMutex; enum class HalState { READY, INITIALIZING, ONE_CLIENT, CLOSING, } mState{HalState::READY}; }; } // namespace aidl::android::hardware::bluetooth::impl