10.1_demo/extern/qlibquammapi/include/utils/qua_msg_queue.h

90 lines
2.3 KiB
C

/*
* Copyright (c) 2024~2025 Quaming Intelligent Technology Co., Ltd.
*
* All Rights Reserved.
* Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd.
*/
#ifndef __QUA_MSG_QUEUE_H__
#define __QUA_MSG_QUEUE_H__
#include "common/qua_type.h"
#include "qua_list.h"
#include "utils/qua_mutex.h"
#include "utils/qua_cond.h"
#ifdef __cplusplus
extern "C" {
#endif
struct qua_msg_t;
typedef void (*qua_msg_handle_fun)(struct qua_msg_t *msg);
typedef enum {
QUA_MSG_PRIORITY_NORMAL,
QUA_MSG_PRIORITY_HIGH
} qua_msg_priority_t;
typedef enum {
QUA_MSG_IDLE,
QUA_MSG_PENDING,
QUA_MSG_ACTIVE
} qua_msg_status;
typedef enum {
QUA_MSG_PAYLOAD_PLAIN_DATA,
QUA_MSG_PAYLOAD_OBJ,
} qua_msg_payload_type_t;
typedef struct qua_reply_token_t {
QUA_BOOL reply;
QUA_S32 result;
} qua_reply_token_t;
typedef struct qua_msg_t {
qua_list_node_t node;
QUA_U32 what;
qua_msg_payload_type_t payload_type;
QUA_VOID *payload;
union {
QUA_U32 len;
QUA_U32 obj_type;
} u;
QUA_S64 whenus;
qua_msg_priority_t priority;
qua_msg_handle_fun notify;
qua_msg_status status;
qua_reply_token_t *token;
QUA_S32 result;
} qua_msg_t;
typedef struct qua_msg_queue_t {
qua_list_node_t list;
qua_mutex_t lock;
qua_cond_t cond;
QUA_BOOL running;
} qua_msg_queue_t;
qua_msg_t *qua_create_msg(QUA_U32 what, QUA_VOID *payload, QUA_U32 length,
qua_msg_priority_t priority, qua_msg_handle_fun notify);
void qua_destroy_msg(qua_msg_t *msg);
qua_msg_t *qua_create_msg_with_obj(QUA_U32 what, QUA_U32 obj_type, QUA_VOID *obj,
qua_msg_priority_t priority, qua_msg_handle_fun notify);
QUA_S32 qua_msg_queue_init(qua_msg_queue_t **msg_queue, QUA_BOOL enable);
void qua_msg_queue_destroy(qua_msg_queue_t *msg_queue);
QUA_S32 qua_msg_queue_enqueue(qua_msg_queue_t *msg_queue, qua_msg_t *msg, QUA_S64 delayus, QUA_BOOL is_exclude);
qua_msg_t *qua_msg_queue_dequeue(qua_msg_queue_t *msg_queue);
QUA_U32 qua_msg_queue_disable(qua_msg_queue_t *msg_queue);
QUA_U32 qua_msg_queue_enable(qua_msg_queue_t *msg_queue);
QUA_U32 qua_msg_queue_length(qua_msg_queue_t *msg_queue);
QUA_S32 qua_msg_queue_update(qua_msg_queue_t *msg_queue, qua_msg_t *msg, QUA_S64 delayus);
QUA_S32 qua_msg_queue_remove(qua_msg_queue_t *msg_queue, QUA_U32 what);
#ifdef __cplusplus
}
#endif
#endif /* __QUA_MSG_QUEUE_H__ */