Пример #1
0
// Byte empfangen
static uint8_t read_serial(uint16_t base)
{
	while (!serial_can_read(base));
	return inb(base);
}
Пример #2
0
void tick_monitor(void){	/*Determina si hi ha alguna ordre del supervisor per llegir. Les
				  ordres segueixen el protocol que s'ha explicat a l'apartat 2.1. Si
				  és el cas la llegeix i executa l'acció associada a l'ordre.*/	
  uint8_t char_order;	      	/*Declarem la variable per a enmagatzemar la lletra que rebem.*/
  if(serial_can_read()){	/*Si hi ha informació rebuda, llegeix-la. En cas contrari, salta
				  tot el procés.*/
    char_order = serial_get();	/*Rep l'irdre.*/
    if(char_order == 'E'){	/*Si hem rebut la "E" ves al procés d'emergencia.*/
      if (state!=Off){		/*Si el semafor está parat no facis el procés.*/
	state = Clear;		/*Posa en verd el semafor.*/
	semaphore_set(state);
	ticks_remaining = 40;	/*Reinicia el temps d'estar amb el semafor en verd.*/
	
	/*Enviem el missatge que indica que s'ha cambiat correctament el semafor*/				
	serial_put('E');
	serial_put('M');
	serial_put('E');
	serial_put('R');
	serial_put('G');
	serial_put('E');
	serial_put('N');
	serial_put('C');
	serial_put('Y');
	serial_put('\n');
      }
      else {			/*Si tenim el semafor parat, retorna una "N"*/
	serial_put('N');	
	serial_put('\n');
      }
    }
    
    else if(char_order == 'S'){	/*Si hem rebut la "S" ves al procés d'apagat.*/
      if(state != Off){		/*Si el semafor está parat no facis el procés.*/
	state=Off;		/*Posa en verd el semafor.*/
	semaphore_set(state);
	
	/*Enviem el missatge que indica que s'ha apagat correctament el semafor*/	
	serial_put('S');
	serial_put('H');
	serial_put('U');
	serial_put('T');
	serial_put('D');
	serial_put('O');
	serial_put('W');
	serial_put('N');
	serial_put('\n');
	
      }
      else{
	serial_put('J');
	serial_put('\n');
      }
    }
    else if(char_order == 'R'){	/*Si hem rebut la "R" ves al procés d'start.*/
      if(state == Off){		/*Si el semafor está parat fes el procés.*/
	state = Clear;		/*Posa en verd el semafor.*/
	semaphore_set(state);
	ticks_remaining = 40;	/*Reinicia el temps d'estar amb el semafor en verd.*/
	
	/*Enviem el missatge que indica que s'ha encés correctament el semafor*/	
	serial_put('R');
	serial_put('E');
	serial_put('S');
	serial_put('T');
	serial_put('A');
	serial_put('R');
	serial_put('T');
	serial_put('\n');
      }
      else{
	serial_put('J');
	serial_put('\n');
      }
    }
  }
}