| | |
| | | #include "wsf_buf.h" |
| | | #include "wsf_msg.h" |
| | | #include "wsf_cs.h" |
| | | #include "mk_power.h" |
| | | |
| | | #if defined(RTOS_CMSIS_RTX) && (RTOS_CMSIS_RTX == 1) |
| | | #include "cmsis_os2.h" |
| | |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Lock task scheduling. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | uint32_t WsfTaskLock(void) |
| | | { |
| | | return PalEnterCs(); |
| | | } |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Unock task scheduling. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfTaskUnlock(uint32_t lock) |
| | | { |
| | | PalExitCs(lock); |
| | | } |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Set an event for an event handler. |
| | | * |
| | | * \param handlerId Handler ID. |
| | |
| | | uint32_t lock = WSF_CS_ENTER(); |
| | | wsfOs.task.handlerEventMask[WSF_HANDLER_FROM_ID(handlerId)] |= event; |
| | | wsfOs.task.taskEventMask |= WSF_HANDLER_EVENT; |
| | | power_mode_request(POWER_UNIT_OS, POWER_MODE_ACTIVE); |
| | | WSF_CS_EXIT(lock); |
| | | |
| | | /* set event in OS */ |
| | |
| | | |
| | | uint32_t lock = WSF_CS_ENTER(); |
| | | wsfOs.task.taskEventMask |= event; |
| | | power_mode_request(POWER_UNIT_OS, POWER_MODE_ACTIVE); |
| | | WSF_CS_EXIT(lock); |
| | | |
| | | /* set event in OS */ |
| | |
| | | uint32_t lock = WSF_CS_ENTER(); |
| | | taskEventMask = pTask->taskEventMask; |
| | | pTask->taskEventMask = 0; |
| | | power_mode_clear(POWER_UNIT_OS); |
| | | WSF_CS_EXIT(lock); |
| | | |
| | | if (taskEventMask & WSF_MSG_QUEUE_EVENT) |
| | |
| | | if (taskEventMask & WSF_TIMER_EVENT) |
| | | { |
| | | /* service timers */ |
| | | while ((pTimer = WsfTimerServiceExpired(0)) != NULL) |
| | | while ((pTimer = WsfTimerServiceExpired()) != NULL) |
| | | { |
| | | WSF_ASSERT(pTimer->handlerId < WSF_MAX_HANDLERS); |
| | | WSF_OS_SET_ACTIVE_HANDLER_ID(pTimer->handlerId); |
| | | (*pTask->handler[pTimer->handlerId])(0, &pTimer->msg); |
| | | if (pTimer->msg.event != PHY_PD_TIMER_EVENT) |
| | | { |
| | | WSF_ASSERT(pTimer->handlerId < WSF_MAX_HANDLERS); |
| | | WSF_OS_SET_ACTIVE_HANDLER_ID(pTimer->handlerId); |
| | | (*pTask->handler[pTimer->handlerId])(0, &pTimer->msg); |
| | | } |
| | | } |
| | | } |
| | | |