Files
TencentOS-tiny/components/connectivity/iotkit-embedded-3.0.1/3rdparty/src/atm/at_conn_mbox.h
dcxajichu 8c24d921b0 support aliyun sdk on TencentOS tiny
sample: examples\aliyun_iotkit_csdk_mqtt
project: board\TencentOS_tiny_EVB_MX_Plus\KEIL\aliyun_iotkit_csdk_mqtt
2019-10-31 16:36:28 +08:00

97 lines
2.4 KiB
C

/*
* Copyright (C) 2015-2019 Alibaba Group Holding Limited
*/
#ifndef _AT_CONN_MBOX_H_
#define _AT_CONN_MBOX_H_
#ifdef __cplusplus
extern "C" {
#endif
#define AT_CONN_NUM 3
#define AT_MBOX_TIMEOUT (~0)
#define AT_MBOX_EMPTY (~0)
typedef struct
{
void *hdl;
} at_mbox_t;
/**
* @ingroup sys_mbox
* Create a new mbox of specified size
* @param mbox pointer to the mbox to create
* @param size (minimum) number of messages in this mbox
* @return 0 if successful, another err_t otherwise
*/
int at_mbox_new(at_mbox_t *mbox, int size, void *buf);
/**
* @ingroup sys_mbox
* Post a message to an mbox - may not fail
* -> blocks if full, only used from tasks not from ISR
* @param mbox mbox to posts the message
* @param msg message to post (ATTENTION: can be NULL)
*/
void at_mbox_post(at_mbox_t *mbox, void *msg);
/**
* @ingroup sys_mbox
* Try to post a message to an mbox - may fail if full or ISR
* @param mbox mbox to posts the message
* @param msg message to post (ATTENTION: can be NULL)
*/
int at_mbox_trypost(at_mbox_t *mbox, void *msg);
/**
* @ingroup sys_mbox
* Wait for a new message to arrive in the mbox
* @param mbox mbox to get a message from
* @param msg pointer where the message is stored
* @param timeout maximum time (in milliseconds) to wait for a message (0 = wait forever)
* @return time (in milliseconds) waited for a message, may be 0 if not waited
or SYS_ARCH_TIMEOUT on timeout
* The returned time has to be accurate to prevent timer jitter!
*/
uint32_t at_mbox_fetch(at_mbox_t *mbox, void **msg, uint32_t timeout);
/**
* @ingroup sys_mbox
* Wait for a new message to arrive in the mbox
* @param mbox mbox to get a message from
* @param msg pointer where the message is stored
* @return 0 (milliseconds) if a message has been received
* or at_MBOX_EMPTY if the mailbox is empty
*/
uint32_t at_mbox_tryfetch(at_mbox_t *mbox, void **msg);
/**
* @ingroup sys_mbox
* Delete an mbox
* @param mbox mbox to delete
*/
void at_mbox_free(at_mbox_t *mbox);
/**
* @ingroup sys_mbox
* Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid
*/
int at_mbox_valid(at_mbox_t *mbox);
/**
* @ingroup sys_mbox
* Set an mbox invalid so that sys_mbox_valid returns 0
*/
void at_mbox_set_invalid(at_mbox_t *mbox);
/**
* @ingroup sys_mbox
* Set an mbox invalid so that sys_mbox_valid returns 0
*/
int at_mbox_empty(at_mbox_t *mb);
#ifdef __cplusplus
}
#endif
#endif /*_at_ARCH_H_*/