How to synchronize with multiple events ?

info2isguyc wrote on Thursday, April 03, 2008:

Hi,

How do I put a task to sleep and wake up on the appearance of several events, or on the appearance of the first event is, or on the appearance of all the events?

davedoors wrote on Thursday, April 03, 2008:

The best method is to have the task block on a queue, then have the data that is sent to the queue identify the event that was sent. Example give,

struct x
{
    int Event;
    int Data;
}

void task( void *pv )
{
struct x rxData;

    while(1)
    {
        xQueueReceive( Queue, &rxData, portMAX_DELAY );
       
        switch(rxData.Event)
        {
            case COMPORT : HandleComData( rdData.Data );
                           break;
            case SSI     : HandleSSIData( rxData.Data );
                           break;
            default      : HandleUnknownEvent( rxData.Event, rxData.Data );
                           break;
        }
    }
}

info2isguyc wrote on Thursday, April 03, 2008:

Nice ! Thanks :wink:

But if we want all the events raised to wake up ?