]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/MicroBlaze_Spartan-6_EthernetLite/SDKProjects/RTOSDemo/lwIP/lwIP_Apps/lwIP_Apps.c
Update version numbers in preparation for V8.2.0 release candidate 1.
[freertos] / FreeRTOS / Demo / MicroBlaze_Spartan-6_EthernetLite / SDKProjects / RTOSDemo / lwIP / lwIP_Apps / lwIP_Apps.c
1 /*\r
2     FreeRTOS V8.2.0rc1 - Copyright (C) 2014 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     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
14     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
15     >>!   obliged to provide the source code for proprietary components     !<<\r
16     >>!   outside of the FreeRTOS kernel.                                   !<<\r
17 \r
18     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
19     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
20     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
21     link: http://www.freertos.org/a00114.html\r
22 \r
23     1 tab == 4 spaces!\r
24 \r
25     ***************************************************************************\r
26      *                                                                       *\r
27      *    Having a problem?  Start by reading the FAQ "My application does   *\r
28      *    not run, what could be wrong?".  Have you defined configASSERT()?  *\r
29      *                                                                       *\r
30      *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
31      *                                                                       *\r
32     ***************************************************************************\r
33 \r
34     ***************************************************************************\r
35      *                                                                       *\r
36      *    FreeRTOS provides completely free yet professionally developed,    *\r
37      *    robust, strictly quality controlled, supported, and cross          *\r
38      *    platform software that is more than just the market leader, it     *\r
39      *    is the industry's de facto standard.                               *\r
40      *                                                                       *\r
41      *    Help yourself get started quickly while simultaneously helping     *\r
42      *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
43      *    tutorial book, reference manual, or both:                          *\r
44      *    http://www.FreeRTOS.org/Documentation                              *\r
45      *                                                                       *\r
46     ***************************************************************************\r
47 \r
48     ***************************************************************************\r
49      *                                                                       *\r
50      *   Investing in training allows your team to be as productive as       *\r
51      *   possible as early as possible, lowering your overall development    *\r
52      *   cost, and enabling you to bring a more robust product to market     *\r
53      *   earlier than would otherwise be possible.  Richard Barry is both    *\r
54      *   the architect and key author of FreeRTOS, and so also the world's   *\r
55      *   leading authority on what is the world's most popular real time     *\r
56      *   kernel for deeply embedded MCU designs.  Obtaining your training    *\r
57      *   from Richard ensures your team will gain directly from his in-depth *\r
58      *   product knowledge and years of usage experience.  Contact Real Time *\r
59      *   Engineers Ltd to enquire about the FreeRTOS Masterclass, presented  *\r
60      *   by Richard Barry:  http://www.FreeRTOS.org/contact\r
61      *                                                                       *\r
62     ***************************************************************************\r
63 \r
64     ***************************************************************************\r
65      *                                                                       *\r
66      *    You are receiving this top quality software for free.  Please play *\r
67      *    fair and reciprocate by reporting any suspected issues and         *\r
68      *    participating in the community forum:                              *\r
69      *    http://www.FreeRTOS.org/support                                    *\r
70      *                                                                       *\r
71      *    Thank you!                                                         *\r
72      *                                                                       *\r
73     ***************************************************************************\r
74 \r
75     http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
76     license and Real Time Engineers Ltd. contact details.\r
77 \r
78     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
79     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
80     compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
81 \r
82     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
83     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
84 \r
85     http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
86     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
87     licenses offer ticketed support, indemnification and commercial middleware.\r
88 \r
89     http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
90     engineered and independently SIL3 certified version for use in safety and\r
91     mission critical applications that require provable dependability.\r
92 \r
93     1 tab == 4 spaces!\r
94 */\r
95 \r
96 /* Standard includes. */\r
97 #include <string.h>\r
98 \r
99 /* FreeRTOS includes. */\r
100 #include "FreeRTOS.h"\r
101 #include "task.h"\r
102 #include "semphr.h"\r
103 \r
104 /* lwIP core includes */\r
105 #include "lwip/opt.h"\r
106 #include "lwip/tcpip.h"\r
107 \r
108 /* lwIP netif includes */\r
109 #include "netif/etharp.h"\r
110 \r
111 /* applications includes */\r
112 #include "apps/httpserver_raw/httpd.h"\r
113 \r
114 /* The constants that define the IP address, net mask, gateway address and MAC\r
115 address are located at the bottom of FreeRTOSConfig.h. */\r
116 #define LWIP_PORT_INIT_IPADDR(addr)   IP4_ADDR((addr), configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 )\r
117 #define LWIP_PORT_INIT_GW(addr)       IP4_ADDR((addr), configGW_IP_ADDR0, configGW_IP_ADDR1, configGW_IP_ADDR2, configGW_IP_ADDR3 )\r
118 #define LWIP_PORT_INIT_NETMASK(addr)  IP4_ADDR((addr), configNET_MASK0,configNET_MASK1,configNET_MASK2,configNET_MASK3)\r
119 #define LWIP_MAC_ADDR_BASE            { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 }\r
120 \r
121 /* Definitions of the various SSI callback functions within the pccSSITags\r
122 array.  If pccSSITags is updated, then these definitions must also be updated. */\r
123 #define ssiTASK_STATS_INDEX                     0\r
124 #define ssiRUN_TIME_STATS_INDEX         1\r
125 \r
126 /*\r
127  * The SSI handler callback function passed to lwIP.\r
128  */\r
129 static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength );\r
130 \r
131 /*-----------------------------------------------------------*/\r
132 \r
133 /* The SSI strings that are embedded in the served html files.  If this array\r
134 is changed, then the index position defined by the #defines such as\r
135 ssiTASK_STATS_INDEX above must also be updated. */\r
136 static const char *pccSSITags[] =\r
137 {\r
138         "rtos_stats",\r
139         "run_stats"\r
140 };\r
141 \r
142 /*-----------------------------------------------------------*/\r
143 \r
144 /* Called from the TCP/IP thread. */\r
145 void lwIPAppsInit( void *pvArgument )\r
146 {\r
147 ip_addr_t xIPAddr, xNetMask, xGateway;\r
148 extern err_t ethernetif_init( struct netif *xNetIf );\r
149 static struct netif xNetIf;\r
150 \r
151         ( void ) pvArgument;\r
152 \r
153         /* Set up the network interface. */\r
154         ip_addr_set_zero( &xGateway );\r
155         ip_addr_set_zero( &xIPAddr );\r
156         ip_addr_set_zero( &xNetMask );\r
157 \r
158         LWIP_PORT_INIT_GW(&xGateway);\r
159         LWIP_PORT_INIT_IPADDR(&xIPAddr);\r
160         LWIP_PORT_INIT_NETMASK(&xNetMask);\r
161 \r
162         netif_set_default( netif_add( &xNetIf, &xIPAddr, &xNetMask, &xGateway, NULL, ethernetif_init, tcpip_input ) );\r
163         netif_set_up( &xNetIf );\r
164 \r
165         /* Initialise the raw http server. */\r
166         httpd_init();\r
167 \r
168         /* Install the server side include handler. */\r
169         http_set_ssi_handler( uslwIPAppsSSIHandler, pccSSITags, sizeof( pccSSITags ) / sizeof( char * ) );\r
170 }\r
171 /*-----------------------------------------------------------*/\r
172 \r
173 static unsigned short uslwIPAppsSSIHandler( int iIndex, char *pcBuffer, int iBufferLength )\r
174 {\r
175 static unsigned int uiUpdateCount = 0;\r
176 static char cUpdateString[ 200 ];\r
177 extern char *pcMainGetTaskStatusMessage( void );\r
178 \r
179         /* Unused parameter. */\r
180         ( void ) iBufferLength;\r
181 \r
182         /* The SSI handler function that generates text depending on the index of\r
183         the SSI tag encountered. */\r
184 \r
185         switch( iIndex )\r
186         {\r
187                 case ssiTASK_STATS_INDEX :\r
188                         vTaskList( pcBuffer );\r
189                         break;\r
190 \r
191                 case ssiRUN_TIME_STATS_INDEX :\r
192                         vTaskGetRunTimeStats( pcBuffer );\r
193                         break;\r
194         }\r
195 \r
196         /* Include a count of the number of times an SSI function has been executed\r
197         in the returned string. */\r
198         uiUpdateCount++;\r
199         sprintf( cUpdateString, "\r\n\r\n%u\r\nStatus - %s", uiUpdateCount, pcMainGetTaskStatusMessage() );\r
200         strcat( pcBuffer, cUpdateString );\r
201         return strlen( pcBuffer );\r
202 }\r
203 \r