예제 #1
0
SaErrorT findEvent(SaHpiSessionIdT sessionId, SaHpiEventT * event,
		   SaHpiBoolT * found)
{
	SaErrorT status = SA_OK;
	SaHpiEventT e;

	*found = SAHPI_FALSE;
	while (!(*found) && status == SA_OK) {
		status =
		    saHpiEventGet(sessionId, D_TIMEOUT, &e, NULL, NULL, NULL);
		if (status == SA_OK) {
			*found = sameEvent(event, &e);
		} else if (status != SA_ERR_HPI_TIMEOUT) {
			e_print(saHpiEventGet, SA_OK, status);
		}
	}

	// For a timeout, found will be set to false.
	// Therefore, return OK to indicate that nothing abnormal happened.

	if (status == SA_ERR_HPI_TIMEOUT) {
		status = SA_OK;
	}

	return status;
}
예제 #2
0
파일: maps.cpp 프로젝트: ecalot/princed
char cMaps::belongsToDiskList(tLevel* lev, tGateRow *fila,int i) {

	char total=0;
	char pertenece;
	//recorrer la lista de eventos
	for (int k=i;((*lev).gateEvents.event[k].pos[0]<(0x80));k++) {
		total++;
		pertenece=0;
		for (char j=0;(j<(*fila).size) && (!pertenece);j++) {
			pertenece=(sameEvent((*fila).event[j],(*lev).gateEvents.event[k]));
		}
		if (!pertenece) {
			return MAPS_GATE_DIFFERS;
		}
	}
	if (total==(*fila).size) {
		return MAPS_GATE_EQUALS;
	} else {
		return MAPS_GATE_BELONGS;
	}
}
예제 #3
0
파일: maps.c 프로젝트: ecalot/princed
char intertLeft(tLevel* lev,tGateRow fila,int inicioFila,int numeroFila,char mode) {
	/* Esta funcion inserta en gateEvents el o los eventos de fila que no estan insertados */
	/* Por cada insersion deben ser modificados los ids correspondientes en la gateList */
	/* devuelve 1 si entro */
	/* devuelve 0 en caso de superarse lso 256 bytes */

	/*
	 1) En caso de MULTIPLE EVENT los elementos de la fila
	    que ya estan enliastados en gateEvents deben ser
	    eliminados de la fila. Se coloca el evento nulo en
	    reemplazo de estos.
	*/

	char j,pertenece;
	if (mode==MAPS_GATE_MULTIPLE_EVENT) {
		for (int k=inicioFila;((*lev).gateEvents.event[k].pos[0]<(0x80));k++) {
			pertenece=0;
			for (j=0;(j<fila.size) && (!pertenece);j++) {
				pertenece=(sameEvent(fila.event[j],(*lev).gateEvents.event[k]));
			}
			if (pertenece) {
				anularEvento(&(fila.event[j]));
			}
		}
	}

	/*
	 2) En caso de MAPS_GATE_SINGLE_EVENT el ultimo debe
	    marcar fin de la lista. A tal fin, cambiaremos ese
	    flag del evento. Como la inserion se hara de adelante
	    hacia atras, simplemente debemos setear el flag al
	    principio
	*/

	int c=(mode==MAPS_GATE_SINGLE_EVENT);

	/*
	 3) Se debera iterar para toda la fila e insertar
	    evento por evento en la gateEvents en la posicion inicioFila.
			Cada insersion implica un corrimiento de ids en la gateList
	*/

	for (j=0;(j<fila.size);j++) {
		if (fila.event[j].pos[0]) { /* Para cada evento nonulo de la fila */
			/* Adelantar todos los eventos posteriores a inicioFila */
			for (int k=(*lev).gateEvents.size;k>inicioFila;k--) {
				(*lev).gateEvents.event[k+1]=(*lev).gateEvents.event[k];
			}

			/* Insertar (*fila).event[j] en la gateEvents en la posicion generada en inicioFila. */
			/* Se tendra en cuenta el flag de de fin de lista */
			(*lev).gateEvents.event[inicioFila]=setFlag(fila.event[j],c);

			/* El flag del fin de lista se cancela */
			c=0;

			/* Incrementar la cantidad de eventos de la gateEvent, en caso de no poder abortar */
			if ((*lev).gateEvents.size==255) {
				return 0;
			} else {
				(*lev).gateEvents.size++;
			}

			/* Finalmente se debe recorrer la gate list e incrementar el contenido que supere a inicioFila */
			for (int k=0;k<(*lev).gateList.size;k++) {
				if ((*lev).gateList.item[k].id>=inicioFila)
					((*lev).gateList.item[k].id)++;
			}
		}
	}
	return 1;
}