📄 message_queue.h
字号:
#ifndef _MESSAGE_QUEUE_H
#define _MESSAGE_QUEUE_H
#include "sos_types.h"
#include "message_types.h"
#include "malloc.h"
#include <stdbool.h>
/*
* WARNING:
* These functions are meant for SOS kernel
* Application Module should not normally need to use this.
*/
/**
* @brief data structure for priority message queue
*/
typedef struct {
//! number of messages in the queue.
//! this is used to reduce dequeue overhead
uint8_t msg_cnt;
uint8_t lm_cnt;
uint8_t sm_cnt;
uint8_t hm_cnt;
//! high priority queue
Message *hq_head;
Message *hq_tail;
//! system queue
Message *sq_head;
Message *sq_tail;
//! low priority queue
Message *lq_head;
Message *lq_tail;
} mq_t;
extern int8_t msg_queue_init();
/**
* @brief initialize message queue
* this function always succeed
*/
extern void mq_init(mq_t *q);
/**
* @brief enqueue message
* This function always succeed
*/
extern void mq_enqueue(mq_t *q, Message *m);
/**
* @brief dequeue message
* @return pointer to message, or NULL for empty queue
*/
extern Message *mq_dequeue(mq_t *q);
/**
* @brief get message that matches the header in the queue
*
* NOTE it matches only daddr, saddr, did, sid, type
* NOTE it only gets the first that matches the description
*/
extern Message *mq_get(mq_t *q, Message *m);
/**
* @brief create message
* @return pointer to message, or NULL for fail
* get new message header from message repositary
*/
extern Message *msg_create();
/**
* @brief dispose message
* return message header back to message repostitary
* this function always succeed
*/
extern void msg_dispose(Message *m);
/**
* @brief handle the process of creating senddone message
* @param msg_sent the Message just sent or delivered
* @param succ is the delivery successful?
* @param msg_owner the owner of the message
* NOTE the implementation will need to improve
*/
extern void msg_send_senddone(Message *msg_sent, bool succ, sos_pid_t msg_owner);
#ifdef FAULT_TOLERANT_SOS
/**
* @brief Move a message (header and payload) to the module domain
* @param msg_ker_domain Message that needs to be duplicated
* @return Pointer to the moved message or NULL
*/
Message *msg_move_to_module_domain(Message *msg_ker_domain);
#endif//FAULT_TOLERANT_SOS
#endif //_MESSAGE_QUEUE_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -