fix(nimble): Corrected acl data handling code in bleprph_host_only

This commit is contained in:
Roshan Bangar
2024-02-09 12:52:36 +05:30
committed by Rahul Tank
parent 39c27275c8
commit e7302b533c
2 changed files with 74 additions and 12 deletions

View File

@@ -1,11 +1,65 @@
menu "Example Configuration" menu "Example Configuration"
config EXAMPLE_HCI_UART_BAUDRATE menu "Uart Configuration"
int "UART Baudrate for HCI"
range 115200 921600 config EXAMPLE_HCI_UART_BAUDRATE
default 921600 int "UART Baudrate for HCI"
help range 115200 921600
UART Baudrate for HCI. Please use standard baudrate. default 921600
help
UART Baudrate for HCI. Please use standard baudrate.
config EXAMPLE_HCI_UART_TX_PIN
int "UART Tx Pin"
default 4
help
UART HCI Tx pin
config EXAMPLE_HCI_UART_RX_PIN
int "UART Rx Pin"
default 5
help
UART HCI Rx pin
choice EXAMPLE_USE_HCI_UART_FLOW_CTRL
prompt "Uart Flow Control"
default EXAMPLE_UART_HW_FLOWCTRL_DISABLE
help
Uart Flow Control
config EXAMPLE_UART_HW_FLOWCTRL_DISABLE
bool "Disable"
config EXAMPLE_UART_HW_FLOWCTRL_RTS
bool "Enable Rx hardware flow control"
config EXAMPLE_UART_HW_FLOWCTRL_CTS
bool "Enable Tx hardware flow control"
config EXAMPLE_UART_HW_FLOWCTRL_CTS_RTS
bool "Enable hardware flow control"
config EXAMPLE_UART_HW_FLOWCTRL_MAX
bool "Hardware Flow control max"
endchoice
config EXAMPLE_HCI_UART_FLOW_CTRL
int
default 0 if EXAMPLE_UART_HW_FLOWCTRL_DISABLE
default 1 if EXAMPLE_UART_HW_FLOWCTRL_RTS
default 2 if EXAMPLE_UART_HW_FLOWCTRL_CTS
default 3 if EXAMPLE_UART_HW_FLOWCTRL_CTS_RTS
default 4 if EXAMPLE_UART_HW_FLOWCTRL_MAX
config EXAMPLE_HCI_UART_RTS_PIN
int "UART Rts Pin"
default 19
help
UART HCI RTS pin
config EXAMPLE_HCI_UART_CTS_PIN
int "UART Cts Pin"
default 23
help
UART HCI CTS pin
endmenu
choice EXAMPLE_USE_IO_TYPE choice EXAMPLE_USE_IO_TYPE
prompt "I/O Capability" prompt "I/O Capability"
default BLE_SM_IO_CAP_NO_IO default BLE_SM_IO_CAP_NO_IO

View File

@@ -21,10 +21,10 @@
#define UART_NO (1) #define UART_NO (1)
#define UART_BUF_SZ (1024) #define UART_BUF_SZ (1024)
#define UART_TX_PIN (4) #define UART_TX_PIN (CONFIG_EXAMPLE_HCI_UART_TX_PIN)
#define UART_RX_PIN (5) #define UART_RX_PIN (CONFIG_EXAMPLE_HCI_UART_RX_PIN)
#define UART_RTS_PIN (19) #define UART_RTS_PIN (CONFIG_EXAMPLE_HCI_UART_RTS_PIN)
#define UART_CTS_PIN (23) #define UART_CTS_PIN (CONFIG_EXAMPLE_HCI_UART_CTS_PIN)
#define HCI_H4_ACL (0x02) #define HCI_H4_ACL (0x02)
#define HCI_H4_CMD (0x01) #define HCI_H4_CMD (0x01)
#define HCI_H4_EVT (0x04) #define HCI_H4_EVT (0x04)
@@ -86,11 +86,11 @@ static void IRAM_ATTR hci_uart_rx_task(void *arg)
case UART_RX_DATA: { case UART_RX_DATA: {
uint8_t *data = buf; uint8_t *data = buf;
int rc;
if (data[0] == HCI_H4_EVT) { if (data[0] == HCI_H4_EVT) {
uint8_t *evbuf; uint8_t *evbuf;
int totlen; int totlen;
int rc;
totlen = BLE_HCI_EVENT_HDR_LEN + data[2]; totlen = BLE_HCI_EVENT_HDR_LEN + data[2];
assert(totlen <= UINT8_MAX + BLE_HCI_EVENT_HDR_LEN); assert(totlen <= UINT8_MAX + BLE_HCI_EVENT_HDR_LEN);
@@ -131,6 +131,13 @@ static void IRAM_ATTR hci_uart_rx_task(void *arg)
if (!m) { if (!m) {
ESP_LOGE(TAG, "No buffers"); ESP_LOGE(TAG, "No buffers");
} }
if ((rc = os_mbuf_append(m, &data[1], len_total_read - 1)) != 0) {
ESP_LOGE(TAG, "%s failed to os_mbuf_append; rc = %d", __func__, rc);
os_mbuf_free_chain(m);
return;
}
ble_transport_to_hs_acl(m); ble_transport_to_hs_acl(m);
} }
@@ -172,6 +179,7 @@ ble_transport_to_ll_acl_impl(struct os_mbuf *om)
rc = ble_hs_mbuf_to_flat(om, buf + 1, OS_MBUF_PKTLEN(om), NULL); rc = ble_hs_mbuf_to_flat(om, buf + 1, OS_MBUF_PKTLEN(om), NULL);
if(rc) { if(rc) {
ESP_LOGE(TAG, "Error copying data %d", rc); ESP_LOGE(TAG, "Error copying data %d", rc);
os_mbuf_free_chain(om);
return rc; return rc;
} }
hci_uart_send(buf, OS_MBUF_PKTLEN(om) + 1); hci_uart_send(buf, OS_MBUF_PKTLEN(om) + 1);
@@ -198,7 +206,7 @@ void hci_uart_open(void)
.data_bits = UART_DATA_8_BITS, .data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE, .parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1, .stop_bits = UART_STOP_BITS_1,
.flow_ctrl = 0, // UART_HW_FLOWCTRL_CTS_RTS, .flow_ctrl = CONFIG_EXAMPLE_HCI_UART_FLOW_CTRL,
.source_clk = UART_SCLK_DEFAULT, .source_clk = UART_SCLK_DEFAULT,
}; };