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>

Committer:
edodm85
Date:
Wed Jan 15 20:37:57 2014 +0000
Revision:
0:9e8b3fd68f6c
Child:
1:67817eb9bb9e
First Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
edodm85 0:9e8b3fd68f6c 1 #include "lpc_phy.h"
edodm85 0:9e8b3fd68f6c 2
edodm85 0:9e8b3fd68f6c 3 /** \brief DP83848 PHY status definitions */
edodm85 0:9e8b3fd68f6c 4 #define DP8_REMOTEFAULT (1 << 6) /**< Remote fault */
edodm85 0:9e8b3fd68f6c 5 #define DP8_FULLDUPLEX (1 << 2) /**< 1=full duplex */
edodm85 0:9e8b3fd68f6c 6 #define DP8_SPEED10MBPS (1 << 1) /**< 1=10MBps speed */
edodm85 0:9e8b3fd68f6c 7 #define DP8_VALID_LINK (1 << 0) /**< 1=Link active */
edodm85 0:9e8b3fd68f6c 8
edodm85 0:9e8b3fd68f6c 9
edodm85 0:9e8b3fd68f6c 10 // This function returns the current status of connection.
edodm85 0:9e8b3fd68f6c 11 static bool get_link_status()
edodm85 0:9e8b3fd68f6c 12 {
edodm85 0:9e8b3fd68f6c 13 u32_t tmp = lpc_mii_read_data();
edodm85 0:9e8b3fd68f6c 14 return (tmp & DP8_VALID_LINK) ? true : false;
edodm85 0:9e8b3fd68f6c 15 }
edodm85 0:9e8b3fd68f6c 16
edodm85 0:9e8b3fd68f6c 17 // This function returns the status of transmission.
edodm85 0:9e8b3fd68f6c 18 static char* get_transmission_status()
edodm85 0:9e8b3fd68f6c 19 {
edodm85 0:9e8b3fd68f6c 20 u32_t tmp = lpc_mii_read_data();
edodm85 0:9e8b3fd68f6c 21 if(tmp & DP8_FULLDUPLEX)
edodm85 0:9e8b3fd68f6c 22 {
edodm85 0:9e8b3fd68f6c 23 return "FULL DUPLEX";
edodm85 0:9e8b3fd68f6c 24 }else
edodm85 0:9e8b3fd68f6c 25 {
edodm85 0:9e8b3fd68f6c 26 return "HALF DUPLEX";
edodm85 0:9e8b3fd68f6c 27 }
edodm85 0:9e8b3fd68f6c 28 }
edodm85 0:9e8b3fd68f6c 29
edodm85 0:9e8b3fd68f6c 30 // This function returns the speed of the connection.
edodm85 0:9e8b3fd68f6c 31 static int get_connection_speed()
edodm85 0:9e8b3fd68f6c 32 {
edodm85 0:9e8b3fd68f6c 33 u32_t tmp = lpc_mii_read_data();
edodm85 0:9e8b3fd68f6c 34 return (tmp & DP8_SPEED10MBPS) ? 10 : 100;
edodm85 0:9e8b3fd68f6c 35 }
edodm85 0:9e8b3fd68f6c 36
edodm85 0:9e8b3fd68f6c 37 // This function returns the current value in the MII data register.
edodm85 0:9e8b3fd68f6c 38 u32_t mii_read_data()
edodm85 0:9e8b3fd68f6c 39 {
edodm85 0:9e8b3fd68f6c 40 return lpc_mii_read_data(); // 16-bit MRDD - address 0x2008 4030
edodm85 0:9e8b3fd68f6c 41 }