#include "mbed.h" #include "EthernetInterface.h" #include #include Serial serial(USBTX, USBRX); const char MY_IP[] = "163.1.6.228"; const char MY_NETMASK[] = "255.255.255.0"; const char MY_GATEWAY[] = "163.1.6.254"; #define PORT 8080 Ticker ledTick; bool serverIsListened = false; bool clientIsConnected = false; bool sendData = false; void ledTickfunc() { sendData = true; } // ========================================= interrupt based third code int main (void) { SPI spi2(PC_12, PC_11, PC_10); // mosi, miso, sclk EthernetInterface eth(&spi2, PC_6, PB_8); wait(1); // 1 second for stable state // late binding TCPSocketServer svr; TCPSocketConnection client; ledTick.attach(&ledTickfunc,2); // as your env. change to real IP address and so on. int ret = eth.init(MY_IP, MY_NETMASK, MY_GATEWAY); if (!ret) { serial.printf("Initialized, MAC: %s\n\r", eth.getMACAddress()); serial.printf("Connected, IP: %s, MASK: %s, GW: %s\n\r", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); } else { serial.printf("Error eth.init() - ret = %d\n\r", ret); return -1; } //setup tcp socket if(svr.bind(PORT)< 0) { serial.printf("tcp server bind failed.\n\r"); return -1; } else { serial.printf("tcp server bind successed.\n\r"); serverIsListened = true; } if(svr.listen(1) < 0) { serial.printf("tcp server listen failed.\n\r"); return -1; } else { serial.printf("tcp server is listening...\n\r"); } // For test eth.reg_wr(0x0018,0xFF); // SIMR eth.reg_wr(0x002C,0x04); // Sn_IMR //printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); //eth.sreg(0,0x0002,0x0005); //printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); char buffer[256] = {}; client.set_blocking(true,1500); // Timeout after (1.5)s while(1){ serial.printf("------------------------\r\n"); serial.printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); //eth.reg_wr(0x0017,0xFF); // SIR eth.sreg(0,0x0002,0xFF); // Sn_IR eth.sreg(1,0x0002,0xFF); // Sn_IR eth.sreg(2,0x0002,0xFF); // Sn_IR eth.sreg(3,0x0002,0xFF); // Sn_IR eth.sreg(4,0x0002,0xFF); // Sn_IR eth.sreg(5,0x0002,0xFF); // Sn_IR eth.sreg(6,0x0002,0xFF); // Sn_IR eth.sreg(7,0x0002,0xFF); // Sn_IR serial.printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); serial.printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer); client.close(); wait(1); } } /* // ========================================= Working Second code int main (void) { SPI spi2(PC_12, PC_11, PC_10); // mosi, miso, sclk EthernetInterface eth(&spi2, PC_6, PB_8); wait(1); // 1 second for stable state // late binding TCPSocketServer svr; TCPSocketConnection client; ledTick.attach(&ledTickfunc,2); // as your env. change to real IP address and so on. int ret = eth.init(MY_IP, MY_NETMASK, MY_GATEWAY); if (!ret) { serial.printf("Initialized, MAC: %s\n\r", eth.getMACAddress()); serial.printf("Connected, IP: %s, MASK: %s, GW: %s\n\r", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); } else { serial.printf("Error eth.init() - ret = %d\n\r", ret); return -1; } //setup tcp socket if(svr.bind(PORT)< 0) { serial.printf("tcp server bind failed.\n\r"); return -1; } else { serial.printf("tcp server bind successed.\n\r"); serverIsListened = true; } if(svr.listen(1) < 0) { serial.printf("tcp server listen failed.\n\r"); return -1; } else { serial.printf("tcp server is listening...\n\r"); } // For test eth.reg_wr(0x0018,0xFF); // SIMR eth.reg_wr(0x002C,0x04); // Sn_IMR //printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); //eth.sreg(0,0x0002,0x0005); //printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); char buffer[256] = {}; client.set_blocking(true,1500); // Timeout after (1.5)s while (serverIsListened) { if(svr.accept(client)<0) { serial.printf("failed to accept connection.\n\r"); }else if(svr.accept(client)== 5){ // there is no connection }else { serial.printf("connection success!\n\rIP: %s\n\r",client.get_address()); clientIsConnected = true; while(clientIsConnected) { switch(client.receive(buffer, 255)) { case 0: //serial.printf("recieved buffer is empty.\n\r"); clientIsConnected = false; client.close(); break; case -1: //serial.printf("failed to read data from client.\n\r"); clientIsConnected = false; client.close(); break; default: //eth.sreg(0,0x0002,0x0005); // Sn_IR //eth.sreg(1,0x0002,0x0005); // Sn_IR serial.printf("1. TEST S0_IR value = %x\r\n",eth.sreg(0,0x0002)); serial.printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer); //if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) { float cnv; cnv = atof(buffer); cnv = -cnv/10.0f; for(int i =0; i < 255; i++) buffer[i] = '\0'; sprintf(buffer,"%f\r\n",cnv); client.send(buffer,strlen(buffer)); clientIsConnected = false; //} for(int i =0; i < 255; i++) buffer[i] = '\0'; clientIsConnected = false; // *** client.close(); // *** break; } // switch(client.receive(buffer, 255)) client.close(); // *** } // while(clientIsConnected) //serial.printf("close connection here.\n\rtcp server is listening...\n\r"); } //if(svr.accept(client)<0) clientIsConnected = false; // *** client.close(); } //while (serverIsListened) } */ /* // ========================================= First code (not as reliable as second code) int main (void) { SPI spi2(PC_12, PC_11, PC_10); // mosi, miso, sclk EthernetInterface eth(&spi2, PC_6, PB_8); wait(1); // 1 second for stable state // late binding TCPSocketServer svr; TCPSocketConnection client; svr.listen(); ledTick.attach(&ledTickfunc,2); // as your env. change to real IP address and so on. int ret = eth.init(MY_IP, MY_NETMASK, MY_GATEWAY); if (!ret) { serial.printf("Initialized, MAC: %s\n\r", eth.getMACAddress()); serial.printf("Connected, IP: %s, MASK: %s, GW: %s\n\r", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); } else { serial.printf("Error eth.init() - ret = %d\n\r", ret); return -1; } //setup tcp socket if(svr.bind(PORT)< 0) { serial.printf("tcp server bind failed.\n\r"); return -1; } else { serial.printf("tcp server bind successed.\n\r"); serverIsListened = true; } if(svr.listen(1) < 0) { serial.printf("tcp server listen failed.\n\r"); return -1; } else { serial.printf("tcp server is listening...\n\r"); } while (true) { // infinit loop serial.printf("\n \r Wait for new connection...\n"); // pc info // TCP/IP client object svr.accept(client); // accept connection serial.printf("\n \r after some line...\n"); client.set_blocking(false); // no blocking connections, timeout after (1.5)s serial.printf("\n \r Connection from: %s\n", client.get_address()); // pc info char buffer[256]; // Data buffer while (true) { // loop for(int i =0; i < 255; i++) buffer[i] = '\0'; // clear buffer int n = client.receive(buffer, sizeof(buffer)); // receive data & save it to buffer if (n <= 0) break; // break if buffer is empty or error occured // send received command to communication handler float cnv; cnv = atof(buffer); cnv = -cnv/10.0f; //serial.printf("data in %f.\n\r",cnv); for(int i =0; i < 255; i++) buffer[i] = '\0'; sprintf(buffer,"%f\r\n",cnv); client.send(buffer,strlen(buffer)); // send reply for(int i =0; i < 255; i++) buffer[i] = '\0'; // clear buffer if (n <= 0) break; // if error occured send break } // serial.printf("exiting inner loop \n\r"); client.close(); // close connection } } */