ReactOS 0.4.16-dev-258-g81860b4
|
Functions | |
err_t | sys_mbox_new (sys_mbox_t *mbox, int size) |
void | sys_mbox_post (sys_mbox_t *mbox, void *msg) |
err_t | sys_mbox_trypost (sys_mbox_t *mbox, void *msg) |
err_t | sys_mbox_trypost_fromisr (sys_mbox_t *mbox, void *msg) |
u32_t | sys_arch_mbox_fetch (sys_mbox_t *mbox, void **msg, u32_t timeout) |
u32_t | sys_arch_mbox_tryfetch (sys_mbox_t *mbox, void **msg) |
void | sys_mbox_free (sys_mbox_t *mbox) |
int | sys_mbox_valid (sys_mbox_t *mbox) |
void | sys_mbox_set_invalid (sys_mbox_t *mbox) |
Mailboxes should be implemented as a queue which allows multiple messages to be posted (implementing as a rendez-vous point where only one message can be posted at a time can have a highly negative impact on performance). A message in a mailbox is just a pointer, nothing more.
u32_t sys_arch_mbox_fetch | ( | sys_mbox_t * | mbox, |
void ** | msg, | ||
u32_t | timeout | ||
) |
Blocks the thread until a message arrives in the mailbox, but does not block the thread longer than "timeout" milliseconds (similar to the sys_arch_sem_wait() function). If "timeout" is 0, the thread should be blocked until a message arrives. The "msg" argument is a result parameter that is set by the function (i.e., by doing "*msg = ptr"). The "msg" parameter maybe NULL to indicate that the message should be dropped. The return values are the same as for the sys_arch_sem_wait() function: SYS_ARCH_TIMEOUT if there was a timeout, any other value if a messages is received.
Note that a function with a similar name, sys_mbox_fetch(), is implemented by lwIP.
mbox | mbox to get a message from |
msg | pointer where the message is stored |
timeout | maximum time (in milliseconds) to wait for a message (0 = wait forever) |
Definition at line 177 of file sys_arch.c.
Referenced by sys_arch_mbox_tryfetch().
u32_t sys_arch_mbox_tryfetch | ( | sys_mbox_t * | mbox, |
void ** | msg | ||
) |
This is similar to sys_arch_mbox_fetch, however if a message is not present in the mailbox, it immediately returns with the code SYS_MBOX_EMPTY. On success 0 is returned. To allow for efficient implementations, this can be defined as a function-like macro in sys_arch.h instead of a normal function. For example, a naive implementation could be: #define sys_arch_mbox_tryfetch(mbox,msg) sys_arch_mbox_fetch(mbox,msg,1) although this would introduce unnecessary delays.
mbox | mbox to get a message from |
msg | pointer where the message is stored |
Definition at line 238 of file sys_arch.c.
Referenced by sys_arch_mbox_fetch().
void sys_mbox_free | ( | sys_mbox_t * | mbox | ) |
Deallocates a mailbox. If there are messages still present in the mailbox when the mailbox is deallocated, it is an indication of a programming error in lwIP and the developer should be notified.
mbox | mbox to delete |
Definition at line 152 of file sys_arch.c.
err_t sys_mbox_new | ( | sys_mbox_t * | mbox, |
int | size | ||
) |
Creates an empty mailbox for maximum "size" elements. Elements stored in mailboxes are pointers. You have to define macros "_MBOX_SIZE" in your lwipopts.h, or ignore this parameter in your implementation and use a default size. If the mailbox has been created, ERR_OK should be returned. Returning any other error will provide a hint what went wrong, but except for assertions, no real error handling is implemented.
mbox | pointer to the mbox to create |
size | (minimum) number of messages in this mbox |
Definition at line 128 of file sys_arch.c.
Referenced by tcpip_init().
void sys_mbox_post | ( | sys_mbox_t * | mbox, |
void * | msg | ||
) |
Post a message to an mbox - may not fail -> blocks if full, only to be used from tasks NOT from ISR!
mbox | mbox to posts the message |
msg | message to post (ATTENTION: can be NULL) |
Definition at line 160 of file sys_arch.c.
Referenced by sys_mbox_trypost(), tcpip_api_call(), tcpip_callback(), tcpip_callback_wait(), and tcpip_send_msg_wait_sem().
void sys_mbox_set_invalid | ( | sys_mbox_t * | mbox | ) |
Invalidate a mailbox so that sys_mbox_valid() returns 0. ATTENTION: This does NOT mean that the mailbox shall be deallocated: sys_mbox_free() is always called before calling this function! This may also be a define, in which case the function is not prototyped.
Definition at line 146 of file sys_arch.c.
Referenced by sys_mbox_free().
err_t sys_mbox_trypost | ( | sys_mbox_t * | mbox, |
void * | msg | ||
) |
Try to post a message to an mbox - may fail if full. Can be used from ISR (if the sys arch layer allows this). Returns ERR_MEM if it is full, else, ERR_OK if the "msg" is posted.
mbox | mbox to posts the message |
msg | message to post (ATTENTION: can be NULL) |
Definition at line 247 of file sys_arch.c.
Referenced by sys_mbox_trypost_fromisr(), tcpip_callbackmsg_trycallback(), tcpip_inpkt(), and tcpip_try_callback().
err_t sys_mbox_trypost_fromisr | ( | sys_mbox_t * | mbox, |
void * | msg | ||
) |
Try to post a message to an mbox - may fail if full. To be be used from ISR. Returns ERR_MEM if it is full, else, ERR_OK if the "msg" is posted.
mbox | mbox to posts the message |
msg | message to post (ATTENTION: can be NULL) |
Definition at line 287 of file sys_arch.c.
int sys_mbox_valid | ( | sys_mbox_t * | mbox | ) |
Returns 1 if the mailbox is valid, 0 if it is not valid. When using pointers, a simple way is to check the pointer for != NULL. When directly using OS structures, implementing this may be more complex. This may also be a define, in which case the function is not prototyped.
Definition at line 141 of file sys_arch.c.