Function esp_idf_hal::sys::xEventGroupWaitBits

source ·
pub unsafe extern "C" fn xEventGroupWaitBits(
    xEventGroup: *mut EventGroupDef_t,
    uxBitsToWaitFor: u32,
    xClearOnExit: i32,
    xWaitForAllBits: i32,
    xTicksToWait: u32,
) -> u32
Expand description

@cond !DOC_EXCLUDE_HEADER_SECTION event_groups.h @code{c} EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, const TickType_t xTicksToWait ); @endcode @endcond

[Potentially] block to wait for one or more bits to be set within a previously created event group.

This function cannot be called from an interrupt.

@param xEventGroup The event group in which the bits are being tested. The event group must have previously been created using a call to xEventGroupCreate().

@param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test inside the event group. For example, to wait for bit 0 and/or bit 2 set uxBitsToWaitFor to 0x05. To wait for bits 0 and/or bit 1 and/or bit 2 set uxBitsToWaitFor to 0x07. Etc.

@param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within uxBitsToWaitFor that are set within the event group will be cleared before xEventGroupWaitBits() returns if the wait condition was met (if the function returns for a reason other than a timeout). If xClearOnExit is set to pdFALSE then the bits set in the event group are not altered when the call to xEventGroupWaitBits() returns.

@param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor are set or the specified block time expires. If xWaitForAllBits is set to pdFALSE then xEventGroupWaitBits() will return when any one of the bits set in uxBitsToWaitFor is set or the specified block time expires. The block time is specified by the xTicksToWait parameter.

@param xTicksToWait The maximum amount of time (specified in ‘ticks’) to wait for one/all (depending on the xWaitForAllBits value) of the bits specified by uxBitsToWaitFor to become set.

@return The value of the event group at the time either the bits being waited for became set, or the block time expired. Test the return value to know which bits were set. If xEventGroupWaitBits() returned because its timeout expired then not all the bits being waited for will be set. If xEventGroupWaitBits() returned because the bits it was waiting for were set then the returned value is the event group value before any bits were automatically cleared in the case that xClearOnExit parameter was set to pdTRUE.

Example usage: @code{c} #define BIT_0 ( 1 << 0 ) #define BIT_4 ( 1 << 4 )

void aFunction( EventGroupHandle_t xEventGroup ) { EventBits_t uxBits; const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;

 // Wait a maximum of 100ms for either bit 0 or bit 4 to be set within
 // the event group.  Clear the bits before exiting.
 uxBits = xEventGroupWaitBits(
             xEventGroup,    // The event group being tested.
             BIT_0 | BIT_4,  // The bits within the event group to wait for.
             pdTRUE,         // BIT_0 and BIT_4 should be cleared before returning.
             pdFALSE,        // Don't wait for both bits, either bit will do.
             xTicksToWait ); // Wait a maximum of 100ms for either bit to be set.

 if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )
 {
     // xEventGroupWaitBits() returned because both bits were set.
 }
 else if( ( uxBits & BIT_0 ) != 0 )
 {
     // xEventGroupWaitBits() returned because just BIT_0 was set.
 }
 else if( ( uxBits & BIT_4 ) != 0 )
 {
     // xEventGroupWaitBits() returned because just BIT_4 was set.
 }
 else
 {
     // xEventGroupWaitBits() returned because xTicksToWait ticks passed
     // without either BIT_0 or BIT_4 becoming set.
 }

} @endcode @cond !DOC_SINGLE_GROUP \defgroup xEventGroupWaitBits xEventGroupWaitBits @endcond \ingroup EventGroup