rtems: Generate <rtems/rtems/timer.h>

Change license to BSD-2-Clause according to file histories and
documentation re-licensing agreement.

Update #3899.
Update #3993.
This commit is contained in:
Sebastian Huber
2020-06-22 13:36:21 +02:00
parent e2f888d145
commit 768327d06d

View File

@@ -1,289 +1,493 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/** /**
* @file * @file
* *
* @ingroup ClassicTimer * @ingroup RTEMSImplClassicTimer
* *
* @brief Classic Timer Manager API * @brief This header file provides the Timer Manager API.
*/ */
/* /*
* COPYRIGHT (c) 1989-2011. * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
* On-Line Applications Research Corporation (OAR). * Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
* *
* Copyright (c) 2009, 2016 embedded brains GmbH. * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* *
* The license and distribution terms for this file may be * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* found in the file LICENSE in this distribution or at * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* http://www.rtems.org/license/LICENSE. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/ */
/*
* This file is part of the RTEMS quality process and was automatically
* generated. If you find something that needs to be fixed or
* worded better please post a report or patch to an RTEMS mailing list
* or raise a bug report:
*
* https://docs.rtems.org/branches/master/user/support/bugs.html
*
* For information on updating and regenerating please refer to:
*
* https://docs.rtems.org/branches/master/eng/req/howto.html
*/
/* Generated from spec:/rtems/timer/if/header */
#ifndef _RTEMS_RTEMS_TIMER_H #ifndef _RTEMS_RTEMS_TIMER_H
#define _RTEMS_RTEMS_TIMER_H #define _RTEMS_RTEMS_TIMER_H
#include <stddef.h>
#include <rtems/rtems/attr.h> #include <rtems/rtems/attr.h>
#include <rtems/rtems/status.h> #include <rtems/rtems/status.h>
#include <rtems/rtems/tasks.h> #include <rtems/rtems/tasks.h>
#include <rtems/rtems/types.h> #include <rtems/rtems/types.h>
#include <rtems/score/watchdogticks.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
/* Generated from spec:/rtems/timer/if/group */
/** /**
* @defgroup ClassicTimer Timers * @defgroup RTEMSAPIClassicTimer Timer Manager
* *
* @ingroup RTEMSAPIClassic * @ingroup RTEMSAPIClassic
* *
* This encapsulates functionality related to the Classic API Timer * @brief The Timer Manager provides support for timer facilities.
* Manager. This manager provides functionality which allows the
* application to schedule the execution of methods at a specified
* time in the future. These methods may be scheduled based upon
* interval or wall time and may be executed in either the clock tick
* ISR or in a special dedicated timer server task.
*/ */
/**@{*/
#define TIMER_CLASS_BIT_TIME_OF_DAY 0x1 /* Generated from spec:/rtems/timer/if/class-bit-not-dormant */
#define TIMER_CLASS_BIT_ON_TASK 0x2
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief This timer class bit indicates that the timer is not dormant.
*/
#define TIMER_CLASS_BIT_NOT_DORMANT 0x4 #define TIMER_CLASS_BIT_NOT_DORMANT 0x4
/* Generated from spec:/rtems/timer/if/class-bit-on-task */
/** /**
* The following enumerated type details the classes to which a timer * @ingroup RTEMSAPIClassicTimer
* may belong. *
* @brief This timer class bit indicates that the timer routine executes in a
* task context.
*/
#define TIMER_CLASS_BIT_ON_TASK 0x2
/* Generated from spec:/rtems/timer/if/class-bit-time-of-day */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief This timer class bit indicates that the timer uses a time of day.
*/
#define TIMER_CLASS_BIT_TIME_OF_DAY 0x1
/* Generated from spec:/rtems/timer/if/classes */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief The timer class indicates how the timer was most recently fired.
*/ */
typedef enum { typedef enum {
/** /**
* This value indicates the timer is currently not in use. * @brief This timer class indicates that the timer was never in use.
*/ */
TIMER_DORMANT, TIMER_DORMANT,
/** /**
* This value indicates the timer is currently in use as an interval * @brief This timer class indicates that the timer is currently in use as an
* timer which will fire in the clock tick ISR. * interval timer which will fire in the context of the clock tick ISR.
*/ */
TIMER_INTERVAL = TIMER_CLASS_BIT_NOT_DORMANT, TIMER_INTERVAL = TIMER_CLASS_BIT_NOT_DORMANT,
/** /**
* This value indicates the timer is currently in use as an interval * @brief This timer class indicates that the timer is currently in use as an
* timer which will fire in the timer server task. * interval timer which will fire in the context of the Timer Server task.
*/ */
TIMER_INTERVAL_ON_TASK = TIMER_INTERVAL_ON_TASK = TIMER_CLASS_BIT_NOT_DORMANT |
TIMER_CLASS_BIT_NOT_DORMANT | TIMER_CLASS_BIT_ON_TASK, TIMER_CLASS_BIT_ON_TASK,
/** /**
* This value indicates the timer is currently in use as an time of day * @brief This timer class indicates that the timer is currently in use as an
* timer which will fire in the clock tick ISR. * time of day timer which will fire in the context of the clock tick ISR.
*/ */
TIMER_TIME_OF_DAY = TIMER_TIME_OF_DAY = TIMER_CLASS_BIT_NOT_DORMANT |
TIMER_CLASS_BIT_NOT_DORMANT | TIMER_CLASS_BIT_TIME_OF_DAY, TIMER_CLASS_BIT_TIME_OF_DAY,
/** /**
* This value indicates the timer is currently in use as an time of day * @brief This timer class indicates that the timer is currently in use as an
* timer which will fire in the timer server task. * time of day timer which will fire in the context of the Timer Server task.
*/ */
TIMER_TIME_OF_DAY_ON_TASK = TIMER_TIME_OF_DAY_ON_TASK = TIMER_CLASS_BIT_NOT_DORMANT |
TIMER_CLASS_BIT_NOT_DORMANT | TIMER_CLASS_BIT_TIME_OF_DAY | TIMER_CLASS_BIT_TIME_OF_DAY |
TIMER_CLASS_BIT_ON_TASK TIMER_CLASS_BIT_ON_TASK
} Timer_Classes; } Timer_Classes;
/* Generated from spec:/rtems/timer/if/information */
/** /**
* The following types define a pointer to a timer service routine. * @ingroup RTEMSAPIClassicTimer
*
* @brief The structure contains information about a timer.
*/
typedef struct {
/**
* @brief The timer class member indicates how the timer was most recently
* fired.
*/
Timer_Classes the_class;
/**
* @brief This member indicates the initial requested interval.
*/
Watchdog_Interval initial;
/**
* @brief This member indicates the time the timer was initially scheduled.
*
* The time is in clock ticks since the clock driver initialization or the last
* clock tick counter overflow.
*/
Watchdog_Interval start_time;
/**
* @brief This member indicates the time the timer was scheduled to fire.
*
* The time is in clock ticks since the clock driver initialization or the last
* clock tick counter overflow.
*/
Watchdog_Interval stop_time;
} rtems_timer_information;
/* Generated from spec:/rtems/timer/if/get-information */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief Gets information about the timer.
*
* This directive returns information about the timer.
*
* This directive will not cause the running task to be preempted.
*
* @param id is the timer identifier.
*
* @param[out] the_info is the pointer to a timer information variable. The
* information about the timer will be stored in this variable, in case of a
* successful operation.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``the_info`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/
rtems_status_code rtems_timer_get_information(
rtems_id id,
rtems_timer_information *the_info
);
/* Generated from spec:/rtems/timer/if/server-default-priority */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief This constant represents the default value for the task priority of
* the Timer Server.
*
* When given this priority, a special high priority not accessible via the
* Classic API is used.
*/
#define RTEMS_TIMER_SERVER_DEFAULT_PRIORITY ( (rtems_task_priority) -1 )
/* Generated from spec:/rtems/timer/if/service-routine */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief This type defines the return type of routines which can be fired by
* directives of the Timer Manager.
*
* This type can be used to document timer service routines in the source code.
*/ */
typedef void rtems_timer_service_routine; typedef void rtems_timer_service_routine;
/** /* Generated from spec:/rtems/timer/if/service-routine-entry */
* This type defines the type used to manage and indirectly invoke
* Timer Service Routines (TSRs). This defines the prototype and interface
* for a function which is to be used as a TSR.
*/
typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )(
rtems_id,
void *
);
/** /**
* @brief RTEMS Create Timer * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_create directive. The * @brief This type defines the prototype of routines which can be fired by
* timer will have the name name. It returns the id of the * directives of the Timer Manager.
* created timer in ID.
*
* @param[in] name is the timer name
* @param[out] id is the pointer to timer id
*
* @retval RTEMS_SUCCESSFUL if successful or error code if unsuccessful
*/ */
rtems_status_code rtems_timer_create( typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )( rtems_id, void * );
rtems_name name,
rtems_id *id /* Generated from spec:/rtems/timer/if/create */
);
/** /**
* @brief RTEMS Timer Name to Id * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_ident directive. * @brief Creates a timer.
* This directive returns the timer ID associated with name.
* If more than one timer is named name, then the timer
* to which the ID belongs is arbitrary.
* *
* @param[in] name is the user defined message queue name * This directive creates a timer. The assigned object identifier is returned
* @param[in] id is the pointer to timer id * in ``id``. This identifier is used to access the timer with other timer
* related directives.
* *
* @retval RTEMS_SUCCESSFUL if successful or error code if unsuccessful and * This directive may cause the calling task to be preempted due to an obtain
* id filled with the message queue id * and release of the object allocator mutex.
*
* For control and maintenance of the timer, RTEMS allocates a TMCB from the
* local TMCB free pool and initializes it.
*
* In SMP configurations, the processor of the currently executing thread
* determines the processor used for the created timer. During the life-time
* of the timer this processor is used to manage the timer internally.
*
* @param name is the name of the timer.
*
* @param[out] id is the pointer to an object identifier variable. The
* identifier of the created timer object will be stored in this variable, in
* case of a successful operation.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_NAME The timer name was invalid.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``id`` parameter was NULL.
*
* @retval ::RTEMS_TOO_MANY There was no inactive object available to create a
* new timer. The number of timers available to the application is
* configured through the #CONFIGURE_MAXIMUM_TIMERS configuration option.
*/ */
rtems_status_code rtems_timer_ident( rtems_status_code rtems_timer_create( rtems_name name, rtems_id *id );
rtems_name name,
rtems_id *id /* Generated from spec:/rtems/timer/if/ident */
);
/** /**
* @brief rtems_timer_cancel * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_cancel directive. It is used * @brief Identifies a timer by the object name.
* to stop the timer associated with ID from firing. *
* This directive obtains the timer identifier associated with the timer name
* specified in ``name``.
*
* If the timer name is not unique, then the timer identifier will match the
* first timer with that name in the search order. However, this timer
* identifier is not guaranteed to correspond to the desired timer. The timer
* identifier is used with other timer related directives to access the timer.
*
* The objects are searched from lowest to the highest index. Only the local
* node is searched.
*
* @param name is the object name to look up.
*
* @param[out] id is the pointer to an object identifier variable. The object
* identifier of an object with the specified name will be stored in this
* variable, in case of a successful operation.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``id`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_NAME The ``name`` parameter was 0.
*
* @retval ::RTEMS_INVALID_NAME There was no object with the specified name on
* the local node.
*/ */
rtems_status_code rtems_timer_cancel( rtems_status_code rtems_timer_ident( rtems_name name, rtems_id *id );
rtems_id id
); /* Generated from spec:/rtems/timer/if/cancel */
/** /**
* @brief RTEMS Delete Timer * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_delete directive. The * @brief Cancels the timer.
* timer indicated by ID is deleted.
* *
* @param[in] id is the timer id * This directive cancels the timer specified in the ``id`` parameter. This
* timer will be reinitiated by the next invocation of rtems_timer_reset(),
* rtems_timer_fire_after(), or rtems_timer_fire_when() with the same timer
* identifier.
* *
* @retval This method returns RTEMS_SUCCESSFUL if there was not an * This directive will not cause the running task to be preempted.
* error. Otherwise, a status code is returned indicating the *
* source of the error. * @param id is the timer identifier.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/ */
rtems_status_code rtems_timer_delete( rtems_status_code rtems_timer_cancel( rtems_id id );
rtems_id id
); /* Generated from spec:/rtems/timer/if/delete */
/** /**
* @brief RTEMS Timer Fire After * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_fire_after directive. It * @brief Deletes the timer.
* initiates the timer associated with ID to fire in ticks clock ticks.
* When the timer fires, the routine will be invoked in the context
* of the rtems_clock_tick directive which is normally invoked as
* part of servicing a periodic interupt.
* *
* @param[in] id is the timer id * This directive deletes the timer specified by the ``id`` parameter. If the
* @param[in] ticks is the interval until routine is fired * timer is running, it is automatically canceled.
* @param[in] routine is the routine to schedule
* @param[in] user_data is the passed as argument to routine when it is fired
* *
* @retval This method returns RTEMS_SUCCESSFUL if there was not an * This directive may cause the calling task to be preempted due to an obtain
* error. Otherwise, a status code is returned indicating the * and release of the object allocator mutex.
* source of the error. *
* The TMCB for the deleted timer is reclaimed by RTEMS.
*
* A timer can be deleted by a task other than the task which created the
* timer.
*
* @param id is the timer identifier.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/
rtems_status_code rtems_timer_delete( rtems_id id );
/* Generated from spec:/rtems/timer/if/fire-after */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief Fires the timer after the interval.
*
* This directive initiates the timer specified by ``id``. If the timer is
* running, it is automatically canceled before being initiated. The timer is
* scheduled to fire after an interval of clock ticks has passed specified by
* ``ticks``. When the timer fires, the timer service routine ``routine`` will
* be invoked with the argument ``user_data`` in the context of the clock tick
* ISR.
*
* This directive will not cause the running task to be preempted.
*
* @param id is the timer identifier.
*
* @param ticks is the interval until the routine is fired in clock ticks.
*
* @param routine is the routine to schedule.
*
* @param user_data is the argument passed to the routine when it is fired.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_NUMBER The ``ticks`` parameter was 0.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``routine`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/ */
rtems_status_code rtems_timer_fire_after( rtems_status_code rtems_timer_fire_after(
rtems_id id, rtems_id id,
rtems_interval ticks, rtems_interval ticks,
rtems_timer_service_routine_entry routine, rtems_timer_service_routine_entry routine,
void *user_data void *user_data
); );
/** /* Generated from spec:/rtems/timer/if/fire-when */
* @brief RTEMS Timer Server Fire After
*
* This routine implements the rtems_timer_server_fire_after directive. It
* initiates the timer associated with ID to fire in ticks clock
* ticks. When the timer fires, the routine will be invoked by the
* Timer Server in the context of a task NOT IN THE CONTEXT of the
* clock tick interrupt.
*
* @param[in] id is the timer id
* @param[in] ticks is the interval until routine is fired
* @param[in] routine is the routine to schedule
* @param[in] user_data is the passed as argument to routine when it is fired
*
* @retval This method returns RTEMS_SUCCESSFUL if there was not an
* error. Otherwise, a status code is returned indicating the
* source of the error.
*/
rtems_status_code rtems_timer_server_fire_after(
rtems_id id,
rtems_interval ticks,
rtems_timer_service_routine_entry routine,
void *user_data
);
/** /**
* @brief RTEMS Timer Fire When * @ingroup RTEMSAPIClassicTimer
* *
* This routine implements the rtems_timer_fire_when directive. It * @brief Fires the timer at the time of day.
* initiates the timer associated with ID to fire at wall_time
* When the timer fires, the routine will be invoked in the context
* of the rtems_clock_tick directive which is normally invoked as
* part of servicing a periodic interupt.
* *
* @param[in] id is the timer id * This directive initiates the timer specified by ``id``. If the timer is
* @param[in] wall_time is the time of day to fire timer * running, it is automatically canceled before being initiated. The timer is
* @param[in] routine is the routine to schedule * scheduled to fire at the time of day specified by ``wall_time``. When the
* @param[in] user_data is the passed as argument to routine when it is fired * timer fires, the timer service routine ``routine`` will be invoked with the
* argument ``user_data`` in the context of the clock tick ISR.
* *
* @retval This method returns RTEMS_SUCCESSFUL if there was not an * This directive will not cause the running task to be preempted.
* error. Otherwise, a status code is returned indicating the *
* source of the error. * @param id is the timer identifier.
*
* @param wall_time is the time of day when the routine is fired.
*
* @param routine is the routine to schedule.
*
* @param user_data is the argument passed to the routine when it is fired.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_NOT_DEFINED The system date and time was not set.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``routine`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``wall_time`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_CLOCK The time of day was invalid.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/ */
rtems_status_code rtems_timer_fire_when( rtems_status_code rtems_timer_fire_when(
rtems_id id, rtems_id id,
rtems_time_of_day *wall_time, rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine, rtems_timer_service_routine_entry routine,
void *user_data void *user_data
); );
/** /* Generated from spec:/rtems/timer/if/initiate-server */
* @brief RTEMS Timer Server Fire When Directive
*
* Timer Manager - RTEMS Timer Server Fire When Directive
*
* This routine implements the rtems_timer_server_fire_when directive. It
* initiates the timer associated with ID to fire at wall_time
* When the timer fires, the routine will be invoked by the
* Timer Server in the context of a task NOT IN THE CONTEXT of the
* clock tick interrupt.
*/
rtems_status_code rtems_timer_server_fire_when(
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
);
/** /**
* @brief RTEMS Timer Reset * @ingroup RTEMSAPIClassicTimer
* *
* Timer Manager - RTEMS Timer Reset * @brief Initiates the Timer Server.
* *
* This routine implements the rtems_timer_reset directive. It is used * This directive initiates the Timer Server task. This task is responsible
* to reinitialize the interval timer associated with ID just as if * for executing all timers initiated via the rtems_timer_server_fire_after()
* rtems_timer_fire_after were re-invoked with the same arguments that * or rtems_timer_server_fire_when() directives.
* were used to initiate this timer.
*/
rtems_status_code rtems_timer_reset(
rtems_id id
);
/**
* @brief Initiates the timer server.
* *
* This directive creates and starts the server for task-based timers. * This directive may cause the calling task to be preempted due to an obtain
* It must be invoked before any task-based timers can be initiated. * and release of the object allocator mutex.
* *
* @param priority The timer server task priority. * The Timer Server task is created using the rtems_task_create() directive and
* @param stack_size The stack size in bytes for the timer server task. * must be accounted for when configuring the system.
* @param attribute_set The timer server task attributes.
* *
* @return This method returns RTEMS_SUCCESSFUL if successful and an * @param priority is the task priority.
* error code otherwise. *
* @param stack_size is the task stack size in bytes.
*
* @param attribute_set is the task attribute set.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INCORRECT_STATE The Timer Server was already initiated.
*
* @retval ::RTEMS_INVALID_PRIORITY The task priority was invalid.
*
* @retval ::RTEMS_TOO_MANY There was no inactive task object available to
* create the Timer Server task.
*
* @retval ::RTEMS_UNSATISFIED There was not enough memory to allocate the task
* storage area. The task storage area contains the task stack, the
* thread-local storage, and the floating point context.
*
* @retval ::RTEMS_UNSATISFIED One of the task create extensions failed to
* create the Timer Server task.
*/ */
rtems_status_code rtems_timer_initiate_server( rtems_status_code rtems_timer_initiate_server(
rtems_task_priority priority, rtems_task_priority priority,
@@ -291,50 +495,129 @@ rtems_status_code rtems_timer_initiate_server(
rtems_attribute attribute_set rtems_attribute attribute_set
); );
/** /* Generated from spec:/rtems/timer/if/server-fire-after */
* This is the default value for the priority of the Timer Server.
* When given this priority, a special high priority not accessible
* via the Classic API is used.
*/
#define RTEMS_TIMER_SERVER_DEFAULT_PRIORITY (uint32_t) -1
/** /**
* This is the structure filled in by the timer get information * @ingroup RTEMSAPIClassicTimer
* service. *
* @brief Fires the timer after the interval using the Timer Server.
*
* This directive initiates the timer specified by ``id``. If the timer is
* running, it is automatically canceled before being initiated. The timer is
* scheduled to fire after an interval of clock ticks has passed specified by
* ``ticks``. When the timer fires, the timer service routine ``routine`` will
* be invoked with the argument ``user_data`` in the context of the Timer
* Server task.
*
* This directive will not cause the running task to be preempted.
*
* @param id is the timer identifier.
*
* @param ticks is the interval until the routine is fired in clock ticks.
*
* @param routine is the routine to schedule.
*
* @param user_data is the argument passed to the routine when it is fired.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INCORRECT_STATE The Timer Server was not initiated.
*
* @retval ::RTEMS_INVALID_NUMBER The ``ticks`` parameter was 0.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``routine`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/ */
typedef struct { rtems_status_code rtems_timer_server_fire_after(
/** This indicates the current type of the timer. */ rtems_id id,
Timer_Classes the_class; rtems_interval ticks,
/** This indicates the initial requested interval. */ rtems_timer_service_routine_entry routine,
Watchdog_Interval initial; void *user_data
/** This indicates the time the timer was initially scheduled. */
Watchdog_Interval start_time;
/** This indicates the time the timer is scheduled to fire. */
Watchdog_Interval stop_time;
} rtems_timer_information;
/**
* @brief RTEMS Get Timer Information
*
* This routine implements the rtems_timer_get_information directive.
* This directive returns information about the timer.
*
* @param[in] id is the timer id
* @param[in] the_info is the pointer to timer information block
*
* @retval RTEMS_SUCCESSFUL if successful or error code if unsuccessful and
* *the_info region information block filled in
*/
rtems_status_code rtems_timer_get_information(
rtems_id id,
rtems_timer_information *the_info
); );
/**@}*/ /* Generated from spec:/rtems/timer/if/server-fire-when */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief Fires the timer at the time of day using the Timer Server.
*
* This directive initiates the timer specified by ``id``. If the timer is
* running, it is automatically canceled before being initiated. The timer is
* scheduled to fire at the time of day specified by ``wall_time``. When the
* timer fires, the timer service routine ``routine`` will be invoked with the
* argument ``user_data`` in the context of the Timer Server task.
*
* This directive will not cause the running task to be preempted.
*
* @param id is the timer identifier.
*
* @param wall_time is the time of day when the routine is fired.
*
* @param routine is the routine to schedule.
*
* @param user_data is the argument passed to the routine when it is fired.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INCORRECT_STATE The Timer Server was not initiated.
*
* @retval ::RTEMS_NOT_DEFINED The system date and time was not set.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``routine`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_ADDRESS The ``wall_time`` parameter was NULL.
*
* @retval ::RTEMS_INVALID_CLOCK The time of day was invalid.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*/
rtems_status_code rtems_timer_server_fire_when(
rtems_id id,
rtems_time_of_day *wall_time,
rtems_timer_service_routine_entry routine,
void *user_data
);
/* Generated from spec:/rtems/timer/if/reset */
/**
* @ingroup RTEMSAPIClassicTimer
*
* @brief Resets the timer.
*
* This directive resets the timer specified by ``id``. This timer must have
* been previously initiated with either the rtems_timer_fire_after() or
* rtems_timer_server_fire_after() directive. If active the timer is canceled,
* after which the timer is reinitiated using the same interval and timer
* service routine which the original rtems_timer_fire_after() or
* rtems_timer_server_fire_after() directive used.
*
* This directive will not cause the running task to be preempted.
*
* If the timer has not been used or the last usage of this timer was by a
* rtems_timer_fire_when() or rtems_timer_server_fire_when() directive, then
* the ::RTEMS_NOT_DEFINED error is returned.
*
* Restarting a cancelled after timer results in the timer being reinitiated
* with its previous timer service routine and interval.
*
* @param id is the timer identifier.
*
* @retval ::RTEMS_SUCCESSFUL The requested operation was successful.
*
* @retval ::RTEMS_INVALID_ID There was no timer associated with the identifier
* specified by ``id``.
*
* @retval ::RTEMS_NOT_DEFINED The timer was not of the interval class.
*/
rtems_status_code rtems_timer_reset( rtems_id id );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif #endif /* _RTEMS_RTEMS_TIMER_H */
/* end of include file */