blob: a2e77b5a2fdcd02317173eed9c2ba057b695e29b [file] [log] [blame]
/*
* Copyright (c) 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef BUSY_SIM_H__
#define BUSY_SIM_H__
typedef void (*busy_sim_cb_t)(void);
/**
* @brief Start busy simulator.
*
* When started, it is using counter device to generate interrupts at random
* intervals and busy loop for random period of time in that interrupt. Interrupt
* source and priority is configured in the devicetree. Default entropy source
* is used for getting random numbers. System work queue is used to get random
* values and keep them in a ring buffer.
*
* @param active_avg Avarage time of busy looping in the counter callback (in microseconds).
*
* @param active_delta Specifies deviation from avarage time of busy looping (in microseconds).
*
* @param idle_avg Avarage time of counter alarm timeout (in microseconds).
*
* @param idle_delta Specifies deviation from avarage time of counter alarm (in microseconds).
*
* @param cb Callback called from the context of the busy simulator timeout. If ZLI interrupt
* is used for busy simulator counter then kernel API cannot be used from that callback.
* Callback is called before busy waiting.
*/
void busy_sim_start(uint32_t active_avg, uint32_t active_delta,
uint32_t idle_avg, uint32_t idle_delta, busy_sim_cb_t cb);
/** @brief Stop busy simulator. */
void busy_sim_stop(void);
#endif /* BUSY_SIM_H__ */