对比新文件 |
| | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \file wsf_msg.h |
| | | * |
| | | * \brief Message passing service. |
| | | * |
| | | * Copyright (c) 2009-2018 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_MSG_H |
| | | #define WSF_MSG_H |
| | | |
| | | #include "wsf_queue.h" |
| | | #include "wsf_os.h" |
| | | |
| | | #ifdef __cplusplus |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /// Build the message ID of a task |
| | | #define OS_MSG_ID_BUILD(type, idx) ((uint8_t)(((type) << 4) | (idx))) |
| | | |
| | | /// Retrieves task type from message id. |
| | | #define OS_MSG_TASK_TYPE_GET(os_msg_id) (((os_msg_id) >> 4) & 0xF) |
| | | |
| | | /// Tasks types definition |
| | | enum OS_TASK_TYPE |
| | | { |
| | | OS_TASK_APP, |
| | | OS_TASK_UWB, |
| | | OS_TASK_RANGING, |
| | | OS_TASK_AOA, |
| | | OS_TASK_UL_TDOA, |
| | | OS_TASK_UWB_TEST, |
| | | OS_TASK_UCI_TL, |
| | | OS_TASK_UWB_RADAR, |
| | | OS_TASK_OTA, |
| | | |
| | | /// Maximum number of tasks |
| | | OS_TASK_NUM, |
| | | |
| | | OS_TASK_NONE = 0xFF, |
| | | }; |
| | | |
| | | /*! \addtogroup WSF_MSG_API |
| | | * \{ */ |
| | | |
| | | /************************************************************************************************** |
| | | Function Declarations |
| | | **************************************************************************************************/ |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Allocate a data message buffer to be sent with WsfMsgSend(). |
| | | * |
| | | * \param len Message length in bytes. |
| | | * \param tailroom Tailroom length in bytes. |
| | | * |
| | | * \return Pointer to data message buffer or NULL if allocation failed. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void *WsfMsgDataAlloc(uint16_t len, uint8_t tailroom); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Allocate a message buffer to be sent with WsfMsgSend(). |
| | | * |
| | | * \param len Message length in bytes. |
| | | * |
| | | * \return Pointer to message buffer or NULL if allocation failed. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void *WsfMsgAlloc(uint16_t len); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Free a message buffer allocated with WsfMsgAlloc(). |
| | | * |
| | | * \param pMsg Pointer to message buffer. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfMsgFree(void *pMsg); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Send a message to an event handler. |
| | | * |
| | | * \param handlerId Event handler ID. |
| | | * \param pMsg Pointer to message buffer. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfMsgSend(wsfHandlerId_t handlerId, void *pMsg); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Enqueue a message. |
| | | * |
| | | * \param pQueue Pointer to queue. |
| | | * \param handlerId Set message handler ID to this value. |
| | | * \param pMsg Pointer to message buffer. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void WsfMsgEnq(wsfQueue_t *pQueue, wsfHandlerId_t handlerId, void *pMsg); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Dequeue a message. |
| | | * |
| | | * \param pQueue Pointer to queue. |
| | | * \param pHandlerId Handler ID of returned message; this is a return parameter. |
| | | * |
| | | * \return Pointer to message that has been dequeued or NULL if queue is empty. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void *WsfMsgDeq(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Get the next message without removing it from the queue. |
| | | * |
| | | * \param pQueue Pointer to queue. |
| | | * \param pHandlerId Handler ID of returned message; this is a return parameter. |
| | | * |
| | | * \return Pointer to the next message on the queue or NULL if queue is empty. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void *WsfMsgPeek(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId); |
| | | |
| | | /*************************************************************************************************/ |
| | | /*! |
| | | * \brief Get the Nth message without removing it from the queue. |
| | | * |
| | | * \param pQueue Pointer to queue. |
| | | * \param n Nth item from the top (0 = top element). |
| | | * \param pHandlerId Handler ID of returned message; this is a return parameter. |
| | | * |
| | | * \return Pointer to the next message on the queue or NULL if queue is empty. |
| | | */ |
| | | /*************************************************************************************************/ |
| | | void *WsfMsgNPeek(wsfQueue_t *pQueue, uint8_t n, wsfHandlerId_t *pHandlerId); |
| | | |
| | | /*! \} */ /* WSF_MSG_API */ |
| | | |
| | | #ifdef __cplusplus |
| | | }; |
| | | #endif |
| | | |
| | | #endif /* WSF_MSG_H */ |