/**@brief Function for scheduling a Timer Start operation. * * @param[in] user_id Id of user calling this function. * @param[in] timer_id Id of timer to start. * @param[in] timeout_initial Time (in ticks) to first timer expiry. * @param[in] timeout_periodic Time (in ticks) between periodic expiries. * @param[in] p_context General purpose pointer. Will be passed to the timeout handler when * the timer expires. * @return NRF_SUCCESS on success, otherwise an error code. */ static uint32_t timer_start_op_schedule(timer_user_id_t user_id, timer_node_t * p_node, uint32_t timeout_initial, uint32_t timeout_periodic, void * p_context) { uint8_t last_index; timer_user_op_t * p_user_op = user_op_alloc(&mp_users[user_id], &last_index); if (p_user_op == NULL) { return NRF_ERROR_NO_MEM; } p_user_op->op_type = TIMER_USER_OP_TYPE_START; p_user_op->p_node = p_node; p_user_op->params.start.ticks_at_start = rtc1_counter_get(); p_user_op->params.start.ticks_first_interval = timeout_initial; p_user_op->params.start.ticks_periodic_interval = timeout_periodic; p_user_op->params.start.p_context = p_context; user_op_enque(&mp_users[user_id], last_index); timer_list_handler_sched(); return NRF_SUCCESS; }
static uint32_t timer_start_op_schedule(timer_node_t * p_node, uint32_t timeout_initial, uint32_t timeout_periodic, void * p_context) { uint8_t last_index; uint32_t err_code = NRF_SUCCESS; CRITICAL_REGION_ENTER(); timer_user_op_t * p_user_op = user_op_alloc(&last_index); if (p_user_op == NULL) { err_code = NRF_ERROR_NO_MEM; } else { p_user_op->op_type = TIMER_USER_OP_TYPE_START; p_user_op->p_node = p_node; p_user_op->params.start.ticks_at_start = rtc1_counter_get(); p_user_op->params.start.ticks_first_interval = timeout_initial; p_user_op->params.start.ticks_periodic_interval = timeout_periodic; p_user_op->params.start.p_context = p_context; user_op_enque(last_index); } CRITICAL_REGION_EXIT(); if (err_code == NRF_SUCCESS) { timer_list_handler_sched(); } return err_code; }
/**@brief Function for scheduling a Timer Stop operation. * * @param[in] timer_id Id of timer to stop. * @param[in] op_type Type of stop operation * * @return NRF_SUCCESS on successful scheduling a timer stop operation. NRF_ERROR_NO_MEM when there * is no memory left to schedule the timer stop operation. */ static uint32_t timer_stop_op_schedule(timer_node_t * p_node, timer_user_op_type_t op_type) { uint8_t last_index; uint32_t err_code = NRF_SUCCESS; CRITICAL_REGION_ENTER(); timer_user_op_t * p_user_op = user_op_alloc(&last_index); if (p_user_op == NULL) { err_code = NRF_ERROR_NO_MEM; } else { p_user_op->op_type = op_type; p_user_op->p_node = p_node; user_op_enque(last_index); } CRITICAL_REGION_EXIT(); if (err_code == NRF_SUCCESS) { timer_list_handler_sched(); } return err_code; }
/**@brief Function for scheduling a Timer Stop All operation. * * @param[in] user_id Id of user calling this function. */ static uint32_t timer_stop_all_op_schedule(timer_user_id_t user_id) { timer_user_op_t * p_user_op = user_op_alloc(&mp_users[user_id]); if (p_user_op == NULL) { return NRF_ERROR_NO_MEM; } p_user_op->op_type = TIMER_USER_OP_TYPE_STOP_ALL; p_user_op->timer_id = TIMER_NULL; timer_list_handler_sched(); return NRF_SUCCESS; }
/**@brief Function for scheduling a Timer Stop All operation. * * @param[in] user_id Id of user calling this function. */ static uint32_t timer_stop_all_op_schedule(timer_user_id_t user_id) { uint8_t last_index; timer_user_op_t * p_user_op = user_op_alloc(&mp_users[user_id], &last_index); if (p_user_op == NULL) { return NRF_ERROR_NO_MEM; } p_user_op->op_type = TIMER_USER_OP_TYPE_STOP_ALL; p_user_op->p_node = NULL; user_op_enque(&mp_users[user_id], last_index); timer_list_handler_sched(); return NRF_SUCCESS; }