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>

main.cpp

Committer:
edodm85
Date:
2014-02-15
Revision:
3:af736e1af4a9
Parent:
2:922ee74b0192
Child:
4:9f88f8b4e739

File content as of revision 3:af736e1af4a9:

/*
 * Author: Edoardo De Marchi
 * Date: 15/02/14
 * Notes: Checks the Ethernet cable connection
*/


#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
            {
                eth_status = false;
                eth_status_temp = true;
                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);
        }          
    }
}