/*************************************************************************************************/
|
/*!
|
* \file wsf_os.h
|
*
|
* \brief Software foundation OS API.
|
*
|
* Copyright (c) 2009-2019 Arm Ltd. All Rights Reserved.
|
*
|
* Copyright (c) 2019-2020 Packetcraft, Inc.
|
*
|
* 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.
|
*/
|
/*************************************************************************************************/
|
#ifndef WSF_OS_H
|
#define WSF_OS_H
|
|
#include "wsf_types.h"
|
#include "wsf_queue.h"
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/*! \addtogroup WSF_OS_API
|
* \{ */
|
|
/**************************************************************************************************
|
Configuration
|
**************************************************************************************************/
|
|
/*! \brief OS Diagnostics */
|
#ifndef WSF_OS_DIAG
|
#define WSF_OS_DIAG FALSE
|
#endif
|
|
/**************************************************************************************************
|
Macros
|
**************************************************************************************************/
|
|
/*! \brief Derive task from handler ID */
|
#define WSF_TASK_FROM_ID(handlerID) (((handlerID) >> 4) & 0x0F)
|
|
/*! \brief Derive handler from handler ID */
|
#define WSF_HANDLER_FROM_ID(handlerID) ((handlerID)&0x0F)
|
|
/*! \brief Invalid Task Identifier */
|
#define WSF_INVALID_TASK_ID 0xFF
|
|
/*! \brief Get Diagnostic Task Identifier */
|
#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 */
|
|
/** @name WSF Task Events
|
*
|
*/
|
/**@{*/
|
#define WSF_MSG_QUEUE_EVENT 0x01 /*!< \brief Message queued for event handler */
|
#define WSF_TIMER_EVENT 0x02 /*!< \brief Timer expired for event handler */
|
#define WSF_HANDLER_EVENT 0x04 /*!< \brief Event set for event handler */
|
/**@}*/
|
|
/**************************************************************************************************
|
Data Types
|
**************************************************************************************************/
|
|
/*! \brief Event handler ID data type */
|
typedef uint8_t wsfHandlerId_t;
|
|
/*! \brief Event handler event mask data type */
|
typedef uint16_t wsfEventMask_t;
|
|
/*! \brief Task ID data type */
|
typedef wsfHandlerId_t wsfTaskId_t;
|
|
/*! \brief Task event mask data type */
|
typedef uint8_t wsfTaskEvent_t;
|
|
/*! \brief Idle check function. */
|
typedef bool_t (*WsfOsIdleCheckFunc_t)(void);
|
|
/**************************************************************************************************
|
External Variables
|
**************************************************************************************************/
|
|
/*! \brief Diagnostic Task Identifier */
|
extern wsfHandlerId_t WsfActiveHandler;
|
|
/**************************************************************************************************
|
Data Types
|
**************************************************************************************************/
|
|
/*! \brief Common message structure passed to event handler */
|
typedef struct
|
{
|
uint16_t param; /*!< \brief General purpose parameter passed to event handler */
|
uint8_t event; /*!< \brief General purpose event value passed to event handler */
|
uint8_t status; /*!< \brief General purpose status value passed to event handler */
|
} wsfMsgHdr_t;
|
|
/**************************************************************************************************
|
Callback Function Types
|
**************************************************************************************************/
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Event handler callback function.
|
*
|
* \param event Mask of events set for the event handler.
|
* \param pMsg Pointer to message for the event handler.
|
*/
|
/*************************************************************************************************/
|
typedef void (*wsfEventHandler_t)(wsfEventMask_t event, const void *pMsg);
|
|
/**************************************************************************************************
|
Function Declarations
|
**************************************************************************************************/
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Set an event for an event handler.
|
*
|
* \param handlerId Handler ID.
|
* \param event Event or events to set.
|
*/
|
/*************************************************************************************************/
|
void WsfSetEvent(wsfHandlerId_t handlerId, wsfEventMask_t event);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Lock task scheduling.
|
*/
|
/*************************************************************************************************/
|
uint32_t WsfTaskLock(void);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Unlock task scheduling.
|
*/
|
/*************************************************************************************************/
|
void WsfTaskUnlock(uint32_t lock);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Set the task used by the given handler as ready to run.
|
*
|
* \param handlerId Event handler ID.
|
* \param event Task event mask.
|
*/
|
/*************************************************************************************************/
|
void WsfTaskSetReady(wsfHandlerId_t handlerId, wsfTaskEvent_t event);
|
|
/*************************************************************************************************/
|
/*!
|
* \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);
|
|
/*************************************************************************************************/
|
/*!
|
* \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);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Check if WSF is ready to sleep.
|
*
|
* \return Return TRUE if there are no pending WSF task events set, FALSE otherwise.
|
*/
|
/*************************************************************************************************/
|
bool_t wsfOsReadyToSleep(void);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Event dispatched. Designed to be called repeatedly from infinite loop.
|
*/
|
/*************************************************************************************************/
|
void wsfOsDispatcher(void);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Initialize OS control structure.
|
*
|
* \return None.
|
*/
|
/*************************************************************************************************/
|
void WsfOsInit(void);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Register service check functions.
|
*
|
* \param func Service function.
|
*/
|
/*************************************************************************************************/
|
void WsfOsRegisterSleepCheckFunc(WsfOsIdleCheckFunc_t func);
|
|
/*! \} */ /* WSF_OS_API */
|
|
#ifdef __cplusplus
|
};
|
#endif
|
|
#endif /* WSF_OS_H */
|