72 lines
1.6 KiB
C
72 lines
1.6 KiB
C
#include "rtthread.h"
|
|
|
|
rt_err_t rt_mq_init(rt_mq_t mq, const char *name, void *msgpool, rt_size_t msg_size, rt_size_t pool_size, rt_uint8_t flag)
|
|
{
|
|
return os_msgq_init(mq, pool_size);
|
|
}
|
|
|
|
rt_err_t rt_mq_detach(rt_mq_t mq)
|
|
{
|
|
return os_msgq_del(mq);
|
|
}
|
|
|
|
rt_mq_t rt_mq_create(const char *name, rt_size_t msg_size, rt_size_t max_msgs, rt_uint8_t flag)
|
|
{
|
|
struct rt_messagequeue *msgq = os_zalloc(sizeof(struct rt_messagequeue));
|
|
if (msgq) {
|
|
os_msgq_init(msgq, max_msgs);
|
|
}
|
|
return msgq;
|
|
}
|
|
|
|
rt_err_t rt_mq_delete(rt_mq_t mq)
|
|
{
|
|
os_msgq_del(mq);
|
|
os_free(mq);
|
|
return RT_EOK;
|
|
}
|
|
|
|
rt_err_t rt_mq_send_wait(rt_mq_t mq, const void *buffer, rt_size_t size, rt_int32_t timeout)
|
|
{
|
|
void *ptr = os_malloc(size);
|
|
if (ptr) {
|
|
os_memcpy(ptr, buffer, size);
|
|
if (os_msgq_put(mq, (uint32)ptr, timeout)) {
|
|
os_free(ptr);
|
|
return RT_ERROR;
|
|
}
|
|
return RT_EOK;
|
|
}
|
|
return RT_ENOMEM;
|
|
}
|
|
|
|
rt_err_t rt_mq_send(rt_mq_t mq, const void *buffer, rt_size_t size)
|
|
{
|
|
return rt_mq_send_wait(mq, buffer, size, osWaitForever);
|
|
}
|
|
|
|
rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size)
|
|
{
|
|
void *ptr = os_malloc(size);
|
|
if (ptr) {
|
|
os_memcpy(ptr, buffer, size);
|
|
if (os_msgq_put_head(mq, (uint32)ptr, osWaitForever)) {
|
|
os_free(ptr);
|
|
return RT_ERROR;
|
|
}
|
|
return RT_EOK;
|
|
}
|
|
return RT_ENOMEM;
|
|
}
|
|
|
|
rt_err_t rt_mq_recv(rt_mq_t mq, void *buffer, rt_size_t size, rt_int32_t timeout)
|
|
{
|
|
void *ptr = (void *)os_msgq_get(mq, timeout);
|
|
if (ptr) {
|
|
os_memcpy(buffer, ptr, size);
|
|
os_free(ptr);
|
|
}
|
|
return RT_EOK;
|
|
}
|
|
|