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