aboutsummaryrefslogtreecommitdiff
path: root/guest/hals/bt/remote/remote_bluetooth.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'guest/hals/bt/remote/remote_bluetooth.cpp')
-rw-r--r--guest/hals/bt/remote/remote_bluetooth.cpp195
1 files changed, 0 insertions, 195 deletions
diff --git a/guest/hals/bt/remote/remote_bluetooth.cpp b/guest/hals/bt/remote/remote_bluetooth.cpp
deleted file mode 100644
index dbcede306..000000000
--- a/guest/hals/bt/remote/remote_bluetooth.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-//
-// Copyright 2021 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 "android.hardware.bluetooth@1.1.remote"
-
-#include "remote_bluetooth.h"
-
-#include <cutils/properties.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <poll.h>
-#include <string.h>
-#include <sys/uio.h>
-#include <termios.h>
-#include <utils/Log.h>
-#include "log/log.h"
-
-namespace {
-int SetTerminalRaw(int fd) {
- termios terminal_settings;
- int rval = tcgetattr(fd, &terminal_settings);
- if (rval < 0) {
- return rval;
- }
- cfmakeraw(&terminal_settings);
- rval = tcsetattr(fd, TCSANOW, &terminal_settings);
- return rval;
-}
-} // namespace
-
-namespace android {
-namespace hardware {
-namespace bluetooth {
-namespace V1_1 {
-namespace remote {
-
-using ::android::hardware::hidl_vec;
-
-class BluetoothDeathRecipient : public hidl_death_recipient {
- public:
- BluetoothDeathRecipient(const sp<IBluetoothHci> hci) : mHci(hci) {}
-
- void serviceDied(
- uint64_t /* cookie */,
- const wp<::android::hidl::base::V1_0::IBase>& /* who */) override {
- LOG(ERROR)
- << "BluetoothDeathRecipient::serviceDied - Bluetooth service died";
- has_died_ = true;
- mHci->close();
- }
- sp<IBluetoothHci> mHci;
- bool getHasDied() const { return has_died_; }
- void setHasDied(bool has_died) { has_died_ = has_died; }
-
- private:
- bool has_died_;
-};
-
-BluetoothHci::BluetoothHci(const std::string& dev_path)
- : death_recipient_(new BluetoothDeathRecipient(this)),
- dev_path_(dev_path) {}
-
-Return<void> BluetoothHci::initialize(
- const sp<V1_0::IBluetoothHciCallbacks>& cb) {
- return initialize_impl(cb, nullptr);
-}
-
-Return<void> BluetoothHci::initialize_1_1(
- const sp<V1_1::IBluetoothHciCallbacks>& cb) {
- return initialize_impl(cb, cb);
-}
-
-Return<void> BluetoothHci::initialize_impl(
- const sp<V1_0::IBluetoothHciCallbacks>& cb,
- const sp<V1_1::IBluetoothHciCallbacks>& cb_1_1) {
- LOG(INFO) << __func__;
-
- cb_ = cb;
- cb_1_1_ = cb_1_1;
- fd_ = open(dev_path_.c_str(), O_RDWR);
- if (fd_ < 0) {
- LOG(FATAL) << "Could not connect to bt: " << fd_;
- }
- if (int ret = SetTerminalRaw(fd_) < 0) {
- LOG(FATAL) << "Could not make " << fd_ << " a raw terminal: " << ret;
- }
-
- if (cb == nullptr) {
- LOG(ERROR)
- << "cb == nullptr! -> Unable to call initializationComplete(ERR)";
- return Void();
- }
-
- death_recipient_->setHasDied(false);
- auto link_ret = cb->linkToDeath(death_recipient_, 0);
-
- unlink_cb_ = [this, cb](sp<BluetoothDeathRecipient>& death_recipient) {
- if (death_recipient->getHasDied())
- LOG(INFO) << "Skipping unlink call, service died.";
- else {
- auto ret = cb->unlinkToDeath(death_recipient);
- if (!ret.isOk()) {
- CHECK(death_recipient_->getHasDied())
- << "Error calling unlink, but no death notification.";
- }
- }
- };
-
- auto init_ret = cb->initializationComplete(V1_0::Status::SUCCESS);
- if (!init_ret.isOk()) {
- CHECK(death_recipient_->getHasDied())
- << "Error sending init callback, but no death notification.";
- }
- h4_ = test_vendor_lib::H4Packetizer(
- fd_,
- [](const std::vector<uint8_t>& /* raw_command */) {
- LOG_ALWAYS_FATAL("Unexpected command!");
- },
- [this](const std::vector<uint8_t>& raw_event) {
- cb_->hciEventReceived(hidl_vec<uint8_t>(raw_event));
- },
- [this](const std::vector<uint8_t>& raw_acl) {
- cb_->hciEventReceived(hidl_vec<uint8_t>(raw_acl));
- },
- [this](const std::vector<uint8_t>& raw_sco) {
- cb_->hciEventReceived(hidl_vec<uint8_t>(raw_sco));
- },
- [this](const std::vector<uint8_t>& raw_iso) {
- if (cb_1_1_) {
- cb_1_1_->hciEventReceived(hidl_vec<uint8_t>(raw_iso));
- }
- },
- []() { LOG(INFO) << "HCI socket device disconnected"; });
- fd_watcher_.WatchFdForNonBlockingReads(
- fd_, [this](int fd) { h4_.OnDataReady(fd); });
- return Void();
-}
-
-Return<void> BluetoothHci::close() {
- LOG(INFO) << __func__;
- fd_watcher_.StopWatchingFileDescriptors();
- ::close(fd_);
-
- return Void();
-}
-
-Return<void> BluetoothHci::sendHciCommand(const hidl_vec<uint8_t>& packet) {
- send(test_vendor_lib::PacketType::COMMAND, packet);
- return Void();
-}
-
-Return<void> BluetoothHci::sendAclData(const hidl_vec<uint8_t>& packet) {
- send(test_vendor_lib::PacketType::ACL, packet);
- return Void();
-}
-
-Return<void> BluetoothHci::sendScoData(const hidl_vec<uint8_t>& packet) {
- send(test_vendor_lib::PacketType::SCO, packet);
- return Void();
-}
-
-Return<void> BluetoothHci::sendIsoData(const hidl_vec<uint8_t>& packet) {
- send(test_vendor_lib::PacketType::ISO, packet);
- return Void();
-}
-
-void BluetoothHci::send(test_vendor_lib::PacketType type,
- const ::android::hardware::hidl_vec<uint8_t>& v) {
- h4_.Send(static_cast<uint8_t>(type), v.data(), v.size());
-}
-
-/* Fallback to shared library if there is no service. */
-IBluetoothHci* HIDL_FETCH_IBluetoothHci(const char* /* name */) {
- return new BluetoothHci();
-}
-
-} // namespace remote
-} // namespace V1_1
-} // namespace bluetooth
-} // namespace hardware
-} // namespace android