Fix up the incomplete Webserver project so that it integrates with the uIP stack correctly. Add simple HTTP webserver as a placeholder until FatFS can be integrated.
Begin to look into the RNDIS Host Class Driver, which seems to crash on test hardware after many packets have been received.pull/1469/head
parent
41ad6bd6d7
commit
03ee87b35a
File diff suppressed because one or more lines are too long
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
LUFA Library
|
||||||
|
Copyright (C) Dean Camera, 2010.
|
||||||
|
|
||||||
|
dean [at] fourwalledcubicle [dot] com
|
||||||
|
www.fourwalledcubicle.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this
|
||||||
|
software and its documentation for any purpose is hereby granted
|
||||||
|
without fee, provided that the above copyright notice appear in
|
||||||
|
all copies and that both that the copyright notice and this
|
||||||
|
permission notice and warranty disclaimer appear in supporting
|
||||||
|
documentation, and that the name of the author not be used in
|
||||||
|
advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
The author disclaim all warranties with regard to this
|
||||||
|
software, including all implied warranties of merchantability
|
||||||
|
and fitness. In no event shall the author be liable for any
|
||||||
|
special, indirect or consequential damages or any damages
|
||||||
|
whatsoever resulting from loss of use, data or profits, whether
|
||||||
|
in an action of contract, negligence or other tortious action,
|
||||||
|
arising out of or in connection with the use or performance of
|
||||||
|
this software.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
*
|
||||||
|
* Simple HTTP Webserver Application. When connected to the uIP stack,
|
||||||
|
* this will serve out files to HTTP clients.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "WebserverApp.h"
|
||||||
|
|
||||||
|
/** HTTP server response header, for transmission before the page contents. This indicates to the host that a page exists at the
|
||||||
|
* given location, and gives extra connection information.
|
||||||
|
*/
|
||||||
|
char PROGMEM HTTP200Header[] = "HTTP/1.1 200 OK\r\n"
|
||||||
|
"Server: LUFA RNDIS\r\n"
|
||||||
|
"Content-type: text/html\r\n"
|
||||||
|
"Connection: close\r\n\r\n";
|
||||||
|
|
||||||
|
/** HTTP server response header, for transmission before a resource not found error. This indicates to the host that the given
|
||||||
|
* given URL is invalid, and gives extra error information.
|
||||||
|
*/
|
||||||
|
char PROGMEM HTTP404Header[] = "HTTP/1.1 404 Not Found\r\n"
|
||||||
|
"Server: LUFA RNDIS\r\n"
|
||||||
|
"Connection: close\r\n\r\n";
|
||||||
|
|
||||||
|
/****************************************************************************************/
|
||||||
|
/** HTTP page to serve to the host when a HTTP request is made. This page is too long for a single response, thus it is automatically
|
||||||
|
* broken up into smaller blocks and sent as a series of packets each time the webserver application callback is run.
|
||||||
|
*/
|
||||||
|
char PROGMEM HTTPPage[] =
|
||||||
|
"<html>"
|
||||||
|
" <head>"
|
||||||
|
" <title>"
|
||||||
|
" LUFA Webserver Demo"
|
||||||
|
" </title>"
|
||||||
|
" </head>"
|
||||||
|
" <body>"
|
||||||
|
" <h1>Hello from your USB AVR!</h1>"
|
||||||
|
" <p>"
|
||||||
|
" Hello! Welcome to the LUFA RNDIS Demo Webserver test page, running on your USB AVR via the LUFA library. This demonstrates the HTTP webserver, TCP/IP stack and RNDIS demo all running atop the LUFA USB stack."
|
||||||
|
" <br /><br />"
|
||||||
|
" <small>Project Information: <a href=\"http://www.fourwalledcubicle.com/LUFA.php\">http://www.fourwalledcubicle.com/LUFA.php</a>.</small>"
|
||||||
|
" <hr />"
|
||||||
|
" <i>LUFA Version: </i>" LUFA_VERSION_STRING
|
||||||
|
" </p>"
|
||||||
|
" </body>"
|
||||||
|
"</html>";
|
||||||
|
|
||||||
|
void WebserverAppCallback(void)
|
||||||
|
{
|
||||||
|
char* AppDataPtr = (char*)uip_appdata;
|
||||||
|
uint16_t AppDataSize = 0;
|
||||||
|
|
||||||
|
if (uip_closed() || uip_aborted() || uip_timedout())
|
||||||
|
{
|
||||||
|
/* Terminated or completed connection - don't send any new data */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (uip_connected())
|
||||||
|
{
|
||||||
|
/* New connection - initialize connection state and data pointer to the appropriate HTTP header */
|
||||||
|
uip_conn->appstate.SendPos = HTTP200Header;
|
||||||
|
uip_conn->appstate.CurrentState = WEBSERVER_STATE_SendHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the maximum segment size and remaining data size */
|
||||||
|
uint16_t BytesRemaining = strlen_P(uip_conn->appstate.SendPos);
|
||||||
|
uint16_t MaxSegSize = uip_mss();
|
||||||
|
|
||||||
|
/* No more bytes remaining in the current data being sent - progress to next data chunk or
|
||||||
|
* terminate the connection once all chunks are sent */
|
||||||
|
if (!(BytesRemaining))
|
||||||
|
{
|
||||||
|
/* Check which data chunk we are currently sending (header or data) */
|
||||||
|
if (uip_conn->appstate.CurrentState == WEBSERVER_STATE_SendHeaders)
|
||||||
|
{
|
||||||
|
uip_conn->appstate.SendPos = HTTPPage;
|
||||||
|
uip_conn->appstate.CurrentState = WEBSERVER_STATE_SendData;
|
||||||
|
}
|
||||||
|
else if (uip_conn->appstate.CurrentState == WEBSERVER_STATE_SendData)
|
||||||
|
{
|
||||||
|
uip_close();
|
||||||
|
uip_conn->appstate.CurrentState = WEBSERVER_STATE_Closed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (BytesRemaining > MaxSegSize)
|
||||||
|
{
|
||||||
|
AppDataSize = MaxSegSize;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppDataSize = BytesRemaining;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy over the next data segment to the application buffer, advance send position pointer */
|
||||||
|
strncpy_P(uip_appdata, uip_conn->appstate.SendPos, AppDataSize);
|
||||||
|
uip_conn->appstate.SendPos += AppDataSize;
|
||||||
|
|
||||||
|
/* Send the data to the requesting host */
|
||||||
|
uip_send(AppDataPtr, AppDataSize);
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
LUFA Library
|
||||||
|
Copyright (C) Dean Camera, 2010.
|
||||||
|
|
||||||
|
dean [at] fourwalledcubicle [dot] com
|
||||||
|
www.fourwalledcubicle.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this
|
||||||
|
software and its documentation for any purpose is hereby granted
|
||||||
|
without fee, provided that the above copyright notice appear in
|
||||||
|
all copies and that both that the copyright notice and this
|
||||||
|
permission notice and warranty disclaimer appear in supporting
|
||||||
|
documentation, and that the name of the author not be used in
|
||||||
|
advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
The author disclaim all warranties with regard to this
|
||||||
|
software, including all implied warranties of merchantability
|
||||||
|
and fitness. In no event shall the author be liable for any
|
||||||
|
special, indirect or consequential damages or any damages
|
||||||
|
whatsoever resulting from loss of use, data or profits, whether
|
||||||
|
in an action of contract, negligence or other tortious action,
|
||||||
|
arising out of or in connection with the use or performance of
|
||||||
|
this software.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file
|
||||||
|
*
|
||||||
|
* Header file for WebserverApp.c.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WEBSERVER_APP_H_
|
||||||
|
#define _WEBSERVER_APP_H_
|
||||||
|
|
||||||
|
/* Includes: */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#include <LUFA/Version.h>
|
||||||
|
|
||||||
|
#include <uip.h>
|
||||||
|
|
||||||
|
/* Function Prototypes: */
|
||||||
|
void WebserverAppCallback(void);
|
||||||
|
|
||||||
|
#endif
|
@ -1,15 +1,20 @@
|
|||||||
#ifndef __APPS_CONF_H__
|
#ifndef __APPS_CONF_H__
|
||||||
#define __APPS_CONF_H__
|
#define __APPS_CONF_H__
|
||||||
|
|
||||||
//Here we include the header file for the application(s) we use in our project.
|
enum Webserver_States_t
|
||||||
|
{
|
||||||
//#include "smtp.h"
|
WEBSERVER_STATE_SendHeaders,
|
||||||
//#include "hello-world.h"
|
WEBSERVER_STATE_SendData,
|
||||||
//#include "simple-httpd.h"
|
WEBSERVER_STATE_Closed,
|
||||||
//#include "telnetd.h"
|
};
|
||||||
//#include "webserver.h"
|
|
||||||
//#include "dhcpc.h"
|
typedef struct
|
||||||
//#include "resolv.h"
|
{
|
||||||
//#include "webclient.h"
|
uint8_t CurrentState;
|
||||||
|
char* SendPos;
|
||||||
|
} uip_tcp_appstate_t;
|
||||||
|
|
||||||
|
#define UIP_APPCALL WebserverAppCallback
|
||||||
|
void UIP_APPCALL(void);
|
||||||
|
|
||||||
#endif /*__APPS_CONF_H__*/
|
#endif /*__APPS_CONF_H__*/
|
||||||
|
Loading…
Reference in new issue