]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/stream_buffer.c
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Source / stream_buffer.c
index ed8baef91b1f0c95fa9b245a0bf7282d1132bfa8..ec7b3e36559e9f81eaa9cfd9022f554f8264e20d 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * FreeRTOS Kernel V10.0.1\r
- * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
+ * FreeRTOS Kernel V10.3.0\r
+ * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
  *\r
  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
  * this software and associated documentation files (the "Software"), to deal in\r
@@ -43,11 +43,11 @@ task.h is included from an application file. */
        #error configUSE_TASK_NOTIFICATIONS must be set to 1 to build stream_buffer.c\r
 #endif\r
 \r
-/* Lint e961 and e750 are suppressed as a MISRA exception justified because the\r
-MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the\r
-header files above, but not in this file, in order to generate the correct\r
-privileged Vs unprivileged linkage and placement. */\r
-#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */\r
+/* Lint e961, e9021 and e750 are suppressed as a MISRA exception justified\r
+because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\r
+for the header files above, but not in this file, in order to generate the\r
+correct privileged Vs unprivileged linkage and placement. */\r
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750 !e9021. */\r
 \r
 /* If the user has not provided application specific Rx notification macros,\r
 or #defined the notification macros away, them provide default implementations\r
@@ -138,7 +138,7 @@ that uses task notifications. */
 /*-----------------------------------------------------------*/\r
 \r
 /* Structure that hold state information on the buffer. */\r
-typedef struct xSTREAM_BUFFER /*lint !e9058 Style convention uses tag. */\r
+typedef struct StreamBufferDef_t /*lint !e9058 Style convention uses tag. */\r
 {\r
        volatile size_t xTail;                          /* Index to the next item to read within the buffer. */\r
        volatile size_t xHead;                          /* Index to the next item to write within the buffer. */\r
@@ -200,7 +200,7 @@ static size_t prvWriteMessageToBuffer(  StreamBuffer_t * const pxStreamBuffer,
 static size_t prvReadBytesFromBuffer( StreamBuffer_t *pxStreamBuffer,\r
                                                                          uint8_t *pucData,\r
                                                                          size_t xMaxCount,\r
-                                                                         size_t xBytesAvailable ); PRIVILEGED_FUNCTION\r
+                                                                         size_t xBytesAvailable ) PRIVILEGED_FUNCTION;\r
 \r
 /*\r
  * Called by both pxStreamBufferCreate() and pxStreamBufferCreateStatic() to\r
@@ -210,7 +210,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                                                                                  uint8_t * const pucBuffer,\r
                                                                                  size_t xBufferSizeBytes,\r
                                                                                  size_t xTriggerLevelBytes,\r
-                                                                                 BaseType_t xIsMessageBuffer ) PRIVILEGED_FUNCTION;\r
+                                                                                 uint8_t ucFlags ) PRIVILEGED_FUNCTION;\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -219,19 +219,31 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
        StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer )\r
        {\r
        uint8_t *pucAllocatedMemory;\r
+       uint8_t ucFlags;\r
 \r
                /* In case the stream buffer is going to be used as a message buffer\r
                (that is, it will hold discrete messages with a little meta data that\r
                says how big the next message is) check the buffer will be large enough\r
                to hold at least one message. */\r
-               configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );\r
+               if( xIsMessageBuffer == pdTRUE )\r
+               {\r
+                       /* Is a message buffer but not statically allocated. */\r
+                       ucFlags = sbFLAGS_IS_MESSAGE_BUFFER;\r
+                       configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );\r
+               }\r
+               else\r
+               {\r
+                       /* Not a message buffer and not statically allocated. */\r
+                       ucFlags = 0;\r
+                       configASSERT( xBufferSizeBytes > 0 );\r
+               }\r
                configASSERT( xTriggerLevelBytes <= xBufferSizeBytes );\r
 \r
                /* A trigger level of 0 would cause a waiting task to unblock even when\r
                the buffer was empty. */\r
                if( xTriggerLevelBytes == ( size_t ) 0 )\r
                {\r
-                       xTriggerLevelBytes = ( size_t ) 1; /*lint !e9044 Parameter modified to ensure it doesn't have a dangerous value. */\r
+                       xTriggerLevelBytes = ( size_t ) 1;\r
                }\r
 \r
                /* A stream buffer requires a StreamBuffer_t structure and a buffer.\r
@@ -251,7 +263,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                                                                                   pucAllocatedMemory + sizeof( StreamBuffer_t ),  /* Storage area follows. */ /*lint !e9016 Indexing past structure valid for uint8_t pointer, also storage area has no alignment requirement. */\r
                                                                                   xBufferSizeBytes,\r
                                                                                   xTriggerLevelBytes,\r
-                                                                                  xIsMessageBuffer );\r
+                                                                                  ucFlags );\r
 \r
                        traceSTREAM_BUFFER_CREATE( ( ( StreamBuffer_t * ) pucAllocatedMemory ), xIsMessageBuffer );\r
                }\r
@@ -260,7 +272,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                        traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer );\r
                }\r
 \r
-               return ( StreamBufferHandle_t ) pucAllocatedMemory; /*lint !e9087 !e826 Safe cast as allocated memory is aligned. */\r
+               return ( StreamBufferHandle_t ) pucAllocatedMemory; /*lint !e9087 !e826 Safe cast as allocated memory is aligned. */\r
        }\r
 \r
 #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\r
@@ -276,6 +288,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
        {\r
        StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) pxStaticStreamBuffer; /*lint !e740 !e9087 Safe cast as StaticStreamBuffer_t is opaque Streambuffer_t. */\r
        StreamBufferHandle_t xReturn;\r
+       uint8_t ucFlags;\r
 \r
                configASSERT( pucStreamBufferStorageArea );\r
                configASSERT( pxStaticStreamBuffer );\r
@@ -285,7 +298,18 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                the buffer was empty. */\r
                if( xTriggerLevelBytes == ( size_t ) 0 )\r
                {\r
-                       xTriggerLevelBytes = ( size_t ) 1; /*lint !e9044 Function parameter deliberately modified to ensure it is in range. */\r
+                       xTriggerLevelBytes = ( size_t ) 1;\r
+               }\r
+\r
+               if( xIsMessageBuffer != pdFALSE )\r
+               {\r
+                       /* Statically allocated message buffer. */\r
+                       ucFlags = sbFLAGS_IS_MESSAGE_BUFFER | sbFLAGS_IS_STATICALLY_ALLOCATED;\r
+               }\r
+               else\r
+               {\r
+                       /* Statically allocated stream buffer. */\r
+                       ucFlags = sbFLAGS_IS_STATICALLY_ALLOCATED;\r
                }\r
 \r
                /* In case the stream buffer is going to be used as a message buffer\r
@@ -301,7 +325,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                        message buffer structure. */\r
                        volatile size_t xSize = sizeof( StaticStreamBuffer_t );\r
                        configASSERT( xSize == sizeof( StreamBuffer_t ) );\r
-               }\r
+               } /*lint !e529 xSize is referenced is configASSERT() is defined. */\r
                #endif /* configASSERT_DEFINED */\r
 \r
                if( ( pucStreamBufferStorageArea != NULL ) && ( pxStaticStreamBuffer != NULL ) )\r
@@ -310,7 +334,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                                                                                  pucStreamBufferStorageArea,\r
                                                                                  xBufferSizeBytes,\r
                                                                                  xTriggerLevelBytes,\r
-                                                                                 xIsMessageBuffer );\r
+                                                                                 ucFlags );\r
 \r
                        /* Remember this was statically allocated in case it is ever deleted\r
                        again. */\r
@@ -334,7 +358,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
 \r
 void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-StreamBuffer_t * pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * pxStreamBuffer = xStreamBuffer;\r
 \r
        configASSERT( pxStreamBuffer );\r
 \r
@@ -360,15 +384,15 @@ StreamBuffer_t * pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9
        {\r
                /* The structure and buffer were not allocated dynamically and cannot be\r
                freed - just scrub the structure so future use will assert. */\r
-               memset( pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) );\r
+               ( void ) memset( pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) );\r
        }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
-BaseType_t xReturn = pdFAIL, xIsMessageBuffer;\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
+BaseType_t xReturn = pdFAIL;\r
 \r
 #if( configUSE_TRACE_FACILITY == 1 )\r
        UBaseType_t uxStreamBufferNumber;\r
@@ -385,35 +409,30 @@ BaseType_t xReturn = pdFAIL, xIsMessageBuffer;
        #endif\r
 \r
        /* Can only reset a message buffer if there are no tasks blocked on it. */\r
-       if( pxStreamBuffer->xTaskWaitingToReceive == NULL )\r
+       taskENTER_CRITICAL();\r
        {\r
-               if( pxStreamBuffer->xTaskWaitingToSend == NULL )\r
+               if( pxStreamBuffer->xTaskWaitingToReceive == NULL )\r
                {\r
-                       if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\r
+                       if( pxStreamBuffer->xTaskWaitingToSend == NULL )\r
                        {\r
-                               xIsMessageBuffer = pdTRUE;\r
-                       }\r
-                       else\r
-                       {\r
-                               xIsMessageBuffer = pdFALSE;\r
-                       }\r
-\r
-                       prvInitialiseNewStreamBuffer( pxStreamBuffer,\r
-                                                                                 pxStreamBuffer->pucBuffer,\r
-                                                                                 pxStreamBuffer->xLength,\r
-                                                                                 pxStreamBuffer->xTriggerLevelBytes,\r
-                                                                                 xIsMessageBuffer );\r
-                       xReturn = pdPASS;\r
+                               prvInitialiseNewStreamBuffer( pxStreamBuffer,\r
+                                                                                         pxStreamBuffer->pucBuffer,\r
+                                                                                         pxStreamBuffer->xLength,\r
+                                                                                         pxStreamBuffer->xTriggerLevelBytes,\r
+                                                                                         pxStreamBuffer->ucFlags );\r
+                               xReturn = pdPASS;\r
+\r
+                               #if( configUSE_TRACE_FACILITY == 1 )\r
+                               {\r
+                                       pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\r
+                               }\r
+                               #endif\r
 \r
-                       #if( configUSE_TRACE_FACILITY == 1 )\r
-                       {\r
-                               pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\r
+                               traceSTREAM_BUFFER_RESET( xStreamBuffer );\r
                        }\r
-                       #endif\r
-\r
-                       traceSTREAM_BUFFER_RESET( xStreamBuffer );\r
                }\r
        }\r
+       taskEXIT_CRITICAL();\r
 \r
        return xReturn;\r
 }\r
@@ -421,7 +440,7 @@ BaseType_t xReturn = pdFAIL, xIsMessageBuffer;
 \r
 BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 BaseType_t xReturn;\r
 \r
        configASSERT( pxStreamBuffer );\r
@@ -429,7 +448,7 @@ BaseType_t xReturn;
        /* It is not valid for the trigger level to be 0. */\r
        if( xTriggerLevel == ( size_t ) 0 )\r
        {\r
-               xTriggerLevel = ( size_t ) 1; /*lint !e9044 Parameter modified to ensure it doesn't have a dangerous value. */\r
+               xTriggerLevel = ( size_t ) 1;\r
        }\r
 \r
        /* The trigger level is the number of bytes that must be in the stream\r
@@ -450,7 +469,7 @@ BaseType_t xReturn;
 \r
 size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-const StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xSpace;\r
 \r
        configASSERT( pxStreamBuffer );\r
@@ -474,7 +493,7 @@ size_t xSpace;
 \r
 size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-const StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReturn;\r
 \r
        configASSERT( pxStreamBuffer );\r
@@ -489,7 +508,7 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
                                                  size_t xDataLengthBytes,\r
                                                  TickType_t xTicksToWait )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReturn, xSpace = 0;\r
 size_t xRequiredSpace = xDataLengthBytes;\r
 TimeOut_t xTimeOut;\r
@@ -593,7 +612,7 @@ size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
                                                                 size_t xDataLengthBytes,\r
                                                                 BaseType_t * const pxHigherPriorityTaskWoken )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReturn, xSpace;\r
 size_t xRequiredSpace = xDataLengthBytes;\r
 \r
@@ -660,7 +679,7 @@ static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
                stream of bytes rather than discrete messages.  Write as many bytes as\r
                possible. */\r
                xShouldWrite = pdTRUE;\r
-               xDataLengthBytes = configMIN( xDataLengthBytes, xSpace ); /*lint !e9044 Function parameter modified to ensure it is capped to available space. */\r
+               xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );\r
        }\r
        else if( xSpace >= xRequiredSpace )\r
        {\r
@@ -696,7 +715,7 @@ size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,
                                                         size_t xBufferLengthBytes,\r
                                                         TickType_t xTicksToWait )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength;\r
 \r
        configASSERT( pvRxData );\r
@@ -797,8 +816,9 @@ size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength;
 \r
 size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReturn, xBytesAvailable, xOriginalTail;\r
+configMESSAGE_BUFFER_LENGTH_TYPE xTempReturn;\r
 \r
        configASSERT( pxStreamBuffer );\r
 \r
@@ -815,7 +835,8 @@ size_t xReturn, xBytesAvailable, xOriginalTail;
                        returned to its prior state as the message is not actually being\r
                        removed from the buffer. */\r
                        xOriginalTail = pxStreamBuffer->xTail;\r
-                       ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, xBytesAvailable );\r
+                       ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, xBytesAvailable );\r
+                       xReturn = ( size_t ) xTempReturn;\r
                        pxStreamBuffer->xTail = xOriginalTail;\r
                }\r
                else\r
@@ -842,7 +863,7 @@ size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,
                                                                        size_t xBufferLengthBytes,\r
                                                                        BaseType_t * const pxHigherPriorityTaskWoken )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength;\r
 \r
        configASSERT( pvRxData );\r
@@ -901,6 +922,7 @@ static size_t prvReadMessageFromBuffer( StreamBuffer_t *pxStreamBuffer,
                                                                                size_t xBytesToStoreMessageLength )\r
 {\r
 size_t xOriginalTail, xReceivedLength, xNextMessageLength;\r
+configMESSAGE_BUFFER_LENGTH_TYPE xTempNextMessageLength;\r
 \r
        if( xBytesToStoreMessageLength != ( size_t ) 0 )\r
        {\r
@@ -909,10 +931,8 @@ size_t xOriginalTail, xReceivedLength, xNextMessageLength;
                returned to its prior state if the length of the message is too\r
                large for the provided buffer. */\r
                xOriginalTail = pxStreamBuffer->xTail;\r
-               /* Ensure xNextMessageLength is cleared to 0 in case\r
-               sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) != sizeof( size_t ). */\r
-               xNextMessageLength = 0;\r
-               ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xNextMessageLength, xBytesToStoreMessageLength, xBytesAvailable );\r
+               ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempNextMessageLength, xBytesToStoreMessageLength, xBytesAvailable );\r
+               xNextMessageLength = ( size_t ) xTempNextMessageLength;\r
 \r
                /* Reduce the number of bytes available by the number of bytes just\r
                read out. */\r
@@ -949,7 +969,7 @@ size_t xOriginalTail, xReceivedLength, xNextMessageLength;
 \r
 BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer )\r
 {\r
-const StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 BaseType_t xReturn;\r
 size_t xTail;\r
 \r
@@ -974,7 +994,7 @@ BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer )
 {\r
 BaseType_t xReturn;\r
 size_t xBytesToStoreMessageLength;\r
-const StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 \r
        configASSERT( pxStreamBuffer );\r
 \r
@@ -1007,7 +1027,7 @@ const StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer
 \r
 BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 BaseType_t xReturn;\r
 UBaseType_t uxSavedInterruptStatus;\r
 \r
@@ -1037,7 +1057,7 @@ UBaseType_t uxSavedInterruptStatus;
 \r
 BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken )\r
 {\r
-StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) xStreamBuffer; /*lint !e9087 !e9079 Safe cast as StreamBufferHandle_t is opaque Streambuffer_t. */\r
+StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\r
 BaseType_t xReturn;\r
 UBaseType_t uxSavedInterruptStatus;\r
 \r
@@ -1080,7 +1100,7 @@ size_t xNextHead, xFirstLength;
 \r
        /* Write as many bytes as can be written in the first write. */\r
        configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );\r
-       memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
+       ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
 \r
        /* If the number of bytes written was less than the number that could be\r
        written in the first write... */\r
@@ -1088,7 +1108,7 @@ size_t xNextHead, xFirstLength;
        {\r
                /* ...then write the remaining bytes to the start of the buffer. */\r
                configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );\r
-               memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
+               ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
        }\r
        else\r
        {\r
@@ -1131,7 +1151,7 @@ size_t xCount, xFirstLength, xNextTail;
                read.  Asserts check bounds of read and write. */\r
                configASSERT( xFirstLength <= xMaxCount );\r
                configASSERT( ( xNextTail + xFirstLength ) <= pxStreamBuffer->xLength );\r
-               memcpy( ( void * ) pucData, ( const void * ) &( pxStreamBuffer->pucBuffer[ xNextTail ] ), xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
+               ( void ) memcpy( ( void * ) pucData, ( const void * ) &( pxStreamBuffer->pucBuffer[ xNextTail ] ), xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
 \r
                /* If the total number of wanted bytes is greater than the number\r
                that could be read in the first read... */\r
@@ -1139,7 +1159,7 @@ size_t xCount, xFirstLength, xNextTail;
                {\r
                        /*...then read the remaining bytes from the start of the buffer. */\r
                        configASSERT( xCount <= xMaxCount );\r
-                       memcpy( ( void * ) &( pucData[ xFirstLength ] ), ( void * ) ( pxStreamBuffer->pucBuffer ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
+                       ( void ) memcpy( ( void * ) &( pucData[ xFirstLength ] ), ( void * ) ( pxStreamBuffer->pucBuffer ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */\r
                }\r
                else\r
                {\r
@@ -1190,7 +1210,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                                                                                  uint8_t * const pucBuffer,\r
                                                                                  size_t xBufferSizeBytes,\r
                                                                                  size_t xTriggerLevelBytes,\r
-                                                                                 BaseType_t xIsMessageBuffer )\r
+                                                                                 uint8_t ucFlags )\r
 {\r
        /* Assert here is deliberately writing to the entire buffer to ensure it can\r
        be written to without generating exceptions, and is setting the buffer to a\r
@@ -1202,25 +1222,21 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
                result in confusion as to what is actually being observed. */\r
                const BaseType_t xWriteValue = 0x55;\r
                configASSERT( memset( pucBuffer, ( int ) xWriteValue, xBufferSizeBytes ) == pucBuffer );\r
-       }\r
+       } /*lint !e529 !e438 xWriteValue is only used if configASSERT() is defined. */\r
        #endif\r
 \r
-       memset( ( void * ) pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) ); /*lint !e9087 memset() requires void *. */\r
+       ( void ) memset( ( void * ) pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) ); /*lint !e9087 memset() requires void *. */\r
        pxStreamBuffer->pucBuffer = pucBuffer;\r
        pxStreamBuffer->xLength = xBufferSizeBytes;\r
        pxStreamBuffer->xTriggerLevelBytes = xTriggerLevelBytes;\r
-\r
-       if( xIsMessageBuffer != pdFALSE )\r
-       {\r
-               pxStreamBuffer->ucFlags |= sbFLAGS_IS_MESSAGE_BUFFER;\r
-       }\r
+       pxStreamBuffer->ucFlags = ucFlags;\r
 }\r
 \r
 #if ( configUSE_TRACE_FACILITY == 1 )\r
 \r
        UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer )\r
        {\r
-               return ( ( StreamBuffer_t * ) xStreamBuffer )->uxStreamBufferNumber;\r
+               return xStreamBuffer->uxStreamBufferNumber;\r
        }\r
 \r
 #endif /* configUSE_TRACE_FACILITY */\r
@@ -1230,7 +1246,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
 \r
        void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber )\r
        {\r
-               ( ( StreamBuffer_t * ) xStreamBuffer )->uxStreamBufferNumber = uxStreamBufferNumber;\r
+               xStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\r
        }\r
 \r
 #endif /* configUSE_TRACE_FACILITY */\r
@@ -1240,7 +1256,7 @@ static void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,
 \r
        uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer )\r
        {\r
-               return ( ( StreamBuffer_t * )xStreamBuffer )->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER;\r
+               return ( xStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER );\r
        }\r
 \r
 #endif /* configUSE_TRACE_FACILITY */\r