gefixte version 03122015
Dependencies: EthernetInterface mbed-rtos
Fork of Telemetrie_eth_h2m by
Telemetry.cpp
- Committer:
- HMFK03LST1
- Date:
- 2015-10-31
- Revision:
- 2:e19b937a29c1
- Parent:
- 0:c0179f2ad295
- Child:
- 3:94a735c744ff
File content as of revision 2:e19b937a29c1:
/*------------------------------------------------*/ /*Autor: Sebastian Donner */ /*------------------------------------------------*/ #include "Telemetry.h" //Debug Schnittstelle #ifdef DEBUG Serial debug(USBTX, USBRX); #endif //Konstruktoren EthernetInterface eth; TCPSocketConnection sock_tcp; UDPSocket sock_udp_send; //send socket UDPSocket sock_udp_rec; //receive socket //Globale Variable bool InitSucceed = false; Telemetry::Telemetry() { } #ifdef DEBUG void Telemetry::InitUSBSerialConnection() { serial.baud(115200); } #endif char Telemetry::do_cs(char* buffer) { char ck_a=0; char ck_b=0; for(int i=0; i < (buffer[0]-1); i++) { ck_a += buffer[i]; ck_b += ck_a; } return ck_b; } //Funktion überladen. Ohne Parameter DHCP und 10 Sekunden Timeout. Mit Parameter kein DHCP und 3 Sekunden Timeout bool Telemetry::InitEthernetConnection() { bool ReturnValue = false; #ifdef DEBUG debug.printf("Initalisiere LAN Verbindung mit DHCP\r\n\r\n"); #endif //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler! if (!InitSucceed) { if (eth.init()==0) //Init Interface { InitSucceed = true; ReturnValue = true; } } //Nur wenn Initialisierung erfolgreich war! if (InitSucceed) { #ifdef DEBUG serial.printf("Verbinde\r\n\r\n"); #endif ip_self = eth.getIPAddress(); if (eth.connect(8000)==0) //CONNECT { printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress()); ReturnValue = true; } else { ReturnValue = false; } } #ifdef DEBUG if (ReturnValue == false) { serial.printf("DHCP fail!\r\n\r\n"); } #endif return ReturnValue; } bool Telemetry::InitEthernetConnection(const char* IPAdress, const char* SubNetMask, const char* GateWay) { bool ReturnValue = false; //#ifdef DEBUG printf("Initalisiere LAN Verbindung ohne DHCP\r\n\r\n"); printf("IP: %s - GateWay: %s - SubNetMask: %s\r\n\r\n",IPAdress, GateWay, SubNetMask); //#endif //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler! if (!InitSucceed) { if (eth.init(IPAdress, SubNetMask, GateWay)==0) //Init Interface { InitSucceed = true; ReturnValue = true; } } //Nur wenn Initialisierung erfolgreich war! if (InitSucceed) { if (eth.connect(2000)==0) //CONNECT { #ifdef DEBUG serial.printf("Init success!"); #endif ReturnValue = true; } else { ReturnValue = false; } } #ifdef DEBUG if (ReturnValue == false) { serial.printf("Init fail!"); } #endif return ReturnValue; } void Telemetry::CloseEthernetConnection() { eth.disconnect(); InitSucceed = false; #ifdef DEBUG serial.printf("LAN Stack close\r\n\r\n"); #endif } void Telemetry::ConnectSocket_tcp(Endpoint Host) { sock_tcp.connect(Host.get_address(), Host.get_port()); sock_tcp.set_blocking(false, 0); #ifdef DEBUG serial.printf("Open TCP Socket to IP: %s:%d.\r\n\r\n",Host.get_address(), Host.get_port()); #endif } void Telemetry::ConnectSocket_udp_rec(int Port) { sock_udp_rec.bind(Port); sock_udp_rec.set_blocking(false, 0); #ifdef DEBUG serial.printf("Open UDP_receive Socket on Port:%d.\r\n\r\n",Port); #endif } void Telemetry::ConnectSocket_udp_send() { sock_udp_send.init(); #ifdef DEBUG serial.printf("Open UDP_send Socket.\r\n\r\n"); #endif } void Telemetry::CloseSocket_tcp() { sock_tcp.close(); #ifdef DEBUG serial.printf("TCP Socket closed.\r\n\r\n"); #endif } void Telemetry::CloseSocket_udp_send() { sock_udp_send.close(); #ifdef DEBUG serial.printf("UDP send Socket closed.\r\n\r\n"); #endif } void Telemetry::CloseSocket_udp_rec() { sock_udp_rec.close(); #ifdef DEBUG serial.printf("UDP receive Socket closed.\r\n\r\n"); #endif } int Telemetry::Rec_Data_UDP(char *buffer, int size) { return sock_udp_rec.receiveFrom(input_Host, buffer, size); } bool Telemetry::Rec_Struct_UDP(char *buffer) { sock_udp_rec.receiveFrom(input_Host, buffer, 255); if (buffer[buffer[0]-1] == do_cs(buffer)) return true; else return false; } int Telemetry::Rec_Data_TCP(char *buffer,int size) { return sock_tcp.receive(buffer, size); } void Telemetry::Send_Data_UDP(Endpoint Server, char* Daten, int size ) { // convert String to char* //(string Daten) //const char *DataBuf = Daten.c_str(); //char DataPaket[Daten.length()]; //strcpy(DataPaket,DataBuf); sock_udp_send.sendTo(Server, Daten, size); #ifdef DEBUG serial.printf("UDP Paket gesendet.\r\n\r\n"); #endif } void Telemetry::Send_Struct_UDP(Endpoint Server, char* Daten) { Daten[(*Daten - 1)] = do_cs(Daten); sock_udp_send.sendTo(Server, Daten, *Daten); } void Telemetry::Send_Data_TCP(char* Host, string Daten, string Username, string Passwort) { //Datenpaket schnüren string DATEN = "Username=" + Username + "&Passwort=" + Passwort + "&Paket=" + Daten; string POST = "POST /H2MClient/h2m_client.php HTTP/1.1\r\n"; string HostString = Host; string HOST = "Host: " + HostString + "\r\n"; string CONTENTTYPE = "Content-Type: application/x-www-form-urlencoded\r\n"; string Length; stringstream convert; convert << DATEN.length(); Length = convert.str(); string CONTENTLENGTH = "Content-Length: " + Length + "\r\n\r\n"; string datenpaket = POST + HOST + CONTENTTYPE + CONTENTLENGTH + DATEN + "\r\n"; //Umwandeln in char* const char *DataBuf = datenpaket.c_str(); char DataPaket[datenpaket.length()]; strcpy(DataPaket,DataBuf); #ifdef DEBUG serial.printf("----\r\n%s----\r\n\r\n",DataPaket); serial.printf("Sende Paket.\r\n\r\n"); #endif sock_tcp.send_all(DataPaket, sizeof(DataPaket)-1); #ifdef DEBUG serial.printf("Paket gesendet.\r\n\r\n"); #endif #ifdef LED ledwfa = 0; #endif }