subscription_event_type_t Light::eventLoop() { //get old data HardwareCommandResult* last = this->getLastResult(); //setup temporary new values HardwareCommandResult newReading; //read data if(!readVal(HWType_light, &newReading)) return EVENT_TYPE_DISABLED; //detect event subscription_event_type_t eventDetected = AnalogIO::checkForEvent(&newReading, last->getInt16List()[0], newReading.getInt16List()[0], (int16_t) EVENT_MIN_DIFF); #ifdef DEBUG_HARDWARE_ENABLE if(eventDetected != EVENT_TYPE_DISABLED) { Serial.print(millis()); Serial.print(F(": Light::eventLoop() has found event type=")); Serial.println(eventDetected); Serial.flush(); } #endif return eventDetected; }
/* * @brief Recherche de la clé dans la base * * @param kv descripteur d'accès à la base * @param key clé * @param val valeur modifiée par effet de bord */ int kv_get(KV *kv, const kv_datum *key, kv_datum *val) { len_t offset; if(offset_cle(kv, key, &offset) == 1) { return (readVal(kv, val, offset)); } return 0; }
/* * @brief Renvoie le couple key/val suivant * * @param kv descripteur d'accès à la base * @param key clé modifiée par effet de bord * @param val valeur modifiée par effet de bord */ int kv_next(KV *kv, kv_datum *key, kv_datum *val) { int pos = lseek(kv->fd4, -1, SEEK_CUR); int existe; if(pos == -1) { return -1; } else if(pos == 0) { if(lseek(kv->fd4, taille_header_f, SEEK_SET) == -1) { return -1; } while(read(kv->fd4, &existe, sizeof(int))) { if(existe == 1) { len_t lgtmp, off; if(read(kv->fd4, &lgtmp, 4) < 4) { return -1; } if(read(kv->fd4, &off, 4) < 4) { return -1; } if(off == 1) { len_t cle_saut; if(readVal(kv, key, off) == -1) { return -1; } if(lseek(kv->fd3, off, SEEK_SET) < 0) { return -1; } if(read(kv->fd3, &cle_saut, 4) == -1) { return -1; } off = off + 4 + cle_saut; if(readVal(kv, val, off) == -1) { return -1; } return 1; } } else { if(lseek(kv->fd4, 2 * 4, SEEK_CUR) == -1) { return -1; } } } } else { if(lseek(kv->fd4, -7, SEEK_CUR) == -1) { return -1; } len_t slg1, slg2, lg; if(read(kv->fd4, &slg1, 4) == -1) { return -1; } if(read(kv->fd4, &slg2, 4) == -1) { return -1; } lg = slg1 + slg2; if(lseek(kv->fd4, taille_header_f, SEEK_SET) == -1) { return -1; } while(read(kv->fd4, &existe, sizeof(int))) { len_t lgtmp, off; if(read(kv->fd4, &lgtmp, 4) < 4) { return -1; } if(read(kv->fd4, &off, 4) < 4) { return -1; } if(existe == 1) { if(off == lg) { len_t cle_saut; if(readVal(kv, key, off) == -1) { return -1; } if(lseek(kv->fd3, off, SEEK_SET) < 0) { return -1; } if(read(kv->fd3, &cle_saut, 4) == -1) { return -1; } off = off + 4 + cle_saut; if(readVal(kv, val, off) == -1) { return -1; } return 1; } } else if(existe == 0) { if(off == lg) { lg= off + lgtmp; if(lseek(kv->fd4, taille_header_f, SEEK_SET) == -1) { return -1; } } } } } return 0; }