zephyr/subsys/bluetooth/shell/ticker.c
Carles Cufi f49150cab6 arch: arm: nrf: Rename nrf5 SoC Family to nrf
Upcoming Nordic ICs that share many of the peripherals and architecture
with the currently supported nRF5x ones are no longer part of the nRF5
family. In order to accomodate that, rename the SoC family from nrf5 to
nrf, so that it can contain all of the members of the wider Nordic
family.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2018-03-20 11:57:14 +01:00

130 lines
2.8 KiB
C

/** @file
* @brief Bluetooth Controller Ticker functions
*
*/
/*
* Copyright (c) 2017-2018 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <shell/shell.h>
#include <misc/printk.h>
#if defined(CONFIG_SOC_FAMILY_NRF)
#include "../controller/hal/nrf5/ticker.h"
#endif /* CONFIG_SOC_FAMILY_NRF */
#include "../controller/util/memq.h"
#include "../controller/util/mayfly.h"
#include "../controller/ticker/ticker.h"
#define TICKER_SHELL_MODULE "ticker"
#if defined(CONFIG_BT_MAX_CONN)
#define TICKERS_MAX (CONFIG_BT_MAX_CONN + 2)
#else
#define TICKERS_MAX 2
#endif
static void ticker_op_done(u32_t err, void *context)
{
*((u32_t volatile *)context) = err;
}
int cmd_ticker_info(int argc, char *argv[])
{
struct {
u8_t id;
u32_t ticks_to_expire;
} tickers[TICKERS_MAX];
u32_t ticks_to_expire;
u32_t ticks_current;
u8_t tickers_count;
u8_t ticker_id;
u8_t retry;
u8_t i;
ticker_id = TICKER_NULL;
ticks_to_expire = 0;
ticks_current = 0;
tickers_count = 0;
retry = 4;
do {
u32_t volatile err_cb = TICKER_STATUS_BUSY;
u32_t ticks_previous;
u32_t err;
ticks_previous = ticks_current;
err = ticker_next_slot_get(0, MAYFLY_CALL_ID_PROGRAM,
&ticker_id, &ticks_current,
&ticks_to_expire,
ticker_op_done, (void *)&err_cb);
if (err == TICKER_STATUS_BUSY) {
while (err_cb == TICKER_STATUS_BUSY) {
ticker_job_sched(0, MAYFLY_CALL_ID_PROGRAM);
}
}
if ((err_cb != TICKER_STATUS_SUCCESS) ||
(ticker_id == TICKER_NULL)) {
printk("Query done (0x%02x, err= %u).\n", ticker_id,
err);
break;
}
if (ticks_current != ticks_previous) {
retry--;
if (!retry) {
printk("Retry again, tickers too busy now.\n");
return -EAGAIN;
}
if (tickers_count) {
tickers_count = 0;
printk("Query reset, %u retries remaining.\n",
retry);
}
}
tickers[tickers_count].id = ticker_id;
tickers[tickers_count].ticks_to_expire = ticks_to_expire;
tickers_count++;
} while (tickers_count < TICKERS_MAX);
printk("Tickers: %u.\n", tickers_count);
printk("Tick: %u (%uus).\n", ticks_current,
HAL_TICKER_TICKS_TO_US(ticks_current));
if (!tickers_count) {
return 0;
}
printk("---------------------\n");
printk(" id offset offset\n");
printk(" (tick) (us)\n");
printk("---------------------\n");
for (i = 0; i < tickers_count; i++) {
printk("%03u %08u %08u\n", tickers[i].id,
tickers[i].ticks_to_expire,
HAL_TICKER_TICKS_TO_US(tickers[i].ticks_to_expire));
}
printk("---------------------\n");
return 0;
}
static const struct shell_cmd ticker_commands[] = {
{ "info", cmd_ticker_info, "Enumerate active ticker details."},
{ NULL, NULL, NULL}
};
SHELL_REGISTER(TICKER_SHELL_MODULE, ticker_commands);