Files
TAIXIN/sdk/osal/ohos/msgqueue.c

98 lines
2.3 KiB
C

#include "typesdef.h"
#include "errno.h"
#include "list.h"
#include "osal/event.h"
#ifdef OHOS
#include "los_event.h"
#include "los_membox.h"
#include "los_memory.h"
#include "los_interrupt.h"
#include "los_mux.h"
#include "los_queue.h"
#include "los_sem.h"
#include "los_swtmr.h"
#include "los_task.h"
#include "los_timer.h"
#include "los_debug.h"
#if (LOSCFG_MUTEX_CREATE_TRACE == 1)
#include "los_arch.h"
#endif
#include "osal/string.h"
#include "osal/msgqueue.h"
#define MSGQ_MAGIC (0x4a8b1c9d)
int32 os_msgq_init(os_msgqueue_t *msgq, int32 size)
{
UINT32 hdl = 0;
if(msgq->magic == MSGQ_MAGIC){
os_printf(KERN_WARNING"msgq repeat initialization ????\r\n");
}
if (LOS_OK == LOS_QueueCreate("msgq", size, &hdl, 0, sizeof(uint32))) {
msgq->hdl = (void *)(hdl + 1);
msgq->magic = MSGQ_MAGIC;
}
return (msgq->hdl ? RET_OK : RET_ERR);
}
uint32 os_msgq_get(os_msgqueue_t *msgq, int32 tmo_ms)
{
UINT32 val = 0;
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
LOS_QueueRead(hdl - 1, &val, sizeof(uint32), LOS_MS2Tick(tmo_ms));
return val;
}
uint32 os_msgq_get2(struct os_msgqueue *msgq, int32 tmo_ms, int32 *err)
{
UINT32 ret;
UINT32 val = 0;
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
ret = LOS_QueueRead(hdl - 1, &val, sizeof(uint32), LOS_MS2Tick(tmo_ms));
if(err) *err = ret;
return val;
}
int32 os_msgq_put(os_msgqueue_t *msgq, uint32 data, int32 tmo_ms)
{
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
return LOS_QueueWrite(hdl - 1, (void *)data, sizeof(uint32), LOS_MS2Tick(tmo_ms));
}
int32 os_msgq_put_head(os_msgqueue_t *msgq, uint32 data, int32 tmo_ms)
{
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
return LOS_QueueWriteHead(hdl - 1, (void *)data, sizeof(uint32), LOS_MS2Tick(tmo_ms));
}
int32 os_msgq_del(os_msgqueue_t *msgq)
{
ASSERT(msgq->hdl);
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
LOS_QueueDelete(hdl - 1);
msgq->hdl = NULL;
msgq->magic = 0;
return RET_OK;
}
int32 os_msgq_cnt(os_msgqueue_t *msgq)
{
QUEUE_INFO_S queueInfo;
UINT32 hdl = (UINT32)msgq->hdl;
ASSERT(msgq->hdl);
memset(&queueInfo, 0, sizeof(queueInfo));
LOS_QueueInfoGet(hdl - 1, &queueInfo);
return queueInfo.readableCnt;
}
#endif