예제 #1
0
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;
}
예제 #2
0
파일: kv.c 프로젝트: nsutter/SE_projet
/*
 * @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;
}
예제 #3
0
파일: kv.c 프로젝트: nsutter/SE_projet
/*
 * @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;
}