gefixte version 03122015

Dependencies:   EthernetInterface mbed-rtos

Fork of Telemetrie_eth_h2m by Hochschule München

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;
-}