Theo Le Paih / Mbed 2 deprecated Lib_Pixy2

Dependencies:   mbed

Revision:
12:7493191dd1dc
Parent:
11:68ef9f85e40e
Child:
14:c0eda1e35a00
--- a/pixy2.cpp	Tue Mar 12 14:16:53 2019 +0000
+++ b/pixy2.cpp	Tue Mar 12 16:51:31 2019 +0000
@@ -330,26 +330,25 @@
                     if (msg->pixType == PIXY2_REP_VERS) {                           // On vérifie que la trame est du type convenable
                         version = (T_pixy2Version*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
                                                                                     // 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 {
                         if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
                             cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
-                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                                                                                    // On copie le code d'erreur reçu dans la variable de retour
                         }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
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
                 } else {
                     if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
                         cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
-                                                                                    // On mappe le résultat sur la donnée stockée dans la FIFO (ligne précédente)    
+                                                                                    // On copie le code d'erreur reçu dans la variable de retour    
                     }else cr = PIXY2_TYPE_ERROR;                                    // Si le type ne correspond à rien de normal on signale une erreur
                 }
             }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
             break;
 
         default :                                                                   // Dans tous les autres cas
@@ -378,7 +377,57 @@
                     if (msg->pixType == PIXY2_REP_RESOL) {                          // On vérifie que la trame est du type convenable
                         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 {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
+                                                                                    // On copie le code d'erreur reçu dans la variable de retour
+                        }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 type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // On copie le code d'erreur reçu dans la variable de retour    
+                    }else cr = PIXY2_TYPE_ERROR;                                    // Si le type ne correspond à rien de normal on signale une erreur
+                }
+            }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
+            break;
+
+        default :                                                                   // Dans tous les autres cas
+            cr = PIXY2_BUSY;                                                        // On signale que la caméra est occupée.
+            break;
+    }
+    return cr;
+}
+
+
+T_pixy2ErrorCode PIXY2::pixy2_setCameraBrightness (Byte brightness){
+
+    T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
+    T_pixy2ErrorCode    cr = PIXY2_OK;
+    T_pixy2ReturnCode   retour;
+    
+    switch (etat) {
+        case idle :                                                                 // Si la caméra est inactive
+            PIXY2::pixy2_sndSetCameraBrightness (brightness);                       // On envoie la trame de règlage de la luminosité
+            etat = messageSent;                                                     // On passe à l'attente du message de réponse
+            rPointer = wPointer;                                                    // On enregistre la position du pointeur de FIFO
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+            
+        case dataReceived :                                                         // Quand on a reçu l'intégralité du message
+            if (frameContainChecksum) {                                             // Si la trame contient un checksum
+                if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
+                    if (msg->pixType == PIXY2_ACK) {                                // On vérifie que la trame est du type convenable
+                        retour = *(T_pixy2ReturnCode*) &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)                        
+                        if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
                     } else {
                         if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
                             cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
@@ -387,17 +436,71 @@
                     }                                   
                 } 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
+                if (msg->pixType == PIXY2_ACK) {                                    // On vérifie que la trame est du type convenable                               
+                    retour = *(T_pixy2ReturnCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                    if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
                 } else {
                     if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
                         cr = *(T_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
+                   }else cr = PIXY2_TYPE_ERROR;                                     // Si le type ne correspond à rien de normal on signale une erreur
                 }
             }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
+            break;
+
+        default :                                                                   // Dans tous les autres cas
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+    }
+    return cr;
+}
+
+T_pixy2ErrorCode PIXY2::pixy2_setServos (Word s0, Word s1){
+
+    T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
+    T_pixy2ErrorCode    cr = PIXY2_OK;
+    T_pixy2ReturnCode   retour;
+    
+    switch (etat) {
+        case idle :                                                                 // Si la caméra est inactive
+            PIXY2::pixy2_sndSetServo (s0, s1);                                      // On envoie la trame de règlage des servos moteurs
+            etat = messageSent;                                                     // On passe à l'attente du message de réponse
+            rPointer = wPointer;                                                    // On enregistre la position du pointeur de FIFO
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+            
+        case dataReceived :                                                         // Quand on a reçu l'intégralité du message
+            if (frameContainChecksum) {                                             // Si la trame contient un checksum
+                if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
+                    if (msg->pixType == PIXY2_ACK) {                                // On vérifie que la trame est du type convenable
+                        retour = *(T_pixy2ReturnCode*) &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)                        
+                        if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(T_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_ACK) {                                    // On vérifie que la trame est du type convenable                               
+                    retour = *(T_pixy2ReturnCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                    if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(T_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
+                }
+            }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
             break;
 
         default :                                                                   // Dans tous les autres cas
@@ -407,21 +510,166 @@
     return cr;
 }
 
+T_pixy2ErrorCode PIXY2::pixy2_setLED (Byte red, Byte green, Byte blue){
 
-T_pixy2ErrorCode PIXY2::pixy2_setCameraBrightness (Byte brightness){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setServos (Word s0, Word s1){return 0;} 
-T_pixy2ErrorCode PIXY2::pixy2_setLED (Byte red, Byte green, Byte blue){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setLamp (Byte upper, Byte lower){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_getFPS (T_pixy2ReturnCode *framerate){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_getBlocks (Byte sigmap, Byte maxBloc){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_getMainFeature (Byte features){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_getAllFeature (Byte features){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setMode (Byte mode){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setNexTurn (Word angle){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setDefaultTurn (Word angle){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_setVector (Byte vectorIndex){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_ReverseVector (void){return 0;}
-T_pixy2ErrorCode PIXY2::pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel){return 0;}
+    T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
+    T_pixy2ErrorCode    cr = PIXY2_OK;
+    T_pixy2ReturnCode   retour;
+    
+    switch (etat) {
+        case idle :                                                                 // Si la caméra est inactive
+            PIXY2::pixy2_sndSetLED (red, green, blue);                              // On envoie la trame de règlage des composantes de la LED RGB
+            etat = messageSent;                                                     // On passe à l'attente du message de réponse
+            rPointer = wPointer;                                                    // On enregistre la position du pointeur de FIFO
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+            
+        case dataReceived :                                                         // Quand on a reçu l'intégralité du message
+            if (frameContainChecksum) {                                             // Si la trame contient un checksum
+                if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
+                    if (msg->pixType == PIXY2_ACK) {                                // On vérifie que la trame est du type convenable
+                        retour = *(T_pixy2ReturnCode*) &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)                        
+                        if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(T_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_ACK) {                                    // On vérifie que la trame est du type convenable                               
+                    retour = *(T_pixy2ReturnCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                    if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(T_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
+                }
+            }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
+            break;
+
+        default :                                                                   // Dans tous les autres cas
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+    }
+    return cr;
+}
+
+T_pixy2ErrorCode PIXY2::pixy2_setLamp (Byte upper, Byte lower){
+
+    T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
+    T_pixy2ErrorCode    cr = PIXY2_OK;
+    T_pixy2ReturnCode   retour;
+    
+    switch (etat) {
+        case idle :                                                                 // Si la caméra est inactive
+            PIXY2::pixy2_sndSetLamp (upper, lower);                                 // On envoie la trame de règlage d'allumage des lumières de contraste
+            etat = messageSent;                                                     // On passe à l'attente du message de réponse
+            rPointer = wPointer;                                                    // On enregistre la position du pointeur de FIFO
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+            
+        case dataReceived :                                                         // Quand on a reçu l'intégralité du message
+            if (frameContainChecksum) {                                             // Si la trame contient un checksum
+                if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
+                    if (msg->pixType == PIXY2_ACK) {                                // On vérifie que la trame est du type convenable
+                        retour = *(T_pixy2ReturnCode*) &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)                        
+                        if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(T_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_ACK) {                                    // On vérifie que la trame est du type convenable                               
+                    retour = *(T_pixy2ReturnCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                    if (retour.pixReturn != PIXY2_OK) cr = (T_pixy2ErrorCode) retour.pixReturn;
+                                                                                    // Si la Pixy n'aquite pas l'ordre, on retourne l'erreur signalée
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(T_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
+                }
+            }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
+            break;
+
+        default :                                                                   // Dans tous les autres cas
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+    }
+    return cr;
+}
+
+T_pixy2ErrorCode PIXY2::pixy2_getFPS (T_pixy2ReturnCode *framerate){
+
+    T_pixy2RcvHeader    *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
+    T_pixy2ErrorCode    cr = PIXY2_OK;
+    
+    switch (etat) {
+        case idle :                                                                 // Si la caméra est inactive
+            PIXY2::pixy2_sndGetFPS();                                               // On envoie la trame de règlage d'allumage des lumières de contraste
+            etat = messageSent;                                                     // On passe à l'attente du message de réponse
+            rPointer = wPointer;                                                    // On enregistre la position du pointeur de FIFO
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+            
+        case dataReceived :                                                         // Quand on a reçu l'intégralité du message
+            if (frameContainChecksum) {                                             // Si la trame contient un checksum
+                if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {           // On lance la validation du checksum           
+                    if (msg->pixType == PIXY2_ACK) {                                // On vérifie que la trame est du type convenable
+                        framerate = (T_pixy2ReturnCode*) &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)                        
+                    } else {
+                        if (msg->pixType == PIXY2_ERROR) {                          // Si on reçoit une trame d'erreur
+                            cr = *(T_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_ACK) {                                    // On vérifie que la trame est du type convenable                               
+                    framerate = (T_pixy2ReturnCode*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
+                                                                                    // Si le type est bon, on mappe le pointeur de résultat sur la FIFO (ligne précédente)                        
+                } else {
+                    if (msg->pixType == PIXY2_ERROR) {                              // Si on reçoit une trame d'erreur
+                        cr = *(T_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
+                }
+            }
+            etat = idle;                                                            // Et on annoce que la pixy est libre
+            break;
+
+        default :                                                                   // Dans tous les autres cas
+            cr = PIXY2_BUSY;                                                        // On signale à l'utilisateur que la caméra est maintenant occupée
+            break;
+    }
+    return cr;
+}
+
+T_pixy2ErrorCode PIXY2::pixy2_getBlocks (Byte sigmap, Byte maxBloc){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_getMainFeature (Byte features){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_getAllFeature (Byte features){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_setMode (Byte mode){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_setNexTurn (Word angle){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_setDefaultTurn (Word angle){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_setVector (Byte vectorIndex){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_ReverseVector (void){return PIXY2_OK;}
+T_pixy2ErrorCode PIXY2::pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel){return PIXY2_OK;}
 
 T_pixy2ErrorCode PIXY2::pixy2_validateChecksum (Byte* tab){
     Word    i, sum = 0;
@@ -429,6 +677,6 @@
     
     for (i=0; i<*(tab+3);i++)   sum = sum + *(tab + PIXY2_CSHEADERSIZE + i);
     tmp = (T_Word*) (tab+4);
-    if (tmp->mot == sum) return 0;
+    if (tmp->mot == sum) return PIXY2_OK;
     else return PIXY2_BAD_CHECKSUM;
 }