summaryrefslogtreecommitdiff
path: root/lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h')
-rw-r--r--lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h b/lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h
new file mode 100644
index 0000000..06e9d17
--- /dev/null
+++ b/lcmodule/source/cnh1605551_ldr_utilities/include/r_queue.h
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * Copyright (C) ST-Ericsson SA 2011
+ * License terms: 3-clause BSD license
+ ******************************************************************************/
+#ifndef _R_QUEUE_H_
+#define _R_QUEUE_H_
+
+/**
+ * @addtogroup ldr_utilities
+ * @{
+ * @addtogroup queue
+ * @{
+ * Implementation of FIFO queue.
+ * Functions which names begin with Do_Fifo_* are non-reentrant.
+ * Functions which names begin with Do_RFifo_* are reentrant.
+ * Functions that are not interrupt safe are faster than the interrupt safe
+ * functions.
+ *
+ * @remark None of the functions check the sanity of the input parameters.
+ */
+
+/*******************************************************************************
+ * Includes
+ ******************************************************************************/
+#include "t_queue.h"
+#include "error_codes.h"
+
+/*******************************************************************************
+ * Declaration of functions
+ ******************************************************************************/
+
+/**
+ * @brief Creates a queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [out] Queue_pp After execution points to the allocated space
+ * for the queue.
+ * @param [in] MaxLength The maximum number of entries in the queue.
+ * @param [in] DestroyElement Pointer to user defined function that
+ * deallocates resources allocated for the
+ * elements in the queue. NULL if there is no need
+ * for deallocating resource.
+ */
+void Do_Fifo_Create(void *Object_p,
+ void **const Queue_pp,
+ const uint32 MaxLength,
+ void (*DestroyElement)(void *Element_p));
+
+/**
+ * @brief Releases any resources associated with the specified queue structure.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in,out] Queue_pp Pointer to the queue structure to destroy.
+ */
+void Do_Fifo_Destroy(void *Object_p, void **const Queue_pp);
+
+/**
+ * @brief Enqueueing of pointers.
+ *
+ * @note Enqueueing and dequeueing are mutually reentrant, and all functions are
+ * reentrant across different queues, but enqueueing on the same queue is
+ * not necessarily reentrant.
+ *
+ * @param [in] Object_p - Pointer to LCM instance context.
+ * @param [in] Queue_p - The queue to append to.
+ * @param [in] Value_p - The value to enqueue.
+ * @return E_SUCCESS - The function completed successfully.
+ *
+ * @return E_FAILED_TO_STORE_IN_FIFO - Faliled to store data in fifo.
+ */
+ErrorCode_e Do_Fifo_Enqueue(void *Object_p,
+ void *const Queue_p,
+ void *const Value_p);
+
+/**
+ * @brief Dequeueing of pointers.
+ *
+ * Dequeueing function of a reentrant, interrupt-safe FIFO queue.
+ *
+ * @note Enqueueing and dequeueing are mutually reentrant, and all functions are
+ * reentrant across different queues, but dequeueing on the same queue is
+ * not necessarily reentrant.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to take an item from.
+ *
+ * @return The first pointer in the queue on success or NULL if
+ * the queue is empty. Note that an enqueued NULL
+ * pointer will be de-queued as a NULL pointer.
+ */
+void *Do_Fifo_Dequeue(void *Object_p, void *const Queue_p);
+
+/**
+ * @brief Registers an event listener for the specified queue.
+ *
+ * @note Only one listener per queue and event type is allowed.
+ * @note A function invocation does not guarantee that the state of the queue is
+ * the same as the end-transition state, only that such a transition has
+ * happened.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue for which to register a callback.
+ * @param [in] Type The type of event to register the callback for.
+ * A value of EMPTY indicates that the specified callback
+ * function should be called each time queue has
+ * transitioned from a non-empty state to an empty state.
+ * A value of NONEMPTY indicates that the callback func.
+ * should be called each time the queue has transitioned
+ * from an empty to a non-empty state.
+ * @param [in] Callback The function to call when the specified event occurs
+ * or NULL to unregister a previously registered function.
+ * @param [in] Param_p Parameter to pass to the callback function.
+ * @return The previously registered callback function for this
+ * type.
+ * @return NULL If no callback was previously registered.
+ */
+QueueCallback_fn Do_Fifo_SetCallback(void *Object_p, void *const Queue_p,
+ const QueueCallbackType_e Type,
+ const QueueCallback_fn Callback,
+ void *const Param_p);
+
+/**
+ * @brief Determines the empty-status of the queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to inspect.
+ * @return TRUE If Fifo is empty or
+ * @return FALSE If Fifo is not empty.
+ */
+boolean Do_Fifo_IsEmpty(void *Object_p, const void *const Queue_p);
+
+/**
+ * @brief Checks if the provided element is member of the fifo.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to search for element.
+ * @param [in] Value_p The element to be searched in the queue.
+ * @param [in] Match Function that checks if two elements match.
+ * @retval TRUE If the element is member of the fifo.
+ * @retval FALSE If the element is not member of the fifo.
+ */
+boolean Do_Fifo_IsMember(void *Object_p,
+ const void *const Queue_p,
+ void *Value_p,
+ boolean(*Match)(void *Value1_p, void *Value2_p));
+
+/**
+ * @brief Returns the number of elements in the queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p Pointer to the queue.
+ * @return Number of elements in the queue.
+ */
+int Do_Fifo_GetNrOfElements(void *Object_p, const void *const Queue_p);
+
+
+/**
+ * @brief Creates a queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [out] Queue_pp After execution points to the allocated
+ * space for the queue.
+ * @param [in] MaxLength The maximum number of entries in the queue.
+ * @param [in] DestroyElement Pointer to user defined function that deallocates
+ * resources allocated for the elements in the
+ * queue. NULL if there is no need for deallocating
+ * resource.
+ */
+void Do_RFifo_Create(void *Object_p,
+ void **const Queue_pp,
+ const uint32 MaxLength,
+ void (*DestroyElement)(void *Element_p));
+
+/**
+ * @brief Releases any resources associated with the specified queue structure.
+ *
+ * @param [in] Object_p - Pointer to LCM instance context.
+ * @param [in,out] Queue_pp - Pointer to the queue structure to destroy.
+ */
+void Do_RFifo_Destroy(void *Object_p, void **const Queue_pp);
+
+/**
+ * @brief Enqueueing of pointers.
+ *
+ * Enqueueing function of a re-entrant, interrupt-safe FIFO queue.
+ *
+ * @param [in] Object_p - Pointer to LCM instance context.
+ * @param [in] Queue_p - The queue to append to.
+ * @param [in] Value_p - The value to enqueue.
+ * @return E_SUCCESS - The function completed successfully.
+ *
+ * @return E_FAILED_TO_STORE_IN_FIFO - Faliled to store data in fifo.
+ */
+ErrorCode_e Do_RFifo_Enqueue(void *Object_p,
+ void *const Queue_p,
+ void *const Value_p);
+
+/**
+ * @brief Dequeueing of pointers.
+ *
+ * Dequeueing function of a reentrant, interrupt-safe FIFO queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to take an item from.
+ * @return The first pointer in the queue on success or NULL if
+ * the queue is empty. Note that an enqueued NULL-pointer
+ * will be de - queued as a NULL pointer.
+ */
+void *Do_RFifo_Dequeue(void *Object_p, void *const Queue_p);
+
+/**
+ * @brief Registers an event listener for the specified queue.
+ *
+ * @note Only one listener per queue and event type is allowed.
+ * @note A function invocation does not guarantee that the state of the queue is
+ * the same as the end-transition state, only that such a transition has
+ * happened.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue for which to register a callback.
+ * @param [in] Type The type of event to register the callback for.
+ * - A value of EMPTY indicates that the specified
+ * callback function should be called each time queue has
+ * transitioned from a non-empty state to an empty state.
+ * - A value of NONEMPTY indicates that the callback
+ * function should be called each time the queue has
+ * transitioned from an empty to a non-empty state.
+ * @param [in] Callback The function to call when the specified event occurs
+ * or NULL to unregister a previously registered func.
+ * @param [in] Param_p Parameter to pass to the callback function.
+ * @return The previously registered callback function for this
+ * type.
+ * @return NULL If no callback was previously registered.
+ */
+QueueCallback_fn Do_RFifo_SetCallback(void *Object_p, void *const Queue_p,
+ const QueueCallbackType_e Type,
+ const QueueCallback_fn Callback,
+ void *const Param_p);
+
+/**
+ * @brief Determines the empty-status of the queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to inspect.
+ * @retval TRUE If Fifo is empty or FALSE if is not empty.
+ */
+boolean Do_RFifo_IsEmpty(void *Object_p, const void *const Queue_p);
+
+/**
+ * @brief Checks if the provided element is member of the fifo.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p The queue to search for element.
+ * @param [in] Value_p The element to be searched in the queue.
+ * @param [in] Match Function that checks if two elements match.
+ * @retval TRUE If the element is member of the fifo.
+ * @retval FALSE If the element is not member of the fifo.
+ */
+boolean Do_RFifo_IsMember(void *Object_p,
+ const void *const Queue_p,
+ void *Value_p,
+ boolean(*Match)(void *Value1_p, void *Value2_p));
+
+/**
+ * @brief Returns the number of elements in the queue.
+ *
+ * @param [in] Object_p Pointer to LCM instance context.
+ * @param [in] Queue_p Pointer to the queue.
+ * @return Number of elements in the queue.
+ */
+int Do_RFifo_GetNrOfElements(void *Object_p, const void *const Queue_p);
+
+/** @} */
+/** @} */
+#endif /*_R_QUEUE_H_*/