mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-11-09 14:00:34 +00:00
nimble/host: Update to new transport
This commit is contained in:
+1
-3
@@ -30,6 +30,7 @@ pkg.deps:
|
||||
- "@apache-mynewt-core/sys/log/modlog"
|
||||
- "@apache-mynewt-core/util/mem"
|
||||
- nimble
|
||||
- nimble/transport
|
||||
|
||||
pkg.deps.BLE_SM_LEGACY:
|
||||
- "@apache-mynewt-core/crypto/tinycrypt"
|
||||
@@ -48,8 +49,5 @@ pkg.req_apis:
|
||||
- console
|
||||
- stats
|
||||
|
||||
pkg.init:
|
||||
ble_hs_init: 'MYNEWT_VAL(BLE_HS_SYSINIT_STAGE)'
|
||||
|
||||
pkg.down.BLE_HS_STOP_ON_SHUTDOWN:
|
||||
ble_hs_shutdown: 200
|
||||
|
||||
+24
-16
@@ -23,7 +23,6 @@
|
||||
#include "sysinit/sysinit.h"
|
||||
#include "syscfg/syscfg.h"
|
||||
#include "stats/stats.h"
|
||||
#include "nimble/ble_hci_trans.h"
|
||||
#include "host/ble_hs.h"
|
||||
#include "ble_hs_priv.h"
|
||||
#include "ble_monitor_priv.h"
|
||||
@@ -32,9 +31,7 @@
|
||||
#include "nimble/nimble_port.h"
|
||||
#endif
|
||||
|
||||
#define BLE_HS_HCI_EVT_COUNT \
|
||||
(MYNEWT_VAL(BLE_HCI_EVT_HI_BUF_COUNT) + \
|
||||
MYNEWT_VAL(BLE_HCI_EVT_LO_BUF_COUNT))
|
||||
#define BLE_HS_HCI_EVT_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_COUNT)
|
||||
|
||||
static void ble_hs_event_rx_hci_ev(struct ble_npl_event *ev);
|
||||
#if NIMBLE_BLE_CONNECT
|
||||
@@ -370,12 +367,6 @@ ble_hs_reset(void)
|
||||
|
||||
ble_hs_sync_state = 0;
|
||||
|
||||
/* Reset transport. Assume success; there is nothing we can do in case of
|
||||
* failure. If the transport failed to reset, the host will reset itself
|
||||
* again when it fails to sync with the controller.
|
||||
*/
|
||||
(void)ble_hci_trans_reset();
|
||||
|
||||
ble_hs_clear_rx_queue();
|
||||
|
||||
/* Clear adverising and scanning states. */
|
||||
@@ -499,7 +490,7 @@ ble_hs_sched_start(void)
|
||||
static void
|
||||
ble_hs_event_rx_hci_ev(struct ble_npl_event *ev)
|
||||
{
|
||||
const struct ble_hci_ev *hci_ev;
|
||||
struct ble_hci_ev *hci_ev;
|
||||
int rc;
|
||||
|
||||
hci_ev = ble_npl_event_get_arg(ev);
|
||||
@@ -573,7 +564,7 @@ ble_hs_enqueue_hci_event(uint8_t *hci_evt)
|
||||
|
||||
ev = os_memblock_get(&ble_hs_hci_ev_pool);
|
||||
if (ev == NULL) {
|
||||
ble_hci_trans_buf_free(hci_evt);
|
||||
ble_transport_free(hci_evt);
|
||||
} else {
|
||||
ble_npl_event_init(ev, ble_hs_event_rx_hci_ev, hci_evt);
|
||||
ble_npl_eventq_put(ble_hs_evq, ev);
|
||||
@@ -709,7 +700,7 @@ ble_hs_tx_data(struct os_mbuf *om)
|
||||
ble_monitor_send_om(BLE_MONITOR_OPCODE_ACL_TX_PKT, om);
|
||||
#endif
|
||||
|
||||
return ble_hci_trans_hs_acl_tx(om);
|
||||
return ble_transport_to_ll_acl(om);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -793,9 +784,6 @@ ble_hs_init(void)
|
||||
ble_hs_evq_set(nimble_port_get_dflt_eventq());
|
||||
#endif
|
||||
|
||||
/* Configure the HCI transport to communicate with a host. */
|
||||
ble_hci_trans_cfg_hs(ble_hs_hci_rx_evt, NULL, ble_hs_rx_data, NULL);
|
||||
|
||||
#if BLE_MONITOR
|
||||
rc = ble_monitor_init();
|
||||
SYSINIT_PANIC_ASSERT(rc == 0);
|
||||
@@ -818,3 +806,23 @@ ble_hs_init(void)
|
||||
ble_monitor_new_index(0, (uint8_t[6]){ }, "nimble0");
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Transport APIs for HS side */
|
||||
|
||||
int
|
||||
ble_transport_to_hs_evt(void *buf)
|
||||
{
|
||||
return ble_hs_hci_rx_evt(buf, NULL);
|
||||
}
|
||||
|
||||
int
|
||||
ble_transport_to_hs_acl(struct os_mbuf *om)
|
||||
{
|
||||
return ble_hs_rx_data(om, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
ble_transport_hs_init(void)
|
||||
{
|
||||
ble_hs_init();
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
*/
|
||||
|
||||
#include "syscfg/syscfg.h"
|
||||
#include "nimble/ble_hci_trans.h"
|
||||
#include "ble_hs_priv.h"
|
||||
|
||||
#if MYNEWT_VAL(BLE_HS_FLOW_CTRL)
|
||||
@@ -41,7 +40,7 @@ static ble_npl_event_fn ble_hs_flow_event_cb;
|
||||
static struct ble_npl_event ble_hs_flow_ev;
|
||||
|
||||
/* Connection handle associated with each mbuf in ACL pool */
|
||||
static uint16_t ble_hs_flow_mbuf_conn_handle[ MYNEWT_VAL(BLE_ACL_BUF_COUNT) ];
|
||||
static uint16_t ble_hs_flow_mbuf_conn_handle[ MYNEWT_VAL(BLE_TRANSPORT_ACL_FROM_LL_COUNT) ];
|
||||
|
||||
static inline int
|
||||
ble_hs_flow_mbuf_index(const struct os_mbuf *om)
|
||||
@@ -136,7 +135,7 @@ ble_hs_flow_inc_completed_pkts(struct ble_hs_conn *conn)
|
||||
conn->bhc_completed_pkts++;
|
||||
ble_hs_flow_num_completed_pkts++;
|
||||
|
||||
if (ble_hs_flow_num_completed_pkts > MYNEWT_VAL(BLE_ACL_BUF_COUNT)) {
|
||||
if (ble_hs_flow_num_completed_pkts > MYNEWT_VAL(BLE_TRANSPORT_ACL_FROM_LL_COUNT)) {
|
||||
ble_hs_sched_reset(BLE_HS_ECONTROLLER);
|
||||
return;
|
||||
}
|
||||
@@ -144,7 +143,8 @@ ble_hs_flow_inc_completed_pkts(struct ble_hs_conn *conn)
|
||||
/* If the number of free buffers is at or below the configured threshold,
|
||||
* send an immediate number-of-copmleted-packets event.
|
||||
*/
|
||||
num_free = MYNEWT_VAL(BLE_ACL_BUF_COUNT) - ble_hs_flow_num_completed_pkts;
|
||||
num_free = MYNEWT_VAL(BLE_TRANSPORT_ACL_FROM_LL_COUNT) -
|
||||
ble_hs_flow_num_completed_pkts;
|
||||
if (num_free <= MYNEWT_VAL(BLE_HS_FLOW_CTRL_THRESH)) {
|
||||
ble_npl_eventq_put(ble_hs_evq_get(), &ble_hs_flow_ev);
|
||||
ble_npl_callout_stop(&ble_hs_flow_timer);
|
||||
@@ -230,16 +230,13 @@ ble_hs_flow_startup(void)
|
||||
#if MYNEWT_VAL(BLE_HS_FLOW_CTRL)
|
||||
struct ble_hci_cb_ctlr_to_host_fc_cp enable_cmd;
|
||||
struct ble_hci_cb_host_buf_size_cp buf_size_cmd = {
|
||||
.acl_data_len = htole16(MYNEWT_VAL(BLE_ACL_BUF_SIZE)),
|
||||
.acl_num = htole16(MYNEWT_VAL(BLE_ACL_BUF_COUNT)),
|
||||
.acl_data_len = htole16(MYNEWT_VAL(BLE_TRANSPORT_ACL_SIZE)),
|
||||
.acl_num = htole16(MYNEWT_VAL(BLE_TRANSPORT_ACL_FROM_LL_COUNT)),
|
||||
};
|
||||
int rc;
|
||||
|
||||
ble_npl_event_init(&ble_hs_flow_ev, ble_hs_flow_event_cb, NULL);
|
||||
|
||||
/* Assume failure. */
|
||||
ble_hci_trans_set_acl_free_cb(NULL, NULL);
|
||||
|
||||
#if MYNEWT_VAL(SELFTEST)
|
||||
ble_npl_callout_stop(&ble_hs_flow_timer);
|
||||
#endif
|
||||
@@ -266,7 +263,7 @@ ble_hs_flow_startup(void)
|
||||
|
||||
/* Flow control successfully enabled. */
|
||||
ble_hs_flow_num_completed_pkts = 0;
|
||||
ble_hci_trans_set_acl_free_cb(ble_hs_flow_acl_free, NULL);
|
||||
ble_transport_register_put_acl_from_ll_cb(ble_hs_flow_acl_free);
|
||||
ble_npl_callout_init(&ble_hs_flow_timer, ble_hs_evq_get(),
|
||||
ble_hs_flow_event_cb, NULL);
|
||||
#endif
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <stdio.h>
|
||||
#include "os/os.h"
|
||||
#include "mem/mem.h"
|
||||
#include "nimble/ble_hci_trans.h"
|
||||
#include "host/ble_monitor.h"
|
||||
#include "ble_hs_priv.h"
|
||||
#include "ble_monitor_priv.h"
|
||||
@@ -269,8 +268,7 @@ ble_hs_hci_wait_for_ack(void)
|
||||
if (ble_hs_hci_phony_ack_cb == NULL) {
|
||||
rc = BLE_HS_ETIMEOUT_HCI;
|
||||
} else {
|
||||
ble_hs_hci_ack =
|
||||
(void *) ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD);
|
||||
ble_hs_hci_ack = ble_transport_alloc_cmd();
|
||||
BLE_HS_DBG_ASSERT(ble_hs_hci_ack != NULL);
|
||||
rc = ble_hs_hci_phony_ack_cb((void *)ble_hs_hci_ack, 260);
|
||||
}
|
||||
@@ -351,7 +349,7 @@ ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len,
|
||||
|
||||
done:
|
||||
if (ble_hs_hci_ack != NULL) {
|
||||
ble_hci_trans_buf_free((uint8_t *) ble_hs_hci_ack);
|
||||
ble_transport_free((uint8_t *) ble_hs_hci_ack);
|
||||
ble_hs_hci_ack = NULL;
|
||||
}
|
||||
|
||||
@@ -364,7 +362,7 @@ ble_hs_hci_rx_ack(uint8_t *ack_ev)
|
||||
{
|
||||
if (ble_npl_sem_get_count(&ble_hs_hci_sem) > 0) {
|
||||
/* This ack is unexpected; ignore it. */
|
||||
ble_hci_trans_buf_free(ack_ev);
|
||||
ble_transport_free(ack_ev);
|
||||
return;
|
||||
}
|
||||
BLE_HS_DBG_ASSERT(ble_hs_hci_ack == NULL);
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include <stdio.h>
|
||||
#include "os/os.h"
|
||||
#include "nimble/hci_common.h"
|
||||
#include "nimble/ble_hci_trans.h"
|
||||
#include "host/ble_monitor.h"
|
||||
#include "ble_hs_priv.h"
|
||||
#include "ble_monitor_priv.h"
|
||||
@@ -38,7 +37,7 @@ ble_hs_hci_cmd_transport(struct ble_hci_cmd *cmd)
|
||||
cmd->length + sizeof(*cmd));
|
||||
#endif
|
||||
|
||||
rc = ble_hci_trans_hs_cmd_tx((uint8_t *) cmd);
|
||||
rc = ble_transport_to_ll_cmd(cmd);
|
||||
switch (rc) {
|
||||
case 0:
|
||||
return 0;
|
||||
@@ -57,7 +56,7 @@ ble_hs_hci_cmd_send(uint16_t opcode, uint8_t len, const void *cmddata)
|
||||
struct ble_hci_cmd *cmd;
|
||||
int rc;
|
||||
|
||||
cmd = (void *) ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD);
|
||||
cmd = ble_transport_alloc_cmd();
|
||||
BLE_HS_DBG_ASSERT(cmd != NULL);
|
||||
|
||||
cmd->opcode = htole16(opcode);
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <stdio.h>
|
||||
#include "os/os.h"
|
||||
#include "nimble/hci_common.h"
|
||||
#include "nimble/ble_hci_trans.h"
|
||||
#include "host/ble_gap.h"
|
||||
#include "host/ble_monitor.h"
|
||||
#include "ble_hs_priv.h"
|
||||
@@ -795,7 +794,7 @@ ble_hs_hci_evt_le_phy_update_complete(uint8_t subevent, const void *data,
|
||||
#endif
|
||||
|
||||
int
|
||||
ble_hs_hci_evt_process(const struct ble_hci_ev *ev)
|
||||
ble_hs_hci_evt_process(struct ble_hci_ev *ev)
|
||||
{
|
||||
const struct ble_hs_hci_evt_dispatch_entry *entry;
|
||||
int rc;
|
||||
@@ -812,7 +811,7 @@ ble_hs_hci_evt_process(const struct ble_hci_ev *ev)
|
||||
rc = entry->cb(ev->opcode, ev->data, ev->length);
|
||||
}
|
||||
|
||||
ble_hci_trans_buf_free((uint8_t *) ev);
|
||||
ble_transport_free(ev);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets,
|
||||
uint16_t tx_time);
|
||||
int ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om,
|
||||
struct hci_data_hdr *out_hdr);
|
||||
int ble_hs_hci_evt_process(const struct ble_hci_ev *ev);
|
||||
int ble_hs_hci_evt_process(struct ble_hci_ev *ev);
|
||||
|
||||
int ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len);
|
||||
int ble_hs_hci_set_buf_sz(uint16_t pktlen, uint16_t max_pkts);
|
||||
|
||||
@@ -497,3 +497,6 @@ syscfg.logs:
|
||||
|
||||
syscfg.vals.BLE_MESH:
|
||||
BLE_SM_SC: 1
|
||||
|
||||
syscfg.restrictions:
|
||||
- BLE_TRANSPORT_HS == "native"
|
||||
|
||||
Reference in New Issue
Block a user