Browse Source

Fixed FrSky protocal parsing bug

Thomas Buck 8 years ago
parent
commit
c8f3d02ee0
1 changed files with 35 additions and 2 deletions
  1. 35
    2
      frsky.cpp

+ 35
- 2
frsky.cpp View File

32
 
32
 
33
     uint8_t c = serial->read();
33
     uint8_t c = serial->read();
34
     if (c == delimiter) {
34
     if (c == delimiter) {
35
-        if (bufferIndex < minPacketSize) {
35
+#ifdef DEBUG_OUTPUT
36
+        DEBUG_OUTPUT.print("Got delimiter at ");
37
+        DEBUG_OUTPUT.println(bufferIndex);
38
+#endif
39
+        if (bufferIndex < (minPacketSize - 1)) {
40
+#ifdef DEBUG_OUTPUT
41
+            DEBUG_OUTPUT.print("Reset to 0: ");
42
+            DEBUG_OUTPUT.print(bufferIndex);
43
+            DEBUG_OUTPUT.print(" ! <= ");
44
+            DEBUG_OUTPUT.println(minPacketSize - 1);
45
+#endif
36
             bufferIndex = 0;
46
             bufferIndex = 0;
37
         }
47
         }
38
         if (bufferIndex >= bufferSize) {
48
         if (bufferIndex >= bufferSize) {
49
+#ifdef DEBUG_OUTPUT
50
+            DEBUG_OUTPUT.print("too large: ");
51
+            DEBUG_OUTPUT.print(bufferIndex);
52
+            DEBUG_OUTPUT.print(" / ");
53
+            DEBUG_OUTPUT.println(bufferSize);
54
+#endif
39
             bufferIndex = bufferSize - 1;
55
             bufferIndex = bufferSize - 1;
40
         }
56
         }
41
         buffer[bufferIndex++] = c;
57
         buffer[bufferIndex++] = c;
42
-        if (bufferIndex > minPacketSize) {
58
+        if (bufferIndex >= minPacketSize) {
59
+#ifdef DEBUG_OUTPUT
60
+            DEBUG_OUTPUT.println("Handling...");
61
+#endif
43
             handleMessage();
62
             handleMessage();
44
             bufferIndex = 0;
63
             bufferIndex = 0;
45
         }
64
         }
46
     } else if ((bufferIndex > 0) && (bufferIndex < bufferSize)) {
65
     } else if ((bufferIndex > 0) && (bufferIndex < bufferSize)) {
47
         buffer[bufferIndex++] = c;
66
         buffer[bufferIndex++] = c;
67
+#ifdef DEBUG_OUTPUT
68
+        DEBUG_OUTPUT.print("Got ");
69
+        DEBUG_OUTPUT.print(c);
70
+        DEBUG_OUTPUT.print(" at ");
71
+        DEBUG_OUTPUT.println(bufferIndex - 1);
72
+#endif
73
+    } else {
74
+#ifdef DEBUG_OUTPUT
75
+        DEBUG_OUTPUT.print("Invalid: ");
76
+        DEBUG_OUTPUT.print(bufferIndex);
77
+        DEBUG_OUTPUT.print(" / ");
78
+        DEBUG_OUTPUT.println(bufferSize);
79
+#endif
48
     }
80
     }
49
 }
81
 }
50
 
82
 
85
     DEBUG_OUTPUT.println("FrSky::handleMessage()");
117
     DEBUG_OUTPUT.println("FrSky::handleMessage()");
86
     for (uint8_t i = 0; i < bufferIndex; i++) {
118
     for (uint8_t i = 0; i < bufferIndex; i++) {
87
         DEBUG_OUTPUT.print(buffer[i], HEX);
119
         DEBUG_OUTPUT.print(buffer[i], HEX);
120
+        DEBUG_OUTPUT.print(" ");
88
     }
121
     }
89
     DEBUG_OUTPUT.println();
122
     DEBUG_OUTPUT.println();
90
 #endif
123
 #endif

Loading…
Cancel
Save