Bluetooth: controller: Introducing slot agnostic ticker
Added config BT_TICKER_SLOT_AGNOSTIC which configures the ticker in a "slot agnostic" mode, in which no collision resolving or slot reservation is possible or used. In this mode, the ticker acts as a simple timer. Signed-off-by: Morten Priess <mtpr@oticon.com>
This commit is contained in:
parent
4277af8f55
commit
9f82034245
3 changed files with 91 additions and 27 deletions
|
@ -555,7 +555,7 @@ config BT_TICKER_LAZY_GET
|
||||||
|
|
||||||
config BT_TICKER_EXT
|
config BT_TICKER_EXT
|
||||||
bool "Ticker extensions"
|
bool "Ticker extensions"
|
||||||
depends on !BT_TICKER_LOW_LAT
|
depends on !BT_TICKER_LOW_LAT && !BT_TICKER_SLOT_AGNOSTIC
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option enables ticker extensions such as re-scheduling of
|
This option enables ticker extensions such as re-scheduling of
|
||||||
|
@ -563,6 +563,13 @@ config BT_TICKER_EXT
|
||||||
are invoked by using available '_ext' versions of ticker interface
|
are invoked by using available '_ext' versions of ticker interface
|
||||||
functions.
|
functions.
|
||||||
|
|
||||||
|
config BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
bool "Slot agnostic ticker mode"
|
||||||
|
help
|
||||||
|
This option enables slot agnostic ticker mode, which ignores slot
|
||||||
|
reservations and collision handling, and operates as a simple
|
||||||
|
multi-instance programmable timer.
|
||||||
|
|
||||||
config BT_CTLR_USER_EXT
|
config BT_CTLR_USER_EXT
|
||||||
prompt "Enable proprietary extensions in Controller"
|
prompt "Enable proprietary extensions in Controller"
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -48,7 +48,9 @@ struct ticker_node {
|
||||||
* function
|
* function
|
||||||
*/
|
*/
|
||||||
uint32_t ticks_to_expire_minus; /* Negative drift correction */
|
uint32_t ticks_to_expire_minus; /* Negative drift correction */
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
uint32_t ticks_slot; /* Air-time reservation for node */
|
uint32_t ticks_slot; /* Air-time reservation for node */
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
uint16_t lazy_periodic; /* Number of timeouts to allow
|
uint16_t lazy_periodic; /* Number of timeouts to allow
|
||||||
* skipping
|
* skipping
|
||||||
*/
|
*/
|
||||||
|
@ -71,7 +73,8 @@ struct ticker_node {
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
struct ticker_ext *ext_data; /* Ticker extension data */
|
struct ticker_ext *ext_data; /* Ticker extension data */
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
|
@ -123,7 +126,9 @@ struct ticker_user_op_start {
|
||||||
uint16_t lazy; /* Periodic latency in number of
|
uint16_t lazy; /* Periodic latency in number of
|
||||||
* periods
|
* periods
|
||||||
*/
|
*/
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
uint32_t ticks_slot; /* Air-time reservation ticks */
|
uint32_t ticks_slot; /* Air-time reservation ticks */
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
ticker_timeout_func fp_timeout_func; /* Timeout callback function */
|
ticker_timeout_func fp_timeout_func; /* Timeout callback function */
|
||||||
void *context; /* Context passed in timeout callback */
|
void *context; /* Context passed in timeout callback */
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
|
@ -137,12 +142,14 @@ struct ticker_user_op_start {
|
||||||
struct ticker_user_op_update {
|
struct ticker_user_op_update {
|
||||||
uint32_t ticks_drift_plus; /* Requested positive drift in ticks */
|
uint32_t ticks_drift_plus; /* Requested positive drift in ticks */
|
||||||
uint32_t ticks_drift_minus; /* Requested negatice drift in ticks */
|
uint32_t ticks_drift_minus; /* Requested negatice drift in ticks */
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
uint32_t ticks_slot_plus; /* Number of ticks to add to slot
|
uint32_t ticks_slot_plus; /* Number of ticks to add to slot
|
||||||
* reservation (air-time)
|
* reservation (air-time)
|
||||||
*/
|
*/
|
||||||
uint32_t ticks_slot_minus; /* Number of ticks to subtract from
|
uint32_t ticks_slot_minus; /* Number of ticks to subtract from
|
||||||
* slot reservation (air-time)
|
* slot reservation (air-time)
|
||||||
*/
|
*/
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
uint16_t lazy; /* Slave latency:
|
uint16_t lazy; /* Slave latency:
|
||||||
* 0: Do nothing
|
* 0: Do nothing
|
||||||
* 1: latency = 0
|
* 1: latency = 0
|
||||||
|
@ -387,6 +394,7 @@ static void ticker_by_next_slot_get(struct ticker_instance *instance,
|
||||||
_ticker_id_head = ticker->next;
|
_ticker_id_head = ticker->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
/* Find first ticker node with slot ticks */
|
/* Find first ticker node with slot ticks */
|
||||||
while ((_ticker_id_head != TICKER_NULL) &&
|
while ((_ticker_id_head != TICKER_NULL) &&
|
||||||
((ticker = &node[_ticker_id_head])->ticks_slot == 0U)) {
|
((ticker = &node[_ticker_id_head])->ticks_slot == 0U)) {
|
||||||
|
@ -394,7 +402,10 @@ static void ticker_by_next_slot_get(struct ticker_instance *instance,
|
||||||
_ticks_to_expire += ticker->ticks_to_expire;
|
_ticks_to_expire += ticker->ticks_to_expire;
|
||||||
_ticker_id_head = ticker->next;
|
_ticker_id_head = ticker->next;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* TODO: Come up with different way to find/match the ticker */
|
||||||
|
LL_ASSERT(0);
|
||||||
|
#endif
|
||||||
if (_ticker_id_head != TICKER_NULL) {
|
if (_ticker_id_head != TICKER_NULL) {
|
||||||
/* Add ticks for found ticker */
|
/* Add ticks for found ticker */
|
||||||
_ticks_to_expire += ticker->ticks_to_expire;
|
_ticks_to_expire += ticker->ticks_to_expire;
|
||||||
|
@ -648,7 +659,8 @@ static uint32_t ticker_dequeue(struct ticker_instance *instance, uint8_t id)
|
||||||
return (total + timeout);
|
return (total + timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
/**
|
/**
|
||||||
* @brief Resolve ticker node collision
|
* @brief Resolve ticker node collision
|
||||||
*
|
*
|
||||||
|
@ -768,7 +780,9 @@ static uint8_t ticker_resolve_collision(struct ticker_node *nodes,
|
||||||
|
|
||||||
return 0U;
|
return 0U;
|
||||||
}
|
}
|
||||||
#endif /* !CONFIG_BT_TICKER_LOW_LAT */
|
#endif /* !CONFIG_BT_TICKER_LOW_LAT &&
|
||||||
|
* !CONFIG_BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Ticker worker
|
* @brief Ticker worker
|
||||||
|
@ -819,7 +833,8 @@ void ticker_worker(void *param)
|
||||||
uint8_t slot_reserved = 0;
|
uint8_t slot_reserved = 0;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_BT_TICKER_LOW_LAT) &&
|
if (!IS_ENABLED(CONFIG_BT_TICKER_LOW_LAT) &&
|
||||||
instance->ticker_id_slot_previous != TICKER_NULL) {
|
!IS_ENABLED(CONFIG_BT_TICKER_SLOT_AGNOSTIC) &&
|
||||||
|
(instance->ticker_id_slot_previous != TICKER_NULL)) {
|
||||||
if (instance->ticks_slot_previous > ticks_elapsed) {
|
if (instance->ticks_slot_previous > ticks_elapsed) {
|
||||||
/* This node intersects reserved slot */
|
/* This node intersects reserved slot */
|
||||||
slot_reserved = 1;
|
slot_reserved = 1;
|
||||||
|
@ -855,7 +870,8 @@ void ticker_worker(void *param)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
/* Check if node has slot reservation and resolve any collision
|
/* Check if node has slot reservation and resolve any collision
|
||||||
* with other ticker nodes
|
* with other ticker nodes
|
||||||
*/
|
*/
|
||||||
|
@ -906,8 +922,9 @@ void ticker_worker(void *param)
|
||||||
TICKER_RESCHEDULE_STATE_NONE;
|
TICKER_RESCHEDULE_STATE_NONE;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
#endif /* !CONFIG_BT_TICKER_LOW_LAT */
|
#endif /* !CONFIG_BT_TICKER_LOW_LAT &&
|
||||||
|
* !CONFIG_BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
*/
|
||||||
/* Scheduled timeout is acknowledged to be complete */
|
/* Scheduled timeout is acknowledged to be complete */
|
||||||
ticker->ack--;
|
ticker->ack--;
|
||||||
|
|
||||||
|
@ -934,10 +951,12 @@ void ticker_worker(void *param)
|
||||||
/* Reset latency to periodic offset */
|
/* Reset latency to periodic offset */
|
||||||
ticker->lazy_current = 0U;
|
ticker->lazy_current = 0U;
|
||||||
ticker->force = 0U;
|
ticker->force = 0U;
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
if (ticker->ticks_slot != 0U) {
|
if (ticker->ticks_slot != 0U) {
|
||||||
/* Any further nodes will be skipped */
|
/* Any further nodes will be skipped */
|
||||||
slot_reserved = 1U;
|
slot_reserved = 1U;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1168,6 +1187,7 @@ static inline void ticker_job_node_update(struct ticker_node *ticker,
|
||||||
|
|
||||||
ticks_to_expire_prep(ticker, ticks_current, ticks_now);
|
ticks_to_expire_prep(ticker, ticks_current, ticks_now);
|
||||||
|
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
/* Update ticks_slot parameter from plus/minus input */
|
/* Update ticks_slot parameter from plus/minus input */
|
||||||
ticker->ticks_slot += user_op->params.update.ticks_slot_plus;
|
ticker->ticks_slot += user_op->params.update.ticks_slot_plus;
|
||||||
if (ticker->ticks_slot > user_op->params.update.ticks_slot_minus) {
|
if (ticker->ticks_slot > user_op->params.update.ticks_slot_minus) {
|
||||||
|
@ -1175,6 +1195,7 @@ static inline void ticker_job_node_update(struct ticker_node *ticker,
|
||||||
} else {
|
} else {
|
||||||
ticker->ticks_slot = 0U;
|
ticker->ticks_slot = 0U;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
|
|
||||||
/* Update force parameter */
|
/* Update force parameter */
|
||||||
if (user_op->params.update.force != 0U) {
|
if (user_op->params.update.force != 0U) {
|
||||||
|
@ -1349,8 +1370,10 @@ static inline uint8_t ticker_job_list_manage(struct ticker_instance *instance,
|
||||||
((user_op->op == TICKER_USER_OP_TYPE_UPDATE) &&
|
((user_op->op == TICKER_USER_OP_TYPE_UPDATE) &&
|
||||||
(user_op->params.update.ticks_drift_plus == 0U) &&
|
(user_op->params.update.ticks_drift_plus == 0U) &&
|
||||||
(user_op->params.update.ticks_drift_minus == 0U) &&
|
(user_op->params.update.ticks_drift_minus == 0U) &&
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
(user_op->params.update.ticks_slot_plus == 0U) &&
|
(user_op->params.update.ticks_slot_plus == 0U) &&
|
||||||
(user_op->params.update.ticks_slot_minus == 0U) &&
|
(user_op->params.update.ticks_slot_minus == 0U) &&
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
(user_op->params.update.lazy == 0U) &&
|
(user_op->params.update.lazy == 0U) &&
|
||||||
(user_op->params.update.force == 0U))) {
|
(user_op->params.update.force == 0U))) {
|
||||||
ticker_job_op_cb(user_op,
|
ticker_job_op_cb(user_op,
|
||||||
|
@ -1462,11 +1485,13 @@ static inline void ticker_job_worker_bh(struct ticker_instance *instance,
|
||||||
* the slot_previous information
|
* the slot_previous information
|
||||||
*/
|
*/
|
||||||
state = (ticker->req - ticker->ack) & 0xff;
|
state = (ticker->req - ticker->ack) & 0xff;
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
if (ticker->ticks_slot && (state == 2U) && !skip_collision &&
|
if (ticker->ticks_slot && (state == 2U) && !skip_collision &&
|
||||||
!TICKER_RESCHEDULE_PENDING(ticker)) {
|
!TICKER_RESCHEDULE_PENDING(ticker)) {
|
||||||
instance->ticker_id_slot_previous = id_expired;
|
instance->ticker_id_slot_previous = id_expired;
|
||||||
instance->ticks_slot_previous = ticker->ticks_slot;
|
instance->ticks_slot_previous = ticker->ticks_slot;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
|
|
||||||
/* ticker expired, set ticks_to_expire zero */
|
/* ticker expired, set ticks_to_expire zero */
|
||||||
ticker->ticks_to_expire = 0U;
|
ticker->ticks_to_expire = 0U;
|
||||||
|
@ -1524,7 +1549,13 @@ static inline void ticker_job_worker_bh(struct ticker_instance *instance,
|
||||||
* current ticks.
|
* current ticks.
|
||||||
*/
|
*/
|
||||||
lazy = 0U;
|
lazy = 0U;
|
||||||
if (!ticker->must_expire) {
|
|
||||||
|
if (0) {
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
|
} else if (!ticker->must_expire) {
|
||||||
|
#else
|
||||||
|
} else {
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
while (ticks_to_expire <
|
while (ticks_to_expire <
|
||||||
ticks_latency) {
|
ticks_latency) {
|
||||||
ticks_to_expire +=
|
ticks_to_expire +=
|
||||||
|
@ -1609,11 +1640,13 @@ static inline void ticker_job_op_start(struct ticker_node *ticker,
|
||||||
/* Must expire is not supported in compatibility mode */
|
/* Must expire is not supported in compatibility mode */
|
||||||
LL_ASSERT(start->lazy < TICKER_LAZY_MUST_EXPIRE_KEEP);
|
LL_ASSERT(start->lazy < TICKER_LAZY_MUST_EXPIRE_KEEP);
|
||||||
#else
|
#else
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
if (start->lazy != TICKER_LAZY_MUST_EXPIRE_KEEP) {
|
if (start->lazy != TICKER_LAZY_MUST_EXPIRE_KEEP) {
|
||||||
/* Update the must_expire state */
|
/* Update the must_expire state */
|
||||||
ticker->must_expire =
|
ticker->must_expire =
|
||||||
(start->lazy == TICKER_LAZY_MUST_EXPIRE) ? 1U : 0U;
|
(start->lazy == TICKER_LAZY_MUST_EXPIRE) ? 1U : 0U;
|
||||||
}
|
}
|
||||||
|
#endif /* !CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
ticker->ext_data = start->ext_data;
|
ticker->ext_data = start->ext_data;
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
|
@ -1624,7 +1657,9 @@ static inline void ticker_job_op_start(struct ticker_node *ticker,
|
||||||
ticker->lazy_periodic =
|
ticker->lazy_periodic =
|
||||||
(start->lazy < TICKER_LAZY_MUST_EXPIRE_KEEP) ? start->lazy :
|
(start->lazy < TICKER_LAZY_MUST_EXPIRE_KEEP) ? start->lazy :
|
||||||
0U;
|
0U;
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
ticker->ticks_slot = start->ticks_slot;
|
ticker->ticks_slot = start->ticks_slot;
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
ticker->timeout_func = start->fp_timeout_func;
|
ticker->timeout_func = start->fp_timeout_func;
|
||||||
ticker->context = start->context;
|
ticker->context = start->context;
|
||||||
ticker->ticks_to_expire = start->ticks_first;
|
ticker->ticks_to_expire = start->ticks_first;
|
||||||
|
@ -2129,7 +2164,8 @@ static inline void ticker_job_op_inquire(struct ticker_instance *instance,
|
||||||
uop->status = TICKER_STATUS_SUCCESS;
|
uop->status = TICKER_STATUS_SUCCESS;
|
||||||
fp_op_func = uop->fp_op_func;
|
fp_op_func = uop->fp_op_func;
|
||||||
break;
|
break;
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
case TICKER_USER_OP_TYPE_PRIORITY_SET:
|
case TICKER_USER_OP_TYPE_PRIORITY_SET:
|
||||||
if (uop->id < instance->count_node) {
|
if (uop->id < instance->count_node) {
|
||||||
struct ticker_node *node = instance->nodes;
|
struct ticker_node *node = instance->nodes;
|
||||||
|
@ -2142,7 +2178,9 @@ static inline void ticker_job_op_inquire(struct ticker_instance *instance,
|
||||||
}
|
}
|
||||||
fp_op_func = uop->fp_op_func;
|
fp_op_func = uop->fp_op_func;
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_BT_TICKER_LOW_LAT */
|
#endif /* !CONFIG_BT_TICKER_LOW_LAT &&
|
||||||
|
* !CONFIG_BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
*/
|
||||||
default:
|
default:
|
||||||
/* do nothing for other ops */
|
/* do nothing for other ops */
|
||||||
break;
|
break;
|
||||||
|
@ -2442,7 +2480,8 @@ uint32_t ticker_init(uint8_t instance_index, uint8_t count_node, void *node,
|
||||||
instance->count_node = count_node;
|
instance->count_node = count_node;
|
||||||
instance->nodes = node;
|
instance->nodes = node;
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
while (count_node--) {
|
while (count_node--) {
|
||||||
instance->nodes[count_node].priority = 0;
|
instance->nodes[count_node].priority = 0;
|
||||||
}
|
}
|
||||||
|
@ -2601,7 +2640,9 @@ uint32_t ticker_start(uint8_t instance_index, uint8_t user_id, uint8_t ticker_id
|
||||||
user_op->params.start.ticks_first = ticks_first;
|
user_op->params.start.ticks_first = ticks_first;
|
||||||
user_op->params.start.ticks_periodic = ticks_periodic;
|
user_op->params.start.ticks_periodic = ticks_periodic;
|
||||||
user_op->params.start.remainder_periodic = remainder_periodic;
|
user_op->params.start.remainder_periodic = remainder_periodic;
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
user_op->params.start.ticks_slot = ticks_slot;
|
user_op->params.start.ticks_slot = ticks_slot;
|
||||||
|
#endif
|
||||||
user_op->params.start.lazy = lazy;
|
user_op->params.start.lazy = lazy;
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
user_op->params.start.ext_data = ext_data;
|
user_op->params.start.ext_data = ext_data;
|
||||||
|
@ -2696,8 +2737,10 @@ uint32_t ticker_update_ext(uint8_t instance_index, uint8_t user_id,
|
||||||
user_op->id = ticker_id;
|
user_op->id = ticker_id;
|
||||||
user_op->params.update.ticks_drift_plus = ticks_drift_plus;
|
user_op->params.update.ticks_drift_plus = ticks_drift_plus;
|
||||||
user_op->params.update.ticks_drift_minus = ticks_drift_minus;
|
user_op->params.update.ticks_drift_minus = ticks_drift_minus;
|
||||||
|
#if !defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
user_op->params.update.ticks_slot_plus = ticks_slot_plus;
|
user_op->params.update.ticks_slot_plus = ticks_slot_plus;
|
||||||
user_op->params.update.ticks_slot_minus = ticks_slot_minus;
|
user_op->params.update.ticks_slot_minus = ticks_slot_minus;
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
user_op->params.update.lazy = lazy;
|
user_op->params.update.lazy = lazy;
|
||||||
user_op->params.update.force = force;
|
user_op->params.update.force = force;
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
|
@ -2951,7 +2994,8 @@ uint32_t ticker_job_idle_get(uint8_t instance_index, uint8_t user_id,
|
||||||
return user_op->status;
|
return user_op->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
/**
|
/**
|
||||||
* @brief Set ticker node priority
|
* @brief Set ticker node priority
|
||||||
*
|
*
|
||||||
|
@ -3008,7 +3052,9 @@ uint32_t ticker_priority_set(uint8_t instance_index, uint8_t user_id, uint8_t ti
|
||||||
|
|
||||||
return user_op->status;
|
return user_op->status;
|
||||||
}
|
}
|
||||||
#endif /* !CONFIG_BT_TICKER_LOW_LAT */
|
#endif /* !CONFIG_BT_TICKER_LOW_LAT &&
|
||||||
|
* !CONFIG_BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Schedule ticker job
|
* @brief Schedule ticker job
|
||||||
|
|
|
@ -43,9 +43,13 @@
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
#define TICKER_NODE_T_SIZE 48
|
#define TICKER_NODE_T_SIZE 48
|
||||||
#else
|
#else
|
||||||
|
#if defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
|
#define TICKER_NODE_T_SIZE 36
|
||||||
|
#else
|
||||||
#define TICKER_NODE_T_SIZE 44
|
#define TICKER_NODE_T_SIZE 44
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
#endif /* CONFIG_BT_TICKER_LOW_LAT*/
|
#endif /* CONFIG_BT_TICKER_LOW_LAT */
|
||||||
|
|
||||||
/** \brief Timer user type size.
|
/** \brief Timer user type size.
|
||||||
*/
|
*/
|
||||||
|
@ -56,7 +60,11 @@
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
#define TICKER_USER_OP_T_SIZE 52
|
#define TICKER_USER_OP_T_SIZE 52
|
||||||
#else
|
#else
|
||||||
|
#if defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
|
#define TICKER_USER_OP_T_SIZE 44
|
||||||
|
#else
|
||||||
#define TICKER_USER_OP_T_SIZE 48
|
#define TICKER_USER_OP_T_SIZE 48
|
||||||
|
#endif /* CONFIG_BT_TICKER_SLOT_AGNOSTIC */
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
|
|
||||||
#define TICKER_CALL_ID_NONE 0
|
#define TICKER_CALL_ID_NONE 0
|
||||||
|
@ -97,15 +105,15 @@ typedef void (*ticker_op_func) (uint32_t status, void *op_context);
|
||||||
|
|
||||||
#if defined(CONFIG_BT_TICKER_EXT)
|
#if defined(CONFIG_BT_TICKER_EXT)
|
||||||
struct ticker_ext {
|
struct ticker_ext {
|
||||||
uint32_t ticks_slot_window; /* Window in which the slot
|
uint32_t ticks_slot_window;/* Window in which the slot
|
||||||
* reservation may be re-scheduled
|
* reservation may be re-scheduled
|
||||||
* to avoid collision
|
* to avoid collision
|
||||||
*/
|
*/
|
||||||
int32_t ticks_drift; /* Applied drift since last expiry */
|
int32_t ticks_drift; /* Applied drift since last expiry */
|
||||||
uint8_t reschedule_state; /* State of re-scheduling of the
|
uint8_t reschedule_state; /* State of re-scheduling of the
|
||||||
* node. See defines
|
* node. See defines
|
||||||
* TICKER_RESCHEDULE_STATE_XXX
|
* TICKER_RESCHEDULE_STATE_XXX
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
|
|
||||||
|
@ -156,7 +164,8 @@ uint32_t ticker_job_idle_get(uint8_t instance_index, uint8_t user_id,
|
||||||
void ticker_job_sched(uint8_t instance_index, uint8_t user_id);
|
void ticker_job_sched(uint8_t instance_index, uint8_t user_id);
|
||||||
uint32_t ticker_ticks_now_get(void);
|
uint32_t ticker_ticks_now_get(void);
|
||||||
uint32_t ticker_ticks_diff_get(uint32_t ticks_now, uint32_t ticks_old);
|
uint32_t ticker_ticks_diff_get(uint32_t ticks_now, uint32_t ticks_old);
|
||||||
#if !defined(CONFIG_BT_TICKER_LOW_LAT)
|
#if !defined(CONFIG_BT_TICKER_LOW_LAT) && \
|
||||||
|
!defined(CONFIG_BT_TICKER_SLOT_AGNOSTIC)
|
||||||
uint32_t ticker_priority_set(uint8_t instance_index, uint8_t user_id, uint8_t ticker_id,
|
uint32_t ticker_priority_set(uint8_t instance_index, uint8_t user_id, uint8_t ticker_id,
|
||||||
int8_t priority, ticker_op_func fp_op_func,
|
int8_t priority, ticker_op_func fp_op_func,
|
||||||
void *op_context);
|
void *op_context);
|
||||||
|
@ -176,4 +185,6 @@ uint32_t ticker_update_ext(uint8_t instance_index, uint8_t user_id,
|
||||||
ticker_op_func fp_op_func, void *op_context,
|
ticker_op_func fp_op_func, void *op_context,
|
||||||
uint8_t must_expire);
|
uint8_t must_expire);
|
||||||
#endif /* CONFIG_BT_TICKER_EXT */
|
#endif /* CONFIG_BT_TICKER_EXT */
|
||||||
#endif /* !CONFIG_BT_TICKER_LOW_LAT */
|
#endif /* !CONFIG_BT_TICKER_LOW_LAT &&
|
||||||
|
* !CONFIG_BT_TICKER_SLOT_AGNOSTIC
|
||||||
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue