There is a WEB server implementation available in the FreeRTOS example of
ATMEL's AVR32 Studio. Here is the description:

The Basic Web server
Implements a simplistic WEB server. To use this demo part, define HTTP_USED
to 1, else define to 0. (default is 1)

Demo description: Every time a connection is made and data is received, a
dynamic page that shows the current FreeRTOS.org kernel statistics is
generated and returned. The connection is then closed.

Note: The WEB server is reachable at the IP address 192.168.0.2.

Check the two attached files to see how it works.


  -----Ursprungliche Nachricht-----
  Von: [email protected]
[mailto:[email protected]]im Auftrag von
Bill Yang
  Gesendet: Dienstag, 14. Juli 2009 16:44
  An: [email protected]
  Betreff: [lwip-users] lwIP web server on the FreeRTOS


  Hi,



  I wonder if there is lwIP web server sample running on FreeRTOS platform.



  Regards,



  Bill Yang
  Software Engineer

  direct:    +1 801.433.6354
  email:   [email protected]


  Parvus

  RUGGED SOLUTIONS for REAL WORLD APPLICATIONS

  USA - 3222 S. Washington St. | Salt Lake City, Utah 84115 | Tel. +1
801.483.1533 | Fax +1 801.483.1523 |
  www.parvus.com

  A Member of EUROTECH GROUP


/* This source file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 
Release */

/*This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
 *
 * \brief Basic WEB Server for AVR32 UC3.
 *
 * - Compiler:           GNU GCC for AVR32
 * - Supported devices:  All AVR32 devices can be used.
 * - AppNote:
 *
 * \author               Atmel Corporation: http://www.atmel.com \n
 *                       Support and FAQ: http://support.atmel.no/
 *
 *****************************************************************************/

/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. The name of ATMEL may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
 * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


/*
  Implements a simplistic WEB server.  Every time a connection is made and
  data is received a dynamic page that shows the current FreeRTOS.org kernel
  statistics is generated and returned.  The connection is then closed.

  This file was adapted from a FreeRTOS lwIP slip demo supplied by a third
  party.
*/

#if (HTTP_USED == 1)


/* Standard includes. */
#include <stdio.h>
#include <string.h>

#include "conf_eth.h"

/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "partest.h"
#include "serial.h"

/* Demo includes. */
/* Demo app includes. */
#include "portmacro.h"

/* lwIP includes. */
#include "lwip/api.h"
#include "lwip/tcpip.h"
#include "lwip/memp.h"
#include "lwip/stats.h"
#include "netif/loopif.h"

/* ethernet includes */
#include "ethernet.h"

/*! The size of the buffer in which the dynamic WEB page is created. */
#define webMAX_PAGE_SIZE        512

/*! Standard GET response. */
#define webHTTP_OK      "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n"

/*! The port on which we listen. */
#define webHTTP_PORT            ( 80 )

/*! Delay on close error. */
#define webSHORT_DELAY          ( 10 )

/*! Format of the dynamic page that is returned on each connection. */
#define webHTML_START \
"<html>\
<head>\
</head>\
<BODY onLoad=\"window.setTimeout(&quot;location.href='index.html'&quot;,1000)\" 
bgcolor=\"#FFFFFF\" text=\"#2477E6\">\
\r\nPage Hits = "

#define webHTML_END \
"\r\n</pre>\
\r\n</font></BODY>\
</html>"

portCHAR cDynamicPage[ webMAX_PAGE_SIZE ];
portCHAR cPageHits[ 11 ];


/*! Function to process the current connection */
static void prvweb_ParseHTMLRequest( struct netconn *pxNetCon );


/*! \brief WEB server main task
 *         check for incoming connection and process it
 *
 *  \param pvParameters   Input. Not Used.
 *
 */
portTASK_FUNCTION( vBasicWEBServer, pvParameters )
{
struct netconn *pxHTTPListener, *pxNewConnection;

        /* Create a new tcp connection handle */
        pxHTTPListener = netconn_new( NETCONN_TCP );
        netconn_bind(pxHTTPListener, NULL, webHTTP_PORT );
        netconn_listen( pxHTTPListener );

        /* Loop forever */
        for( ;; )
        {
                /* Wait for a first connection. */
                pxNewConnection = netconn_accept(pxHTTPListener);
                vParTestSetLED(webCONN_LED, pdTRUE);

                if(pxNewConnection != NULL)
                {
                        prvweb_ParseHTMLRequest(pxNewConnection);
                }/* end if new connection */

                vParTestSetLED(webCONN_LED, pdFALSE);

        } /* end infinite loop */
}


/*! \brief parse the incoming request
 *         parse the HTML request and send file
 *
 *  \param pxNetCon   Input. The netconn to use to send and receive data.
 *
 */
static void prvweb_ParseHTMLRequest( struct netconn *pxNetCon )
{
struct netbuf *pxRxBuffer;
portCHAR *pcRxString;
unsigned portSHORT usLength;
static unsigned portLONG ulPageHits = 0;

        /* We expect to immediately get data. */
        pxRxBuffer = netconn_recv( pxNetCon );

        if( pxRxBuffer != NULL )
        {
                /* Where is the data? */
                netbuf_data( pxRxBuffer, ( void * ) &pcRxString, &usLength );

                /* Is this a GET?  We don't handle anything else. */
                if(( NULL != pcRxString               )
                && ( !strncmp( pcRxString, "GET", 3 ) ))
                {
                        /* Update the hit count. */
                        ulPageHits++;
                        sprintf( cPageHits, "%d", (int)ulPageHits );

                        /* Write out the HTTP OK header. */
                        netconn_write( pxNetCon, webHTTP_OK, (u16_t) strlen( 
webHTTP_OK ), NETCONN_COPY );

                        /* Generate the dynamic page... First the page header. 
*/
                        strcpy( cDynamicPage, webHTML_START );

                        /* ... Then the hit count... */
                        strcat( cDynamicPage, cPageHits );
                        strcat( cDynamicPage, "<p><pre>Task          State  
Priority  Stack     #<br>************************************************<br>" 
);

                        /* ... Then the list of tasks and their status... */
                        vTaskList( ( signed portCHAR * ) cDynamicPage + strlen( 
cDynamicPage ) );

                        /* ... Finally the page footer. */
                        strcat( cDynamicPage, webHTML_END );

                        /* Write out the dynamically generated page. */
                        netconn_write( pxNetCon, cDynamicPage, (u16_t) strlen( 
cDynamicPage ), NETCONN_COPY );
                }
                netbuf_delete( pxRxBuffer );
        }

        netconn_close( pxNetCon );
        netconn_delete( pxNetCon );
}

#endif

/* This header file is part of the ATMEL AVR32-SoftwareFramework-AT32UC3A-1.4.0 
Release */

/*This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file *********************************************************************
 *
 * \brief Basic WEB Server for AVR32 UC3.
 *
 * - Compiler:           GNU GCC for AVR32
 * - Supported devices:  All AVR32 devices can be used.
 * - AppNote:
 *
 * \author               Atmel Corporation: http://www.atmel.com \n
 *                       Support and FAQ: http://support.atmel.no/
 *
 *****************************************************************************/

/* Copyright (C) 2006-2008, Atmel Corporation All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * 3. The name of ATMEL may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
 * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


#ifndef BASIC_WEB_SERVER_H
#define BASIC_WEB_SERVER_H

#include "portmacro.h"


/*! \brief WEB server main task
 *
 *  \param pvParameters   Input. Not Used.
 *
 */
portTASK_FUNCTION_PROTO( vBasicWEBServer, pvParameters );

#endif

_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to