1 // 2 // Copyright 2017 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #pragma once 18 19 #include <android/hardware/bluetooth/1.0/IBluetoothHci.h> 20 21 #include <hidl/MQDescriptor.h> 22 23 #include "async_fd_watcher.h" 24 #include "h4_protocol.h" 25 26 namespace android { 27 namespace hardware { 28 namespace bluetooth { 29 namespace V1_0 { 30 namespace hikey { 31 32 using ::android::hardware::Return; 33 using ::android::hardware::hidl_vec; 34 35 struct BluetoothDeathRecipient : hidl_death_recipient { BluetoothDeathRecipientBluetoothDeathRecipient36 BluetoothDeathRecipient(const sp<IBluetoothHci> hci) : mHci(hci) {} 37 serviceDiedBluetoothDeathRecipient38 virtual void serviceDied( 39 uint64_t /*cookie*/, 40 const wp<::android::hidl::base::V1_0::IBase>& /*who*/) { 41 mHci->close(); 42 } 43 sp<IBluetoothHci> mHci; 44 }; 45 46 class BluetoothHci : public IBluetoothHci { 47 public: 48 BluetoothHci(); 49 Return<void> initialize( 50 const ::android::sp<IBluetoothHciCallbacks>& cb) override; 51 Return<void> sendHciCommand(const hidl_vec<uint8_t>& packet) override; 52 Return<void> sendAclData(const hidl_vec<uint8_t>& packet) override; 53 Return<void> sendScoData(const hidl_vec<uint8_t>& packet) override; 54 Return<void> close() override; 55 56 static void OnPacketReady(); 57 58 private: 59 ::android::sp<IBluetoothHciCallbacks> event_cb_; 60 int hci_tty_fd_; 61 62 async::AsyncFdWatcher fd_watcher_; 63 64 hci::H4Protocol* hci_; 65 66 ::android::sp<BluetoothDeathRecipient> deathRecipient; 67 }; 68 69 } // namespace hikey 70 } // namespace V1_0 71 } // namespace bluetooth 72 } // namespace hardware 73 } // namespace android 74