void* realloc(void* p, long newSize) { if (p == 0) { return malloc(newSize); } if (newSize == 0) { free(p); return 0; } int idx = ((((long) p) - ((long) array)) / 4) - 1; sanity(idx); if (!isTaken(idx)) { //Debug::panic("freeing free block %p %d\n",p,idx); return 0; } long sz = size(idx) * 4; void* newPtr = malloc(newSize); if (newPtr) { long m = (newSize > sz) ? sz : newSize; memcpy(newPtr,p,m); } free(p); return newPtr; }
void free(void* p) { if (p == 0) return; if (p == (void*) array) return; int idx = ((((long) p) - ((long) array)) / 4) - 1; sanity(idx); if (!isTaken(idx)) { //Debug::panic("freeing free block %p %d\n",p,idx); return; } int sz = size(idx); int leftIndex = left(idx); int rightIndex = right(idx); if (isAvail(leftIndex)) { remove(leftIndex); idx = leftIndex; sz += size(leftIndex); } if (isAvail(rightIndex)) { remove(rightIndex); sz += size(rightIndex); } makeAvail(idx,sz); }
// ESTE MÉTODO NÃO É UTILIZADO NESTE EXEMPLO, MAS PODE SER ÚTIL. // Desactiva o bit no local adequado dentro do addressRegister // para guardar a informação de que o sensor está activo // e o endereço é "tomado" (taken). boolean AgroShield::setVacant(byte i){ boolean initStatus = isTaken(i); i = charToDec(i); // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61. byte j = i / 8; // byte # byte k = i % 8; // bit # addressRegister[j] &= ~(1 << k); return initStatus; // returna falso se já esta livre (vacant). }
// Define o bit no local adequado dentro do addressRegister // para guardar a informação de que o sensor está activo // e o endereço é "tomado" (taken). boolean AgroShield::setTaken(byte i){ boolean initStatus = isTaken(i); i = charToDec(i); // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61. byte j = i / 8; // byte # byte k = i % 8; // bit # addressRegister[j] |= (1 << k); //Serial.println("set taken"); return !initStatus; // returna falso se já está "tomado" (already taken). }
bool DuplicateFaceFinder::haveSameRects(FaceData *f1, FaceData *f2) { FaceRectsByFaceIDQuery frq; frq.setFaceID(f1->ID); frq.exec(_sqlConn); vector<FaceRect> f1rects = frq.faceRects; frq.clear(); frq.setFaceID(f2->ID); frq.exec(_sqlConn); vector<FaceRect> f2rects = frq.faceRects; if (f1rects.size() != f2rects.size()) return false; // check if for each rectangle in f1rects there is one exactly same in f2rects bool foundAll = true; int numRects = f1rects.size(); vector<bool> isTaken(numRects,false); for (int i = 0; i < numRects; ++i) { bool foundOne = false; for (int j = 0; j < numRects; ++j) { if (isTaken[j]) continue; if (f1rects[i].equals(f2rects[j])) { foundOne = true; isTaken[j] = true; break; } } if (!foundOne) { foundAll = false; break; } } return foundAll; }
void AGWorkPosition::print() const { std::cout << "- AGWorkPosition: open=" << myOpeningTime << " closingTime=" << myClosingTime << " taken=" << isTaken() << std::endl; std::cout << "\t"; myLocation.print(); }
void AgroShield::SDI12(uint8_t mode) { switch( mode ) { case CHECK_ALL : mySDI12.begin(); delay(500); // Tempo para que mySDI12 seja iniciado. /* Efectua um Scan rápido de todos os endereços. */ Serial.println(" | SEARCH FOR SENSORS"); Serial.println(" | Scanning all addresses, please wait..."); for(byte i = '0'; i <= '9'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre 0-9 for(byte i = 'a'; i <= 'z'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre a-z for(byte i = 'A'; i <= 'Z'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre A-Z /* Imprime a informação actual de cada sensor activo. */ // Scan dos endereços entre 0-9 for(char i = '0'; i <= '9'; i++) if(isTaken(i)){ Serial.println(""); getDateTime(); found_check_all = true; Serial.print("Sensor "); Serial.print(i); Serial.print(":"); printInfo(i); //Serial.println(); } // Scan dos endereços entre a-z for(char i = 'a'; i <= 'z'; i++) if(isTaken(i)){ Serial.println(""); getDateTime(); found_check_all = true; Serial.print("Sensor "); Serial.print(i); Serial.print(": "); printInfo(i); //Serial.println(); } // Scan dos endereços entre A-Z for(char i = 'A'; i <= 'Z'; i++) if(isTaken(i)){ Serial.println(""); getDateTime(); found_check_all = true; Serial.print("Sensor "); Serial.print(i); Serial.print(":"); printInfo(i); //Serial.println(); }; if(!found_check_all) { Serial.println(" | No sensors found, please check connections and restart the Arduino.\n"); //while(true); //break; } // stop here mySDI12.end(); delay(500); found_check_all = false; break; case WILD_CARD : mySDI12.begin(); delay(500); // Tempo para que mySDI12 seja iniciado. mySDI12.sendCommand(wild_card_Command); delay(300); // Espera um tempo pela resposta. Serial.println(" | SENSORS CONNECTED"); getDateTime(); while(mySDI12.available()){ // Escreve a resposta no Serial Monitor. Serial.write(mySDI12.read()); //Serial.print(" | "); } Serial.println(""); mySDI12.end(); delay(500); break; case SIMPLE_LOGGER : mySDI12.begin(); delay(500); // Tempo para que mySDI12 seja iniciado. ////////////////////////////////////////////// Serial.println(); Serial.println(" | SENSORS INFORMATION AND MEASUREMENTS "); Serial.println(" | Scanning all addresses, please wait..."); /* Efectua um Scan rápido de todos os endereços. */ for(byte i = '0'; i <= '9'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre 0-9 for(byte i = 'a'; i <= 'z'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre a-z for(byte i = 'A'; i <= 'Z'; i++) if(checkActive(i)) setTaken(i); // Scan dos endereços entre A-Z /* Verificar se existem sensores activos. */ // for(byte i = 0; i < 62; i++){ // if(isTaken(i)){ // found = true; // break; // } // } for(char i = '0'; i <= '9'; i++){ if(isTaken(i)){ found = true; //Serial.print("Checking address "); //Serial.print(i); //Serial.print("..."); break; } } for(char i = 'a'; i <= 'z'; i++){ if(isTaken(i)){ found = true; //Serial.print("Checking address "); //Serial.print(i); //Serial.print("..."); break; } } for(char i = 'A'; i <= 'Z'; i++){ if(isTaken(i)){ found = true; //Serial.print("Checking address "); //Serial.print(i); //Serial.print("..."); break; } } if(!found) { Serial.println(" | No sensors found, please check connections and restart the Arduino.\n"); //while(true); break; } // stop here Serial.println(); Serial.println(" | Time Elapsed (s), Sensor Address and ID"); Serial.println(" | Sensor Address, Measurement 1, Measurement 2, ... etc."); Serial.println(" | -------------------------------------------------------------------------------"); ////////////////////////////////////////////// // Scan dos endereços entre 0-9 for(char i = '0'; i <= '9'; i++) if(isTaken(i)){ getDateTime(); Serial.print(millis()/1000); Serial.print(","); printInfo(i); //getDateTime(); takeMeasurement(i); Serial.println(""); } // Scan dos endereços entre a-z for(char i = 'a'; i <= 'z'; i++) if(isTaken(i)){ getDateTime(); Serial.print(millis()/1000); Serial.print(","); printInfo(i); //getDateTime(); takeMeasurement(i); Serial.println(""); } // Scan dos endereços entre A-Z for(char i = 'A'; i <= 'Z'; i++) if(isTaken(i)){ getDateTime(); Serial.print(millis()/1000); Serial.print(","); printInfo(i); //getDateTime(); takeMeasurement(i); Serial.println(""); }; ////////////////////////////////////////////// mySDI12.end(); delay(500); break; case INTERFACE : mySDI12.begin(); delay(500); // Tempo para que mySDI12 seja iniciado. mySDI12.sendCommand(""); Serial.println(" | INTERFACE COM SENSORES SDI-12"); Serial.println(" | Insira o comando a enviar (''exit'' para sair)..."); Serial.println(""); while(estado){ if(Serial.available() > 0) { myCommand = Serial.readStringUntil('\n'); //x = Serial.parseInt(); if (myCommand == "exit") { Serial.println(" | Saiu do envio de comandos"); Serial.println(""); estado = false; } if (estado){ //if ( (myCommand[0] >= '0' && myCommand[0] <= '9' || myCommand[0] >= 'a' && myCommand[0] <= 'z' || //myCommand[0] >= 'A' && myCommand[0] <= 'Z' || myCommand[0] == '?') && (myCommand[1] == 'I' || //myCommand[1] == 'M' || myCommand[1] == 'D' || myCommand[1] == 'A') && (myCommand[2] == '!' || //(myCommand[3] == '!' && (myCommand[2] >= '0' && myCommand[2] <= '9' || myCommand[2] >= 'a' && //myCommand[2] <= 'z' || myCommand[2] >= 'A' && myCommand[2] <= 'Z')) ) ) if ( (myCommand[0] >= '0' && myCommand[0] <= '9' || myCommand[0] >= 'a' && myCommand[0] <= 'z' || myCommand[0] >= 'A' && myCommand[0] <= 'Z' || myCommand[0] == '?') && (myCommand[1] == '!' || myCommand[1] == 'I' || myCommand[1] == 'M' || myCommand[1] == 'D' || myCommand[1] == 'A') && (myCommand[1] == '!' || myCommand[2] == '!' || (myCommand[3] == '!' && (myCommand[2] >= '0' && myCommand[2] <= '9' || myCommand[2] >= 'a' && myCommand[2] <= 'z' || myCommand[2] >= 'A' && myCommand[2] <= 'Z')) ) ) { getDateTime(); Serial.println(myCommand); for(int j = 0; j < 1; j++){ mySDI12.sendCommand(myCommand); // mySDI12.flush(); delay(300); if(mySDI12.available()>1) break; if(mySDI12.available()) mySDI12.read(); } delay(300); //mySDI12.read(); //consume sensor address (you can keep it if you'd like) if(mySDI12.available()){ getDateTime(); } // while(mySDI12.available()){ // comandorecebido = (String)mySDI12.read(); // if(comandorecebido == "\n"){ // Serial.println(" | "); // Serial.println(comandorecebido); // } // Serial.println(comandorecebido); // delay(5); // } while(mySDI12.available()){ Serial.write(mySDI12.read()); delay(5); } Serial.println(""); } else{ Serial.println(" | Comando Invalido"); Serial.println(""); } } } } // if(!estado) // while(!estado){ // if(Serial.available() > 0) // { // myCommand = Serial.readStringUntil('\n'); // //if (myCommand == "run sdi monitor") // if (myCommand == "run") // { // estado = true; // Serial.println("Entrou do envio de comandos"); // } // } // } mySDI12.end(); delay(500); estado = true; break; default : ; } }