This example shows using the SeeedStudio arch pro as an Ethernet server. It will initialize the Ethernet port, display its IP address, display the IP address of connecting clients and then return data sent from the client.

Dependencies:   EthernetInterface SeeedGrayOLED USBDevice mbed-rtos mbed

Fork of Ethernet_Status_HelloWorld by Edoardo De Marchi

This mbed server example for SeeedStudio also needs a client to connect.

I compiled and ran this on my opensuse linux virtual machine but I think it should compile and run fine on most linux distrubutions and probably on OSX as well:

<codei>

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <unistd.h>
  4. include <string.h>
  5. include <sys/types.h>
  6. include <sys/socket.h>
  7. include <netinet/in.h>
  8. include <netdb.h>

void error(const char *msg) { perror(msg); exit(0); }

int main(int argc, char *argv[]) { int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server;

char buffer[256]; if (argc < 3) { fprintf(stderr,"usage %s hostname port\n", argv[0]); exit(0); } portno = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); printf("Please enter the message: "); bzero(buffer,256); fgets(buffer,255,stdin); n = write(sockfd,buffer,strlen(buffer)); if (n < 0) error("ERROR writing to socket"); bzero(buffer,256); n = read(sockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("%s\n",buffer); close(sockfd); return 0; } <code>

Files at this revision

API Documentation at this revision

Comitter:
edodm85
Date:
Wed Jan 15 20:37:57 2014 +0000
Child:
1:67817eb9bb9e
Commit message:
First Version

Changed in this revision

EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
eth_status.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetInterface.lib	Wed Jan 15 20:37:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/EthernetInterface/#6a67d2bddc7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eth_status.h	Wed Jan 15 20:37:57 2014 +0000
@@ -0,0 +1,41 @@
+#include "lpc_phy.h"
+
+/** \brief DP83848 PHY status definitions */
+#define DP8_REMOTEFAULT    (1 << 6)   /**< Remote fault */
+#define DP8_FULLDUPLEX     (1 << 2)   /**< 1=full duplex */
+#define DP8_SPEED10MBPS    (1 << 1)   /**< 1=10MBps speed */
+#define DP8_VALID_LINK     (1 << 0)   /**< 1=Link active */
+
+
+    // This function returns the current status of connection.
+static bool get_link_status()
+{
+    u32_t tmp = lpc_mii_read_data();        
+    return (tmp & DP8_VALID_LINK) ? true : false;
+}
+
+    // This function returns the status of transmission.
+static char* get_transmission_status()
+{
+    u32_t tmp = lpc_mii_read_data();
+    if(tmp & DP8_FULLDUPLEX)
+    { 
+        return "FULL DUPLEX"; 
+    }else
+    {        
+        return "HALF DUPLEX";
+    }
+}
+
+    // This function returns the speed of the connection.
+static int get_connection_speed()
+{
+    u32_t tmp = lpc_mii_read_data();
+    return (tmp & DP8_SPEED10MBPS) ? 10 : 100;
+}
+
+    // This function returns the current value in the MII data register.
+u32_t mii_read_data()
+{
+    return lpc_mii_read_data();  // 16-bit MRDD - address 0x2008 4030                             
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jan 15 20:37:57 2014 +0000
@@ -0,0 +1,85 @@
+/*
+ * Author: Edoardo De Marchi
+ * Date: 15/01/14
+ * Notes: OV7670 + FIFO AL422B camera test (TCP Ethernet)
+*/
+
+
+#include "mbed.h"
+#include "EthernetInterface.h"
+#include "eth_status.h"
+
+DigitalOut led1(LED1);          
+DigitalOut led2(LED2);          
+DigitalOut led3(LED3);          
+DigitalOut led4(LED4);   
+       
+//ETHERNET
+#define ECHO_SERVER_PORT   2000
+
+char* ip = "192.168.153.153";               // ip
+char* mask = "255.255.255.0";               // mask
+char* gateway = "192.168.153.100";          // gateway
+EthernetInterface eth;
+TCPSocketConnection client;
+TCPSocketServer server; 
+
+
+int Init()
+{
+    led1 = 0;               
+    led2 = 0;               
+    led3 = 0;               
+    led4 = 0;               
+    
+       
+    // ETHERNET
+    eth.init(ip, mask, gateway);
+    eth.connect();
+    server.bind(ECHO_SERVER_PORT);
+    server.listen(1);
+    printf("IP Address is %s\r\n", eth.getIPAddress());    
+    printf("%s  - Speed: %d Mbps\n", get_transmission_status(), get_connection_speed());
+             
+    return 0;
+}
+
+
+
+int main() 
+{
+    bool eth_status = false;
+    bool eth_status_temp = true;
+    
+    Init();
+    
+    
+    while(true) 
+    {
+        printf("\nWait for new connection...\n");
+        server.accept(client);
+        
+        printf("Connection from: %s\n", client.get_address());
+
+        while (true)
+        {          
+            if(!get_link_status())
+            {
+                eth_status = true; 
+            }else
+            {
+                led1 = 0;                           
+            }
+            
+            if(eth_status == eth_status_temp)
+            {
+                eth_status_temp = !eth_status;
+                printf("Check cable connection\r\n");
+                led1 = 1;
+                eth_status = false;
+            }
+            led2 = !led2; 
+            osDelay(500);
+        }          
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Wed Jan 15 20:37:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-rtos/#29007aef10a4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jan 15 20:37:57 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file