1.0

Dependencies:   EthernetInterface mbed-rtos

Committer:
HMFK03LST1
Date:
Sat Oct 31 17:33:18 2015 +0000
Revision:
2:e19b937a29c1
Parent:
0:c0179f2ad295
Child:
3:94a735c744ff
stable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HMFK03LST1 0:c0179f2ad295 1 /*------------------------------------------------*/
HMFK03LST1 2:e19b937a29c1 2 /*Autor: Sebastian Donner */
HMFK03LST1 0:c0179f2ad295 3 /*------------------------------------------------*/
HMFK03LST1 0:c0179f2ad295 4
HMFK03LST1 0:c0179f2ad295 5 #include "Telemetry.h"
HMFK03LST1 0:c0179f2ad295 6
HMFK03LST1 2:e19b937a29c1 7 //Debug Schnittstelle
HMFK03LST1 0:c0179f2ad295 8 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 9 Serial debug(USBTX, USBRX);
HMFK03LST1 0:c0179f2ad295 10 #endif
HMFK03LST1 0:c0179f2ad295 11
HMFK03LST1 0:c0179f2ad295 12 //Konstruktoren
HMFK03LST1 2:e19b937a29c1 13 EthernetInterface eth;
HMFK03LST1 0:c0179f2ad295 14 TCPSocketConnection sock_tcp;
HMFK03LST1 2:e19b937a29c1 15 UDPSocket sock_udp_send; //send socket
HMFK03LST1 2:e19b937a29c1 16 UDPSocket sock_udp_rec; //receive socket
HMFK03LST1 2:e19b937a29c1 17
HMFK03LST1 2:e19b937a29c1 18
HMFK03LST1 0:c0179f2ad295 19
HMFK03LST1 0:c0179f2ad295 20
HMFK03LST1 0:c0179f2ad295 21 //Globale Variable
HMFK03LST1 0:c0179f2ad295 22 bool InitSucceed = false;
HMFK03LST1 0:c0179f2ad295 23
HMFK03LST1 0:c0179f2ad295 24 Telemetry::Telemetry()
HMFK03LST1 0:c0179f2ad295 25 {
HMFK03LST1 0:c0179f2ad295 26
HMFK03LST1 0:c0179f2ad295 27 }
HMFK03LST1 0:c0179f2ad295 28
HMFK03LST1 0:c0179f2ad295 29 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 30 void Telemetry::InitUSBSerialConnection()
HMFK03LST1 0:c0179f2ad295 31 {
HMFK03LST1 0:c0179f2ad295 32 serial.baud(115200);
HMFK03LST1 0:c0179f2ad295 33 }
HMFK03LST1 0:c0179f2ad295 34 #endif
HMFK03LST1 0:c0179f2ad295 35
HMFK03LST1 2:e19b937a29c1 36 char Telemetry::do_cs(char* buffer)
HMFK03LST1 2:e19b937a29c1 37 {
HMFK03LST1 2:e19b937a29c1 38 char ck_a=0;
HMFK03LST1 2:e19b937a29c1 39 char ck_b=0;
HMFK03LST1 2:e19b937a29c1 40
HMFK03LST1 2:e19b937a29c1 41 for(int i=0; i < (buffer[0]-1); i++)
HMFK03LST1 2:e19b937a29c1 42 {
HMFK03LST1 2:e19b937a29c1 43 ck_a += buffer[i];
HMFK03LST1 2:e19b937a29c1 44 ck_b += ck_a;
HMFK03LST1 2:e19b937a29c1 45 }
HMFK03LST1 2:e19b937a29c1 46
HMFK03LST1 2:e19b937a29c1 47 return ck_b;
HMFK03LST1 2:e19b937a29c1 48 }
HMFK03LST1 2:e19b937a29c1 49
HMFK03LST1 2:e19b937a29c1 50
HMFK03LST1 0:c0179f2ad295 51 //Funktion überladen. Ohne Parameter DHCP und 10 Sekunden Timeout. Mit Parameter kein DHCP und 3 Sekunden Timeout
HMFK03LST1 0:c0179f2ad295 52 bool Telemetry::InitEthernetConnection()
HMFK03LST1 0:c0179f2ad295 53 {
HMFK03LST1 0:c0179f2ad295 54 bool ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 55 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 56 debug.printf("Initalisiere LAN Verbindung mit DHCP\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 57 #endif
HMFK03LST1 0:c0179f2ad295 58
HMFK03LST1 0:c0179f2ad295 59 //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler!
HMFK03LST1 0:c0179f2ad295 60 if (!InitSucceed)
HMFK03LST1 0:c0179f2ad295 61 {
HMFK03LST1 0:c0179f2ad295 62 if (eth.init()==0) //Init Interface
HMFK03LST1 0:c0179f2ad295 63 {
HMFK03LST1 0:c0179f2ad295 64 InitSucceed = true;
HMFK03LST1 0:c0179f2ad295 65 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 66 }
HMFK03LST1 0:c0179f2ad295 67 }
HMFK03LST1 0:c0179f2ad295 68
HMFK03LST1 0:c0179f2ad295 69 //Nur wenn Initialisierung erfolgreich war!
HMFK03LST1 0:c0179f2ad295 70 if (InitSucceed)
HMFK03LST1 0:c0179f2ad295 71 {
HMFK03LST1 0:c0179f2ad295 72 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 73 serial.printf("Verbinde\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 74 #endif
HMFK03LST1 2:e19b937a29c1 75 ip_self = eth.getIPAddress();
HMFK03LST1 0:c0179f2ad295 76
HMFK03LST1 2:e19b937a29c1 77 if (eth.connect(8000)==0) //CONNECT
HMFK03LST1 0:c0179f2ad295 78 {
HMFK03LST1 2:e19b937a29c1 79 printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress());
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 2:e19b937a29c1 91 serial.printf("DHCP fail!\r\n\r\n");
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 2:e19b937a29c1 101 //#ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 102 printf("Initalisiere LAN Verbindung ohne DHCP\r\n\r\n");
HMFK03LST1 2:e19b937a29c1 103 printf("IP: %s - GateWay: %s - SubNetMask: %s\r\n\r\n",IPAdress, GateWay, SubNetMask);
HMFK03LST1 2:e19b937a29c1 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 2:e19b937a29c1 118 {
HMFK03LST1 2:e19b937a29c1 119 if (eth.connect(2000)==0) //CONNECT
HMFK03LST1 0:c0179f2ad295 120 {
HMFK03LST1 0:c0179f2ad295 121 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 122 serial.printf("Init success!");
HMFK03LST1 0:c0179f2ad295 123 #endif
HMFK03LST1 0:c0179f2ad295 124
HMFK03LST1 0:c0179f2ad295 125 ReturnValue = true;
HMFK03LST1 0:c0179f2ad295 126 }
HMFK03LST1 0:c0179f2ad295 127 else
HMFK03LST1 0:c0179f2ad295 128 {
HMFK03LST1 0:c0179f2ad295 129 ReturnValue = false;
HMFK03LST1 0:c0179f2ad295 130 }
HMFK03LST1 0:c0179f2ad295 131 }
HMFK03LST1 0:c0179f2ad295 132
HMFK03LST1 0:c0179f2ad295 133 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 134 if (ReturnValue == false)
HMFK03LST1 0:c0179f2ad295 135 {
HMFK03LST1 2:e19b937a29c1 136 serial.printf("Init fail!");
HMFK03LST1 0:c0179f2ad295 137 }
HMFK03LST1 0:c0179f2ad295 138 #endif
HMFK03LST1 0:c0179f2ad295 139
HMFK03LST1 0:c0179f2ad295 140 return ReturnValue;
HMFK03LST1 0:c0179f2ad295 141 }
HMFK03LST1 0:c0179f2ad295 142
HMFK03LST1 0:c0179f2ad295 143
HMFK03LST1 0:c0179f2ad295 144 void Telemetry::CloseEthernetConnection()
HMFK03LST1 0:c0179f2ad295 145 {
HMFK03LST1 0:c0179f2ad295 146 eth.disconnect();
HMFK03LST1 2:e19b937a29c1 147 InitSucceed = false;
HMFK03LST1 0:c0179f2ad295 148
HMFK03LST1 0:c0179f2ad295 149 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 150 serial.printf("LAN Stack close\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 151 #endif
HMFK03LST1 2:e19b937a29c1 152 }
HMFK03LST1 2:e19b937a29c1 153
HMFK03LST1 2:e19b937a29c1 154 void Telemetry::ConnectSocket_tcp(Endpoint Host)
HMFK03LST1 2:e19b937a29c1 155 {
HMFK03LST1 2:e19b937a29c1 156 sock_tcp.connect(Host.get_address(), Host.get_port());
HMFK03LST1 2:e19b937a29c1 157 sock_tcp.set_blocking(false, 0);
HMFK03LST1 2:e19b937a29c1 158 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 159 serial.printf("Open TCP Socket to IP: %s:%d.\r\n\r\n",Host.get_address(), Host.get_port());
HMFK03LST1 0:c0179f2ad295 160 #endif
HMFK03LST1 0:c0179f2ad295 161 }
HMFK03LST1 0:c0179f2ad295 162
HMFK03LST1 2:e19b937a29c1 163 void Telemetry::ConnectSocket_udp_rec(int Port)
HMFK03LST1 0:c0179f2ad295 164 {
HMFK03LST1 2:e19b937a29c1 165 sock_udp_rec.bind(Port);
HMFK03LST1 2:e19b937a29c1 166 sock_udp_rec.set_blocking(false, 0);
HMFK03LST1 2:e19b937a29c1 167
HMFK03LST1 0:c0179f2ad295 168 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 169 serial.printf("Open UDP_receive Socket on Port:%d.\r\n\r\n",Port);
HMFK03LST1 0:c0179f2ad295 170 #endif
HMFK03LST1 0:c0179f2ad295 171 }
HMFK03LST1 0:c0179f2ad295 172
HMFK03LST1 2:e19b937a29c1 173 void Telemetry::ConnectSocket_udp_send()
HMFK03LST1 0:c0179f2ad295 174 {
HMFK03LST1 2:e19b937a29c1 175 sock_udp_send.init();
HMFK03LST1 2:e19b937a29c1 176
HMFK03LST1 0:c0179f2ad295 177 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 178 serial.printf("Open UDP_send Socket.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 179 #endif
HMFK03LST1 0:c0179f2ad295 180 }
HMFK03LST1 0:c0179f2ad295 181
HMFK03LST1 2:e19b937a29c1 182
HMFK03LST1 2:e19b937a29c1 183 void Telemetry::CloseSocket_tcp()
HMFK03LST1 0:c0179f2ad295 184 {
HMFK03LST1 0:c0179f2ad295 185 sock_tcp.close();
HMFK03LST1 0:c0179f2ad295 186
HMFK03LST1 0:c0179f2ad295 187 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 188 serial.printf("TCP Socket closed.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 189 #endif
HMFK03LST1 0:c0179f2ad295 190 }
HMFK03LST1 0:c0179f2ad295 191
HMFK03LST1 0:c0179f2ad295 192
HMFK03LST1 2:e19b937a29c1 193 void Telemetry::CloseSocket_udp_send()
HMFK03LST1 2:e19b937a29c1 194 {
HMFK03LST1 2:e19b937a29c1 195 sock_udp_send.close();
HMFK03LST1 2:e19b937a29c1 196
HMFK03LST1 2:e19b937a29c1 197 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 198 serial.printf("UDP send Socket closed.\r\n\r\n");
HMFK03LST1 2:e19b937a29c1 199 #endif
HMFK03LST1 2:e19b937a29c1 200 }
HMFK03LST1 2:e19b937a29c1 201
HMFK03LST1 2:e19b937a29c1 202
HMFK03LST1 2:e19b937a29c1 203 void Telemetry::CloseSocket_udp_rec()
HMFK03LST1 2:e19b937a29c1 204 {
HMFK03LST1 2:e19b937a29c1 205 sock_udp_rec.close();
HMFK03LST1 2:e19b937a29c1 206 #ifdef DEBUG
HMFK03LST1 2:e19b937a29c1 207 serial.printf("UDP receive Socket closed.\r\n\r\n");
HMFK03LST1 2:e19b937a29c1 208 #endif
HMFK03LST1 2:e19b937a29c1 209 }
HMFK03LST1 2:e19b937a29c1 210
HMFK03LST1 2:e19b937a29c1 211 int Telemetry::Rec_Data_UDP(char *buffer, int size)
HMFK03LST1 0:c0179f2ad295 212 {
HMFK03LST1 2:e19b937a29c1 213 return sock_udp_rec.receiveFrom(input_Host, buffer, size);
HMFK03LST1 2:e19b937a29c1 214 }
HMFK03LST1 2:e19b937a29c1 215
HMFK03LST1 2:e19b937a29c1 216
HMFK03LST1 2:e19b937a29c1 217 bool Telemetry::Rec_Struct_UDP(char *buffer)
HMFK03LST1 2:e19b937a29c1 218 {
HMFK03LST1 2:e19b937a29c1 219 sock_udp_rec.receiveFrom(input_Host, buffer, 255);
HMFK03LST1 2:e19b937a29c1 220 if (buffer[buffer[0]-1] == do_cs(buffer)) return true;
HMFK03LST1 2:e19b937a29c1 221 else return false;
HMFK03LST1 2:e19b937a29c1 222 }
HMFK03LST1 2:e19b937a29c1 223
HMFK03LST1 2:e19b937a29c1 224
HMFK03LST1 2:e19b937a29c1 225 int Telemetry::Rec_Data_TCP(char *buffer,int size)
HMFK03LST1 2:e19b937a29c1 226 {
HMFK03LST1 2:e19b937a29c1 227 return sock_tcp.receive(buffer, size);
HMFK03LST1 2:e19b937a29c1 228 }
HMFK03LST1 2:e19b937a29c1 229
HMFK03LST1 2:e19b937a29c1 230
HMFK03LST1 2:e19b937a29c1 231 void Telemetry::Send_Data_UDP(Endpoint Server, char* Daten, int size )
HMFK03LST1 2:e19b937a29c1 232 {
HMFK03LST1 2:e19b937a29c1 233 // convert String to char*
HMFK03LST1 2:e19b937a29c1 234 //(string Daten)
HMFK03LST1 2:e19b937a29c1 235 //const char *DataBuf = Daten.c_str();
HMFK03LST1 2:e19b937a29c1 236 //char DataPaket[Daten.length()];
HMFK03LST1 2:e19b937a29c1 237 //strcpy(DataPaket,DataBuf);
HMFK03LST1 0:c0179f2ad295 238
HMFK03LST1 2:e19b937a29c1 239 sock_udp_send.sendTo(Server, Daten, size);
HMFK03LST1 0:c0179f2ad295 240
HMFK03LST1 0:c0179f2ad295 241 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 242 serial.printf("UDP Paket gesendet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 243 #endif
HMFK03LST1 0:c0179f2ad295 244 }
HMFK03LST1 0:c0179f2ad295 245
HMFK03LST1 2:e19b937a29c1 246
HMFK03LST1 2:e19b937a29c1 247 void Telemetry::Send_Struct_UDP(Endpoint Server, char* Daten)
HMFK03LST1 2:e19b937a29c1 248 {
HMFK03LST1 2:e19b937a29c1 249 Daten[(*Daten - 1)] = do_cs(Daten);
HMFK03LST1 2:e19b937a29c1 250 sock_udp_send.sendTo(Server, Daten, *Daten);
HMFK03LST1 2:e19b937a29c1 251 }
HMFK03LST1 2:e19b937a29c1 252
HMFK03LST1 2:e19b937a29c1 253
HMFK03LST1 2:e19b937a29c1 254
HMFK03LST1 2:e19b937a29c1 255 void Telemetry::Send_Data_TCP(char* Host, string Daten, string Username, string Passwort)
HMFK03LST1 0:c0179f2ad295 256 {
HMFK03LST1 0:c0179f2ad295 257
HMFK03LST1 0:c0179f2ad295 258 //Datenpaket schnüren
HMFK03LST1 0:c0179f2ad295 259 string DATEN = "Username=" + Username + "&Passwort=" + Passwort + "&Paket=" + Daten;
HMFK03LST1 0:c0179f2ad295 260
HMFK03LST1 0:c0179f2ad295 261 string POST = "POST /H2MClient/h2m_client.php HTTP/1.1\r\n";
HMFK03LST1 0:c0179f2ad295 262
HMFK03LST1 0:c0179f2ad295 263 string HostString = Host;
HMFK03LST1 0:c0179f2ad295 264 string HOST = "Host: " + HostString + "\r\n";
HMFK03LST1 0:c0179f2ad295 265
HMFK03LST1 0:c0179f2ad295 266 string CONTENTTYPE = "Content-Type: application/x-www-form-urlencoded\r\n";
HMFK03LST1 0:c0179f2ad295 267
HMFK03LST1 0:c0179f2ad295 268 string Length;
HMFK03LST1 0:c0179f2ad295 269 stringstream convert;
HMFK03LST1 0:c0179f2ad295 270 convert << DATEN.length();
HMFK03LST1 0:c0179f2ad295 271 Length = convert.str();
HMFK03LST1 0:c0179f2ad295 272 string CONTENTLENGTH = "Content-Length: " + Length + "\r\n\r\n";
HMFK03LST1 0:c0179f2ad295 273
HMFK03LST1 0:c0179f2ad295 274
HMFK03LST1 0:c0179f2ad295 275 string datenpaket = POST + HOST + CONTENTTYPE + CONTENTLENGTH + DATEN + "\r\n";
HMFK03LST1 0:c0179f2ad295 276
HMFK03LST1 0:c0179f2ad295 277 //Umwandeln in char*
HMFK03LST1 0:c0179f2ad295 278 const char *DataBuf = datenpaket.c_str();
HMFK03LST1 0:c0179f2ad295 279 char DataPaket[datenpaket.length()];
HMFK03LST1 0:c0179f2ad295 280 strcpy(DataPaket,DataBuf);
HMFK03LST1 0:c0179f2ad295 281
HMFK03LST1 0:c0179f2ad295 282 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 283 serial.printf("----\r\n%s----\r\n\r\n",DataPaket);
HMFK03LST1 0:c0179f2ad295 284 serial.printf("Sende Paket.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 285 #endif
HMFK03LST1 0:c0179f2ad295 286
HMFK03LST1 0:c0179f2ad295 287 sock_tcp.send_all(DataPaket, sizeof(DataPaket)-1);
HMFK03LST1 0:c0179f2ad295 288
HMFK03LST1 0:c0179f2ad295 289 #ifdef DEBUG
HMFK03LST1 0:c0179f2ad295 290 serial.printf("Paket gesendet.\r\n\r\n");
HMFK03LST1 0:c0179f2ad295 291 #endif
HMFK03LST1 0:c0179f2ad295 292
HMFK03LST1 0:c0179f2ad295 293 #ifdef LED
HMFK03LST1 0:c0179f2ad295 294 ledwfa = 0;
HMFK03LST1 0:c0179f2ad295 295 #endif
HMFK03LST1 0:c0179f2ad295 296 }
HMFK03LST1 0:c0179f2ad295 297
HMFK03LST1 2:e19b937a29c1 298
HMFK03LST1 0:c0179f2ad295 299
HMFK03LST1 2:e19b937a29c1 300
HMFK03LST1 0:c0179f2ad295 301