Template:
int driver_init() {}
int driver_open() {}
int driver_close() {}
int driver_read(char *buffer, size_t size) {}
int driver_write(char *buffer, size_t size) {}
int driver_remove() {}
Al hacer Busy Waiting, solo debemos hacer un while hasta que el dispositivo responda.
int driver_init() {
mutex = sem(1);
}
int driver_open() {}
int driver_close() {}
int driver_read(char *buffer, size_t size) {
mutex.wait();
OUT(BTN_STATUS1, 0);
while(IN(BTN_STATUS0) != 0) {}
mutex.signal();
return BTN_PRESSED;
}
int driver_write(char *buffer, size_t size) {}
int driver_remove() {}
void handler() {
mutex_handler.signal();
}
int driver_init() {
mutex = sem(1);
mutex_handler = sem(0);
request_irq(7, handler);
}
int driver_open() {}
int driver_close() {}
int driver_read(char *buffer, size_t size) {
mutex.wait();
OUT(BTN_STATUS, BTN_INT);
mutex_handler.wait();
mutex.signal();
return BTN_PRESSED;
}
int driver_write(char *buffer, size_t size) {}
int driver_remove() {}
Cuando se efectúa un open, se debe preparar el dispositivo para realizar alguna acción. Cuando se realiza un write, se debe realizar alguna interacción de escritura en el dispositivo, que puede propagar en una acción.
Debería ser de privilegio Kernel ya que implica la interacción con Hardware, y no queremos que cualquier programa pueda manipularlo. Por ejemplo, no tiene sentido que cualquier programa acceda a la cámara de la computadora directamente, o a la. pantalla.