⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 message_queue.h

📁 SOS操作系统用于无线传感器网络节点的源代码
💻 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 + -