123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /** @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_ */
|