| /** @file |
| * @brief Bluetooth HCI RAW channel handling |
| */ |
| |
| /* |
| * Copyright (c) 2016 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| #ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_ |
| #define ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_ |
| |
| /** |
| * @brief HCI RAW channel |
| * @defgroup hci_raw HCI RAW channel |
| * @ingroup bluetooth |
| * @{ |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** @brief Send packet to the Bluetooth controller |
| * |
| * Send packet to the Bluetooth controller. Caller needs to |
| * implement netbuf pool. |
| * |
| * @param buf netbuf packet to be send |
| * |
| * @return Zero on success or (negative) error code otherwise. |
| */ |
| int bt_send(struct net_buf *buf); |
| |
| enum { |
| /** Passthrough mode |
| * |
| * While in this mode the buffers are passed as is between the stack |
| * and the driver. |
| */ |
| BT_HCI_RAW_MODE_PASSTHROUGH = 0x00, |
| |
| /** H:4 mode |
| * |
| * While in this mode H:4 headers will added into the buffers |
| * according to the buffer type when coming from the stack and will be |
| * removed and used to set the buffer type. |
| */ |
| BT_HCI_RAW_MODE_H4 = 0x01, |
| }; |
| |
| /** @brief Set Bluetooth RAW channel mode |
| * |
| * Set access mode of Bluetooth RAW channel. |
| * |
| * @param mode Access mode. |
| * |
| * @return Zero on success or (negative) error code otherwise. |
| */ |
| int bt_hci_raw_set_mode(uint8_t mode); |
| |
| /** @brief Get Bluetooth RAW channel mode |
| * |
| * Get access mode of Bluetooth RAW channel. |
| * |
| * @return Access mode. |
| */ |
| uint8_t bt_hci_raw_get_mode(void); |
| |
| #define BT_HCI_ERR_EXT_HANDLED 0xff |
| |
| /** Helper macro to define a command extension |
| * |
| * @param _op Opcode of the command. |
| * @param _min_len Minimal length of the command. |
| * @param _func Handler function to be called. |
| */ |
| #define BT_HCI_RAW_CMD_EXT(_op, _min_len, _func) \ |
| { \ |
| .op = _op, \ |
| .min_len = _min_len, \ |
| .func = _func, \ |
| } |
| |
| struct bt_hci_raw_cmd_ext { |
| /** Opcode of the command */ |
| uint16_t op; |
| |
| /** Minimal length of the command */ |
| size_t min_len; |
| |
| /** Handler function. |
| * |
| * Handler function to be called when a command is intercepted. |
| * |
| * @param buf Buffer containing the command. |
| * |
| * @return HCI Status code or BT_HCI_ERR_EXT_HANDLED if command has |
| * been handled already and a response has been sent as oppose to |
| * BT_HCI_ERR_SUCCESS which just indicates that the command can be |
| * sent to the controller to be processed. |
| */ |
| uint8_t (*func)(struct net_buf *buf); |
| }; |
| |
| /** @brief Register Bluetooth RAW command extension table |
| * |
| * Register Bluetooth RAW channel command extension table, opcodes in this |
| * table are intercepted to sent to the handler function. |
| * |
| * @param cmds Pointer to the command extension table. |
| * @param size Size of the command extension table. |
| */ |
| void bt_hci_raw_cmd_ext_register(struct bt_hci_raw_cmd_ext *cmds, size_t size); |
| |
| /** @brief Enable Bluetooth RAW channel: |
| * |
| * Enable Bluetooth RAW HCI channel. |
| * |
| * @param rx_queue netbuf queue where HCI packets received from the Bluetooth |
| * controller are to be queued. The queue is defined in the caller while |
| * the available buffers pools are handled in the stack. |
| * |
| * @return Zero on success or (negative) error code otherwise. |
| */ |
| int bt_enable_raw(struct k_fifo *rx_queue); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| /** |
| * @} |
| */ |
| |
| #endif /* ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_ */ |