Listing 5 (receiver.c) Receiver Task for Synchronous Communication

#define SYNC 0

static handler Sync(msg_t *msg_ptr) {
   register task_t caller = msg_ptr->srcTid;
   register task_t self   = msg_ptr->dstTid;

   /* interrupt caller.Reply */
   msg_ptr->srcTid = self;
   msg_ptr->dstTid = caller;
   msg_ptr->dstHid = 0; /* caller's REPLY handler id = 0 */
   msg_ptr->type   = msg_type_SYNC;
   task_interrupt(&msg);
}

task Receiver(void) {
   task_setHandler(1, Sync); /* this task has one handler called Sync */

   loop {
      /* wait on Sync */
      task_enableWait(1, SYNC);
   }
}