uint_t receive_message(MBFCB *p_mbfcb, void *msg, bool_t *p_dspreq) { TCB *p_tcb; uint_t msgsz; if (p_mbfcb->smbfcnt > 0) { msgsz = dequeue_message(p_mbfcb, msg); *p_dspreq = messagebuf_signal(p_mbfcb); return(msgsz); } else if (!queue_empty(&(p_mbfcb->swait_queue))) { p_tcb = (TCB *) queue_delete_next(&(p_mbfcb->swait_queue)); msgsz = ((WINFO_MBF *)(p_tcb->p_winfo))->msgsz; memcpy(msg, ((WINFO_MBF *)(p_tcb->p_winfo))->msg, msgsz); *p_dspreq = wait_complete(p_tcb); return(msgsz); } else { return(0U); } }
bool_t messagebuf_change_priority(WOBJCB *p_wobjcb) { return(messagebuf_signal((MBFCB *) p_wobjcb)); }
bool_t messagebuf_dequeue_wobj(TCB *p_tcb) { return(messagebuf_signal(((WINFO_MBF *)(p_tcb->p_winfo))->p_mbfcb)); }
void messagebuf_dequeue_wobj(TCB *p_tcb) { messagebuf_signal(((WINFO_SMBF *)(p_tcb->p_winfo))->p_mbfcb); }