Пример #1
0
int afLib::setAttributeComplete(uint8_t requestId, const uint16_t attrId, const uint16_t valueLen, const uint8_t *value) {
    if (valueLen > MAX_ATTRIBUTE_SIZE) {
        return afERROR_INVALID_PARAM;
    }

    if (value == NULL) {
        return afERROR_INVALID_PARAM;
    }

    return queuePut(MSG_TYPE_UPDATE, requestId, attrId, valueLen, value);
}
Пример #2
0
int afLib::setAttribute(const uint16_t attrId, const uint16_t valueLen, const uint8_t *value) {
    if (valueLen > MAX_ATTRIBUTE_SIZE) {
        return afERROR_INVALID_PARAM;
    }

    if (value == NULL) {
        return afERROR_INVALID_PARAM;
    }

    _requestId++;
    return queuePut(IS_MCU_ATTR(attrId) ? MSG_TYPE_UPDATE : MSG_TYPE_SET, _requestId, attrId, valueLen, value);
}
Пример #3
0
int *distancias(int n, int **A, int c)
	/*	Recebe o número de cidades,
		uma matriz com os caminhos e
		a cidade a ser analisada (c).
		Devolve um vetor com as dis-
		tâncias até todas as cidades */
{
	int *d = mallocSafe(n*sizeof(int));
		/* Matriz das distâncias */
	int j;	/* contador */
	
	queueInit(n);
	/*	Criamos a fila */
	for(j = 0; j < n; j++)
		d[j] = n;
	/* 	Inicializa a matriz das distân-
		cias com 'n' - o número de ci-
		dades, que representa a dis-
		tância "infinita" */
	d[c] = 0;
	/* 	A cidade a ser analisada tem 
		distância dela a ela mesma 
		com 0. */
	queuePut(c);
	/* 	O primeiro elemento da fila,
		que será analisada, é a ci-
		dade passada como parâmetro. */
	 
	while(!queueEmpty())
		/*	Este laço é feito no MÁXIMO
			'n' vezes, pois cada cidade 
			é colocada na fila, para ter
			as distâncias analisadas, uma
			vez apenas */
	{
		int i = queueGet();
		/* 	Pegamos o primeiro elemento 
			da fila */
		for(j = 0; j < n; j++)
			/* 	Executamos este laço 'n' 
				vezes no MÁXIMO, pois 
				este é o número d checa-
				gens para os caminhos que
				faremos na matriz. */
			if(s[i][j] == 1 && d[j] == n) {
				/* 	Se já tiver sido posto,
					no passado, é porque 
					já houve um caminho mais
					curto até lá. Caso con-
					trário, se houver liga-
					ção (s[i][j] == 1) e 
					não tiver sido posto ain-
					da (d[j] == n), fazemos
					as operações abaixo */
				d[j] = d[i] + 1;
				/*	A distância da cidade
					será a distância até
					a cidade atual (d[j])
					somada de 1. */
				queuePut(j);
				/*	Se não tiver entrado
					ainda, ele é colocado
					na fila para ser ana-
					lisado posteriormen-
					te. */
			} /* fim do if */
		} /* fim do for */
	} /* fim do while */
Пример #4
0
int afLib::setAttribute(const uint16_t attrId, const String &value) {
    _requestId++;
    return queuePut(IS_MCU_ATTR(attrId) ? MSG_TYPE_UPDATE : MSG_TYPE_SET, _requestId, attrId, value.length(),
                    (uint8_t *) value.c_str());
}
Пример #5
0
int afLib::setAttribute64(const uint16_t attrId, const int64_t value) {
    _requestId++;
    return queuePut(IS_MCU_ATTR(attrId) ? MSG_TYPE_UPDATE : MSG_TYPE_SET, _requestId, attrId, sizeof(value),
                    (uint8_t *) &value);
}
Пример #6
0
int afLib::getAttribute(const uint16_t attrId) {
    _requestId++;
    uint8_t dummy; // This value isn't actually used.
    return queuePut(MSG_TYPE_GET, _requestId++, attrId, 0, &dummy);
}