]> git.sur5r.net Git - freertos/blob - FreeRTOS-Labs/Demo/FreeRTOS_Plus_TCP_and_FAT_Windows_Simulator/TraceMacros/Example1/DemoIPTrace.h
Add the Labs projects provided in the V10.2.1_191129 zip file.
[freertos] / FreeRTOS-Labs / Demo / FreeRTOS_Plus_TCP_and_FAT_Windows_Simulator / TraceMacros / Example1 / DemoIPTrace.h
1 /*\r
2     FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.\r
3     All rights reserved\r
4 \r
5     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
6 \r
7     This file is part of the FreeRTOS distribution.\r
8 \r
9     FreeRTOS is free software; you can redistribute it and/or modify it under\r
10     the terms of the GNU General Public License (version 2) as published by the\r
11     Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
12 \r
13     ***************************************************************************\r
14     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
15     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
16     >>!   obliged to provide the source code for proprietary components     !<<\r
17     >>!   outside of the FreeRTOS kernel.                                   !<<\r
18     ***************************************************************************\r
19 \r
20     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
21     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
22     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
23     link: http://www.freertos.org/a00114.html\r
24 \r
25     ***************************************************************************\r
26      *                                                                       *\r
27      *    FreeRTOS provides completely free yet professionally developed,    *\r
28      *    robust, strictly quality controlled, supported, and cross          *\r
29      *    platform software that is more than just the market leader, it     *\r
30      *    is the industry's de facto standard.                               *\r
31      *                                                                       *\r
32      *    Help yourself get started quickly while simultaneously helping     *\r
33      *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
34      *    tutorial book, reference manual, or both:                          *\r
35      *    http://www.FreeRTOS.org/Documentation                              *\r
36      *                                                                       *\r
37     ***************************************************************************\r
38 \r
39     http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
40     the FAQ page "My application does not run, what could be wrong?".  Have you\r
41     defined configASSERT()?\r
42 \r
43     http://www.FreeRTOS.org/support - In return for receiving this top quality\r
44     embedded software for free we request you assist our global community by\r
45     participating in the support forum.\r
46 \r
47     http://www.FreeRTOS.org/training - Investing in training allows your team to\r
48     be as productive as possible as early as possible.  Now you can receive\r
49     FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
50     Ltd, and the world's leading authority on the world's leading RTOS.\r
51 \r
52     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
53     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
54     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
55 \r
56     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
57     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
58 \r
59     http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
60     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
61     licenses offer ticketed support, indemnification and commercial middleware.\r
62 \r
63     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
64     engineered and independently SIL3 certified version for use in safety and\r
65     mission critical applications that require provable dependability.\r
66 \r
67     1 tab == 4 spaces!\r
68 */\r
69 \r
70 /*\r
71  * This file, along with DemoIPTrace.c, provides a basic example use of the\r
72  * FreeRTOS+TCP trace macros.  The statistics gathered here can be viewed in\r
73  * the command line interface.\r
74  * See http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/UDP_CLI.html\r
75  *\r
76  * A simple generic mechanism is used that allocates a structure (see the\r
77  * ExampleDebugStatEntry_t definition below) to each ID defined in this file.\r
78  * The structures are stored in an array (see the xIPTraceValues[] array in\r
79  * DemoIPTrace.c).\r
80  *\r
81  * The structure associates a function with a data value.  See the\r
82  * vPerformAction and ulData members of ExampleDebugStatEntry_t respectively.\r
83  * The function is used to manipulate the data.  At the time of writing two\r
84  * functions can be used - these are prvIncrementEventCount() which simply\r
85  * increments the data each time it is called, and prvStoreLowest() which\r
86  * sets the data to the lowest value of an input parameter ever seen.  For\r
87  * example, to store the lowest ever number of free network buffer descriptors\r
88  * the parameter value is the current number of network buffer descriptors.\r
89  *\r
90  * The trace macros themselves are defined in this file and just invoke\r
91  * vExampleDebugStatUpdate(), passing in an ID value.  vExampleDebugStatUpdate()\r
92  * then just executes the function associated with that value (prvStoreLowest(),\r
93  * prvIncrementEventCount(), etc.) as defined in the xIPTraceValues[] array.\r
94  */\r
95 \r
96 #ifndef DEMO_IP_TRACE_MACROS_H\r
97 #define DEMO_IP_TRACE_MACROS_H\r
98 \r
99 typedef void ( *vTraceAction_t )( uint32_t *, uint32_t );\r
100 \r
101 /* Type that defines each statistic being gathered. */\r
102 typedef struct ExampleDebugStatEntry\r
103 {\r
104         uint8_t ucIdentifier;                           /* Unique identifier for statistic. */\r
105         const char * const pucDescription;      /* Text description for the statistic. */\r
106         vTraceAction_t vPerformAction;          /* Action to perform when the statistic is updated (increment counter, store minimum value, store maximum value, etc. */\r
107         uint32_t ulData;                                        /* The meaning of this data is dependent on the trace macro ID. */\r
108 } ExampleDebugStatEntry_t;\r
109 \r
110 /* Unique identifiers used to locate the entry for each trace macro in the\r
111 xIPTraceValues[] table defined in DemoIPTrace.c.  See the comments at the top of\r
112 this file. */\r
113 #define iptraceID_NETWORK_INTERFACE_RECEIVE                                     0\r
114 #define iptraceID_NETWORK_INTERFACE_TRANSMIT                            1\r
115 #define iptraceID_PACKET_DROPPED_TO_GENERATE_ARP                        2\r
116 #define iptraceID_NETWORK_BUFFER_OBTAINED                                       3\r
117 #define iptraceID_NETWORK_BUFFER_OBTAINED_FROM_ISR                      4\r
118 #define iptraceID_NETWORK_EVENT_RECEIVED                                        5\r
119 #define iptraceID_FAILED_TO_OBTAIN_NETWORK_BUFFER                       6\r
120 #define iptraceID_ARP_TABLE_ENTRY_EXPIRED                                       7\r
121 #define iptraceID_FAILED_TO_CREATE_SOCKET                                       8\r
122 #define iptraceID_RECVFROM_DISCARDING_BYTES                                     9\r
123 #define iptraceID_ETHERNET_RX_EVENT_LOST                                        10\r
124 #define iptraceID_STACK_TX_EVENT_LOST                                           11\r
125 #define ipconfigID_BIND_FAILED                                                          12\r
126 #define iptraceID_RECVFROM_TIMEOUT                                                      13\r
127 #define iptraceID_SENDTO_DATA_TOO_LONG                                          14\r
128 #define iptraceID_SENDTO_SOCKET_NOT_BOUND                                       15\r
129 #define iptraceID_NO_BUFFER_FOR_SENDTO                                          16\r
130 #define iptraceID_WAIT_FOR_TX_DMA_DESCRIPTOR                            17\r
131 #define iptraceID_FAILED_TO_NOTIFY_SELECT_GROUP                         18\r
132 #define iptraceID_TOTAL_NETWORK_BUFFERS_OBTAINED                        19\r
133 #define iptraceID_TOTAL_NETWORK_BUFFERS_RELEASED                        20\r
134 \r
135 /* It is possible to remove the trace macros using the\r
136 configINCLUDE_DEMO_DEBUG_STATS setting in FreeRTOSIPConfig.h. */\r
137 #if configINCLUDE_DEMO_DEBUG_STATS == 1\r
138 \r
139         /* The trace macro definitions themselves.  Any trace macros left undefined\r
140         will default to be empty macros.  See the comments at the top of this\r
141         file. */\r
142         #define iptraceNETWORK_BUFFER_OBTAINED( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_NETWORK_BUFFER_OBTAINED, uxQueueMessagesWaiting( ( QueueHandle_t ) xNetworkBufferSemaphore ) ); vExampleDebugStatUpdate( iptraceID_TOTAL_NETWORK_BUFFERS_OBTAINED, 0 )\r
143         #define iptraceNETWORK_BUFFER_RELEASED( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_TOTAL_NETWORK_BUFFERS_RELEASED, 0 )\r
144         #define iptraceNETWORK_BUFFER_OBTAINED_FROM_ISR( pxBufferAddress ) vExampleDebugStatUpdate( iptraceID_NETWORK_BUFFER_OBTAINED, uxQueueMessagesWaiting( ( QueueHandle_t ) xNetworkBufferSemaphore ) )\r
145 \r
146         #define iptraceNETWORK_EVENT_RECEIVED( eEvent ) {                                                                                                                                                               \\r
147                                                                                                                 uint16_t usSpace;                                                                                                                       \\r
148                                                                                                                         usSpace = ( uint16_t ) uxQueueMessagesWaiting( xNetworkEventQueue );    \\r
149                                                                                                                         /* Minus one as an event was removed before the space was queried. */   \\r
150                                                                                                                         usSpace = ( ipconfigEVENT_QUEUE_LENGTH - usSpace ) - 1;                                 \\r
151                                                                                                                         vExampleDebugStatUpdate( iptraceID_NETWORK_EVENT_RECEIVED, usSpace );   \\r
152                                                                                                                 }\r
153 \r
154         #define iptraceFAILED_TO_OBTAIN_NETWORK_BUFFER()                                        vExampleDebugStatUpdate( iptraceID_FAILED_TO_OBTAIN_NETWORK_BUFFER, 0 )\r
155         #define iptraceARP_TABLE_ENTRY_EXPIRED( ulIPAddress )                           vExampleDebugStatUpdate( iptraceID_ARP_TABLE_ENTRY_EXPIRED, 0 )\r
156         #define iptracePACKET_DROPPED_TO_GENERATE_ARP( ulIPAddress )            vExampleDebugStatUpdate( iptraceID_PACKET_DROPPED_TO_GENERATE_ARP, 0 )\r
157         #define iptraceFAILED_TO_CREATE_SOCKET()                                                        vExampleDebugStatUpdate( iptraceID_FAILED_TO_CREATE_SOCKET, 0 )\r
158         #define iptraceRECVFROM_DISCARDING_BYTES( xNumberOfBytesDiscarded )     vExampleDebugStatUpdate( iptraceID_RECVFROM_DISCARDING_BYTES, 0 )\r
159         #define iptraceETHERNET_RX_EVENT_LOST()                                                         vExampleDebugStatUpdate( iptraceID_ETHERNET_RX_EVENT_LOST, 0 )\r
160         #define iptraceSTACK_TX_EVENT_LOST( xEvent )                                            vExampleDebugStatUpdate( iptraceID_STACK_TX_EVENT_LOST, 0 )\r
161         #define iptraceBIND_FAILED( xSocket, usPort )                                           vExampleDebugStatUpdate( ipconfigID_BIND_FAILED, 0 )\r
162         #define iptraceNETWORK_INTERFACE_TRANSMIT()                                                     vExampleDebugStatUpdate( iptraceID_NETWORK_INTERFACE_TRANSMIT, 0 )\r
163         #define iptraceRECVFROM_TIMEOUT()                                                                       vExampleDebugStatUpdate( iptraceID_RECVFROM_TIMEOUT, 0 )\r
164         #define iptraceSENDTO_DATA_TOO_LONG()                                                           vExampleDebugStatUpdate( iptraceID_SENDTO_DATA_TOO_LONG, 0 )\r
165         #define iptraceSENDTO_SOCKET_NOT_BOUND()                                                        vExampleDebugStatUpdate( iptraceID_SENDTO_SOCKET_NOT_BOUND, 0 )\r
166         #define iptraceNO_BUFFER_FOR_SENDTO()                                                           vExampleDebugStatUpdate( iptraceID_NO_BUFFER_FOR_SENDTO, 0 )\r
167         #define iptraceWAITING_FOR_TX_DMA_DESCRIPTOR()                                          vExampleDebugStatUpdate( iptraceID_WAIT_FOR_TX_DMA_DESCRIPTOR, 0 )\r
168         #define iptraceFAILED_TO_NOTIFY_SELECT_GROUP( xSocket )                         vExampleDebugStatUpdate( iptraceID_FAILED_TO_NOTIFY_SELECT_GROUP, 0 )\r
169         #define iptraceNETWORK_INTERFACE_RECEIVE()                                                      vExampleDebugStatUpdate( iptraceID_NETWORK_INTERFACE_RECEIVE, 0 )\r
170 \r
171         /*\r
172          * The function that updates a line in the xIPTraceValues table.\r
173          */\r
174         void vExampleDebugStatUpdate( uint8_t ucIdentifier, uint32_t ulValue );\r
175 \r
176         /*\r
177          * Returns the number of entries in the xIPTraceValues table.\r
178          */\r
179         BaseType_t xExampleDebugStatEntries( void );\r
180 \r
181 #endif /* configINCLUDE_DEMO_DEBUG_STATS == 1 */\r
182 \r
183 \r
184 #endif /* DEMO_IP_TRACE_MACROS_H */\r
185 \r