blob: 0d0a1caf196c6327fff1216176d855e96fd1fc87 [file] [log] [blame]
Zach Johnson917efb12017-02-26 23:46:05 -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 <hidl/HidlSupport.h>
20
21#include "async_fd_watcher.h"
22#include "bt_vendor_lib.h"
23#include "hci_internals.h"
24#include "hci_protocol.h"
25
26namespace android {
27namespace hardware {
28namespace bluetooth {
29namespace hci {
30
31class H4Protocol : public HciProtocol {
32 public:
33 H4Protocol(int fd, PacketReadCallback event_cb, PacketReadCallback acl_cb,
34 PacketReadCallback sco_cb)
35 : uart_fd_(fd),
36 event_cb_(event_cb),
37 acl_cb_(acl_cb),
38 sco_cb_(sco_cb),
39 hci_packetizer_([this]() { OnPacketReady(); }) {}
40
41 size_t Send(uint8_t type, const uint8_t* data, size_t length);
42
43 void OnPacketReady();
44
45 void OnDataReady(int fd);
46
47 private:
48 int uart_fd_;
49
50 PacketReadCallback event_cb_;
51 PacketReadCallback acl_cb_;
52 PacketReadCallback sco_cb_;
53
54 HciPacketType hci_packet_type_{HCI_PACKET_TYPE_UNKNOWN};
55 hci::HciPacketizer hci_packetizer_;
56};
57
58} // namespace hci
59} // namespace bluetooth
60} // namespace hardware
61} // namespace android