Skip to content
Snippets Groups Projects
Select Git revision
  • a1567d590c68c15f3d14b71f0b1b1c65481956e6
  • master default protected
  • mh/blecentral
  • patch-2
  • patch-1
  • filenames-blacklist
  • rahix/ble-fix
  • genofire/ble-rewrite
  • koalo/bhi160-works-but-dirty
  • ch3/splashscreen
  • m
  • rahix/simple_menu
  • ios-workarounds
  • koalo/wip/i2c-for-python
  • renze/safe_mode
  • renze/hatchery_apps
  • schneider/fundamental-test
  • koalo/factory-reset
  • msgctl/gfx_rle
  • msgctl/faultscreen
  • msgctl/textbuffer_api
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
27 results

meson.build

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    wsf_queue.h 5.67 KiB
    /* Copyright (c) 2009-2019 Arm Limited
     * SPDX-License-Identifier: Apache-2.0
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     * http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    /*************************************************************************************************/
    /*!
     *  \brief General purpose queue service.
     */
    /*************************************************************************************************/
    #ifndef WSF_QUEUE_H
    #define WSF_QUEUE_H
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    /*! \addtogroup WSF_QUEUE_API
     *  \{ */
    
    /**************************************************************************************************
      Macros
    **************************************************************************************************/
    
    /*! \brief Initialize a queue */
    #define WSF_QUEUE_INIT(pQueue)          {(pQueue)->pHead = NULL; (pQueue)->pTail = NULL;}
    
    /**************************************************************************************************
      Data Types
    **************************************************************************************************/
    
    /*! \brief Queue structure */
    typedef struct
    {
      void      *pHead;         /*!< \brief head of queue */
      void      *pTail;         /*!< \brief tail of queue */
    } wsfQueue_t;
    
    /**************************************************************************************************
      Function Declarations
    **************************************************************************************************/
    
    /*************************************************************************************************/
    /*!
     *  \brief  Enqueue an element to the tail of a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *  \param  pElem     Pointer to element.
     *
     *  \return None.
     */
    /*************************************************************************************************/
    void WsfQueueEnq(wsfQueue_t *pQueue, void *pElem);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Dequeue an element from the head of a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *
     *  \return Pointer to element that has been dequeued or NULL if queue is empty.
     */
    /*************************************************************************************************/
    void *WsfQueueDeq(wsfQueue_t *pQueue);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Push an element to the head of a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *  \param  pElem     Pointer to element.
     *
     *  \return None.
     */
    /*************************************************************************************************/
    void WsfQueuePush(wsfQueue_t *pQueue, void *pElem);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Insert an element into a queue.  This function is typically used when iterating
     *          over a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *  \param  pElem     Pointer to element to be inserted.
     *  \param  pPrev     Pointer to previous element in the queue before element to be inserted.
     *                    Note:  set pPrev to NULL if pElem is first element in queue.
     *  \return None.
     */
    /*************************************************************************************************/
    void WsfQueueInsert(wsfQueue_t *pQueue, void *pElem, void *pPrev);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Remove an element from a queue.  This function is typically used when iterating
     *          over a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *  \param  pElem     Pointer to element to be removed.
     *  \param  pPrev     Pointer to previous element in the queue before element to be removed.
     *
     *  \return None.
     */
    /*************************************************************************************************/
    void WsfQueueRemove(wsfQueue_t *pQueue, void *pElem, void *pPrev);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Count the number of elements in a queue.
     *
     *  \param  pQueue    Pointer to queue.
     *
     *  \return Number of elements in queue.
     */
    /*************************************************************************************************/
    uint16_t WsfQueueCount(wsfQueue_t *pQueue);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Return TRUE if queue is empty.
     *
     *  \param  pQueue    Pointer to queue.
     *
     *  \return TRUE if queue is empty, FALSE otherwise.
     */
    /*************************************************************************************************/
    bool_t WsfQueueEmpty(wsfQueue_t *pQueue);
    
    /*************************************************************************************************/
    /*!
     *  \brief  Check for a queue depth of 1 element.
     *
     *  \param  pQueue      Queue.
     *
     *  \return TRUE if Queue only has 1 element, FALSE otherwise.
     */
    /*************************************************************************************************/
    bool_t WsfIsQueueDepthOne(wsfQueue_t *pQueue);
    
    /*! \} */    /* WSF_QUEUE_API */
    
    #ifdef __cplusplus
    };
    #endif
    
    #endif /* WSF_QUEUE_H */