gyo

Revision:
1:8810976be033
Parent:
0:afe58893bfe7
Child:
2:1472e7c5317d
--- a/SBDBT.cpp	Sat May 06 02:12:51 2017 +0000
+++ b/SBDBT.cpp	Sat May 06 02:32:51 2017 +0000
@@ -3,28 +3,59 @@
 namespace raven
 {
     
-    
-    
     SBDBT::SBDBT(PinName p1, PinName p2)
     {
         i = 0;
         flag = 0;
-        char data[8]={};
-        char olddata[8]={};
+        length = 8;
+        value = 128;
+        position = 0;
+        data = new char [length];
+        olddata = new char [length];
         sr = new Serial(p1,p2);
         sr -> baud(2400);
-        sr -> attach(this,&SBDBT::getd,Serial::RxIrq);
+        sr -> attach(this,&SBDBT::getf,Serial::RxIrq);
     }
     
-    void SBDBT::getd()
+    SBDBT::SBDBT(PinName p1, PinName p2, int baud)
+    {
+        i = 0;
+        flag = 0;
+        length = 8;
+        value = 128;
+        position = 0;
+        data = new char [length];
+        olddata = new char [length];
+        sr = new Serial(p1,p2);
+        sr -> baud(baud);
+        sr -> attach(this,&SBDBT::getf,Serial::RxIrq);
+    }
+    
+    void SBDBT::getf()
     {
         olddata[i] = data[i];
         data[i] = sr -> getc();
-        i++;
-        if(i>=8)
+        if(data[i] == value)    //受信したデータが訂正用定数であり
         {
-            i=0;
-            flag = 1;
+            if(i != position)       //訂正用定数を受信すべき位置でないとき
+            {
+                data[position] = value;     //正しい位置に訂正用定数を代入
+                i = position + 1;           //受信先も正しい位置へもどす
+            }
+            else                    //訂正用定数を受信すべき位置であるとき
+                i++;                    //次の位置で受信する
+        }
+        else                    //受信したデータが訂正用定数でなく
+        {
+            if(i == position){}     //訂正用定数を受信すべき位置であるとき
+                                        //再度同じ位置で受信する
+            else                    //訂正用定数を受信すべき場所でないとき
+                i++;                    //次の位置で受信する
+        }
+        if(i>=length)           //位置がデータの長さを超えたら
+        {
+            i=0;                    //位置を初期化
+            flag = 1;               //全データ受信完了
         }
     }
     
@@ -32,6 +63,4 @@
     {
         delete sr;
     }
-        
-    
 }//namespace
\ No newline at end of file