1.0
Dependencies: EthernetInterface mbed-rtos
Diff: Telemetry.cpp
- Revision:
- 2:e19b937a29c1
- Parent:
- 0:c0179f2ad295
- Child:
- 3:94a735c744ff
--- a/Telemetry.cpp Sat May 02 19:08:50 2015 +0000 +++ b/Telemetry.cpp Sat Oct 31 17:33:18 2015 +0000 @@ -1,26 +1,21 @@ /*------------------------------------------------*/ -/*Autor: Sebastian Hauzenberger */ +/*Autor: Sebastian Donner */ /*------------------------------------------------*/ #include "Telemetry.h" -//LEDs definieren -#ifdef LED -DigitalOut ledserial(LED1); -DigitalOut ledeth(LED2); -DigitalOut ledsock(LED3); -DigitalOut ledwfa(LED4); -#endif - -//Serielle Schnittstelle definieren +//Debug Schnittstelle #ifdef DEBUG -Serial serial(USBTX, USBRX); +Serial debug(USBTX, USBRX); #endif //Konstruktoren -EthernetInterface eth; +EthernetInterface eth; TCPSocketConnection sock_tcp; -UDPSocket sock_udp; +UDPSocket sock_udp_send; //send socket +UDPSocket sock_udp_rec; //receive socket + + //Globale Variable @@ -35,19 +30,30 @@ void Telemetry::InitUSBSerialConnection() { serial.baud(115200); - - #ifdef LED - ledserial = 1; - #endif } #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 - serial.printf("Initalisiere LAN Verbindung mit DHCP\r\n\r\n"); + debug.printf("Initalisiere LAN Verbindung mit DHCP\r\n\r\n"); #endif //Schnittstelle nur einmal initialisieren, sonst gibt es Fehler! @@ -66,17 +72,11 @@ #ifdef DEBUG serial.printf("Verbinde\r\n\r\n"); #endif + ip_self = eth.getIPAddress(); - if (eth.connect(10000)==0) //CONNECT + if (eth.connect(8000)==0) //CONNECT { - #ifdef DEBUG - serial.printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress()); - #endif - - #ifdef LED - ledeth = 1; - #endif - + printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress()); ReturnValue = true; } else @@ -88,7 +88,7 @@ #ifdef DEBUG if (ReturnValue == false) { - serial.printf("Fehlgeschlagen!"); + serial.printf("DHCP fail!\r\n\r\n"); } #endif @@ -98,10 +98,10 @@ bool Telemetry::InitEthernetConnection(const char* IPAdress, const char* SubNetMask, const char* GateWay) { bool ReturnValue = false; - #ifdef DEBUG - serial.printf("Initalisiere LAN Verbindung ohne DHCP\r\n\r\n"); - serial.printf("IP: %s - GateWay: %s - SubNetMask: %s\r\n\r\n",IPAdress, GateWay, SubNetMask); - #endif + //#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) @@ -115,19 +115,11 @@ //Nur wenn Initialisierung erfolgreich war! if (InitSucceed) - { - #ifdef DEBUG - serial.printf("Verbinde\r\n\r\n"); - #endif - - if (eth.connect(3000)==0) //CONNECT + { + if (eth.connect(2000)==0) //CONNECT { #ifdef DEBUG - serial.printf("IP Adresse: %s\r\n\r\n", eth.getIPAddress()); - #endif - - #ifdef LED - ledeth = 1; + serial.printf("Init success!"); #endif ReturnValue = true; @@ -141,7 +133,7 @@ #ifdef DEBUG if (ReturnValue == false) { - serial.printf("Fehlgeschlagen!"); + serial.printf("Init fail!"); } #endif @@ -152,80 +144,116 @@ void Telemetry::CloseEthernetConnection() { eth.disconnect(); + InitSucceed = false; #ifdef DEBUG - serial.printf("LAN Verbindung geschlossen\r\n\r\n"); + serial.printf("LAN Stack close\r\n\r\n"); #endif - - #ifdef LED - ledeth = 0; +} + +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_tcp(char* Host) +void Telemetry::ConnectSocket_udp_rec(int Port) { - sock_tcp.connect(Host, 80); - + sock_udp_rec.bind(Port); + sock_udp_rec.set_blocking(false, 0); + #ifdef DEBUG - serial.printf("TCP Socket geoeffnet.\r\n\r\n"); - #endif - - #ifdef LED - ledsock = 1; + serial.printf("Open UDP_receive Socket on Port:%d.\r\n\r\n",Port); #endif } -void Telemetry::ConnectSocket_udp() +void Telemetry::ConnectSocket_udp_send() { - sock_udp.init(); - + sock_udp_send.init(); + #ifdef DEBUG - serial.printf("UDP Socket geoeffnet.\r\n\r\n"); + serial.printf("Open UDP_send Socket.\r\n\r\n"); #endif - } -void Telemetry::CloseSocket() + +void Telemetry::CloseSocket_tcp() { sock_tcp.close(); - sock_udp.close(); #ifdef DEBUG - serial.printf("TCP/UDP Socket geschlossen.\r\n\r\n"); - #endif - - #ifdef LED - ledsock = 0; + serial.printf("TCP Socket closed.\r\n\r\n"); #endif } -void Telemetry::TransmitDataoverUDP(char *Host, int Port, string Daten) +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) { - Endpoint data_server; - data_server.set_address(Host, Port); -//Umwandeln in char* - const char *DataBuf = Daten.c_str(); - char DataPaket[Daten.length()]; - strcpy(DataPaket,DataBuf); + 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); - #ifdef DEBUG - serial.printf("----\r\n%s----\r\n\r\n",DataPaket); - serial.printf("Sende Paket UDP.\r\n\r\n"); - #endif - - sock_udp.sendTo(data_server, DataPaket, sizeof(DataPaket)); + sock_udp_send.sendTo(Server, Daten, size); #ifdef DEBUG serial.printf("UDP Paket gesendet.\r\n\r\n"); #endif } -void Telemetry::TransmitDataoverTCP(char *Host, string Daten, string Username, string Passwort) + +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) { - #ifdef LED - ledwfa = 1; - #endif //Datenpaket schnüren string DATEN = "Username=" + Username + "&Passwort=" + Passwort + "&Paket=" + Daten; @@ -267,41 +295,7 @@ #endif } -void Telemetry::ReadAnswerandTransmitoverSerial() -{ - char buffer[300]; - int ret; - while (true) - { - ret = sock_tcp.receive(buffer, sizeof(buffer)-1); - if (ret <= 0) - break; - buffer[ret] = '\0'; - - #ifdef DEBUG - serial.printf("Received %d chars from server:\n%s\n", ret, buffer); - #endif - } - #ifdef LED - ledwfa = 0; - #endif -} + -string Telemetry::ReadAnswer() -{ - char buffer[300]; - int ret; - while (true) - { - ret = sock_tcp.receive(buffer, sizeof(buffer)-1); - if (ret <= 0) - break; - buffer[ret] = '\0'; - } + - #ifdef LED - ledwfa = 0; - #endif - - return buffer; -}