Roman Ciesarík / Mbed 2 deprecated elevator1

Dependencies:   MMA8451Q mbed

Revision:
12:1c7b59097090
Parent:
11:95e4e04a7dd2
Child:
13:e3089b058fab
--- a/communication.cpp	Sun Dec 18 13:52:01 2016 +0000
+++ b/communication.cpp	Mon Dec 19 17:47:06 2016 +0000
@@ -6,17 +6,21 @@
 communication::communication(Serial *_pc):zelena(LED2),cervena(LED1)
 {
     pc=_pc;
-     pom =0;
+    pom =0;
+    sourceAdd=0x05;
     pc->baud(57600);
     tc.attach(this,&communication::TickerCallBack,1);
     pc->attach(this,&communication::SerialCallBack,Serial::RxIrq);
-    
     DataIn= new char[6]();
     mapPoschodie.insert(pair<string, bool>("p1",false));
     mapPoschodie.insert(pair<string, bool>("p2",false));
     mapPoschodie.insert(pair<string, bool>("p3",false));
     mapPoschodie.insert(pair<string, bool>("p4",false));
     mapPoschodie.insert(pair<string, bool>("p0",false));
+    poschodie=4;
+    watchDog[0]=0x01;
+    sendPacket(0xa0,0xfe,0x0, watchDog,1);
+    watchDog[1]=0x02;
 }
 
 unsigned char communication::crcArray[]= {
@@ -51,21 +55,26 @@
 }
 void communication::sendPacket(char startByte,char target,char source,char *data,int DataSize)
 {
-    //packet format : || start byte: a0 | reciever adress - 1B | sender adress - 1B | data lenght - 1B | data - 0-265B | crc8 - 1B ||
-    int dataLenght = DataSize;
-    char crc8 = crcCalc(target, source, data,dataLenght);
-    pc->putc(startByte);
-    pc->putc(target);
-    pc->putc(source);
-    pc->putc(dataLenght);
-    for (int i = 0 ; i < dataLenght ; i++) {
-        pc->putc(data[i]);
+    sendDataOk=true;
+    int cnt=0;
+    while(sendDataOk) {
+        //packet format : || start byte: a0 | reciever adress - 1B | sender adress - 1B | data lenght - 1B | data - 0-265B | crc8 - 1B ||
+        int dataLenght = DataSize;
+        char crc8 = crcCalc(target, source, data,dataLenght);
+        pc->putc(startByte);
+        pc->putc(target);
+        pc->putc(source);
+        pc->putc(dataLenght);
+        for (int i = 0 ; i < dataLenght ; i++) {
+            pc->putc(data[i]);
+        }
+        pc->putc(crc8);
+        wait(0.003);
     }
-    pc->putc(crc8);
 }
 void communication::TickerCallBack()
 {
-//    sendPacket(0xa0,0xfe,0x00, watchDog,1);
+    sendPacket(0xa0,0xfe,0x00, watchDog,1);
     pom++;
     if (pom==1) {
         zelena =0;
@@ -75,17 +84,10 @@
         cervena=0;
         pom=0;
     }
-
 }
 void communication::SerialCallBack()
 {
-    pom++;
-    if(pom==1) {
-        zelena=0;
-    } else {
-        zelena=1;
-        pom=0;
-    }
+
     startByteIn=pc->getc();
     targetAdd=pc->getc();
     sourceAdd=pc->getc();
@@ -93,31 +95,38 @@
     for (unsigned int i=0; i< DataLength; i++) {
         DataIn[i]=pc->getc();
     }
-//    if(DataLength!=0x00)
     CrcIn=pc->getc();
     switch( sourceAdd) {
         case 0xc4:
         case 0xb4:
-            mapPoschodie.find("p4")->second=true;
+            if(poschodie!=4)
+                mapPoschodie.find("p4")->second=true;
             break;
         case 0xb3:
         case 0xc3:
-            mapPoschodie.find("p3")->second=true;
+            if(poschodie!=3)
+                mapPoschodie.find("p3")->second=true;
             break;
         case 0xb2:
         case 0xc2:
-            mapPoschodie.find("p2")->second=true;
+            if(poschodie!=2)
+                mapPoschodie.find("p2")->second=true;
             break;
         case 0xb1:
         case 0xc1:
-            mapPoschodie.find("p1")->second=true;
+            if(poschodie!=1)
+                mapPoschodie.find("p1")->second=true;
             break;
         case 0xb0:
         case 0xc0:
-            mapPoschodie.find("p0")->second=true;
+            if(poschodie!=0)
+                mapPoschodie.find("p0")->second=true;
             break;
         default:
             ;
     }
+    //osetrenie ACK
+    if(sourceAdd==0x00)
+        sendDataOk=false;
+}
 
-}