blob: 68211071668071824408be7af6d8002b94557255 [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 "bt_vendor_lib.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
33// Implementation of HCI protocol bits common to different transports
34class HciProtocol {
35 public:
36 HciProtocol() = default;
37 virtual ~HciProtocol(){};
38
39 // Protocol-specific implementation of sending packets.
40 virtual size_t Send(uint8_t type, const uint8_t* data, size_t length) = 0;
41
42 protected:
43 static size_t WriteSafely(int fd, const uint8_t* data, size_t length);
44};
45
46} // namespace hci
47} // namespace bluetooth
48} // namespace hardware
49} // namespace android