aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/Incomplete/Webserver/Webserver.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-01-21 13:45:44 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-01-21 13:45:44 +0000
commit03ee87b35abdb8b92e8b55ec040fa943f9a6786c (patch)
treef6afd9650084eae3f0c92f47c6f205694168ad32 /Projects/Incomplete/Webserver/Webserver.c
parent41ad6bd6d7e886412f6c12d98f040e51c3ee4fdf (diff)
downloadlufa-03ee87b35abdb8b92e8b55ec040fa943f9a6786c.tar.gz
lufa-03ee87b35abdb8b92e8b55ec040fa943f9a6786c.tar.bz2
lufa-03ee87b35abdb8b92e8b55ec040fa943f9a6786c.zip
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.
Diffstat (limited to 'Projects/Incomplete/Webserver/Webserver.c')
-rw-r--r--Projects/Incomplete/Webserver/Webserver.c80
1 files changed, 37 insertions, 43 deletions
diff --git a/Projects/Incomplete/Webserver/Webserver.c b/Projects/Incomplete/Webserver/Webserver.c
index c706fd08a..74636b8a5 100644
--- a/Projects/Incomplete/Webserver/Webserver.c
+++ b/Projects/Incomplete/Webserver/Webserver.c
@@ -31,7 +31,7 @@
/** \file
*
* Main source file for the Webserver project. This file contains the main tasks of
- * the demo and is responsible for the initial application hardware configuration.
+ * the project and is responsible for the initial application hardware configuration.
*/
#include "Webserver.h"
@@ -57,20 +57,13 @@ USB_ClassInfo_RNDIS_Host_t Ethernet_RNDIS_Interface =
},
};
-struct timer ConnectionTimer, ARPTimer;
-uint16_t MillisecondTickCount;
+/** Connection timer, to retain the time elapsed since the last time the uIP connections were managed. */
+struct timer ConnectionTimer;
+
+/** ARP timer, to retain the time elapsed since the ARP cache was last updated. */
+struct timer ARPTimer;
-/** ISR for the management of the connection management timeout counter */
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)
-{
- MillisecondTickCount++;
-}
-void TCPCallback(void)
-{
- printf("Callback!\r\n");
-}
-
/** Main program entry point. This routine configures the hardware required by the application, then
* enters a loop to run the application tasks in sequence.
*/
@@ -129,7 +122,7 @@ int main(void)
printf("Device Max Transfer Size: %lu bytes.\r\n", Ethernet_RNDIS_Interface.State.DeviceMaxPacketSize);
- uint32_t PacketFilter = (REMOTE_NDIS_PACKET_DIRECTED | REMOTE_NDIS_PACKET_BROADCAST | REMOTE_NDIS_PACKET_ALL_MULTICAST);
+ uint32_t PacketFilter = (REMOTE_NDIS_PACKET_DIRECTED | REMOTE_NDIS_PACKET_BROADCAST);
if (RNDIS_Host_SetRNDISProperty(&Ethernet_RNDIS_Interface, OID_GEN_CURRENT_PACKET_FILTER,
&PacketFilter, sizeof(PacketFilter)) != HOST_SENDCONTROL_Successful)
{
@@ -157,6 +150,8 @@ int main(void)
uip_setethaddr(MACAddress);
+ LEDs_SetAllLEDs(LEDMASK_USB_READY);
+
printf("RNDIS Device Enumerated.\r\n");
USB_HostState = HOST_STATE_Configured;
break;
@@ -179,40 +174,39 @@ void ProcessIncommingPacket(void)
LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
/* Read the incomming packet straight into the UIP packet buffer */
- RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, uip_buf, &uip_len);
-
- printf("RECEIVED PACKET (%d):\r\n", uip_len);
- for (uint16_t i = 0; i < uip_len; i++)
- printf("0x%02X ", uip_buf[i]);
- printf("\r\n\r\n");
+ printf("L=%d R=%d\r\n", uip_len, RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface, &uip_buf[0], &uip_len));
- struct uip_eth_hdr* EthernetHeader = (struct uip_eth_hdr*)&uip_buf[0];
- if (EthernetHeader->type == HTONS(UIP_ETHTYPE_IP))
+ if (uip_len > 0)
{
- /* Filter packet by MAC destination */
- uip_arp_ipin();
+ bool PacketHandled = true;
- /* Process incomming packet */
- uip_input();
+ struct uip_eth_hdr* EthernetHeader = (struct uip_eth_hdr*)&uip_buf[0];
+ if (EthernetHeader->type == HTONS(UIP_ETHTYPE_IP))
+ {
+ /* Filter packet by MAC destination */
+ uip_arp_ipin();
- /* Add destination MAC to outgoing packet */
- if (uip_len > 0)
- uip_arp_out();
- }
- else if (EthernetHeader->type == HTONS(UIP_ETHTYPE_ARP))
- {
- /* Process ARP packet */
- uip_arp_arpin();
- }
+ /* Process incomming packet */
+ uip_input();
- /* If a response was generated, send it */
- if (uip_len > 0)
- RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
+ /* Add destination MAC to outgoing packet */
+ if (uip_len > 0)
+ uip_arp_out();
+ }
+ else if (EthernetHeader->type == HTONS(UIP_ETHTYPE_ARP))
+ {
+ /* Process ARP packet */
+ uip_arp_arpin();
+ }
+ else
+ {
+ PacketHandled = false;
+ }
- printf("SENT PACKET (%d):\r\n", uip_len);
- for (uint16_t i = 0; i < uip_len; i++)
- printf("0x%02X ", uip_buf[i]);
- printf("\r\n\r\n");
+ /* If a response was generated, send it */
+ if ((uip_len > 0) && PacketHandled)
+ RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, &uip_buf[0], uip_len);
+ }
LEDs_SetAllLEDs(LEDMASK_USB_READY);
}
@@ -234,7 +228,7 @@ void ManageConnections(void)
/* If a response was generated, send it */
if (uip_len > 0)
- RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len);
+ RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, &uip_buf[0], uip_len);
}
LEDs_SetAllLEDs(LEDMASK_USB_READY);