update master
[des2015.git] / mart / ex10 / ex10dslave.c
1 #include <stdio.h>
2 #include <signal.h>
3 #include <unistd.h>
4 #include <sys/mman.h>
5 #include <sys/io.h>
6
7 #include <native/task.h>
8 #include <native/timer.h>
9 #include <native/intr.h>
10
11 #include <rtdk.h>
12
13 #define LPT1IRQ 7
14
15 RT_TASK task;
16
17 void lpt1_handler(void *arg)
18 {
19 RT_INTR intr;
20 rt_intr_create(&intr, "lpt1 handler", LPT1IRQ, 0);
21
22 rt_printf("Listening...\n");
23 rt_intr_wait(&intr, TM_INFINITE);
24 outb(inb(0x378) & 0xEF, 0x378);
25 outb(inb(0x378) | 0x01, 0x378);
26 rt_printf("Received an interrupt\n");
27 while(1){
28 rt_intr_wait(&intr, TM_INFINITE);
29 outb(inb(0x37A) & 0xEF, 0x37A);
30 outb(inb(0x37A) | 0x01, 0x37A);
31 }
32 }
33
34 int main(int argc, char* argv[])
35 {
36 rt_print_auto_init(1);
37 mlockall(MCL_CURRENT | MCL_FUTURE);
38
39 ioperm(0x37A, 1, 1);
40 ioperm(0x378, 1, 1);
41 outb(inb(0x37A) | 0x01, 0x37A);
42 outb(inb(0x378) | 0x01, 0x378);
43
44 rt_task_create(&task, "task", 0, 50, 0);
45 rt_task_start(&task, &lpt1_handler, 0);
46
47 rt_printf("CRTL+C to quit\n");
48 pause();
49 }