Moved out each demos' functionality library files (e.g. Ring Buffer library) to ...
[pub/lufa.git] / Demos / Device / RNDISEthernet / Lib / Ethernet.h
diff --git a/Demos/Device/RNDISEthernet/Lib/Ethernet.h b/Demos/Device/RNDISEthernet/Lib/Ethernet.h
new file mode 100644 (file)
index 0000000..b360f07
--- /dev/null
@@ -0,0 +1,116 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2009.\r
+              \r
+  dean [at] fourwalledcubicle [dot] com\r
+      www.fourwalledcubicle.com\r
+*/\r
+\r
+/*\r
+  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, and distribute this software\r
+  and its documentation for any purpose and without fee is hereby\r
+  granted, provided that the above copyright notice appear in all\r
+  copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for Ethernet.c.\r
+ */\r
\r
+#ifndef _ETHERNET_H_\r
+#define _ETHERNET_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+               #include <string.h>\r
+\r
+               #include "EthernetProtocols.h"\r
+               #include "ProtocolDecoders.h"\r
+               #include "ICMP.h"\r
+               #include "TCP.h"\r
+               #include "UDP.h"\r
+               #include "DHCP.h"\r
+               #include "ARP.h"\r
+               #include "IP.h"\r
+               \r
+       /* Macros: */\r
+               /** Physical MAC address of the virtual server on the network */\r
+               #define SERVER_MAC_ADDRESS               {0x00, 0x01, 0x00, 0x01, 0x00, 0x01}           \r
+\r
+               /** Physical MAC address of the network broadcast address */\r
+               #define BROADCAST_MAC_ADDRESS            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}\r
+       \r
+               /** Performs a comparison between two MAC addresses, indicating if they are identical.\r
+                *  \r
+                *  \param MAC1  First MAC address\r
+                *  \param MAC2  Second MAC address\r
+                *\r
+                *  \return True if the addresses match, false otherwise\r
+                */\r
+               #define MAC_COMPARE(MAC1, MAC2)          (memcmp(MAC1, MAC2, sizeof(MAC_Address_t)) == 0)\r
+\r
+               /** Maximum size of an incoming or outgoing Ethernet frame in bytes */\r
+               #define ETHERNET_FRAME_SIZE_MAX          1500\r
+               \r
+               /** Minimum size of an Ethernet packet in bytes, to conform to the Ethernet V2 packet standard */\r
+               #define ETHERNET_VER2_MINSIZE            0x0600\r
+               \r
+               /** Return value for all sub protocol handling routines, indicating that no response packet has been generated */\r
+               #define NO_RESPONSE                      0              \r
+\r
+               /** Return value for all sub protocol handling routines, indicating that the packet has not yet been handled */\r
+               #define NO_PROCESS                       -1\r
+\r
+       /* Type Defines: */\r
+               /** Type define for an Ethernet frame buffer. */\r
+               typedef struct\r
+               {\r
+                       uint8_t       FrameData[ETHERNET_FRAME_SIZE_MAX]; /**< Ethernet frame contents */\r
+                       uint16_t      FrameLength; /**< Length in bytes of the Ethernet frame stored in the buffer */\r
+                       bool          FrameInBuffer; /**< Indicates if a frame is currently stored in the buffer */\r
+               } Ethernet_Frame_Info_t;\r
+\r
+               /** Type define for an Ethernet frame header */\r
+               typedef struct\r
+               {\r
+                       MAC_Address_t Destination; /**< Physical MAC address of the packet recipient */\r
+                       MAC_Address_t Source; /**< Physics MAC address of the packet source */\r
+                       \r
+                       union\r
+                       {\r
+                               uint16_t  EtherType; /**< Ethernet packet subprotocol type, for Ethernet V2 packets */\r
+                               uint16_t  Length; /**< Ethernet frame length, for Ethernet V1 packets */\r
+                       };\r
+               } Ethernet_Frame_Header_t;\r
+               \r
+       /* External Variables: */\r
+               extern Ethernet_Frame_Info_t FrameIN;\r
+               extern Ethernet_Frame_Info_t FrameOUT;\r
+\r
+               extern const MAC_Address_t ServerMACAddress;\r
+               extern const IP_Address_t  ServerIPAddress;\r
+               extern const MAC_Address_t BroadcastMACAddress;\r
+               extern const IP_Address_t  BroadcastIPAddress;\r
+               extern const IP_Address_t  ClientIPAddress;\r
+               \r
+       /* Function Prototypes: */\r
+               void     Ethernet_ProcessPacket(void);\r
+               uint16_t Ethernet_Checksum16(void* Data, uint16_t Bytes);\r
+               \r
+#endif\r