summaryrefslogtreecommitdiff
path: root/FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h')
-rw-r--r--FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h b/FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h
new file mode 100644
index 000000000..70c15b49c
--- /dev/null
+++ b/FreeRTOS-Labs/Demo/Common/FreeRTOS_Plus_TCP_Demos/TraceMacros/Example1/DemoIPTrace.h
@@ -0,0 +1,185 @@
+/*
+ FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.
+ All rights reserved
+
+ VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+
+ This file is part of the FreeRTOS distribution.
+
+ FreeRTOS is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License (version 2) as published by the
+ Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
+
+ ***************************************************************************
+ >>! NOTE: The modification to the GPL is included to allow you to !<<
+ >>! distribute a combined work that includes FreeRTOS without being !<<
+ >>! obliged to provide the source code for proprietary components !<<
+ >>! outside of the FreeRTOS kernel. !<<
+ ***************************************************************************
+
+ FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. Full license text is available on the following
+ link: http://www.freertos.org/a00114.html
+
+ ***************************************************************************
+ * *
+ * FreeRTOS provides completely free yet professionally developed, *
+ * robust, strictly quality controlled, supported, and cross *
+ * platform software that is more than just the market leader, it *
+ * is the industry's de facto standard. *
+ * *
+ * Help yourself get started quickly while simultaneously helping *
+ * to support the FreeRTOS project by purchasing a FreeRTOS *
+ * tutorial book, reference manual, or both: *
+ * http://www.FreeRTOS.org/Documentation *
+ * *
+ ***************************************************************************
+
+ http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
+ the FAQ page "My application does not run, what could be wrong?". Have you
+ defined configASSERT()?
+
+ http://www.FreeRTOS.org/support - In return for receiving this top quality
+ embedded software for free we request you assist our global community by
+ participating in the support forum.
+
+ http://www.FreeRTOS.org/training - Investing in training allows your team to
+ be as productive as possible as early as possible. Now you can receive
+ FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
+ Ltd, and the world's leading authority on the world's leading RTOS.
+
+ http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+ including FreeRTOS+Trace - an indispensable productivity tool, a DOS
+ compatible FAT file system, and our tiny thread aware UDP/IP stack.
+
+ http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
+ Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
+
+ http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
+ Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
+ licenses offer ticketed support, indemnification and commercial middleware.
+
+ http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+ engineered and independently SIL3 certified version for use in safety and
+ mission critical applications that require provable dependability.
+
+ 1 tab == 4 spaces!
+*/
+
+/*
+ * This file, along with DemoIPTrace.c, provides a basic example use of the
+ * FreeRTOS+TCP trace macros. The statistics gathered here can be viewed in
+ * the command line interface.
+ * See http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/UDP_CLI.html
+ *
+ * A simple generic mechanism is used that allocates a structure (see the
+ * ExampleDebugStatEntry_t definition below) to each ID defined in this file.
+ * The structures are stored in an array (see the xIPTraceValues[] array in
+ * DemoIPTrace.c).
+ *
+ * The structure associates a function with a data value. See the
+ * vPerformAction and ulData members of ExampleDebugStatEntry_t respectively.
+ * The function is used to manipulate the data. At the time of writing two
+ * functions can be used - these are prvIncrementEventCount() which simply
+ * increments the data each time it is called, and prvStoreLowest() which
+ * sets the data to the lowest value of an input parameter ever seen. For
+ * example, to store the lowest ever number of free network buffer descriptors
+ * the parameter value is the current number of network buffer descriptors.
+ *
+ * The trace macros themselves are defined in this file and just invoke
+ * vExampleDebugStatUpdate(), passing in an ID value. vExampleDebugStatUpdate()
+ * then just executes the function associated with that value (prvStoreLowest(),
+ * prvIncrementEventCount(), etc.) as defined in the xIPTraceValues[] array.
+ */
+
+#ifndef DEMO_IP_TRACE_MACROS_H
+#define DEMO_IP_TRACE_MACROS_H
+
+typedef void ( *vTraceAction_t )( uint32_t *, uint32_t );
+
+/* Type that defines each statistic being gathered. */
+typedef struct ExampleDebugStatEntry
+{
+ uint8_t ucIdentifier; /* Unique identifier for statistic. */
+ const char * const pucDescription; /* Text description for the statistic. */
+ vTraceAction_t vPerformAction; /* Action to perform when the statistic is updated (increment counter, store minimum value, store maximum value, etc. */
+ uint32_t ulData; /* The meaning of this data is dependent on the trace macro ID. */
+} ExampleDebugStatEntry_t;
+
+/* Unique identifiers used to locate the entry for each trace macro in the
+xIPTraceValues[] table defined in DemoIPTrace.c. See the comments at the top of
+this file. */
+#define iptraceID_NETWORK_INTERFACE_RECEIVE 0
+#define iptraceID_NETWORK_INTERFACE_TRANSMIT 1
+#define iptraceID_PACKET_DROPPED_TO_GENERATE_ARP 2
+#define iptraceID_NETWORK_BUFFER_OBTAINED 3
+#define iptraceID_NETWORK_BUFFER_OBTAINED_FROM_ISR 4
+#define iptraceID_NETWORK_EVENT_RECEIVED 5
+#define iptraceID_FAILED_TO_OBTAIN_NETWORK_BUFFER 6
+#define iptraceID_ARP_TABLE_ENTRY_EXPIRED 7
+#define iptraceID_FAILED_TO_CREATE_SOCKET 8
+#define iptraceID_RECVFROM_DISCARDING_BYTES 9
+#define iptraceID_ETHERNET_RX_EVENT_LOST 10
+#define iptraceID_STACK_TX_EVENT_LOST 11
+#define ipconfigID_BIND_FAILED 12
+#define iptraceID_RECVFROM_TIMEOUT 13
+#define iptraceID_SENDTO_DATA_TOO_LONG 14
+#define iptraceID_SENDTO_SOCKET_NOT_BOUND 15
+#define iptraceID_NO_BUFFER_FOR_SENDTO 16
+#define iptraceID_WAIT_FOR_TX_DMA_DESCRIPTOR 17
+#define iptraceID_FAILED_TO_NOTIFY_SELECT_GROUP 18
+#define iptraceID_TOTAL_NETWORK_BUFFERS_OBTAINED 19
+#define iptraceID_TOTAL_NETWORK_BUFFERS_RELEASED 20
+
+/* It is possible to remove the trace macros using the
+configINCLUDE_DEMO_DEBUG_STATS setting in FreeRTOSIPConfig.h. */
+#if configINCLUDE_DEMO_DEBUG_STATS == 1
+
+ /* The trace macro definitions themselves. Any trace macros left undefined
+ will default to be empty macros. See the comments at the top of this
+ file. */
+ #define iptraceNETWORK_BUFFER_OBTAINED( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_NETWORK_BUFFER_OBTAINED, uxQueueMessagesWaiting( ( QueueHandle_t ) xNetworkBufferSemaphore ) ); vExampleDebugStatUpdate( iptraceID_TOTAL_NETWORK_BUFFERS_OBTAINED, 0 )
+ #define iptraceNETWORK_BUFFER_RELEASED( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_TOTAL_NETWORK_BUFFERS_RELEASED, 0 )
+ #define iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_NETWORK_BUFFER_OBTAINED, uxQueueMessagesWaiting( ( QueueHandle_t ) xNetworkBufferSemaphore ) )
+
+ #define iptraceNETWORK_EVENT_RECEIVED( eEvent ) { \
+ uint16_t usSpace; \
+ usSpace = ( uint16_t ) uxQueueMessagesWaiting( xNetworkEventQueue ); \
+ /* Minus one as an event was removed before the space was queried. */ \
+ usSpace = ( ipconfigEVENT_QUEUE_LENGTH - usSpace ) - 1; \
+ vExampleDebugStatUpdate( iptraceID_NETWORK_EVENT_RECEIVED, usSpace ); \
+ }
+
+ #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER() vExampleDebugStatUpdate( iptraceID_FAILED_TO_OBTAIN_NETWORK_BUFFER, 0 )
+ #define iptraceARP_TABLE_ENTRY_EXPIRED( ulIPAddress ) vExampleDebugStatUpdate( iptraceID_ARP_TABLE_ENTRY_EXPIRED, 0 )
+ #define iptracePACKET_DROPPED_TO_GENERATE_ARP( ulIPAddress ) vExampleDebugStatUpdate( iptraceID_PACKET_DROPPED_TO_GENERATE_ARP, 0 )
+ #define iptraceFAILED_TO_CREATE_SOCKET() vExampleDebugStatUpdate( iptraceID_FAILED_TO_CREATE_SOCKET, 0 )
+ #define iptraceRECVFROM_DISCARDING_BYTES( xNumberOfBytesDiscarded ) vExampleDebugStatUpdate( iptraceID_RECVFROM_DISCARDING_BYTES, 0 )
+ #define iptraceETHERNET_RX_EVENT_LOST() vExampleDebugStatUpdate( iptraceID_ETHERNET_RX_EVENT_LOST, 0 )
+ #define iptraceSTACK_TX_EVENT_LOST( xEvent ) vExampleDebugStatUpdate( iptraceID_STACK_TX_EVENT_LOST, 0 )
+ #define iptraceBIND_FAILED( xSocket, usPort ) vExampleDebugStatUpdate( ipconfigID_BIND_FAILED, 0 )
+ #define iptraceNETWORK_INTERFACE_TRANSMIT() vExampleDebugStatUpdate( iptraceID_NETWORK_INTERFACE_TRANSMIT, 0 )
+ #define iptraceRECVFROM_TIMEOUT() vExampleDebugStatUpdate( iptraceID_RECVFROM_TIMEOUT, 0 )
+ #define iptraceSENDTO_DATA_TOO_LONG() vExampleDebugStatUpdate( iptraceID_SENDTO_DATA_TOO_LONG, 0 )
+ #define iptraceSENDTO_SOCKET_NOT_BOUND() vExampleDebugStatUpdate( iptraceID_SENDTO_SOCKET_NOT_BOUND, 0 )
+ #define iptraceNO_BUFFER_FOR_SENDTO() vExampleDebugStatUpdate( iptraceID_NO_BUFFER_FOR_SENDTO, 0 )
+ #define iptraceWAITING_FOR_TX_DMA_DESCRIPTOR() vExampleDebugStatUpdate( iptraceID_WAIT_FOR_TX_DMA_DESCRIPTOR, 0 )
+ #define iptraceFAILED_TO_NOTIFY_SELECT_GROUP( xSocket ) vExampleDebugStatUpdate( iptraceID_FAILED_TO_NOTIFY_SELECT_GROUP, 0 )
+ #define iptraceNETWORK_INTERFACE_RECEIVE() vExampleDebugStatUpdate( iptraceID_NETWORK_INTERFACE_RECEIVE, 0 )
+
+ /*
+ * The function that updates a line in the xIPTraceValues table.
+ */
+ void vExampleDebugStatUpdate( uint8_t ucIdentifier, uint32_t ulValue );
+
+ /*
+ * Returns the number of entries in the xIPTraceValues table.
+ */
+ BaseType_t xExampleDebugStatEntries( void );
+
+#endif /* configINCLUDE_DEMO_DEBUG_STATS == 1 */
+
+
+#endif /* DEMO_IP_TRACE_MACROS_H */
+