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