Theo Le Paih / Mbed 2 deprecated Lib_Pixy2

Dependencies:   mbed

Revision:
27:bee63ac9b70b
Parent:
26:a56cc5d715e9
--- a/pixy2.cpp	Thu Nov 28 07:39:32 2019 +0000
+++ b/pixy2.cpp	Tue Jan 21 12:59:37 2020 +0000
@@ -1,6 +1,7 @@
 #include "pixy2.h"
 
 extern  int sommeDeControle,sommeRecue;
+extern char *ptr;
 
 PIXY2::PIXY2(PinName tx, PinName rx, int debit)
 {   
@@ -634,7 +635,8 @@
     T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[hPointer];
     T_pixy2ErrorCode    cr = PIXY2_OK;
     T_pixy2LineFeature* lineFeature;
-    int                 fPointer;
+    int                 fPointer;                                                   // Pointeur sur une feature entière
+    int                 fdPointer;                                                  // Pointeur sur un élément à l'intérieur d'une feature
 
     if (frameContainChecksum) {                                                     // Si la trame contient un checksum
         if (pixy2_validateChecksum (&Pixy2_buffer[hPointer]) != 0) {                // On lance la validation du checksum
@@ -645,25 +647,29 @@
         fPointer = dPointer;                                                        // On pointe sur la premiere feature
         do {
             lineFeature = (T_pixy2LineFeature*) &Pixy2_buffer[fPointer];            // On mappe le pointeur de structure sur le buffer de réception des features.
+            ptr = (char*) &Pixy2_buffer[fPointer];
             if (lineFeature->fType == PIXY2_VECTOR) {                               // On regarde si le type est vecteur
                 Pixy2_numVectors = lineFeature->fLength / sizeof(T_pixy2Vector);    // Si oui, on compte combien il y a de vecteurs
-                Pixy2_vectors = (T_pixy2Vector*) &Pixy2_buffer[fPointer + 2];       // On mappe le résultat
-                fPointer += lineFeature->fLength;                                   // On déplace le pointeur de données et on recommence
+                fdPointer = fPointer + 2;                                           // On pointe sur le premier élément de la feature
+                Pixy2_vectors = (T_pixy2Vector*) &Pixy2_buffer[fdPointer];          // On mappe le résultat
+                fPointer += lineFeature->fLength + 2;                               // On déplace le pointeur de données et on recommence
                 cr |= PIXY2_VECTOR;
             }
             if (lineFeature->fType == PIXY2_INTERSECTION) {                         // On regarde si le type est intersection
                 Pixy2_numIntersections = lineFeature->fLength / sizeof(T_pixy2Intersection);
                                                                                     // Si oui, on compte combien il y a d'intersections
-                Pixy2_intersections = (T_pixy2Intersection*) &Pixy2_buffer[fPointer];
+                fdPointer = fPointer + 2;                                           // On pointe sur le premier élément de la feature                                                                    
+                Pixy2_intersections = (T_pixy2Intersection*) &Pixy2_buffer[fdPointer];
                                                                                     // On mappe le résultat sur l'entête de l'intersection
-                fPointer += lineFeature->fLength;                                   // On déplace le pointeur de données et on recommence
+                fPointer += lineFeature->fLength + 2;                               // On déplace le pointeur de données et on recommence
                 cr |= PIXY2_INTERSECTION;
             }
             if (lineFeature->fType == PIXY2_BARCODE) {                              // On regarde si le type est codebarre
                 Pixy2_numBarcodes = lineFeature->fLength / sizeof(T_pixy2BarCode);
                                                                                     // Si oui, on compte combien il y a de codebarre
-                Pixy2_barcodes = (T_pixy2BarCode*) &Pixy2_buffer[fPointer];         // On mappe le résultat
-                fPointer += lineFeature->fLength;                                   // On déplace le pointeur de données et on recommence
+                fdPointer = fPointer + 2;                                           // On pointe sur le premier élément de la feature
+                Pixy2_barcodes = (T_pixy2BarCode*) &Pixy2_buffer[fdPointer];        // On mappe le résultat
+                fPointer += lineFeature->fLength + 2;                               // On déplace le pointeur de données et on recommence
                 cr |= PIXY2_BARCODE;
             }
         } while(fPointer < ((dataSize - 1) + dPointer));                            // Tant qu'il y a des données à traiter