blob: 2f1015a07caadb14dafd3df891c01e22196d145e [file] [log] [blame]
Myles Watson90ee15b2017-02-09 16:47:33 -08001//
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"
Myles Watson761dc492017-03-03 13:50:49 -080024#include "h4_protocol.h"
Myles Watson90ee15b2017-02-09 16:47:33 -080025
26namespace android {
27namespace hardware {
28namespace bluetooth {
29namespace V1_0 {
30namespace hikey {
31
32using ::android::hardware::Return;
33using ::android::hardware::hidl_vec;
34
Myles Watson7cc9c402017-03-03 14:58:47 -080035struct BluetoothDeathRecipient : hidl_death_recipient {
36 BluetoothDeathRecipient(const sp<IBluetoothHci> hci) : mHci(hci) {}
37
38 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
Myles Watson90ee15b2017-02-09 16:47:33 -080046class BluetoothHci : public IBluetoothHci {
47 public:
Myles Watson7cc9c402017-03-03 14:58:47 -080048 BluetoothHci();
Myles Watson90ee15b2017-02-09 16:47:33 -080049 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
Myles Watson90ee15b2017-02-09 16:47:33 -080058 private:
59 ::android::sp<IBluetoothHciCallbacks> event_cb_;
60 int hci_tty_fd_;
61
Myles Watson90ee15b2017-02-09 16:47:33 -080062 async::AsyncFdWatcher fd_watcher_;
63
Myles Watson761dc492017-03-03 13:50:49 -080064 hci::H4Protocol* hci_;
Myles Watson7cc9c402017-03-03 14:58:47 -080065
66 ::android::sp<BluetoothDeathRecipient> deathRecipient;
Myles Watson90ee15b2017-02-09 16:47:33 -080067};
68
69} // namespace hikey
70} // namespace V1_0
71} // namespace bluetooth
72} // namespace hardware
73} // namespace android