X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/77dda302acb0402a27565e12f98ffc56c1a86389..03ee87b35abdb8b92e8b55ec040fa943f9a6786c:/Projects/Incomplete/Webserver/Webserver.c diff --git a/Projects/Incomplete/Webserver/Webserver.c b/Projects/Incomplete/Webserver/Webserver.c index 97c35d783..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) { @@ -152,11 +145,13 @@ int main(void) } printf("MAC Address: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\r\n", - MACAddress.addr[0], MACAddress.addr[1], MACAddress.addr[2], - MACAddress.addr[3], MACAddress.addr[4], MACAddress.addr[5]); + MACAddress.addr[0], MACAddress.addr[1], MACAddress.addr[2], + MACAddress.addr[3], MACAddress.addr[4], MACAddress.addr[5]); 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); } @@ -220,6 +214,7 @@ void ProcessIncommingPacket(void) void ManageConnections(void) { + /* Manage open connections */ if (timer_expired(&ConnectionTimer)) { timer_reset(&ConnectionTimer); @@ -233,12 +228,13 @@ 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); } + /* Manage ARP cache refreshing */ if (timer_expired(&ARPTimer)) { timer_reset(&ARPTimer);