gefixte version 03122015

Dependencies:   EthernetInterface mbed-rtos

Fork of Telemetrie_eth_h2m by Hochschule München

Committer:
HMFK03LST1
Date:
Sat May 02 11:02:37 2015 +0000
Revision:
0:c0179f2ad295
Child:
2:e19b937a29c1
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HMFK03LST1 0:c0179f2ad295 1 /*------------------------------------------------*/
HMFK03LST1 0:c0179f2ad295 2 /*Autor: Sebastian Hauzenberger */
HMFK03LST1 0:c0179f2ad295 3 /*------------------------------------------------*/
HMFK03LST1 0:c0179f2ad295 4
HMFK03LST1 0:c0179f2ad295 5 #include "Telemetry.h"
HMFK03LST1 0:c0179f2ad295 6
HMFK03LST1 0:c0179f2ad295 7 //LEDs definieren
HMFK03LST1 0:c0179f2ad295 8 #ifdef LED
HMFK03LST1 0:c0179f2ad295 9 DigitalOut ledserial(LED1);
HMFK03LST1 0:c0179f2ad295 10 DigitalOut ledeth(LED2);
HMFK03LST1 0:c0179f2ad295 11 DigitalOut ledsock(LED3);
HMFK03LST1 0:c0179f2ad295 12 DigitalOut ledwfa(LED4);
HMFK03LST1 0:c0179f2ad295 13 #endif
HMFK03LST1 0:c0179f2ad295 14
HMFK03LST1 0:c0179f2ad295 15 //Serielle Schnittstelle definieren
HMFK03LST1 0:c0179f2ad295 16 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 17 Serial serial(USBTX, USBRX);
HMFK03LST1 0:c0179f2ad295 18 #endif
HMFK03LST1 0:c0179f2ad295 19
HMFK03LST1 0:c0179f2ad295 20 //Konstruktoren
HMFK03LST1 0:c0179f2ad295 21 EthernetInterface eth;
HMFK03LST1 0:c0179f2ad295 22 TCPSocketConnection sock_tcp;
HMFK03LST1 0:c0179f2ad295 23 UDPSocket sock_udp;
HMFK03LST1 0:c0179f2ad295 24
HMFK03LST1 0:c0179f2ad295 25
HMFK03LST1 0:c0179f2ad295 26 //Globale Variable
HMFK03LST1 0:c0179f2ad295 27 bool InitSucceed = false;
HMFK03LST1 0:c0179f2ad295 28
HMFK03LST1 0:c0179f2ad295 29 Telemetry::Telemetry()
HMFK03LST1 0:c0179f2ad295 30 {
HMFK03LST1 0:c0179f2ad295 31
HMFK03LST1 0:c0179f2ad295 32 }
HMFK03LST1 0:c0179f2ad295 33
HMFK03LST1 0:c0179f2ad295 34 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 35 void Telemetry::InitUSBSerialConnection()
HMFK03LST1 0:c0179f2ad295 36 {
HMFK03LST1 0:c0179f2ad295 37 serial.baud(115200);
HMFK03LST1 0:c0179f2ad295 38
HMFK03LST1 0:c0179f2ad295 39 #ifdef LED
HMFK03LST1 0:c0179f2ad295 40 ledserial = 1;
HMFK03LST1 0:c0179f2ad295 41 #endif
HMFK03LST1 0:c0179f2ad295 42 }
HMFK03LST1 0:c0179f2ad295 43 #endif
HMFK03LST1 0:c0179f2ad295 44
HMFK03LST1 0:c0179f2ad295 45 //Funktion überladen. Ohne Parameter DHCP und 10 Sekunden Timeout. Mit Parameter kein DHCP und 3 Sekunden Timeout
HMFK03LST1 0:c0179f2ad295 46 bool Telemetry::InitEthernetConnection()
HMFK03LST1 0:c0179f2ad295 47 {
HMFK03LST1 0:c0179f2ad295 48 bool ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 49 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 50 serial.printf("Initalisiere LAN Verbindung mit DHCP\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 51 #endif
HMFK03LST1 0:c0179f2ad295 52
HMFK03LST1 0:c0179f2ad295 53 //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler!
HMFK03LST1 0:c0179f2ad295 54 if (!InitSucceed)
HMFK03LST1 0:c0179f2ad295 55 {
HMFK03LST1 0:c0179f2ad295 56 if (eth.init()==0) //Init Interface
HMFK03LST1 0:c0179f2ad295 57 {
HMFK03LST1 0:c0179f2ad295 58 InitSucceed = true;
HMFK03LST1 0:c0179f2ad295 59 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 60 }
HMFK03LST1 0:c0179f2ad295 61 }
HMFK03LST1 0:c0179f2ad295 62
HMFK03LST1 0:c0179f2ad295 63 //Nur wenn Initialisierung erfolgreich war!
HMFK03LST1 0:c0179f2ad295 64 if (InitSucceed)
HMFK03LST1 0:c0179f2ad295 65 {
HMFK03LST1 0:c0179f2ad295 66 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 67 serial.printf("Verbinde\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 68 #endif
HMFK03LST1 0:c0179f2ad295 69
HMFK03LST1 0:c0179f2ad295 70 if (eth.connect(10000)==0) //CONNECT
HMFK03LST1 0:c0179f2ad295 71 {
HMFK03LST1 0:c0179f2ad295 72 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 73 serial.printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress());
HMFK03LST1 0:c0179f2ad295 74 #endif
HMFK03LST1 0:c0179f2ad295 75
HMFK03LST1 0:c0179f2ad295 76 #ifdef LED
HMFK03LST1 0:c0179f2ad295 77 ledeth = 1;
HMFK03LST1 0:c0179f2ad295 78 #endif
HMFK03LST1 0:c0179f2ad295 79
HMFK03LST1 0:c0179f2ad295 80 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 81 }
HMFK03LST1 0:c0179f2ad295 82 else
HMFK03LST1 0:c0179f2ad295 83 {
HMFK03LST1 0:c0179f2ad295 84 ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 85 }
HMFK03LST1 0:c0179f2ad295 86 }
HMFK03LST1 0:c0179f2ad295 87
HMFK03LST1 0:c0179f2ad295 88 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 89 if (ReturnValue == false)
HMFK03LST1 0:c0179f2ad295 90 {
HMFK03LST1 0:c0179f2ad295 91 serial.printf("Fehlgeschlagen!");
HMFK03LST1 0:c0179f2ad295 92 }
HMFK03LST1 0:c0179f2ad295 93 #endif
HMFK03LST1 0:c0179f2ad295 94
HMFK03LST1 0:c0179f2ad295 95 return ReturnValue;
HMFK03LST1 0:c0179f2ad295 96 }
HMFK03LST1 0:c0179f2ad295 97
HMFK03LST1 0:c0179f2ad295 98 bool Telemetry::InitEthernetConnection(const char* IPAdress, const char* SubNetMask, const char* GateWay)
HMFK03LST1 0:c0179f2ad295 99 {
HMFK03LST1 0:c0179f2ad295 100 bool ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 101 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 102 serial.printf("Initalisiere LAN Verbindung ohne DHCP\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 103 serial.printf("IP: %s - GateWay: %s - SubNetMask: %s\r\n\r\n",IPAdress, GateWay, SubNetMask);
HMFK03LST1 0:c0179f2ad295 104 #endif
HMFK03LST1 0:c0179f2ad295 105
HMFK03LST1 0:c0179f2ad295 106 //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler!
HMFK03LST1 0:c0179f2ad295 107 if (!InitSucceed)
HMFK03LST1 0:c0179f2ad295 108 {
HMFK03LST1 0:c0179f2ad295 109 if (eth.init(IPAdress, SubNetMask, GateWay)==0) //Init Interface
HMFK03LST1 0:c0179f2ad295 110 {
HMFK03LST1 0:c0179f2ad295 111 InitSucceed = true;
HMFK03LST1 0:c0179f2ad295 112 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 113 }
HMFK03LST1 0:c0179f2ad295 114 }
HMFK03LST1 0:c0179f2ad295 115
HMFK03LST1 0:c0179f2ad295 116 //Nur wenn Initialisierung erfolgreich war!
HMFK03LST1 0:c0179f2ad295 117 if (InitSucceed)
HMFK03LST1 0:c0179f2ad295 118 {
HMFK03LST1 0:c0179f2ad295 119 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 120 serial.printf("Verbinde\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 121 #endif
HMFK03LST1 0:c0179f2ad295 122
HMFK03LST1 0:c0179f2ad295 123 if (eth.connect(3000)==0) //CONNECT
HMFK03LST1 0:c0179f2ad295 124 {
HMFK03LST1 0:c0179f2ad295 125 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 126 serial.printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress());
HMFK03LST1 0:c0179f2ad295 127 #endif
HMFK03LST1 0:c0179f2ad295 128
HMFK03LST1 0:c0179f2ad295 129 #ifdef LED
HMFK03LST1 0:c0179f2ad295 130 ledeth = 1;
HMFK03LST1 0:c0179f2ad295 131 #endif
HMFK03LST1 0:c0179f2ad295 132
HMFK03LST1 0:c0179f2ad295 133 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 134 }
HMFK03LST1 0:c0179f2ad295 135 else
HMFK03LST1 0:c0179f2ad295 136 {
HMFK03LST1 0:c0179f2ad295 137 ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 138 }
HMFK03LST1 0:c0179f2ad295 139 }
HMFK03LST1 0:c0179f2ad295 140
HMFK03LST1 0:c0179f2ad295 141 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 142 if (ReturnValue == false)
HMFK03LST1 0:c0179f2ad295 143 {
HMFK03LST1 0:c0179f2ad295 144 serial.printf("Fehlgeschlagen!");
HMFK03LST1 0:c0179f2ad295 145 }
HMFK03LST1 0:c0179f2ad295 146 #endif
HMFK03LST1 0:c0179f2ad295 147
HMFK03LST1 0:c0179f2ad295 148 return ReturnValue;
HMFK03LST1 0:c0179f2ad295 149 }
HMFK03LST1 0:c0179f2ad295 150
HMFK03LST1 0:c0179f2ad295 151
HMFK03LST1 0:c0179f2ad295 152 void Telemetry::CloseEthernetConnection()
HMFK03LST1 0:c0179f2ad295 153 {
HMFK03LST1 0:c0179f2ad295 154 eth.disconnect();
HMFK03LST1 0:c0179f2ad295 155
HMFK03LST1 0:c0179f2ad295 156 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 157 serial.printf("LAN Verbindung geschlossen\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 158 #endif
HMFK03LST1 0:c0179f2ad295 159
HMFK03LST1 0:c0179f2ad295 160 #ifdef LED
HMFK03LST1 0:c0179f2ad295 161 ledeth = 0;
HMFK03LST1 0:c0179f2ad295 162 #endif
HMFK03LST1 0:c0179f2ad295 163 }
HMFK03LST1 0:c0179f2ad295 164
HMFK03LST1 0:c0179f2ad295 165 void Telemetry::ConnectSocket_tcp(char* Host)
HMFK03LST1 0:c0179f2ad295 166 {
HMFK03LST1 0:c0179f2ad295 167 sock_tcp.connect(Host, 80);
HMFK03LST1 0:c0179f2ad295 168
HMFK03LST1 0:c0179f2ad295 169 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 170 serial.printf("TCP Socket geoeffnet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 171 #endif
HMFK03LST1 0:c0179f2ad295 172
HMFK03LST1 0:c0179f2ad295 173 #ifdef LED
HMFK03LST1 0:c0179f2ad295 174 ledsock = 1;
HMFK03LST1 0:c0179f2ad295 175 #endif
HMFK03LST1 0:c0179f2ad295 176 }
HMFK03LST1 0:c0179f2ad295 177
HMFK03LST1 0:c0179f2ad295 178 void Telemetry::ConnectSocket_udp()
HMFK03LST1 0:c0179f2ad295 179 {
HMFK03LST1 0:c0179f2ad295 180 sock_udp.init();
HMFK03LST1 0:c0179f2ad295 181
HMFK03LST1 0:c0179f2ad295 182 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 183 serial.printf("UDP Socket geoeffnet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 184 #endif
HMFK03LST1 0:c0179f2ad295 185
HMFK03LST1 0:c0179f2ad295 186 }
HMFK03LST1 0:c0179f2ad295 187
HMFK03LST1 0:c0179f2ad295 188 void Telemetry::CloseSocket()
HMFK03LST1 0:c0179f2ad295 189 {
HMFK03LST1 0:c0179f2ad295 190 sock_tcp.close();
HMFK03LST1 0:c0179f2ad295 191 sock_udp.close();
HMFK03LST1 0:c0179f2ad295 192
HMFK03LST1 0:c0179f2ad295 193 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 194 serial.printf("TCP/UDP Socket geschlossen.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 195 #endif
HMFK03LST1 0:c0179f2ad295 196
HMFK03LST1 0:c0179f2ad295 197 #ifdef LED
HMFK03LST1 0:c0179f2ad295 198 ledsock = 0;
HMFK03LST1 0:c0179f2ad295 199 #endif
HMFK03LST1 0:c0179f2ad295 200 }
HMFK03LST1 0:c0179f2ad295 201
HMFK03LST1 0:c0179f2ad295 202
HMFK03LST1 0:c0179f2ad295 203 void Telemetry::TransmitDataoverUDP(char *Host, int Port, string Daten)
HMFK03LST1 0:c0179f2ad295 204 {
HMFK03LST1 0:c0179f2ad295 205 Endpoint data_server;
HMFK03LST1 0:c0179f2ad295 206 data_server.set_address(Host, Port);
HMFK03LST1 0:c0179f2ad295 207 //Umwandeln in char*
HMFK03LST1 0:c0179f2ad295 208 const char *DataBuf = Daten.c_str();
HMFK03LST1 0:c0179f2ad295 209 char DataPaket[Daten.length()];
HMFK03LST1 0:c0179f2ad295 210 strcpy(DataPaket,DataBuf);
HMFK03LST1 0:c0179f2ad295 211
HMFK03LST1 0:c0179f2ad295 212 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 213 serial.printf("----\r\n%s----\r\n\r\n",DataPaket);
HMFK03LST1 0:c0179f2ad295 214 serial.printf("Sende Paket UDP.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 215 #endif
HMFK03LST1 0:c0179f2ad295 216
HMFK03LST1 0:c0179f2ad295 217 sock_udp.sendTo(data_server, DataPaket, sizeof(DataPaket));
HMFK03LST1 0:c0179f2ad295 218
HMFK03LST1 0:c0179f2ad295 219 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 220 serial.printf("UDP Paket gesendet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 221 #endif
HMFK03LST1 0:c0179f2ad295 222 }
HMFK03LST1 0:c0179f2ad295 223
HMFK03LST1 0:c0179f2ad295 224 void Telemetry::TransmitDataoverTCP(char *Host, string Daten, string Username, string Passwort)
HMFK03LST1 0:c0179f2ad295 225 {
HMFK03LST1 0:c0179f2ad295 226 #ifdef LED
HMFK03LST1 0:c0179f2ad295 227 ledwfa = 1;
HMFK03LST1 0:c0179f2ad295 228 #endif
HMFK03LST1 0:c0179f2ad295 229
HMFK03LST1 0:c0179f2ad295 230 //Datenpaket schnüren
HMFK03LST1 0:c0179f2ad295 231 string DATEN = "Username=" + Username + "&Passwort=" + Passwort + "&Paket=" + Daten;
HMFK03LST1 0:c0179f2ad295 232
HMFK03LST1 0:c0179f2ad295 233 string POST = "POST /H2MClient/h2m_client.php HTTP/1.1\r\n";
HMFK03LST1 0:c0179f2ad295 234
HMFK03LST1 0:c0179f2ad295 235 string HostString = Host;
HMFK03LST1 0:c0179f2ad295 236 string HOST = "Host: " + HostString + "\r\n";
HMFK03LST1 0:c0179f2ad295 237
HMFK03LST1 0:c0179f2ad295 238 string CONTENTTYPE = "Content-Type: application/x-www-form-urlencoded\r\n";
HMFK03LST1 0:c0179f2ad295 239
HMFK03LST1 0:c0179f2ad295 240 string Length;
HMFK03LST1 0:c0179f2ad295 241 stringstream convert;
HMFK03LST1 0:c0179f2ad295 242 convert << DATEN.length();
HMFK03LST1 0:c0179f2ad295 243 Length = convert.str();
HMFK03LST1 0:c0179f2ad295 244 string CONTENTLENGTH = "Content-Length: " + Length + "\r\n\r\n";
HMFK03LST1 0:c0179f2ad295 245
HMFK03LST1 0:c0179f2ad295 246
HMFK03LST1 0:c0179f2ad295 247 string datenpaket = POST + HOST + CONTENTTYPE + CONTENTLENGTH + DATEN + "\r\n";
HMFK03LST1 0:c0179f2ad295 248
HMFK03LST1 0:c0179f2ad295 249 //Umwandeln in char*
HMFK03LST1 0:c0179f2ad295 250 const char *DataBuf = datenpaket.c_str();
HMFK03LST1 0:c0179f2ad295 251 char DataPaket[datenpaket.length()];
HMFK03LST1 0:c0179f2ad295 252 strcpy(DataPaket,DataBuf);
HMFK03LST1 0:c0179f2ad295 253
HMFK03LST1 0:c0179f2ad295 254 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 255 serial.printf("----\r\n%s----\r\n\r\n",DataPaket);
HMFK03LST1 0:c0179f2ad295 256 serial.printf("Sende Paket.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 257 #endif
HMFK03LST1 0:c0179f2ad295 258
HMFK03LST1 0:c0179f2ad295 259 sock_tcp.send_all(DataPaket, sizeof(DataPaket)-1);
HMFK03LST1 0:c0179f2ad295 260
HMFK03LST1 0:c0179f2ad295 261 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 262 serial.printf("Paket gesendet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 263 #endif
HMFK03LST1 0:c0179f2ad295 264
HMFK03LST1 0:c0179f2ad295 265 #ifdef LED
HMFK03LST1 0:c0179f2ad295 266 ledwfa = 0;
HMFK03LST1 0:c0179f2ad295 267 #endif
HMFK03LST1 0:c0179f2ad295 268 }
HMFK03LST1 0:c0179f2ad295 269
HMFK03LST1 0:c0179f2ad295 270 void Telemetry::ReadAnswerandTransmitoverSerial()
HMFK03LST1 0:c0179f2ad295 271 {
HMFK03LST1 0:c0179f2ad295 272 char buffer[300];
HMFK03LST1 0:c0179f2ad295 273 int ret;
HMFK03LST1 0:c0179f2ad295 274 while (true)
HMFK03LST1 0:c0179f2ad295 275 {
HMFK03LST1 0:c0179f2ad295 276 ret = sock_tcp.receive(buffer, sizeof(buffer)-1);
HMFK03LST1 0:c0179f2ad295 277 if (ret <= 0)
HMFK03LST1 0:c0179f2ad295 278 break;
HMFK03LST1 0:c0179f2ad295 279 buffer[ret] = '\0';
HMFK03LST1 0:c0179f2ad295 280
HMFK03LST1 0:c0179f2ad295 281 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 282 serial.printf("Received %d chars from server:\n%s\n", ret, buffer);
HMFK03LST1 0:c0179f2ad295 283 #endif
HMFK03LST1 0:c0179f2ad295 284 }
HMFK03LST1 0:c0179f2ad295 285 #ifdef LED
HMFK03LST1 0:c0179f2ad295 286 ledwfa = 0;
HMFK03LST1 0:c0179f2ad295 287 #endif
HMFK03LST1 0:c0179f2ad295 288 }
HMFK03LST1 0:c0179f2ad295 289
HMFK03LST1 0:c0179f2ad295 290 string Telemetry::ReadAnswer()
HMFK03LST1 0:c0179f2ad295 291 {
HMFK03LST1 0:c0179f2ad295 292 char buffer[300];
HMFK03LST1 0:c0179f2ad295 293 int ret;
HMFK03LST1 0:c0179f2ad295 294 while (true)
HMFK03LST1 0:c0179f2ad295 295 {
HMFK03LST1 0:c0179f2ad295 296 ret = sock_tcp.receive(buffer, sizeof(buffer)-1);
HMFK03LST1 0:c0179f2ad295 297 if (ret <= 0)
HMFK03LST1 0:c0179f2ad295 298 break;
HMFK03LST1 0:c0179f2ad295 299 buffer[ret] = '\0';
HMFK03LST1 0:c0179f2ad295 300 }
HMFK03LST1 0:c0179f2ad295 301
HMFK03LST1 0:c0179f2ad295 302 #ifdef LED
HMFK03LST1 0:c0179f2ad295 303 ledwfa = 0;
HMFK03LST1 0:c0179f2ad295 304 #endif
HMFK03LST1 0:c0179f2ad295 305
HMFK03LST1 0:c0179f2ad295 306 return buffer;
HMFK03LST1 0:c0179f2ad295 307 }