Theo Le Paih / Mbed 2 deprecated Lib_Pixy2

Dependencies:   mbed

Revision:
10:ea759846c2d5
Parent:
6:e9e3aa6f1a55
Child:
11:68ef9f85e40e
diff -r 764075b514bf -r ea759846c2d5 pixy2.cpp
--- a/pixy2.cpp	Tue Mar 12 10:49:53 2019 +0000
+++ b/pixy2.cpp	Tue Mar 12 14:06:53 2019 +0000
@@ -66,7 +66,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetVersion (void){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 0;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_VERS;
@@ -80,7 +80,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetResolution (void){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 1;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_RESOL;
@@ -95,7 +95,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetCameraBrightness (Byte brightness){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 1;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_BRIGHT;
@@ -110,7 +110,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetServo (Word s0, Word s1){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 4;
     T_Word              tmp;
     msg.frame.header.pixSync = PIXY2_SYNC;
@@ -131,7 +131,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetLED (Byte red, Byte green, Byte blue){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 3;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_LED;
@@ -148,7 +148,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetLamp (Byte upper, Byte lower){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 2;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_LED;
@@ -164,7 +164,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetFPS (void){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 0;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_FPS;
@@ -178,7 +178,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetBlocks (Byte sigmap, Byte maxBloc){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 2;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_BLOC;
@@ -194,7 +194,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetMainFeature (Byte type, Byte feature){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 2;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_LINE;
@@ -210,7 +210,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetMode (Byte mode){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 1;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_MODE;
@@ -225,7 +225,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetNexTurn (Word angle){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 2;
     T_Word              tmp;
     tmp.mot = angle;
@@ -244,7 +244,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetDefaultTurn (Word angle){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 2;
     T_Word              tmp;
     tmp.mot = angle;
@@ -263,7 +263,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndSetVector (Byte vectorIndex){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 1;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_VECTOR;
@@ -278,7 +278,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndReverseVector (void){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 0;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_SET_REVERSE;
@@ -292,7 +292,7 @@
 }
 
 Pixy2ErrorCode PIXY2::pixy2_sndGetRGB (Word x, Word y, Byte saturate){
-    T_pixy2sendBuffer   msg;
+    T_pixy2SendBuffer   msg;
     int                 i = 0, dataSize = 3;
     msg.frame.header.pixSync = PIXY2_SYNC;
     msg.frame.header.pixType = PIXY2_ASK_VIDEO;
@@ -314,7 +314,7 @@
 Pixy2ErrorCode PIXY2::pixy2_getVersion (T_Pixy2Version *version){
 
     T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
-    Pixy2ErrorCode                 cr = PIXY2_OK;
+    Pixy2ErrorCode      cr = PIXY2_OK;
     
     switch (etat) {
         case idle :                                                                 // Si la caméra est inactive
@@ -329,16 +329,26 @@
                 if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
                     if (msg->pixType == PIXY2_REP_VERS) {                           // On vérifie que la trame est du type convenable
                         version = (T_Pixy2Version*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
-                                                                                    // Si le checksum et le type sont bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                                                                                    // On mappe le pointeur de version sur la donnée stockée dans la FIFO (ligne précédente)                        
                         etat = idle;                                                // Et on annoce que la pixy est libre
-                    } else cr = PIXY2_TYPE_ERROR;                                   // Si le type ne correspond pas on signale une erreur
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(Pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
+                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                        }else cr = PIXY2_TYPE_ERROR;                                // Si le type ne correspond à rien de normal on signale une erreur
+                    }                                   
                 } else cr = PIXY2_BAD_CHECKSUM;                                     // Si le checksum est faux on retourne une erreur aussi !
             } else {                                                                // S'il n'y a pas de checksum (pas normal mais on ne sait jamais)
                 if (msg->pixType == PIXY2_REP_VERS) {                               // On vérifie que la trame est du type convenable                               
                     version = (T_Pixy2Version*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
                                                                                     // Si le checksum et le type sont bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
                     etat = idle;                                                    // Et on annoce que la pixy est libre
-                } else cr = PIXY2_TYPE_ERROR;                                       // Si le type ne correspond pas on signale une erreur
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(Pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                    }else cr = PIXY2_TYPE_ERROR;                                    // Si le type ne correspond à rien de normal on signale une erreur
+                }
             }
             break;
 
@@ -352,7 +362,7 @@
 Pixy2ErrorCode PIXY2::pixy2_getResolution (T_Pixy2Resolution *resolution){
 
     T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
-    Pixy2ErrorCode                 cr = PIXY2_OK;
+    Pixy2ErrorCode      cr = PIXY2_OK;
     
     switch (etat) {
         case idle :                                                                 // Si la caméra est inactive
@@ -369,14 +379,24 @@
                         resolution = (T_Pixy2Resolution*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
                                                                                     // Si le checksum et le type sont bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
                         etat = idle;                                                // Et on annoce que la pixy est libre
-                    } else cr = PIXY2_TYPE_ERROR;                                   // Si le type ne correspond pas on signale une erreur
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(Pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
+                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                        }else cr = PIXY2_TYPE_ERROR;                                // Si le type ne correspond à rien de normal on signale une erreur
+                    }                                   
                 } else cr = PIXY2_BAD_CHECKSUM;                                     // Si le checksum est faux on retourne une erreur aussi !
             } else {                                                                // S'il n'y a pas de checksum (pas normal mais on ne sait jamais)
                 if (msg->pixType == PIXY2_REP_RESOL) {                              // On vérifie que la trame est du type convenable                               
                     resolution = (T_Pixy2Resolution*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
                                                                                     // Si le checksum et le type sont bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
                     etat = idle;                                                    // Et on annoce que la pixy est libre
-                } else cr = PIXY2_TYPE_ERROR;                                       // Si le type ne correspond pas on signale une erreur
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(Pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                    }else cr = PIXY2_TYPE_ERROR;                                    // Si le type ne correspond à rien de normal on signale une erreur
+                }
             }
             break;
 
@@ -392,9 +412,9 @@
 Pixy2ErrorCode PIXY2::pixy2_setServos (Word s0, Word s1){return 0;} 
 Pixy2ErrorCode PIXY2::pixy2_setLED (Byte red, Byte green, Byte blue){return 0;}
 Pixy2ErrorCode PIXY2::pixy2_setLamp (Byte upper, Byte lower){return 0;}
-Pixy2ErrorCode PIXY2::pixy2_getFPS (T_pixy2returnCode *framerate){return 0;}
+Pixy2ErrorCode PIXY2::pixy2_getFPS (T_pixy2ReturnCode *framerate){return 0;}
 Pixy2ErrorCode PIXY2::pixy2_getBlocks (Byte sigmap, Byte maxBloc){return 0;}
-Pixy2ErrorCode PIXY2::pixy2_getMainFeature (Byte type, Byte features){return 0;}
+Pixy2ErrorCode PIXY2::pixy2_getMainFeature (Byte features){return 0;}
 Pixy2ErrorCode PIXY2::pixy2_getAllFeature (Byte features){return 0;}
 Pixy2ErrorCode PIXY2::pixy2_setMode (Byte mode){return 0;}
 Pixy2ErrorCode PIXY2::pixy2_setNexTurn (Word angle){return 0;}