Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: pixy2.cpp
- Revision:
- 20:8e3adcaab290
- Parent:
- 19:007d361c8d66
- Child:
- 22:5f76404e2cbc
--- a/pixy2.cpp Mon Apr 01 12:34:14 2019 +0000 +++ b/pixy2.cpp Mon Apr 01 15:34:15 2019 +0000 @@ -892,8 +892,44 @@ return cr; } +T_pixy2ErrorCode PIXY2::pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel){ -T_pixy2ErrorCode PIXY2::pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel){return PIXY2_OK;} + T_pixy2RcvHeader *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[hPointer]; + T_pixy2ErrorCode cr = PIXY2_OK; + + switch (etat) { + case idle : // Si la caméra est inactive + wPointer = 0; // On remonte en haut du buffer + cr = PIXY2::pixy2_sndGetRGB(x, y, saturate); // On envoie la trame de demande de la couleur (RGB) d'un carée de pixel + if (cr!= PIXY2_OK) return cr; // S'il y a une erreur lors de l'envoi on ejecte ! + etat = messageSent; // On passe à l'attente du message de réponse + 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[hPointer]) ) { // On lance la validation du checksum + return PIXY2_BAD_CHECKSUM; // Si le checksum est faux on retourne une erreur + } + } + if (msg->pixType == PIXY2_REP_ACK) { // On vérifie que la trame est du type convenable (REPONSE ACK) + pixel = (T_pixy2Pixel*) &Pixy2_buffer[dPointer]; // On mappe le pointeur de structure sur le buffer de réception. + } else { // Si ce n'est pas le bon type + if (msg->pixType == PIXY2_REP_ERROR) { // Cela pourrait être une trame d'erreur + cr = *(T_pixy2ErrorCode*) &Pixy2_buffer[dPointer]; // Si c'est le cas, 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 de type. + } + etat = idle; // 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_validateChecksum (Byte* tab){ Word i, sum = 0;