Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
/** @file
 *  @brief Bluetooth HCI driver API.
 */

/*
 * Copyright (c) 2015 Intel Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef __BT_DRIVER_H
#define __BT_DRIVER_H

#include <net/buf.h>

#ifdef __cplusplus
extern "C" {
#endif

enum bt_buf_type {
	BT_CMD,			/** HCI command */
	BT_EVT,			/** HCI event */
	BT_ACL_OUT,		/** Outgoing ACL data */
	BT_ACL_IN,		/** Incoming ACL data */
};

/* Allocate a buffer for an HCI event */
struct net_buf *bt_buf_get_evt(void);

/* Allocate a buffer for incoming ACL data */
struct net_buf *bt_buf_get_acl(void);

/* Receive data from the controller/HCI driver */
void bt_recv(struct net_buf *buf);

struct bt_driver {
	/* Open the HCI transport */
	int (*open)(void);

	/* Send HCI buffer to controller */
	int (*send)(enum bt_buf_type type, struct net_buf *buf);
};

/* Register a new HCI driver to the Bluetooth stack */
int bt_driver_register(struct bt_driver *drv);

/* Unregister a previously registered HCI driver */
void bt_driver_unregister(struct bt_driver *drv);

#ifdef __cplusplus
}
#endif

#endif /* __BT_DRIVER_H */