Files
NxpNfcRdLib/.svn/pristine/5e/5e4feafa406d9b0585078695d88a27904c2a0f24.svn-base
2024-07-08 21:03:06 +08:00

368 lines
11 KiB
Plaintext

/*----------------------------------------------------------------------------*/
/* Copyright 2021 NXP */
/* */
/* NXP Confidential. This software is owned or controlled by NXP and may only */
/* be used strictly in accordance with the applicable license terms. */
/* By expressly accepting such terms or by downloading, installing, */
/* activating and/or otherwise using the software, you are agreeing that you */
/* have read, and that you agree to comply with and are bound by, such */
/* license terms. If you do not agree to be bound by the applicable license */
/* terms, then you may not retain, install, activate or otherwise use the */
/* software. */
/*----------------------------------------------------------------------------*/
/** @file
* Freertos OSAL Component of Reader Library Framework.
* $Author:: NXP $
* $Revision$
*/
#include <phOsal.h>
#ifdef PH_OSAL_NULLOS
#include "phOsal_NullOs.h"
/* *****************************************************************************************************************
* Includes
* ***************************************************************************************************************** */
#include "./portable/phOsal_NullOs_Port.h"
/* *****************************************************************************************************************
* Internal Definitions
* ***************************************************************************************************************** */
/* *****************************************************************************************************************
* Type Definitions
* ***************************************************************************************************************** */
/* *****************************************************************************************************************
* Global and Static Variables
* Total Size: NNNbytes
* ***************************************************************************************************************** */
static volatile uint8_t gbWaitTimedOut;
static volatile uint32_t gdwEvents[PH_OSAL_CONFIG_MAX_NUM_EVENTS];
static volatile uint32_t gdwEventBitMap;
/* *****************************************************************************************************************
* Private Functions Prototypes
* ***************************************************************************************************************** */
static phStatus_t phOsal_NullOs_GetFreeIndex(uint32_t * dwFreeIndex, uint32_t dwBitMap, uint32_t dwMaxLimit);
static void phOsal_NullOsSysTickHandler(void);
static phStatus_t phOsal_NullOs_ReturnUnsupportedCmd(void);
/* *****************************************************************************************************************
* Public Functions
* ***************************************************************************************************************** */
phStatus_t phOsal_Init(void)
{
gbWaitTimedOut = 0;
gdwEventBitMap = 0;
return phOsal_InitTickTimer(&phOsal_NullOsSysTickHandler);
}
phStatus_t phOsal_EventCreate(phOsal_Event_t *eventHandle, pphOsal_EventObj_t eventObj)
{
uint32_t bEventIndex = 0;
if ((eventHandle == NULL) || (eventObj == NULL))
{
return PH_OSAL_ADD_COMPCODE(PH_OSAL_ERROR, PH_COMP_OSAL);
}
PH_OSAL_CHECK_SUCCESS(phOsal_NullOs_GetFreeIndex(&bEventIndex, gdwEventBitMap, PH_OSAL_CONFIG_MAX_NUM_EVENTS));
gdwEvents[bEventIndex] = 0;
gdwEventBitMap |= (1 << bEventIndex);
*eventHandle = (phOsal_Event_t)(&gdwEvents[bEventIndex]);
eventObj->EventHandle = (phOsal_Event_t)(&gdwEvents[bEventIndex]);
eventObj->dwEventIndex = bEventIndex;
return PH_OSAL_SUCCESS;
}
phStatus_t phOsal_EventPend(volatile phOsal_Event_t * eventHandle, phOsal_EventOpt_t options, phOsal_Ticks_t ticksToWait,
phOsal_EventBits_t FlagsToWait, phOsal_EventBits_t *pCurrFlags)
{
phStatus_t status;
if((eventHandle == NULL) || ((*eventHandle) == NULL))
{
return PH_OSAL_ADD_COMPCODE(PH_OSAL_ERROR, PH_COMP_OSAL);
}
status = PH_OSAL_IO_TIMEOUT;
/* Check whether infinite wait, if not config timer. */
if (ticksToWait != PHOSAL_MAX_DELAY)
{
phOsal_StartTickTimer(ticksToWait);
}
while(1)
{
/* Enter Critical Section */
phOsal_EnterCriticalSection();
if ((((options & E_OS_EVENT_OPT_PEND_SET_ALL) && (((*((uint32_t *)(*eventHandle))) & FlagsToWait) == FlagsToWait))
|| ((!(options & E_OS_EVENT_OPT_PEND_SET_ALL)) && ((*((uint32_t *)(*eventHandle))) & FlagsToWait)))
|| (gbWaitTimedOut))
{
/* Exit Critical Section. */
phOsal_ExitCriticalSection();
if (gbWaitTimedOut != 0x01)
{
status = PH_OSAL_SUCCESS;
}
break;
}
/* Exit Critical Section. */
phOsal_ExitCriticalSection();
/* Wait for interrupts/events to occur */
phOsal_Sleep();
}
/* Check whether infinite wait, if not config timer. */
if (ticksToWait != PHOSAL_MAX_DELAY)
{
phOsal_StopTickTimer();
}
gbWaitTimedOut = 0;
phOsal_EnterCriticalSection();
if (pCurrFlags != NULL)
{
*pCurrFlags = (*((uint32_t *)(*eventHandle)));
}
if (options & E_OS_EVENT_OPT_PEND_CLEAR_ON_EXIT)
{
(*((uint32_t *)(*eventHandle))) &= (~(FlagsToWait & (*((uint32_t *)(*eventHandle)))));
}
phOsal_ExitCriticalSection();
return PH_OSAL_ADD_COMPCODE(status, PH_COMP_OSAL);
}
phStatus_t phOsal_EventPost(phOsal_Event_t * eventHandle, phOsal_EventOpt_t options, phOsal_EventBits_t FlagsToPost,
phOsal_EventBits_t *pCurrFlags)
{
if((eventHandle == NULL) || ((*eventHandle) == NULL))
{
return PH_OSAL_ADD_COMPCODE(PH_OSAL_ERROR, PH_COMP_OSAL);
}
/* Enter Critical Section */
phOsal_EnterCriticalSection();
/* Set the events. */
(*((uint32_t *)(*eventHandle))) |= FlagsToPost;
if (pCurrFlags != NULL)
{
*pCurrFlags = (*((uint32_t *)(*eventHandle)));
}
/* Exit Critical Section */
phOsal_ExitCriticalSection();
phOsal_WakeUp();
return PH_OSAL_SUCCESS;
}
phStatus_t phOsal_EventClear(phOsal_Event_t * eventHandle, phOsal_EventOpt_t options, phOsal_EventBits_t FlagsToClear,
phOsal_EventBits_t *pCurrFlags)
{
if((eventHandle == NULL) || ((*eventHandle) == NULL))
{
return PH_OSAL_ADD_COMPCODE(PH_OSAL_ERROR, PH_COMP_OSAL);
}
/* Enter Critical Section */
phOsal_EnterCriticalSection();
if (pCurrFlags != NULL)
{
*pCurrFlags = (*((uint32_t *)(*eventHandle)));
}
(*((uint32_t *)(*eventHandle))) &= (~FlagsToClear);
/* Exit Critical Section. */
phOsal_ExitCriticalSection();
return PH_OSAL_SUCCESS;
}
phStatus_t phOsal_EventGet(phOsal_Event_t * eventHandle, phOsal_EventBits_t *pCurrFlags)
{
if (pCurrFlags == NULL)
{
return (PH_OSAL_ERROR | PH_COMP_OSAL);
}
else
{
*pCurrFlags = (*((uint32_t *)(*eventHandle)));
return PH_OSAL_SUCCESS;
}
}
phStatus_t phOsal_EventDelete(phOsal_Event_t * eventHandle)
{
if((eventHandle == NULL) || ((*eventHandle) == NULL))
{
return PH_OSAL_ADD_COMPCODE(PH_OSAL_ERROR, PH_COMP_OSAL);
}
gdwEventBitMap &= ~(1 << (((pphOsal_EventObj_t)eventHandle)->dwEventIndex));
memset(eventHandle, 0, sizeof(phOsal_TimerObj_t));
return PH_OSAL_SUCCESS;
}
phStatus_t phOsal_TimerCreate(phOsal_Timer_t *timerHandle, pphOsal_TimerObj_t timerObj)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_TimerStart(phOsal_Timer_t * timerHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_TimerStop(phOsal_Timer_t * timerHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_TimerGetCurrent(phOsal_Timer_t * timerHandle, uint32_t * pdwGetElapsedTime)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_TimerModify(phOsal_Timer_t *timerHandle, pphOsal_TimerObj_t timerObj)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_TimerDelete(phOsal_Timer_t * timerHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadSecureStack(uint32_t stackSizeInNum)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadDelete(phOsal_Thread_t * threadHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadCreate(phOsal_Thread_t *threadHandle, pphOsal_ThreadObj_t threadObj, pphOsal_StartFunc_t startFunc, void *arg)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadChangePrio(phOsal_Thread_t * threadHandle, uint32_t newPrio)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadExit(void)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_ThreadDelay(phOsal_Ticks_t ticksToSleep)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_SemCreate(phOsal_Semaphore_t *semHandle, pphOsal_SemObj_t semObj,phOsal_SemOpt_t opt)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_SemPend(phOsal_Semaphore_t * semHandle, phOsal_TimerPeriodObj_t timePeriodToWait)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_SemPost(phOsal_Semaphore_t * semHandle, phOsal_SemOpt_t opt)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_SemDelete(phOsal_Semaphore_t * semHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_MutexCreate(phOsal_Mutex_t *mutexHandle, pphOsal_MutexObj_t mutexObj)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_MutexLock(phOsal_Mutex_t * mutexHandle, phOsal_TimerPeriodObj_t timePeriodToWait)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_MutexUnLock(phOsal_Mutex_t * mutexHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
phStatus_t phOsal_MutexDelete(phOsal_Mutex_t * mutexHandle)
{
return phOsal_NullOs_ReturnUnsupportedCmd();
}
void phOsal_StartScheduler(void)
{
return ;
}
/* *****************************************************************************************************************
* Private Functions
* ***************************************************************************************************************** */
static phStatus_t phOsal_NullOs_ReturnUnsupportedCmd(void)
{
return (PH_OSAL_UNSUPPORTED_COMMAND | PH_COMP_OSAL);
}
static phStatus_t phOsal_NullOs_GetFreeIndex(uint32_t * dwFreeIndex, uint32_t dwBitMap, uint32_t dwMaxLimit)
{
phStatus_t status;
(*dwFreeIndex) = 0;
while(((1 << (*dwFreeIndex)) & dwBitMap) && ((*dwFreeIndex) < dwMaxLimit))
{
(*dwFreeIndex)++;
}
if (*dwFreeIndex == dwMaxLimit)
{
status = (PH_OSAL_ERROR | PH_COMP_OSAL);
}
else
{
status = PH_OSAL_SUCCESS;
}
return status;
}
static void phOsal_NullOsSysTickHandler(void)
{
phOsal_StopTickTimer();
gbWaitTimedOut = 1;
phOsal_WakeUp();
}
#endif /* PH_OSAL_NULLOS */