zephyr/drivers/bluetooth/hci/rpmsg_nrf53.c

61 lines
1.2 KiB
C

/*
* Copyright (c) 2019 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <drivers/ipm.h>
#include <ipc/rpmsg_service.h>
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)
#define LOG_MODULE_NAME bt_hci_driver_nrf53
#include "common/log.h"
void bt_rpmsg_rx(uint8_t *data, size_t len);
static K_SEM_DEFINE(ready_sem, 0, 1);
static K_SEM_DEFINE(rx_sem, 0, 1);
BUILD_ASSERT(CONFIG_HEAP_MEM_POOL_SIZE >= 1024,
"Not enough heap memory for RPMsg queue allocation");
static int endpoint_id;
static int endpoint_cb(struct rpmsg_endpoint *ept, void *data, size_t len,
uint32_t src, void *priv)
{
BT_DBG("Received message of %u bytes.", len);
BT_HEXDUMP_DBG((uint8_t *)data, len, "Data:");
bt_rpmsg_rx(data, len);
return RPMSG_SUCCESS;
}
int bt_rpmsg_platform_init(void)
{
int err;
err = rpmsg_service_register_endpoint("nrf_bt_hci", endpoint_cb);
if (err < 0) {
LOG_ERR("Registering endpoint failed with %d", err);
return RPMSG_ERR_INIT;
}
endpoint_id = err;
return RPMSG_SUCCESS;
}
int bt_rpmsg_platform_send(struct net_buf *buf)
{
return rpmsg_service_send(endpoint_id, buf->data, buf->len);
}
int bt_rpmsg_platform_endpoint_is_bound(void)
{
return rpmsg_service_endpoint_is_bound(endpoint_id);
}