Commit of new class abstraction APIs for all device demos other than the MIDI demo...
[pub/USBasp.git] / Demos / Device / RNDISEthernet / Lib / Ethernet.c
index 3d34f71..57380a0 100644 (file)
 #include "Ethernet.h"\r
 \r
 /* Global Variables: */\r
-/** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */\r
-Ethernet_Frame_Info_t FrameIN;\r
-\r
-/** Ethernet Frame buffer structure, to hold the outgoing Ethernet frame to the host. */\r
-Ethernet_Frame_Info_t FrameOUT;\r
-\r
 /** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
 const MAC_Address_t ServerMACAddress    = {SERVER_MAC_ADDRESS};\r
 \r
@@ -63,31 +57,31 @@ const IP_Address_t  ClientIPAddress     = {CLIENT_IP_ADDRESS};
 /** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
  *  frame buffer if the sub protocol handlers create a valid response.\r
  */\r
-void Ethernet_ProcessPacket(void)\r
+void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
 {\r
-       DecodeEthernetFrameHeader(FrameIN.FrameData);\r
+       DecodeEthernetFrameHeader(FrameIN->FrameData);\r
 \r
        /* Cast the incoming Ethernet frame to the Ethernet header type */\r
-       Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN.FrameData;\r
-       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+       Ethernet_Frame_Header_t* FrameINHeader  = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
+       Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
        \r
        int16_t                  RetSize        = NO_RESPONSE;\r
        \r
        /* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
        if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
-            MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) &&\r
-               (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE))\r
+            MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
        {\r
                /* Process the packet depending on its protocol */\r
                switch (SwapEndian_16(FrameINHeader->EtherType))\r
                {\r
                        case ETHERTYPE_ARP:\r
-                               RetSize = ARP_ProcessARPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
-                                                              &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                              &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
                                break;          \r
                        case ETHERTYPE_IPV4:\r
-                               RetSize = IP_ProcessIPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
-                                                            &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+                               RetSize = IP_ProcessIPPacket(FrameIN,\r
+                                                            &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+                                                            &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
                                break;\r
                }\r
                \r
@@ -100,8 +94,8 @@ void Ethernet_ProcessPacket(void)
                        FrameOUTHeader->EtherType       = FrameINHeader->EtherType;\r
                        \r
                        /* Set the response length in the buffer and indicate that a response is ready to be sent */\r
-                       FrameOUT.FrameLength            = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
-                       FrameOUT.FrameInBuffer          = true;\r
+                       FrameOUT->FrameLength           = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+                       FrameOUT->FrameInBuffer         = true;\r
                }\r
        }\r
 \r
@@ -109,7 +103,7 @@ void Ethernet_ProcessPacket(void)
        if (RetSize != NO_PROCESS)\r
        {\r
                /* Clear the frame buffer */\r
-               FrameIN.FrameInBuffer = false;\r
+               FrameIN->FrameInBuffer = false;\r
        }\r
 }\r
 \r