/* * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. * Description: event.h * Create: 2020-01-01 */ #ifndef CCE_RUNTIME_EVENT_H #define CCE_RUNTIME_EVENT_H #include "base.h" #if defined(__cplusplus) extern "C" { #endif typedef enum rtEventWaitStatus { EVENT_STATUS_COMPLETE = 0, EVENT_STATUS_NOT_READY = 1, EVENT_STATUS_MAX = 2, } rtEventWaitStatus_t; typedef enum rtEventStatus { RT_EVENT_INIT = 0, RT_EVENT_RECORDED = 1, } rtEventStatus_t; /** * @ingroup event_flags * @brief event op bit flags */ #define RT_EVENT_DEFAULT (0x0EU) #define RT_EVENT_WITH_FLAG (0x0BU) #define RT_EVENT_DDSYNC_NS 0x01U #define RT_EVENT_STREAM_MARK 0x02U #define RT_EVENT_DDSYNC 0x04U #define RT_EVENT_TIME_LINE 0x08U /** * @ingroup dvrt_event * @brief create event instance * @param [in|out] event created event * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtEventCreate(rtEvent_t *evt); /** * @ingroup dvrt_event * @brief create event instance with flag * @param [in|out] event created event flag event op flag * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtEventCreateWithFlag(rtEvent_t *evt, uint32_t flag); /** * @ingroup dvrt_event * @brief destroy event instance * @param [in] evt event to destroy * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtEventDestroy(rtEvent_t evt); /** * @ingroup dvrt_event * @brief get event id * @param [in] evt event to be get * @param [in|out] event_id event_id id * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtGetEventID(rtEvent_t evt, uint32_t *evtId); /** * @ingroup dvrt_event * @brief event record * @param [int] event event to record * @param [int] stm stream handle * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtEventRecord(rtEvent_t evt, rtStream_t stm); /** * @ingroup dvrt_event * @brief event reset * @param [int] event event to reset * @param [int] stm stream handle * @return RT_ERROR_NONE for ok */ RTS_API rtError_t rtEventReset(rtEvent_t evt, rtStream_t stm); /** * @ingroup dvrt_event * @brief wait event to be complete * @param [in] evt event to wait * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtEventSynchronize(rtEvent_t evt); /** * @ingroup dvrt_event * @brief Queries an event's status * @param [in] evt event to query * @return RT_ERROR_NONE for complete * @return RT_ERROR_EVENT_NOT_COMPLETE for not complete */ RTS_API rtError_t rtEventQuery(rtEvent_t evt); /** * @ingroup dvrt_event * @brief Queries an event's wait status * @param [in] evt event to query * @param [in out] EVENT_WAIT_STATUS status * @return EVENT_STATUS_COMPLETE for complete * @return EVENT_STATUS_NOT_READY for not complete */ RTS_API rtError_t rtEventQueryWaitStatus(rtEvent_t evt, rtEventWaitStatus_t *status); /** * @ingroup dvrt_event * @brief Queries an event's status * @param [in] evt event to query * @param [in out] rtEventStatus_t status * @return RT_EVENT_RECORDED for recorded * @return RT_EVENT_INIT for not recorded */ RTS_API rtError_t rtEventQueryStatus(rtEvent_t evt, rtEventStatus_t *status); /** * @ingroup dvrt_event * @brief computes the elapsed time between events. * @param [in] timeInterval time between start and end in ms * @param [in] startEvent starting event * @param [in] endEvent ending event * @return RT_ERROR_NONE for ok, errno for failed */ RTS_API rtError_t rtEventElapsedTime(float32_t *timeInterval, rtEvent_t startEvent, rtEvent_t endEvent); /** * @ingroup dvrt_event * @brief get the elapsed time from a event after event recorded. * @param [in] timeStamp time in ms * @param [in] evt event handle * @return RT_ERROR_NONE for ok, errno for failed */ RTS_API rtError_t rtEventGetTimeStamp(uint64_t *timeStamp, rtEvent_t evt); /** * @ingroup dvrt_event * @brief name an event * @param [in] evt event to be named * @param [in] name identification name * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input of event, name * @return RT_ERROR_DRV_ERR for driver error */ RTS_API rtError_t rtNameEvent(rtEvent_t evt, const char_t *name); /** * @ingroup dvrt_event * @brief Create a notify * @param [in] device_id device id * @param [in|out] notify_ notify to be created * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtNotifyCreate(int32_t deviceId, rtNotify_t *notify); /** * @ingroup dvrt_event * @brief Destroy a notify * @param [in] notify_ notify to be destroyed * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_DRV_ERR for driver error */ RTS_API rtError_t rtNotifyDestroy(rtNotify_t notify); /** * @ingroup dvrt_event * @brief Record a notify * @param [in] notify_ notify to be recorded * @param [in] stream_ input stream * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_STREAM_CONTEXT for stream is not in current ctx */ RTS_API rtError_t rtNotifyRecord(rtNotify_t notify, rtStream_t stm); /** * @ingroup dvrt_event * @brief Wait for a notify * @param [in] notify_ notify to be wait * @param [in] stream_ input stream * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_STREAM_CONTEXT for stream is not in current ctx */ RTS_API rtError_t rtNotifyWait(rtNotify_t notify, rtStream_t stm); /** * @ingroup dvrt_event * @brief Wait for a notify with time out * @param [in] notify notify to be wait * @param [in] stm input stream * @param [in] timeOut input timeOut * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_STREAM_CONTEXT for stream is not in current ctx */ RTS_API rtError_t rtNotifyWaitWithTimeOut(rtNotify_t notify, rtStream_t stm, uint32_t timeOut); /** * @ingroup dvrt_event * @brief Name a notify * @param [in] notify_ notify to be named * @param [in|out] name identification name * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtNameNotify(rtNotify_t notify, const char_t *name); /** * @ingroup dvrt_event * @brief get notify id * @param [in] notify_ notify to be get * @param [in|out] notify_id notify id * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtGetNotifyID(rtNotify_t notify, uint32_t *notifyId); /** * @ingroup dvrt_event * @brief Set a notify to IPC notify * @param [in] notify_ notify to be set to IPC notify * @param [in] name identification name * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input of */ RTS_API rtError_t rtIpcSetNotifyName(rtNotify_t notify, char_t *name, uint32_t len); /** * @ingroup dvrt_event * @brief Open IPC notify * @param [out] notify the opened notify * @param [in] name identification name * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input */ RTS_API rtError_t rtIpcOpenNotify(rtNotify_t *notify, const char_t *name); /** * @ingroup dvrt_event * @brief Get the physical address corresponding to notify * @param [in] notify notify to be queried * @param [in] devAddrOffset device physical address offset * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_DRV_ERR for driver error */ RTS_API rtError_t rtNotifyGetAddrOffset(rtNotify_t notify, uint64_t *devAddrOffset); /** * @ingroup dvrt_event * @brief Ipc set notify pid * @param [in] name name to be queried * @param [in] pid process id * @param [in] num length of pid[] * @return RT_ERROR_NONE for ok * @return RT_ERROR_INVALID_VALUE for error input * @return RT_ERROR_DRV_ERR for driver error */ RTS_API rtError_t rtSetIpcNotifyPid(const char_t *name, int32_t pid[], int32_t num); #if defined(__cplusplus) } #endif #endif // CCE_RUNTIME_EVENT_H