Theo Le Paih / Mbed 2 deprecated Lib_Pixy2

Dependencies:   mbed

Committer:
haarkon
Date:
Thu Feb 28 11:13:47 2019 +0000
Revision:
1:dd81f4065b6b
Parent:
0:dde1b9d6c9d6
Child:
3:6ba43af28440
adding documentation part in .h file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
haarkon 0:dde1b9d6c9d6 1 #include "pixy2.h"
haarkon 0:dde1b9d6c9d6 2
haarkon 0:dde1b9d6c9d6 3 PIXY2::PIXY2(PinName tx, PinName rx, int debit)
haarkon 0:dde1b9d6c9d6 4 {
haarkon 0:dde1b9d6c9d6 5 _Pixy2 = new Serial (tx, rx, debit);
haarkon 0:dde1b9d6c9d6 6 _Pixy2->attach (callback(this,&PIXY2::pixy2_getByte));
haarkon 0:dde1b9d6c9d6 7 etat = idle;
haarkon 0:dde1b9d6c9d6 8 rPointer = 0;
haarkon 0:dde1b9d6c9d6 9 Pixy2_buffer = (Byte*) malloc (0x100);
haarkon 0:dde1b9d6c9d6 10 }
haarkon 0:dde1b9d6c9d6 11
haarkon 0:dde1b9d6c9d6 12 void PIXY2::pixy2_getByte () // Interruption de la pixy2
haarkon 0:dde1b9d6c9d6 13 {
haarkon 0:dde1b9d6c9d6 14 static Byte startPoint;
haarkon 0:dde1b9d6c9d6 15 T_Word *buffer;
haarkon 0:dde1b9d6c9d6 16
haarkon 0:dde1b9d6c9d6 17 Pixy2_buffer[wPointer] = _Pixy2->getc(); // On stocke l'octet reçu dans la première case dispo du tableau temporaire
haarkon 0:dde1b9d6c9d6 18 wPointer++;
haarkon 0:dde1b9d6c9d6 19
haarkon 0:dde1b9d6c9d6 20 switch (etat) {
haarkon 0:dde1b9d6c9d6 21 case messageSent : // Si on a envoyé une requete => on attend un entête
haarkon 0:dde1b9d6c9d6 22 if ( (wPointer - rPointer) >= 2) { // On attend d'avoir reçu 2 octets
haarkon 0:dde1b9d6c9d6 23 startPoint = wPointer - 1;
haarkon 0:dde1b9d6c9d6 24 buffer = (T_Word*) &Pixy2_buffer[startPoint]; //On pointe la structure sur les 2 derniers octets reçus
haarkon 0:dde1b9d6c9d6 25 if ((buffer->mot == PIXY2_CSSYNC) || (buffer->mot == PIXY2_SYNC)) {
haarkon 0:dde1b9d6c9d6 26 etat = receivingHeader; // On passe à l'état réception de l'entête
haarkon 0:dde1b9d6c9d6 27 rPointer = startPoint;
haarkon 0:dde1b9d6c9d6 28 if (buffer->mot == PIXY2_SYNC) frameContainChecksum = 0; // On mémorise qu'il n'y a pas de checksum à vérifier
haarkon 0:dde1b9d6c9d6 29 else frameContainChecksum = 1; // On mémorise qu'il y a un checksum à vérifier
haarkon 0:dde1b9d6c9d6 30 }
haarkon 0:dde1b9d6c9d6 31 }
haarkon 0:dde1b9d6c9d6 32 break;
haarkon 0:dde1b9d6c9d6 33
haarkon 0:dde1b9d6c9d6 34 case receivingHeader : //Si on est en train de recevoir un entête (entre le SYNC et... La fin de l'entête)
haarkon 0:dde1b9d6c9d6 35 if ((frameContainChecksum && ((wPointer - rPointer) == PIXY2_CSHEADERSIZE)) || (!frameContainChecksum && ((wPointer - rPointer) == PIXY2_NCSHEADERSIZE))) {
haarkon 0:dde1b9d6c9d6 36 //Si on a reçu 6 octets pour une trame avec checksum ou 4 pour une trame sans checksum
haarkon 0:dde1b9d6c9d6 37 etat = headerReceived; //On passe à entête reçu
haarkon 0:dde1b9d6c9d6 38 dataSize = Pixy2_buffer[startPoint+3]; // Et on lit la taille de la payload
haarkon 0:dde1b9d6c9d6 39 }
haarkon 0:dde1b9d6c9d6 40 break;
haarkon 0:dde1b9d6c9d6 41
haarkon 0:dde1b9d6c9d6 42 case headerReceived : // Si on vient de recevoir le premier octet de données
haarkon 0:dde1b9d6c9d6 43 startPoint = wPointer; // On enregistre sa position
haarkon 0:dde1b9d6c9d6 44 etat = receivingData; // Et on dit que l'on est en train de recevoir des données
haarkon 0:dde1b9d6c9d6 45 break;
haarkon 0:dde1b9d6c9d6 46
haarkon 0:dde1b9d6c9d6 47 case receivingData : // Si on est en train de recevoir des données.
haarkon 0:dde1b9d6c9d6 48 if (wPointer == (dataSize + startPoint)) etat = dataReceived; //Quand on a reçu toutes les données promises on dit que c'est OK
haarkon 0:dde1b9d6c9d6 49 break;
haarkon 0:dde1b9d6c9d6 50
haarkon 0:dde1b9d6c9d6 51 default : // On ne traite volontairement ici pas tous les cas, en particulier idle et dataReceived. C'est à la fonction de le faire ! Le reste est lié à des réceptions de données.
haarkon 0:dde1b9d6c9d6 52 break;
haarkon 0:dde1b9d6c9d6 53 }
haarkon 0:dde1b9d6c9d6 54 }
haarkon 0:dde1b9d6c9d6 55
haarkon 0:dde1b9d6c9d6 56 int PIXY2::pixy2_sndGetVersion (void){
haarkon 0:dde1b9d6c9d6 57 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 58 int i = 0, dataSize = 0;
haarkon 0:dde1b9d6c9d6 59 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 60 msg.frame.header.pixType = PIXY2_ASK_VERS;
haarkon 0:dde1b9d6c9d6 61 msg.frame.header.pixLength = 0;
haarkon 0:dde1b9d6c9d6 62 do {
haarkon 0:dde1b9d6c9d6 63 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 64 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 65 i++;
haarkon 0:dde1b9d6c9d6 66 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 67 return 0;
haarkon 0:dde1b9d6c9d6 68 }
haarkon 0:dde1b9d6c9d6 69
haarkon 0:dde1b9d6c9d6 70 int PIXY2::pixy2_sndGetResolution (void){
haarkon 0:dde1b9d6c9d6 71 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 72 int i = 0, dataSize = 1;
haarkon 0:dde1b9d6c9d6 73 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 74 msg.frame.header.pixType = PIXY2_ASK_RESOL;
haarkon 0:dde1b9d6c9d6 75 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 76 msg.frame.data[0] = 0;
haarkon 0:dde1b9d6c9d6 77 do {
haarkon 0:dde1b9d6c9d6 78 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 79 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 80 i++;
haarkon 0:dde1b9d6c9d6 81 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 82 return 0;
haarkon 0:dde1b9d6c9d6 83 }
haarkon 0:dde1b9d6c9d6 84
haarkon 0:dde1b9d6c9d6 85 int PIXY2::pixy2_sndSetCameraBrightness (Byte brightness){
haarkon 0:dde1b9d6c9d6 86 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 87 int i = 0, dataSize = 1;
haarkon 0:dde1b9d6c9d6 88 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 89 msg.frame.header.pixType = PIXY2_SET_BRIGHT;
haarkon 0:dde1b9d6c9d6 90 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 91 msg.frame.data[0] = brightness;
haarkon 0:dde1b9d6c9d6 92 do {
haarkon 0:dde1b9d6c9d6 93 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 94 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 95 i++;
haarkon 0:dde1b9d6c9d6 96 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 97 return 0;
haarkon 0:dde1b9d6c9d6 98 }
haarkon 0:dde1b9d6c9d6 99
haarkon 0:dde1b9d6c9d6 100 int PIXY2::pixy2_sndSetServo (Word s0, Word s1){
haarkon 0:dde1b9d6c9d6 101 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 102 int i = 0, dataSize = 4;
haarkon 0:dde1b9d6c9d6 103 T_Word tmp;
haarkon 0:dde1b9d6c9d6 104 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 105 msg.frame.header.pixType = PIXY2_SET_SERVOS;
haarkon 0:dde1b9d6c9d6 106 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 107 tmp.mot = s0;
haarkon 0:dde1b9d6c9d6 108 msg.frame.data[0] = tmp.octet[0];
haarkon 0:dde1b9d6c9d6 109 msg.frame.data[1] = tmp.octet[1];
haarkon 0:dde1b9d6c9d6 110 tmp.mot = s1;
haarkon 0:dde1b9d6c9d6 111 msg.frame.data[2] = tmp.octet[0];
haarkon 0:dde1b9d6c9d6 112 msg.frame.data[3] = tmp.octet[1];
haarkon 0:dde1b9d6c9d6 113 do {
haarkon 0:dde1b9d6c9d6 114 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 115 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 116 i++;
haarkon 0:dde1b9d6c9d6 117 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 118 return 0;
haarkon 0:dde1b9d6c9d6 119 }
haarkon 0:dde1b9d6c9d6 120
haarkon 0:dde1b9d6c9d6 121 int PIXY2::pixy2_sndSetLED (Byte red, Byte green, Byte blue){
haarkon 0:dde1b9d6c9d6 122 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 123 int i = 0, dataSize = 3;
haarkon 0:dde1b9d6c9d6 124 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 125 msg.frame.header.pixType = PIXY2_SET_LED;
haarkon 0:dde1b9d6c9d6 126 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 127 msg.frame.data[0] = red;
haarkon 0:dde1b9d6c9d6 128 msg.frame.data[1] = green;
haarkon 0:dde1b9d6c9d6 129 msg.frame.data[2] = blue;
haarkon 0:dde1b9d6c9d6 130 do {
haarkon 0:dde1b9d6c9d6 131 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 132 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 133 i++;
haarkon 0:dde1b9d6c9d6 134 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 135 return 0;
haarkon 0:dde1b9d6c9d6 136 }
haarkon 0:dde1b9d6c9d6 137
haarkon 0:dde1b9d6c9d6 138 int PIXY2::pixy2_sndSetLamp (Byte upper, Byte lower){
haarkon 0:dde1b9d6c9d6 139 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 140 int i = 0, dataSize = 2;
haarkon 0:dde1b9d6c9d6 141 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 142 msg.frame.header.pixType = PIXY2_SET_LED;
haarkon 0:dde1b9d6c9d6 143 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 144 msg.frame.data[0] = upper;
haarkon 0:dde1b9d6c9d6 145 msg.frame.data[1] = lower;
haarkon 0:dde1b9d6c9d6 146 do {
haarkon 0:dde1b9d6c9d6 147 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 148 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 149 i++;
haarkon 0:dde1b9d6c9d6 150 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 151 return 0;
haarkon 0:dde1b9d6c9d6 152 }
haarkon 0:dde1b9d6c9d6 153
haarkon 0:dde1b9d6c9d6 154 int PIXY2::pixy2_sndGetFPS (void){
haarkon 0:dde1b9d6c9d6 155 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 156 int i = 0, dataSize = 0;
haarkon 0:dde1b9d6c9d6 157 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 158 msg.frame.header.pixType = PIXY2_ASK_FPS;
haarkon 0:dde1b9d6c9d6 159 msg.frame.header.pixLength = 0;
haarkon 0:dde1b9d6c9d6 160 do {
haarkon 0:dde1b9d6c9d6 161 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 162 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 163 i++;
haarkon 0:dde1b9d6c9d6 164 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 165 return 0;
haarkon 0:dde1b9d6c9d6 166 }
haarkon 0:dde1b9d6c9d6 167
haarkon 0:dde1b9d6c9d6 168 int PIXY2::pixy2_sndGetBlocks (Byte sigmap, Byte maxBloc){
haarkon 0:dde1b9d6c9d6 169 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 170 int i = 0, dataSize = 2;
haarkon 0:dde1b9d6c9d6 171 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 172 msg.frame.header.pixType = PIXY2_ASK_BLOC;
haarkon 0:dde1b9d6c9d6 173 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 174 msg.frame.data[0] = sigmap;
haarkon 0:dde1b9d6c9d6 175 msg.frame.data[1] = maxBloc;
haarkon 0:dde1b9d6c9d6 176 do {
haarkon 0:dde1b9d6c9d6 177 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 178 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 179 i++;
haarkon 0:dde1b9d6c9d6 180 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 181 return 0;
haarkon 0:dde1b9d6c9d6 182 }
haarkon 0:dde1b9d6c9d6 183
haarkon 0:dde1b9d6c9d6 184 int PIXY2::pixy2_sndGetMainFeature (Byte type, Byte feature){
haarkon 0:dde1b9d6c9d6 185 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 186 int i = 0, dataSize = 2;
haarkon 0:dde1b9d6c9d6 187 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 188 msg.frame.header.pixType = PIXY2_ASK_LINE;
haarkon 0:dde1b9d6c9d6 189 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 190 msg.frame.data[0] = type;
haarkon 0:dde1b9d6c9d6 191 msg.frame.data[1] = feature;
haarkon 0:dde1b9d6c9d6 192 do {
haarkon 0:dde1b9d6c9d6 193 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 194 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 195 i++;
haarkon 0:dde1b9d6c9d6 196 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 197 return 0;
haarkon 0:dde1b9d6c9d6 198 }
haarkon 0:dde1b9d6c9d6 199
haarkon 0:dde1b9d6c9d6 200 int PIXY2::pixy2_sndSetMode (Byte mode){
haarkon 0:dde1b9d6c9d6 201 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 202 int i = 0, dataSize = 1;
haarkon 0:dde1b9d6c9d6 203 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 204 msg.frame.header.pixType = PIXY2_SET_MODE;
haarkon 0:dde1b9d6c9d6 205 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 206 msg.frame.data[0] = mode;
haarkon 0:dde1b9d6c9d6 207 do {
haarkon 0:dde1b9d6c9d6 208 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 209 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 210 i++;
haarkon 0:dde1b9d6c9d6 211 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 212 return 0;
haarkon 0:dde1b9d6c9d6 213 }
haarkon 0:dde1b9d6c9d6 214
haarkon 0:dde1b9d6c9d6 215 int PIXY2::pixy2_sndSetNexTurn (Word angle){
haarkon 0:dde1b9d6c9d6 216 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 217 int i = 0, dataSize = 2;
haarkon 0:dde1b9d6c9d6 218 T_Word tmp;
haarkon 0:dde1b9d6c9d6 219 tmp.mot = angle;
haarkon 0:dde1b9d6c9d6 220 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 221 msg.frame.header.pixType = PIXY2_SET_TURN;
haarkon 0:dde1b9d6c9d6 222 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 223 tmp.mot = angle;
haarkon 0:dde1b9d6c9d6 224 msg.frame.data[0] = tmp.octet[0];
haarkon 0:dde1b9d6c9d6 225 msg.frame.data[1] = tmp.octet[1];
haarkon 0:dde1b9d6c9d6 226 do {
haarkon 0:dde1b9d6c9d6 227 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 228 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 229 i++;
haarkon 0:dde1b9d6c9d6 230 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 231 return 0;
haarkon 0:dde1b9d6c9d6 232 }
haarkon 0:dde1b9d6c9d6 233
haarkon 0:dde1b9d6c9d6 234 int PIXY2::pixy2_sndSetDefaultTurn (Word angle){
haarkon 0:dde1b9d6c9d6 235 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 236 int i = 0, dataSize = 2;
haarkon 0:dde1b9d6c9d6 237 T_Word tmp;
haarkon 0:dde1b9d6c9d6 238 tmp.mot = angle;
haarkon 0:dde1b9d6c9d6 239 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 240 msg.frame.header.pixType = PIXY2_SET_DEFTURN;
haarkon 0:dde1b9d6c9d6 241 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 242 tmp.mot = angle;
haarkon 0:dde1b9d6c9d6 243 msg.frame.data[0] = tmp.octet[0];
haarkon 0:dde1b9d6c9d6 244 msg.frame.data[1] = tmp.octet[1];
haarkon 0:dde1b9d6c9d6 245 do {
haarkon 0:dde1b9d6c9d6 246 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 247 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 248 i++;
haarkon 0:dde1b9d6c9d6 249 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 250 return 0;
haarkon 0:dde1b9d6c9d6 251 }
haarkon 0:dde1b9d6c9d6 252
haarkon 0:dde1b9d6c9d6 253 int PIXY2::pixy2_sndSetVector (Byte vectorIndex){
haarkon 0:dde1b9d6c9d6 254 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 255 int i = 0, dataSize = 1;
haarkon 0:dde1b9d6c9d6 256 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 257 msg.frame.header.pixType = PIXY2_SET_VECTOR;
haarkon 0:dde1b9d6c9d6 258 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 259 msg.frame.data[0] = vectorIndex;
haarkon 0:dde1b9d6c9d6 260 do {
haarkon 0:dde1b9d6c9d6 261 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 262 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 263 i++;
haarkon 0:dde1b9d6c9d6 264 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 265 return 0;
haarkon 0:dde1b9d6c9d6 266 }
haarkon 0:dde1b9d6c9d6 267
haarkon 0:dde1b9d6c9d6 268 int PIXY2::pixy2_sndReverseVector (void){
haarkon 0:dde1b9d6c9d6 269 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 270 int i = 0, dataSize = 0;
haarkon 0:dde1b9d6c9d6 271 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 272 msg.frame.header.pixType = PIXY2_SET_REVERSE;
haarkon 0:dde1b9d6c9d6 273 msg.frame.header.pixLength = 0;
haarkon 0:dde1b9d6c9d6 274 do {
haarkon 0:dde1b9d6c9d6 275 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 276 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 277 i++;
haarkon 0:dde1b9d6c9d6 278 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 279 return 0;
haarkon 0:dde1b9d6c9d6 280 }
haarkon 0:dde1b9d6c9d6 281
haarkon 0:dde1b9d6c9d6 282 int PIXY2::pixy2_sndGetRGB (Word x, Word y, Byte saturate){
haarkon 0:dde1b9d6c9d6 283 T_pixy2sendBuffer msg;
haarkon 0:dde1b9d6c9d6 284 int i = 0, dataSize = 3;
haarkon 0:dde1b9d6c9d6 285 msg.frame.header.pixSync = PIXY2_SYNC;
haarkon 0:dde1b9d6c9d6 286 msg.frame.header.pixType = PIXY2_ASK_VIDEO;
haarkon 0:dde1b9d6c9d6 287 msg.frame.header.pixLength = 1;
haarkon 0:dde1b9d6c9d6 288 msg.frame.data[0] = x;
haarkon 0:dde1b9d6c9d6 289 msg.frame.data[1] = y;
haarkon 0:dde1b9d6c9d6 290 msg.frame.data[2] = saturate;
haarkon 0:dde1b9d6c9d6 291 do {
haarkon 0:dde1b9d6c9d6 292 while(!_Pixy2->writable());
haarkon 0:dde1b9d6c9d6 293 _Pixy2->putc(msg.data[i]);
haarkon 0:dde1b9d6c9d6 294 i++;
haarkon 0:dde1b9d6c9d6 295 } while (i<(PIXY2_NCSHEADERSIZE+dataSize));
haarkon 0:dde1b9d6c9d6 296 return 0;
haarkon 0:dde1b9d6c9d6 297 }
haarkon 0:dde1b9d6c9d6 298
haarkon 0:dde1b9d6c9d6 299 /* La fonction est bloquante à l'envoi (pas vraiment le choix), mais elle est non bloquante en réception. On essayera de faire une fonction non bloquante en envoi avec write, mais c'est pas la priorité.
haarkon 0:dde1b9d6c9d6 300 Le principe c'est de stocker dans un buffer circulaire les données au fur et à mesure qu'elle sont reçues et de traiter uniquement en castant les infos. Pour cela, il faut recevoir et stocker. */
haarkon 0:dde1b9d6c9d6 301
haarkon 0:dde1b9d6c9d6 302 int PIXY2::pixy2_getVersion (T_Pixy2Version *version){
haarkon 0:dde1b9d6c9d6 303
haarkon 0:dde1b9d6c9d6 304 T_pixy2RcvHeader *msg = (T_pixy2RcvHeader*) &Pixy2_buffer[rPointer];
haarkon 0:dde1b9d6c9d6 305 int cr = 0;
haarkon 0:dde1b9d6c9d6 306
haarkon 0:dde1b9d6c9d6 307 switch (etat) {
haarkon 0:dde1b9d6c9d6 308 case idle :
haarkon 0:dde1b9d6c9d6 309 PIXY2::pixy2_sndGetVersion();
haarkon 0:dde1b9d6c9d6 310 etat = messageSent;
haarkon 0:dde1b9d6c9d6 311 rPointer = wPointer;
haarkon 0:dde1b9d6c9d6 312 cr = -2; //Busy
haarkon 0:dde1b9d6c9d6 313 break;
haarkon 0:dde1b9d6c9d6 314
haarkon 0:dde1b9d6c9d6 315 case dataReceived :
haarkon 0:dde1b9d6c9d6 316 if (frameContainChecksum) {
haarkon 0:dde1b9d6c9d6 317 if ( pixy2_validateChecksum (&Pixy2_buffer[rPointer]) ) {
haarkon 0:dde1b9d6c9d6 318 if (msg->pixType == PIXY2_REP_VERS) {
haarkon 0:dde1b9d6c9d6 319 version = (T_Pixy2Version*) &Pixy2_buffer[rPointer + PIXY2_CSHEADERSIZE];
haarkon 0:dde1b9d6c9d6 320 etat = idle;
haarkon 0:dde1b9d6c9d6 321 } else cr = -7; // Type Error
haarkon 0:dde1b9d6c9d6 322 } else cr = -3; // Checksum Error
haarkon 0:dde1b9d6c9d6 323 } else {
haarkon 0:dde1b9d6c9d6 324 if (msg->pixType == PIXY2_REP_VERS) {
haarkon 0:dde1b9d6c9d6 325 version = (T_Pixy2Version*) &Pixy2_buffer[rPointer + PIXY2_NCSHEADERSIZE];
haarkon 0:dde1b9d6c9d6 326 etat = idle;
haarkon 0:dde1b9d6c9d6 327 } else cr = -7; // Type Error
haarkon 0:dde1b9d6c9d6 328 }
haarkon 0:dde1b9d6c9d6 329 break;
haarkon 0:dde1b9d6c9d6 330
haarkon 0:dde1b9d6c9d6 331 default :
haarkon 0:dde1b9d6c9d6 332 cr = -1; // Busy
haarkon 0:dde1b9d6c9d6 333 break;
haarkon 0:dde1b9d6c9d6 334 }
haarkon 0:dde1b9d6c9d6 335 return cr;
haarkon 0:dde1b9d6c9d6 336 }
haarkon 0:dde1b9d6c9d6 337
haarkon 0:dde1b9d6c9d6 338 int PIXY2::pixy2_getResolution (T_Pixy2Resolution *resolution){return 0;}
haarkon 0:dde1b9d6c9d6 339 int PIXY2::pixy2_setCameraBrightness (Byte brightness){return 0;}
haarkon 0:dde1b9d6c9d6 340 int PIXY2::pixy2_setServos (Word s0, Word s1){return 0;}
haarkon 0:dde1b9d6c9d6 341 int PIXY2::pixy2_setLED (Byte red, Byte green, Byte blue){return 0;}
haarkon 0:dde1b9d6c9d6 342 int PIXY2::pixy2_setLamp (Byte upper, Byte lower){return 0;}
haarkon 1:dd81f4065b6b 343 int PIXY2::pixy2_getFPS (T_pixy2returnCode *framerate){return 0;}
haarkon 0:dde1b9d6c9d6 344 int PIXY2::pixy2_getBlocks (Byte sigmap, Byte maxBloc){return 0;}
haarkon 0:dde1b9d6c9d6 345 int PIXY2::pixy2_getMainFeature (Byte type, Byte features){return 0;}
haarkon 0:dde1b9d6c9d6 346 int PIXY2::pixy2_getAllFeature (Byte features){return 0;}
haarkon 0:dde1b9d6c9d6 347 int PIXY2::pixy2_setMode (Byte mode){return 0;}
haarkon 0:dde1b9d6c9d6 348 int PIXY2::pixy2_setNexTurn (Word angle){return 0;}
haarkon 0:dde1b9d6c9d6 349 int PIXY2::pixy2_setDefaultTurn (Word angle){return 0;}
haarkon 0:dde1b9d6c9d6 350 int PIXY2::pixy2_setVector (Byte vectorIndex){return 0;}
haarkon 0:dde1b9d6c9d6 351 int PIXY2::pixy2_ReverseVector (void){return 0;}
haarkon 0:dde1b9d6c9d6 352 int PIXY2::pixy2_getRGB (Word x, Word y, Byte saturate, T_pixy2Pixel *pixel){return 0;}
haarkon 0:dde1b9d6c9d6 353
haarkon 0:dde1b9d6c9d6 354 int PIXY2::pixy2_validateChecksum (Byte* tab){
haarkon 1:dd81f4065b6b 355 Word i, sum = 0;
haarkon 1:dd81f4065b6b 356 T_Word *tmp;
haarkon 0:dde1b9d6c9d6 357
haarkon 1:dd81f4065b6b 358 for (i=0; i<*(tab+3);i++) sum = sum + *(tab + PIXY2_CSHEADERSIZE + i);
haarkon 1:dd81f4065b6b 359 tmp = (T_Word*) (tab+4);
haarkon 1:dd81f4065b6b 360 if (tmp->mot == sum) return 0;
haarkon 1:dd81f4065b6b 361 else return -1;
haarkon 1:dd81f4065b6b 362 }