Simple mbed library with macros

Dependents:   SimpleTimer SimpleUART SimpleTimer Stoppuhr1

Files at this revision

API Documentation at this revision

Comitter:
Alkorin
Date:
Sat Nov 27 19:08:38 2010 +0000
Parent:
20:113941bced4e
Commit message:
Added some Ethernet/IP structures

Changed in this revision

ethernet.h Show annotated file Show diff for this revision Revisions of this file
ip.h Show annotated file Show diff for this revision Revisions of this file
mbed_globals.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ethernet.h	Sat Nov 27 19:08:38 2010 +0000
@@ -0,0 +1,66 @@
+/*
+* Copyright or © or Copr. 2010, Thomas SOETE
+* 
+* Author e-mail: thomas@soete.org
+* Library website : http://mbed.org/users/Alkorin/libraries/SimpleLib/
+* 
+* This software is governed by the CeCILL license under French law and
+* abiding by the rules of distribution of free software.  You can  use, 
+* modify and/ or redistribute the software under the terms of the CeCILL
+* license as circulated by CEA, CNRS and INRIA at the following URL
+* "http://www.cecill.info". 
+* 
+* As a counterpart to the access to the source code and  rights to copy,
+* modify and redistribute granted by the license, users are provided only
+* with a limited warranty  and the software's author,  the holder of the
+* economic rights,  and the successive licensors  have only  limited
+* liability. 
+* 
+* In this respect, the user's attention is drawn to the risks associated
+* with loading,  using,  modifying and/or developing or reproducing the
+* software by the user in light of its specific status of free software,
+* that may mean  that it is complicated to manipulate,  and  that  also
+* therefore means  that it is reserved for developers  and  experienced
+* professionals having in-depth computer knowledge. Users are therefore
+* encouraged to load and test the software's suitability as regards their
+* requirements in conditions enabling the security of their systems and/or 
+* data to be ensured and,  more generally, to use and operate it in the 
+* same conditions as regards security. 
+* 
+* The fact that you are presently reading this means that you have had
+* knowledge of the CeCILL license and that you accept its terms.
+*/
+
+#ifndef __SIMPLELIB_ETHERNET_H__
+#define __SIMPLELIB_ETHERNET_H__
+
+typedef __packed struct {
+    char destination[6];
+    char source[6];
+    uint16_t type;
+} ethernet_packet;
+#define asETH(x) ((ethernet_packet*)(x))
+
+#define IPV4_TYPE 0x0800
+#define ARP_TYPE  0x0806
+
+typedef __packed struct {
+    ethernet_packet eth;
+    __packed struct {
+        char hardware_type[2];
+        char protocol_type[2];
+        char hardware_size;
+        char protocol_size;
+        uint16_t opcode_request;
+        char sender_mac[6];
+        char sender_ip[4];
+        char target_mac[6];
+        char target_ip[4];
+    } arp;
+} arp_packet;
+#define asARP(x) ((arp_packet*)(x))
+
+#define ARP_REQUEST 0x0001
+#define ARP_REPLY   0x0002
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ip.h	Sat Nov 27 19:08:38 2010 +0000
@@ -0,0 +1,79 @@
+/*
+* Copyright or © or Copr. 2010, Thomas SOETE
+* 
+* Author e-mail: thomas@soete.org
+* Library website : http://mbed.org/users/Alkorin/libraries/SimpleLib/
+* 
+* This software is governed by the CeCILL license under French law and
+* abiding by the rules of distribution of free software.  You can  use, 
+* modify and/ or redistribute the software under the terms of the CeCILL
+* license as circulated by CEA, CNRS and INRIA at the following URL
+* "http://www.cecill.info". 
+* 
+* As a counterpart to the access to the source code and  rights to copy,
+* modify and redistribute granted by the license, users are provided only
+* with a limited warranty  and the software's author,  the holder of the
+* economic rights,  and the successive licensors  have only  limited
+* liability. 
+* 
+* In this respect, the user's attention is drawn to the risks associated
+* with loading,  using,  modifying and/or developing or reproducing the
+* software by the user in light of its specific status of free software,
+* that may mean  that it is complicated to manipulate,  and  that  also
+* therefore means  that it is reserved for developers  and  experienced
+* professionals having in-depth computer knowledge. Users are therefore
+* encouraged to load and test the software's suitability as regards their
+* requirements in conditions enabling the security of their systems and/or 
+* data to be ensured and,  more generally, to use and operate it in the 
+* same conditions as regards security. 
+* 
+* The fact that you are presently reading this means that you have had
+* knowledge of the CeCILL license and that you accept its terms.
+*/
+
+#ifndef __SIMPLELIB_IP_H__
+#define __SIMPLELIB_IP_H__
+
+#include "ip.h"
+
+typedef __packed struct {
+    unsigned char version:4;
+    unsigned char length:4;
+    unsigned char services;
+    uint16_t total_length;
+    uint16_t identification;
+    unsigned int flags:3;
+    unsigned fragment_offset:13;
+    unsigned char ttl;
+    unsigned char protocol;
+    uint16_t header_checksum;
+    unsigned char source[4];
+    unsigned char destination[4];
+} s_ip;
+
+typedef __packed struct {
+    ethernet_packet eth;
+    s_ip ip;
+} ipv4_packet;
+#define asIPV4(x) ((ipv4_packet*)(x))
+
+#define PROTO_ICMP  0x01
+
+typedef __packed struct {
+    ethernet_packet eth;
+    s_ip ip;
+    __packed struct {
+        unsigned char type;
+        unsigned char code;
+        uint16_t checksum;
+        uint16_t identifier;
+        uint16_t sequence_number;
+        unsigned char data[];
+    } icmp;
+} icmp_packet;
+#define asICMP(x) ((icmp_packet*)(x))
+
+#define ICMP_REQUEST 0x08
+#define ICMP_REPLY   0x00
+
+#endif
\ No newline at end of file
--- a/mbed_globals.h	Wed Nov 17 22:27:23 2010 +0000
+++ b/mbed_globals.h	Sat Nov 27 19:08:38 2010 +0000
@@ -62,6 +62,13 @@
     #define EXTERN_C
 #endif
 
+// Byte swap macros
+#define HTONS(x) (((((unsigned short)(x))>>8) & 0xff) | ((((unsigned short)(x)) & 0xff)<<8))
+#define NTOHS(x) (((((unsigned short)(x))>>8) & 0xff) | ((((unsigned short)(x)) & 0xff)<<8))
+#define HTONL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
+#define NTOHL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
+
+
 /** Constants **/
 // Peripheral Clock Selection register bit values (Table 42, p57)
 #define CCLK4   0U