// Byte empfangen static uint8_t read_serial(uint16_t base) { while (!serial_can_read(base)); return inb(base); }
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'); } } } }