/*************************************************************************************************/ /*! * \file wsf_os.h * * \brief Software foundation OS API. * * $Date: 2017-03-02 16:50:43 -0600 (Thu, 02 Mar 2017) $ * $Revision: 11350 $ * * Copyright (c) 2009-2017 ARM Ltd., all rights reserved. * ARM Ltd. confidential and proprietary. * * IMPORTANT. Your use of this file is governed by a Software License Agreement * ("Agreement") that must be accepted in order to download or otherwise receive a * copy of this file. You may not use or copy this file for any purpose other than * as described in the Agreement. If you do not agree to all of the terms of the * Agreement do not use this file and delete all copies in your possession or control; * if you do not have a copy of the Agreement, you must contact ARM Ltd. prior * to any use, copying or further distribution of this software. */ /*************************************************************************************************/ #ifndef WSF_OS_H #define WSF_OS_H #include "wsf_os_int.h" #include "wsf_queue.h" #ifdef __cplusplus extern "C" { #endif /************************************************************************************************** Configuration **************************************************************************************************/ /* OS Diagnistics */ #ifndef WSF_OS_DIAG #define WSF_OS_DIAG FALSE #endif /************************************************************************************************** Macros **************************************************************************************************/ /* Invalid Task Identifier */ #define WSF_INVALID_TASK_ID 0xFF #if WSF_OS_DIAG == TRUE #define WSF_OS_GET_ACTIVE_HANDLER_ID() WsfActiveHandler #else #define WSF_OS_GET_ACTIVE_HANDLER_ID() WSF_INVALID_TASK_ID #endif /* WSF_OS_DIAG */ /************************************************************************************************** External Variables **************************************************************************************************/ /* Diagnistic Task Identifier */ extern wsfHandlerId_t WsfActiveHandler; /************************************************************************************************** Data Types **************************************************************************************************/ /*! Common message structure passed to event handler */ typedef struct { uint16_t param; /*! General purpose parameter passed to event handler */ uint8_t event; /*! General purpose event value passed to event handler */ uint8_t status; /*! General purpose status value passed to event handler */ } wsfMsgHdr_t; /************************************************************************************************** Callback Function Types **************************************************************************************************/ /*************************************************************************************************/ /*! * \fn wsfEventHandler_t * * \brief Event handler callback function. * * \param event Mask of events set for the event handler. * \param pMsg Pointer to message for the event handler. * * \return None. */ /*************************************************************************************************/ typedef void (*wsfEventHandler_t)(wsfEventMask_t event, wsfMsgHdr_t *pMsg); /************************************************************************************************** Function Declarations **************************************************************************************************/ /*************************************************************************************************/ /*! * \fn WsfSetEvent * * \brief Set an event for an event handler. * * \param handlerId Handler ID. * \param event Event or events to set. * * \return None. */ /*************************************************************************************************/ void WsfSetEvent(wsfHandlerId_t handlerId, wsfEventMask_t event); /*************************************************************************************************/ /*! * \fn WsfTaskLock * * \brief Lock task scheduling. * * \return None. */ /*************************************************************************************************/ void WsfTaskLock(void); /*************************************************************************************************/ /*! * \fn WsfTaskUnlock * * \brief Unlock task scheduling. * * \return None. */ /*************************************************************************************************/ void WsfTaskUnlock(void); /*************************************************************************************************/ /*! * \fn WsfTaskSetReady * * \brief Set the task used by the given handler as ready to run. * * \param handlerId Event handler ID. * \param event Task event mask. * * \return None. */ /*************************************************************************************************/ void WsfTaskSetReady(wsfHandlerId_t handlerId, wsfTaskEvent_t event); /*************************************************************************************************/ /*! * \fn WsfTaskMsgQueue * * \brief Return the task message queue used by the given handler. * * \param handlerId Event handler ID. * * \return Task message queue. */ /*************************************************************************************************/ wsfQueue_t *WsfTaskMsgQueue(wsfHandlerId_t handlerId); /*************************************************************************************************/ /*! * \fn WsfOsSetNextHandler * * \brief Set the next WSF handler function in the WSF OS handler array. This function * should only be called as part of the OS initialization procedure. * * \param handler WSF handler function. * * \return WSF handler ID for this handler. */ /*************************************************************************************************/ wsfHandlerId_t WsfOsSetNextHandler(wsfEventHandler_t handler); /*************************************************************************************************/ /*! * \fn wsfOsSetEventObject * * \brief Pass RTOS event object to wsf OS scheduler. This function * should only be called as part of the OS (RTOS) initialization procedure. * * \param event_object The pointer to an event object for RTOS. * * \return None */ /*************************************************************************************************/ void wsfOsSetEventObject(void *event_object); #ifdef __cplusplus }; #endif #endif /* WSF_OS_H */