zephyr/include/zephyr/bluetooth/hci.h
Rubin Gerritsen 8b2dd61eba Bluetooth: HCI: Add bt_hci_get_ver_str()
This new API returns the version string corresponding to a given
HCI version.

The API can be used by applications to print out human-readable
information about the controller being used.

Adding this API removes possible code duplication.

Signed-off-by: Rubin Gerritsen <rubin.gerritsen@nordicsemi.no>
2023-11-07 09:55:05 +01:00

156 lines
5.3 KiB
C

/* hci.h - Bluetooth Host Control Interface definitions */
/*
* Copyright (c) 2015-2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_H_
#define ZEPHYR_INCLUDE_BLUETOOTH_HCI_H_
#include <stdbool.h>
#include <stdint.h>
#include <zephyr/net/buf.h>
#include <zephyr/bluetooth/addr.h>
#include <zephyr/bluetooth/conn.h>
#include <zephyr/bluetooth/hci_types.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Allocate a HCI command buffer.
*
* This function allocates a new buffer for a HCI command. It is given
* the OpCode (encoded e.g. using the BT_OP macro) and the total length
* of the parameters. Upon successful return the buffer is ready to have
* the parameters encoded into it.
*
* @param opcode Command OpCode.
* @param param_len Length of command parameters.
*
* @return Newly allocated buffer.
*/
struct net_buf *bt_hci_cmd_create(uint16_t opcode, uint8_t param_len);
/** Send a HCI command asynchronously.
*
* This function is used for sending a HCI command asynchronously. It can
* either be called for a buffer created using bt_hci_cmd_create(), or
* if the command has no parameters a NULL can be passed instead. The
* sending of the command will happen asynchronously, i.e. upon successful
* return from this function the caller only knows that it was queued
* successfully.
*
* If synchronous behavior, and retrieval of the Command Complete parameters
* is desired, the bt_hci_cmd_send_sync() API should be used instead.
*
* @param opcode Command OpCode.
* @param buf Command buffer or NULL (if no parameters).
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_cmd_send(uint16_t opcode, struct net_buf *buf);
/** Send a HCI command synchronously.
*
* This function is used for sending a HCI command synchronously. It can
* either be called for a buffer created using bt_hci_cmd_create(), or
* if the command has no parameters a NULL can be passed instead.
*
* The function will block until a Command Status or a Command Complete
* event is returned. If either of these have a non-zero status the function
* will return a negative error code and the response reference will not
* be set. If the command completed successfully and a non-NULL rsp parameter
* was given, this parameter will be set to point to a buffer containing
* the response parameters.
*
* @param opcode Command OpCode.
* @param buf Command buffer or NULL (if no parameters).
* @param rsp Place to store a reference to the command response. May
* be NULL if the caller is not interested in the response
* parameters. If non-NULL is passed the caller is responsible
* for calling net_buf_unref() on the buffer when done parsing
* it.
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_cmd_send_sync(uint16_t opcode, struct net_buf *buf,
struct net_buf **rsp);
/** @brief Get connection handle for a connection.
*
* @param conn Connection object.
* @param conn_handle Place to store the Connection handle.
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_get_conn_handle(const struct bt_conn *conn, uint16_t *conn_handle);
/** @brief Get advertising handle for an advertising set.
*
* @param adv Advertising set.
* @param adv_handle Place to store the advertising handle.
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_get_adv_handle(const struct bt_le_ext_adv *adv, uint8_t *adv_handle);
/** @brief Obtain the version string given a core version number.
*
* The core version of a controller can be obtained by issuing
* the HCI Read Local Version Information command.
*
* See also the defines prefixed with BT_HCI_VERSION_.
*
* @param core_version The core version.
*
* @return Version string corresponding to the core version number.
*/
const char *bt_hci_get_ver_str(uint8_t core_version);
/** @typedef bt_hci_vnd_evt_cb_t
* @brief Callback type for vendor handling of HCI Vendor-Specific Events.
*
* A function of this type is registered with bt_hci_register_vnd_evt_cb()
* and will be called for any HCI Vendor-Specific Event.
*
* @param buf Buffer containing event parameters.
*
* @return true if the function handles the event or false to defer the
* handling of this event back to the stack.
*/
typedef bool bt_hci_vnd_evt_cb_t(struct net_buf_simple *buf);
/** Register user callback for HCI Vendor-Specific Events
*
* @param cb Callback to be called when the stack receives a
* HCI Vendor-Specific Event.
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_register_vnd_evt_cb(bt_hci_vnd_evt_cb_t cb);
/** @brief Get Random bytes from the LE Controller.
*
* Send the HCI_LE_Rand to the LE Controller as many times as required to
* fill the provided @p buffer.
*
* @note This function is provided as a helper to gather an arbitrary number of
* random bytes from an LE Controller using the HCI_LE_Rand command.
*
* @param buffer Buffer to fill with random bytes.
* @param len Length of the buffer in bytes.
*
* @return 0 on success or negative error value on failure.
*/
int bt_hci_le_rand(void *buffer, size_t len);
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_BLUETOOTH_HCI_H_ */