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