broken EthernetInterface + mbed

Dependencies:   EthernetInterface WebSocketClient mbed-rtos mbed

Fork of MPOA_cv5 by Ales Povalac

Committer:
alpov
Date:
Thu Nov 13 20:55:35 2014 +0000
Revision:
1:608807b39972
Parent:
0:5ea574b42acf
demo for mbed fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alpov 0:5ea574b42acf 1 #include "mbed.h"
alpov 0:5ea574b42acf 2 #include "rtos.h"
alpov 0:5ea574b42acf 3 #include "EthernetInterface.h"
alpov 0:5ea574b42acf 4 #include "Websocket.h"
alpov 0:5ea574b42acf 5
alpov 0:5ea574b42acf 6 extern "C" void mbed_mac_address(char *mac)
alpov 0:5ea574b42acf 7 {
alpov 0:5ea574b42acf 8 mac[0] = 0x00;
alpov 0:5ea574b42acf 9 mac[1] = 0x02;
alpov 0:5ea574b42acf 10 mac[2] = 0xF7;
alpov 0:5ea574b42acf 11 mac[3] = 0xFE;
alpov 0:5ea574b42acf 12 mac[4] = 0xEC;
alpov 0:5ea574b42acf 13 mac[5] = 0x85;
alpov 0:5ea574b42acf 14 }
alpov 0:5ea574b42acf 15
alpov 0:5ea574b42acf 16 EthernetInterface eth;
alpov 0:5ea574b42acf 17 Serial pc(USBTX, USBRX);
alpov 0:5ea574b42acf 18 DigitalOut led(PTE26, 1);
alpov 0:5ea574b42acf 19
alpov 0:5ea574b42acf 20 bool command(TCPSocketConnection *client, Websocket *ws, char *cmd)
alpov 0:5ea574b42acf 21 {
alpov 0:5ea574b42acf 22 if (strcmp(cmd, "help") == 0) {
alpov 0:5ea574b42acf 23 char s[] = "Napoveda s prikazy\r\nTak ruzne\r\n";
alpov 0:5ea574b42acf 24 client->send_all(s, strlen(s));
alpov 0:5ea574b42acf 25 return true;
alpov 0:5ea574b42acf 26 }
alpov 0:5ea574b42acf 27 else if (strcmp(cmd, "start") == 0) {
alpov 0:5ea574b42acf 28 led = 0;
alpov 0:5ea574b42acf 29 char s[] = "Zapnuto\r\n";
alpov 0:5ea574b42acf 30 client->send_all(s, strlen(s));
alpov 0:5ea574b42acf 31 return true;
alpov 0:5ea574b42acf 32 }
alpov 0:5ea574b42acf 33 else if (strcmp(cmd, "stop") == 0) {
alpov 0:5ea574b42acf 34 led = 1;
alpov 0:5ea574b42acf 35 char s[] = "Vypnuto\r\n";
alpov 0:5ea574b42acf 36 client->send_all(s, strlen(s));
alpov 0:5ea574b42acf 37 return true;
alpov 0:5ea574b42acf 38 }
alpov 0:5ea574b42acf 39 else if (strcmp(cmd, "exit") == 0) {
alpov 0:5ea574b42acf 40 return false;
alpov 0:5ea574b42acf 41 }
alpov 0:5ea574b42acf 42 else if (strcmp(cmd, "quit") == 0) {
alpov 0:5ea574b42acf 43 return false;
alpov 0:5ea574b42acf 44 }
alpov 0:5ea574b42acf 45 else if (strncmp(cmd, "ws ", 3) == 0) {
alpov 0:5ea574b42acf 46 char s[100];
alpov 0:5ea574b42acf 47 sprintf(s, "%s rika: '%s'", eth.getIPAddress(), &cmd[3]);
alpov 0:5ea574b42acf 48 ws->send(s);
alpov 0:5ea574b42acf 49 return true;
alpov 0:5ea574b42acf 50 }
alpov 0:5ea574b42acf 51 else {
alpov 0:5ea574b42acf 52 char s[] = "Neznamy prikaz\r\n";
alpov 0:5ea574b42acf 53 client->send_all(s, strlen(s));
alpov 0:5ea574b42acf 54 return true;
alpov 0:5ea574b42acf 55 }
alpov 0:5ea574b42acf 56 }
alpov 0:5ea574b42acf 57
alpov 0:5ea574b42acf 58
alpov 0:5ea574b42acf 59 int main (void)
alpov 0:5ea574b42acf 60 {
alpov 0:5ea574b42acf 61 char mac[6];
alpov 0:5ea574b42acf 62 pc.baud(115200);
alpov 0:5ea574b42acf 63
alpov 0:5ea574b42acf 64 mbed_mac_address(mac);
alpov 0:5ea574b42acf 65 printf("MAC is %02x:%02x:%02x:%02x:%02x:%02x\r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
alpov 0:5ea574b42acf 66
alpov 0:5ea574b42acf 67 eth.init(); //Use DHCP
alpov 0:5ea574b42acf 68 eth.connect();
alpov 0:5ea574b42acf 69 printf("IP Address is %s\n", eth.getIPAddress());
alpov 0:5ea574b42acf 70
alpov 0:5ea574b42acf 71 TCPSocketServer server;
alpov 0:5ea574b42acf 72 server.bind(23);
alpov 0:5ea574b42acf 73 server.listen();
alpov 0:5ea574b42acf 74
alpov 0:5ea574b42acf 75 while (true) {
alpov 0:5ea574b42acf 76 TCPSocketConnection client;
alpov 0:5ea574b42acf 77 server.accept(client);
alpov 0:5ea574b42acf 78 printf("Connection from: %s\n", client.get_address());
alpov 0:5ea574b42acf 79
alpov 0:5ea574b42acf 80 char s1[] = "\e[2j\aInicializace WS...\r\n";
alpov 0:5ea574b42acf 81 char s2[] = "\aVitejte v programu, pro napovedu prosim help.\r\n";
alpov 0:5ea574b42acf 82 client.send_all(s1, strlen(s1));
alpov 0:5ea574b42acf 83
alpov 0:5ea574b42acf 84 Websocket ws("ws://sockets.mbed.org/ws/mpoa/wo");
alpov 0:5ea574b42acf 85 ws.connect();
alpov 0:5ea574b42acf 86
alpov 0:5ea574b42acf 87 client.send_all(s2, strlen(s2));
alpov 0:5ea574b42acf 88
alpov 0:5ea574b42acf 89 char cmd[100];
alpov 0:5ea574b42acf 90 int pos = 0;
alpov 0:5ea574b42acf 91 bool quit = false;
alpov 0:5ea574b42acf 92 while (true) {
alpov 0:5ea574b42acf 93 char c;
alpov 0:5ea574b42acf 94 int n = client.receive(&c, 1);
alpov 0:5ea574b42acf 95 if (n <= 0) break;
alpov 0:5ea574b42acf 96 switch (c) {
alpov 0:5ea574b42acf 97 case 0x04:
alpov 0:5ea574b42acf 98 quit = true;
alpov 0:5ea574b42acf 99 break;
alpov 0:5ea574b42acf 100 case 0x0A:
alpov 0:5ea574b42acf 101 break;
alpov 0:5ea574b42acf 102 case 0x0D:
alpov 0:5ea574b42acf 103 cmd[pos] = '\0';
alpov 0:5ea574b42acf 104 quit = not command(&client, &ws, cmd);
alpov 0:5ea574b42acf 105 pos = 0;
alpov 0:5ea574b42acf 106 break;
alpov 0:5ea574b42acf 107 default:
alpov 0:5ea574b42acf 108 cmd[pos++] = c;
alpov 0:5ea574b42acf 109 break;
alpov 0:5ea574b42acf 110 }
alpov 0:5ea574b42acf 111 if (quit) break;
alpov 0:5ea574b42acf 112 }
alpov 0:5ea574b42acf 113 client.close();
alpov 0:5ea574b42acf 114 ws.close();
alpov 0:5ea574b42acf 115 }
alpov 0:5ea574b42acf 116 }
alpov 0:5ea574b42acf 117