// // Copyright 2014 Ettus Research LLC // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #ifndef INCLUDED_CRON_H #define INCLUDED_CRON_H #include #include #define CRON_MAX_JOBS 4 typedef enum { SEC = 1, MILLISEC = 1000, MICROSEC = 1000000 } cron_time_unit_t; typedef uint32_t (*cron_counter_fetcher_t)(); /*! * \brief Initialize cron subsystem with a mechanism to fetch a counter and its frequency */ void cron_init(const cron_counter_fetcher_t fetch_counter, uint32_t counter_freq); /*! * \brief Get the hardware tick count */ uint32_t cron_get_ticks(); /*! * \brief Get the time elapsed between start and stop in the specified units */ uint32_t get_elapsed_time(uint32_t start_ticks, uint32_t stop_ticks, cron_time_unit_t unit); /*! * \brief Sleep (spinloop) for about 'ticks' counter ticks * Use only if simulating, _very_ short delay */ void sleep_ticks(uint32_t ticks); /*! * \brief Sleep (spinloop) for about 'duration' microseconds * Use only if simulating, _very_ short delay */ void sleep_us(uint32_t duration); /*! * \brief Sleep (spinloop) for about 'duration' milliseconds * Use only if simulating, _very_ short delay */ void sleep_ms(uint32_t duration); /*! * \brief Initialize a unique cron job with 'job_id' and interval 'interval_ms' */ void cron_job_init(uint32_t job_id, uint32_t interval_ms); /*! * \brief Check if cron job with 'job_id' is due for execution */ bool cron_job_run_due(uint32_t job_id); #endif /* INCLUDED_CRON_H */