Add configUSE_EVENT_GROUPS macro in MPU wrapper files

This commit is contained in:
kar-rahul-aws 2024-02-14 16:33:42 +05:30
parent 8ec3080230
commit 77202446cd
2 changed files with 327 additions and 279 deletions

View file

@ -1952,7 +1952,7 @@
#endif /* if ( configUSE_TIMERS == 1 ) */ #endif /* if ( configUSE_TIMERS == 1 ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) )
EventGroupHandle_t MPU_xEventGroupCreate( void ) /* FREERTOS_SYSTEM_CALL */ EventGroupHandle_t MPU_xEventGroupCreate( void ) /* FREERTOS_SYSTEM_CALL */
{ {
EventGroupHandle_t xReturn; EventGroupHandle_t xReturn;
@ -1975,10 +1975,10 @@
return xReturn; return xReturn;
} }
#endif /* if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */ #endif /* #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configSUPPORT_STATIC_ALLOCATION == 1 ) #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) )
EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) /* FREERTOS_SYSTEM_CALL */ EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) /* FREERTOS_SYSTEM_CALL */
{ {
EventGroupHandle_t xReturn; EventGroupHandle_t xReturn;
@ -2001,132 +2001,142 @@
return xReturn; return xReturn;
} }
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ #endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToWaitFor, EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
const BaseType_t xClearOnExit, const EventBits_t uxBitsToWaitFor,
const BaseType_t xWaitForAllBits, const BaseType_t xClearOnExit,
TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */ const BaseType_t xWaitForAllBits,
{ TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */
EventBits_t xReturn;
if( portIS_PRIVILEGED() == pdFALSE )
{ {
portRAISE_PRIVILEGE(); EventBits_t xReturn;
portMEMORY_BARRIER();
xReturn = xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait ); if( portIS_PRIVILEGED() == pdFALSE )
portMEMORY_BARRIER(); {
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
portRESET_PRIVILEGE(); xReturn = xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait );
portMEMORY_BARRIER(); portMEMORY_BARRIER();
portRESET_PRIVILEGE();
portMEMORY_BARRIER();
}
else
{
xReturn = xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait );
}
return xReturn;
} }
else #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
{
xReturn = xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait );
}
return xReturn;
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToClear ) /* FREERTOS_SYSTEM_CALL */ EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup,
{ const EventBits_t uxBitsToClear ) /* FREERTOS_SYSTEM_CALL */
EventBits_t xReturn;
if( portIS_PRIVILEGED() == pdFALSE )
{ {
portRAISE_PRIVILEGE(); EventBits_t xReturn;
portMEMORY_BARRIER();
xReturn = xEventGroupClearBits( xEventGroup, uxBitsToClear ); if( portIS_PRIVILEGED() == pdFALSE )
portMEMORY_BARRIER(); {
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
portRESET_PRIVILEGE(); xReturn = xEventGroupClearBits( xEventGroup, uxBitsToClear );
portMEMORY_BARRIER(); portMEMORY_BARRIER();
portRESET_PRIVILEGE();
portMEMORY_BARRIER();
}
else
{
xReturn = xEventGroupClearBits( xEventGroup, uxBitsToClear );
}
return xReturn;
} }
else #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
{
xReturn = xEventGroupClearBits( xEventGroup, uxBitsToClear );
}
return xReturn;
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToSet ) /* FREERTOS_SYSTEM_CALL */ EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup,
{ const EventBits_t uxBitsToSet ) /* FREERTOS_SYSTEM_CALL */
EventBits_t xReturn;
if( portIS_PRIVILEGED() == pdFALSE )
{ {
portRAISE_PRIVILEGE(); EventBits_t xReturn;
portMEMORY_BARRIER();
xReturn = xEventGroupSetBits( xEventGroup, uxBitsToSet ); if( portIS_PRIVILEGED() == pdFALSE )
portMEMORY_BARRIER(); {
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
portRESET_PRIVILEGE(); xReturn = xEventGroupSetBits( xEventGroup, uxBitsToSet );
portMEMORY_BARRIER(); portMEMORY_BARRIER();
portRESET_PRIVILEGE();
portMEMORY_BARRIER();
}
else
{
xReturn = xEventGroupSetBits( xEventGroup, uxBitsToSet );
}
return xReturn;
} }
else #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
{
xReturn = xEventGroupSetBits( xEventGroup, uxBitsToSet );
}
return xReturn;
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToSet, EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToWaitFor, const EventBits_t uxBitsToSet,
TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */ const EventBits_t uxBitsToWaitFor,
{ TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */
EventBits_t xReturn;
if( portIS_PRIVILEGED() == pdFALSE )
{ {
portRAISE_PRIVILEGE(); EventBits_t xReturn;
portMEMORY_BARRIER();
xReturn = xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait ); if( portIS_PRIVILEGED() == pdFALSE )
portMEMORY_BARRIER(); {
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
portRESET_PRIVILEGE(); xReturn = xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );
portMEMORY_BARRIER(); portMEMORY_BARRIER();
portRESET_PRIVILEGE();
portMEMORY_BARRIER();
}
else
{
xReturn = xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );
}
return xReturn;
} }
else #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
{
xReturn = xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );
}
return xReturn;
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) /* FREERTOS_SYSTEM_CALL */ #if ( configUSE_EVENT_GROUPS == 1 )
{ void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) /* FREERTOS_SYSTEM_CALL */
if( portIS_PRIVILEGED() == pdFALSE )
{ {
portRAISE_PRIVILEGE(); if( portIS_PRIVILEGED() == pdFALSE )
portMEMORY_BARRIER(); {
portRAISE_PRIVILEGE();
portMEMORY_BARRIER();
vEventGroupDelete( xEventGroup ); vEventGroupDelete( xEventGroup );
portMEMORY_BARRIER(); portMEMORY_BARRIER();
portRESET_PRIVILEGE(); portRESET_PRIVILEGE();
portMEMORY_BARRIER(); portMEMORY_BARRIER();
}
else
{
vEventGroupDelete( xEventGroup );
}
} }
else #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
{
vEventGroupDelete( xEventGroup );
}
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,

View file

@ -215,12 +215,15 @@
#define MPU_GetTaskHandleAtIndex( lIndex ) ( TaskHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_TASK ) #define MPU_GetTaskHandleAtIndex( lIndex ) ( TaskHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_TASK )
#define MPU_GetIndexForTaskHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_TASK ) #define MPU_GetIndexForTaskHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_TASK )
#if ( configUSE_EVENT_GROUPS == 1 )
/* /*
* Wrappers to keep all the casting in one place for Event Group APIs. * Wrappers to keep all the casting in one place for Event Group APIs.
*/ */
#define MPU_StoreEventGroupHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_EVENT_GROUP ) #define MPU_StoreEventGroupHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_EVENT_GROUP )
#define MPU_GetEventGroupHandleAtIndex( lIndex ) ( EventGroupHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_EVENT_GROUP ) #define MPU_GetEventGroupHandleAtIndex( lIndex ) ( EventGroupHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_EVENT_GROUP )
#define MPU_GetIndexForEventGroupHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_EVENT_GROUP ) #define MPU_GetIndexForEventGroupHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_EVENT_GROUP )
#endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
/* /*
* Wrappers to keep all the casting in one place for Stream Buffer APIs. * Wrappers to keep all the casting in one place for Stream Buffer APIs.
@ -230,7 +233,6 @@
#define MPU_GetIndexForStreamBufferHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_STREAM_BUFFER ) #define MPU_GetIndexForStreamBufferHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_STREAM_BUFFER )
#if ( configUSE_TIMERS == 1 ) #if ( configUSE_TIMERS == 1 )
/* /*
* Wrappers to keep all the casting in one place for Timer APIs. * Wrappers to keep all the casting in one place for Timer APIs.
*/ */
@ -3867,53 +3869,99 @@
/* MPU wrappers for event group APIs. */ /* MPU wrappers for event group APIs. */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToWaitFor,
const BaseType_t xClearOnExit,
const BaseType_t xWaitForAllBits,
TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */
{
EventBits_t xReturn = 0;
xEventGroupWaitBitsParams_t xParams;
xParams.xEventGroup = xEventGroup; EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
xParams.uxBitsToWaitFor = uxBitsToWaitFor; const EventBits_t uxBitsToWaitFor,
xParams.xClearOnExit = xClearOnExit; const BaseType_t xClearOnExit,
xParams.xWaitForAllBits = xWaitForAllBits; const BaseType_t xWaitForAllBits,
xParams.xTicksToWait = xTicksToWait; TickType_t xTicksToWait ) /* FREERTOS_SYSTEM_CALL */
xReturn = MPU_xEventGroupWaitBitsEntry( &( xParams ) );
return xReturn;
}
EventBits_t MPU_xEventGroupWaitBitsImpl( const xEventGroupWaitBitsParams_t * pxParams ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupWaitBitsImpl( const xEventGroupWaitBitsParams_t * pxParams ) /* PRIVILEGED_FUNCTION */
{
EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
BaseType_t xAreParamsReadable = pdFALSE;
if( pxParams != NULL )
{ {
xAreParamsReadable = xPortIsAuthorizedToAccessBuffer( pxParams, EventBits_t xReturn = 0;
sizeof( xEventGroupWaitBitsParams_t ), xEventGroupWaitBitsParams_t xParams;
tskMPU_READ_PERMISSION );
xParams.xEventGroup = xEventGroup;
xParams.uxBitsToWaitFor = uxBitsToWaitFor;
xParams.xClearOnExit = xClearOnExit;
xParams.xWaitForAllBits = xWaitForAllBits;
xParams.xTicksToWait = xTicksToWait;
xReturn = MPU_xEventGroupWaitBitsEntry( &( xParams ) );
return xReturn;
} }
if( xAreParamsReadable == pdTRUE ) EventBits_t MPU_xEventGroupWaitBitsImpl( const xEventGroupWaitBitsParams_t * pxParams ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupWaitBitsImpl( const xEventGroupWaitBitsParams_t * pxParams ) /* PRIVILEGED_FUNCTION */
{ {
if( ( ( pxParams->uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) && EventBits_t xReturn = 0;
( pxParams->uxBitsToWaitFor != 0U ) EventGroupHandle_t xInternalEventGroupHandle = NULL;
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) int32_t lIndex;
&& ( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( pxParams->xTicksToWait != 0U ) ) ) BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
#endif BaseType_t xAreParamsReadable = pdFALSE;
)
if( pxParams != NULL )
{ {
lIndex = ( int32_t ) ( pxParams->xEventGroup ); xAreParamsReadable = xPortIsAuthorizedToAccessBuffer( pxParams,
sizeof( xEventGroupWaitBitsParams_t ),
tskMPU_READ_PERMISSION );
}
if( xAreParamsReadable == pdTRUE )
{
if( ( ( pxParams->uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) &&
( pxParams->uxBitsToWaitFor != 0U )
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
&& ( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( pxParams->xTicksToWait != 0U ) ) )
#endif
)
{
lIndex = ( int32_t ) ( pxParams->xEventGroup );
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{
xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE )
{
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
xReturn = xEventGroupWaitBits( xInternalEventGroupHandle,
pxParams->uxBitsToWaitFor,
pxParams->xClearOnExit,
pxParams->xWaitForAllBits,
pxParams->xTicksToWait );
}
}
}
}
}
return xReturn;
}
#endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
/*-----------------------------------------------------------*/
#if ( configUSE_EVENT_GROUPS == 1 )
EventBits_t MPU_xEventGroupClearBitsImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupClearBitsImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToClear ) /* PRIVILEGED_FUNCTION */
{
EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0U )
{
lIndex = ( int32_t ) xEventGroup;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE ) if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
@ -3925,136 +3973,106 @@
if( xInternalEventGroupHandle != NULL ) if( xInternalEventGroupHandle != NULL )
{ {
xReturn = xEventGroupWaitBits( xInternalEventGroupHandle, xReturn = xEventGroupClearBits( xInternalEventGroupHandle, uxBitsToClear );
pxParams->uxBitsToWaitFor,
pxParams->xClearOnExit,
pxParams->xWaitForAllBits,
pxParams->xTicksToWait );
} }
} }
} }
} }
return xReturn;
} }
return xReturn; #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupClearBitsImpl( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupClearBitsImpl( EventGroupHandle_t xEventGroup, EventBits_t MPU_xEventGroupSetBitsImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToClear ) /* PRIVILEGED_FUNCTION */ const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION;
{
EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) EventBits_t MPU_xEventGroupSetBitsImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet ) /* PRIVILEGED_FUNCTION */
{ {
lIndex = ( int32_t ) xEventGroup; EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE ) if( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0U )
{ {
xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); lIndex = ( int32_t ) xEventGroup;
if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE ) if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL ) if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE )
{ {
xReturn = xEventGroupClearBits( xInternalEventGroupHandle, uxBitsToClear ); xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
xReturn = xEventGroupSetBits( xInternalEventGroupHandle, uxBitsToSet );
}
} }
} }
} }
return xReturn;
} }
return xReturn; #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupSetBitsImpl( EventGroupHandle_t xEventGroup, #if ( configUSE_EVENT_GROUPS == 1 )
const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupSetBitsImpl( EventGroupHandle_t xEventGroup, EventBits_t MPU_xEventGroupSyncImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet ) /* PRIVILEGED_FUNCTION */ const EventBits_t uxBitsToSet,
{ const EventBits_t uxBitsToWaitFor,
EventBits_t xReturn = 0; TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) EventBits_t MPU_xEventGroupSyncImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet,
const EventBits_t uxBitsToWaitFor,
TickType_t xTicksToWait ) /* PRIVILEGED_FUNCTION */
{ {
lIndex = ( int32_t ) xEventGroup; EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE ) if( ( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) &&
( uxBitsToWaitFor != 0U )
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
&& ( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0U ) ) )
#endif
)
{ {
xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); lIndex = ( int32_t ) xEventGroup;
if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE ) if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL ) if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE )
{ {
xReturn = xEventGroupSetBits( xInternalEventGroupHandle, uxBitsToSet ); xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
xReturn = xEventGroupSync( xInternalEventGroupHandle, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );
}
} }
} }
} }
return xReturn;
} }
return xReturn; #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupSyncImpl( EventGroupHandle_t xEventGroup, #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) )
const EventBits_t uxBitsToSet,
const EventBits_t uxBitsToWaitFor,
TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
EventBits_t MPU_xEventGroupSyncImpl( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet,
const EventBits_t uxBitsToWaitFor,
TickType_t xTicksToWait ) /* PRIVILEGED_FUNCTION */
{
EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
BaseType_t xCallingTaskIsAuthorizedToAccessEventGroup = pdFALSE;
if( ( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0U ) &&
( uxBitsToWaitFor != 0U )
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
&& ( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0U ) ) )
#endif
)
{
lIndex = ( int32_t ) xEventGroup;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{
xCallingTaskIsAuthorizedToAccessEventGroup = xPortIsAuthorizedToAccessKernelObject( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xCallingTaskIsAuthorizedToAccessEventGroup == pdTRUE )
{
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
xReturn = xEventGroupSync( xInternalEventGroupHandle, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );
}
}
}
}
return xReturn;
}
/*-----------------------------------------------------------*/
#if ( configUSE_TRACE_FACILITY == 1 )
UBaseType_t MPU_uxEventGroupGetNumberImpl( void * xEventGroup ) PRIVILEGED_FUNCTION; UBaseType_t MPU_uxEventGroupGetNumberImpl( void * xEventGroup ) PRIVILEGED_FUNCTION;
@ -4085,10 +4103,10 @@
return xReturn; return xReturn;
} }
#endif /*( configUSE_TRACE_FACILITY == 1 )*/ #endif /* #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configUSE_TRACE_FACILITY == 1 ) #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) )
void MPU_vEventGroupSetNumberImpl( void * xEventGroup, void MPU_vEventGroupSetNumberImpl( void * xEventGroup,
UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION; UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION;
@ -4118,7 +4136,7 @@
} }
} }
#endif /*( configUSE_TRACE_FACILITY == 1 )*/ #endif /* #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* Privileged only wrappers for Event Group APIs. These are needed so that /* Privileged only wrappers for Event Group APIs. These are needed so that
@ -4126,7 +4144,7 @@
* with all the APIs. */ * with all the APIs. */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) )
EventGroupHandle_t MPU_xEventGroupCreate( void ) /* PRIVILEGED_FUNCTION */ EventGroupHandle_t MPU_xEventGroupCreate( void ) /* PRIVILEGED_FUNCTION */
{ {
@ -4154,10 +4172,10 @@
return xExternalEventGroupHandle; return xExternalEventGroupHandle;
} }
#endif /* if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */ #endif /* #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configSUPPORT_STATIC_ALLOCATION == 1 ) #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) )
EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) /* PRIVILEGED_FUNCTION */ EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) /* PRIVILEGED_FUNCTION */
{ {
@ -4185,30 +4203,34 @@
return xExternalEventGroupHandle; return xExternalEventGroupHandle;
} }
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ #endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) /* PRIVILEGED_FUNCTION */ #if ( configUSE_EVENT_GROUPS == 1 )
{
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
lIndex = ( int32_t ) xEventGroup; void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) /* PRIVILEGED_FUNCTION */
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
if( xInternalEventGroupHandle != NULL ) lIndex = ( int32_t ) xEventGroup;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
vEventGroupDelete( xInternalEventGroupHandle ); xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
MPU_SetIndexFreeInKernelObjectPool( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
vEventGroupDelete( xInternalEventGroupHandle );
MPU_SetIndexFreeInKernelObjectPool( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
}
} }
} }
}
#endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( configSUPPORT_STATIC_ALLOCATION == 1 ) #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) )
BaseType_t MPU_xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup, BaseType_t MPU_xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup,
StaticEventGroup_t ** ppxEventGroupBuffer ) /* PRIVILEGED_FUNCTION */ StaticEventGroup_t ** ppxEventGroupBuffer ) /* PRIVILEGED_FUNCTION */
@ -4232,10 +4254,10 @@
return xReturn; return xReturn;
} }
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */ #endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_EVENT_GROUPS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )
BaseType_t MPU_xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, BaseType_t MPU_xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToClear ) /* PRIVILEGED_FUNCTION */ const EventBits_t uxBitsToClear ) /* PRIVILEGED_FUNCTION */
@ -4259,10 +4281,10 @@
return xReturn; return xReturn;
} }
#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */ #endif /* #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )
BaseType_t MPU_xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, BaseType_t MPU_xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet, const EventBits_t uxBitsToSet,
@ -4287,29 +4309,33 @@
return xReturn; return xReturn;
} }
#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */ #endif /* #if ( ( configUSE_EVENT_GROUPS == 1 ) && ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
EventBits_t MPU_xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) /* PRIVILEGED_FUNCTION */ #if ( configUSE_EVENT_GROUPS == 1 )
{
EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
lIndex = ( int32_t ) xEventGroup; EventBits_t MPU_xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) /* PRIVILEGED_FUNCTION */
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) ); EventBits_t xReturn = 0;
EventGroupHandle_t xInternalEventGroupHandle = NULL;
int32_t lIndex;
if( xInternalEventGroupHandle != NULL ) lIndex = ( int32_t ) xEventGroup;
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
{ {
xReturn = xEventGroupGetBitsFromISR( xInternalEventGroupHandle ); xInternalEventGroupHandle = MPU_GetEventGroupHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
if( xInternalEventGroupHandle != NULL )
{
xReturn = xEventGroupGetBitsFromISR( xInternalEventGroupHandle );
}
} }
return xReturn;
} }
return xReturn; #endif /* #if ( configUSE_EVENT_GROUPS == 1 ) */
}
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
@ -4909,7 +4935,11 @@
( UBaseType_t ) 0, /* SYSTEM_CALL_xTimerGenericCommandFromTask. */ ( UBaseType_t ) 0, /* SYSTEM_CALL_xTimerGenericCommandFromTask. */
#endif #endif
( UBaseType_t ) MPU_xEventGroupWaitBitsImpl, /* SYSTEM_CALL_xEventGroupWaitBits. */ #if ( configUSE_EVENT_GROUPS == 1 )
( UBaseType_t ) MPU_xEventGroupWaitBitsImpl, /* SYSTEM_CALL_xEventGroupWaitBits. */
#else
( UBaseType_t ) 0, /* SYSTEM_CALL_xEventGroupWaitBits. */
#endif
/* The system calls above this line take 5 parameters. */ /* The system calls above this line take 5 parameters. */
@ -5104,14 +5134,22 @@
( UBaseType_t ) 0, /* SYSTEM_CALL_xTimerGetExpiryTime. */ ( UBaseType_t ) 0, /* SYSTEM_CALL_xTimerGetExpiryTime. */
#endif #endif
( UBaseType_t ) MPU_xEventGroupClearBitsImpl, /* SYSTEM_CALL_xEventGroupClearBits. */ #if ( configUSE_EVENT_GROUPS == 1 )
( UBaseType_t ) MPU_xEventGroupSetBitsImpl, /* SYSTEM_CALL_xEventGroupSetBits. */ ( UBaseType_t ) MPU_xEventGroupClearBitsImpl, /* SYSTEM_CALL_xEventGroupClearBits. */
( UBaseType_t ) MPU_xEventGroupSyncImpl, /* SYSTEM_CALL_xEventGroupSync. */ ( UBaseType_t ) MPU_xEventGroupSetBitsImpl, /* SYSTEM_CALL_xEventGroupSetBits. */
( UBaseType_t ) MPU_xEventGroupSyncImpl, /* SYSTEM_CALL_xEventGroupSync. */
#if ( configUSE_TRACE_FACILITY == 1 ) #if ( configUSE_TRACE_FACILITY == 1 )
( UBaseType_t ) MPU_uxEventGroupGetNumberImpl, /* SYSTEM_CALL_uxEventGroupGetNumber. */ ( UBaseType_t ) MPU_uxEventGroupGetNumberImpl, /* SYSTEM_CALL_uxEventGroupGetNumber. */
( UBaseType_t ) MPU_vEventGroupSetNumberImpl, /* SYSTEM_CALL_vEventGroupSetNumber. */ ( UBaseType_t ) MPU_vEventGroupSetNumberImpl, /* SYSTEM_CALL_vEventGroupSetNumber. */
#else
( UBaseType_t ) 0, /* SYSTEM_CALL_uxEventGroupGetNumber. */
( UBaseType_t ) 0, /* SYSTEM_CALL_vEventGroupSetNumber. */
#endif
#else #else
( UBaseType_t ) 0, /* SYSTEM_CALL_xEventGroupClearBits. */
( UBaseType_t ) 0, /* SYSTEM_CALL_xEventGroupSetBits. */
( UBaseType_t ) 0, /* SYSTEM_CALL_xEventGroupSync. */
( UBaseType_t ) 0, /* SYSTEM_CALL_uxEventGroupGetNumber. */ ( UBaseType_t ) 0, /* SYSTEM_CALL_uxEventGroupGetNumber. */
( UBaseType_t ) 0, /* SYSTEM_CALL_vEventGroupSetNumber. */ ( UBaseType_t ) 0, /* SYSTEM_CALL_vEventGroupSetNumber. */
#endif #endif