slave erbij
[des2015.git] / mart / ex10 / ex10dslave.c
index f7e37a5..ed079c2 100644 (file)
@@ -18,33 +18,32 @@ void lpt1_handler(void *arg)
 {
        RT_INTR intr;
        rt_intr_create(&intr, "lpt1 handler", LPT1IRQ, 0);
-       int bps = 0;
+
+       rt_printf("Listening...\n");
+    rt_intr_wait(&intr, TM_INFINITE);
+    outb(inb(0x378) & 0xEF, 0x378);
+    outb(inb(0x378) | 0x01, 0x378);
+       rt_printf("Received an interrupt\n");
        while(1){
-               rt_printf("lpt1 interrupt: %d\n",
-                bps += rt_intr_wait(&intr, TM_INFINITE));
+        rt_intr_wait(&intr, TM_INFINITE);
+        outb(inb(0x37A) & 0xEF, 0x37A);
+        outb(inb(0x37A) | 0x01, 0x37A);
        }
 }
 
 int main(int argc, char* argv[])
 {
        rt_print_auto_init(1);
+       mlockall(MCL_CURRENT | MCL_FUTURE);
 
-    /* setup lpt1 */
     ioperm(0x37A, 1, 1);
-    unsigned char byte = inb(0x37A);
-    byte |= 0x10;
-    outb(byte, 0x37A);
-
-       mlockall(MCL_CURRENT | MCL_FUTURE);
+    ioperm(0x378, 1, 1);
+    outb(inb(0x37A) | 0x01, 0x37A);
+    outb(inb(0x378) | 0x01, 0x378);
 
        rt_task_create(&task, "task", 0, 50, 0);
        rt_task_start(&task, &lpt1_handler, 0);
 
-       rt_printf("CRTL+C to stop\n");
+       rt_printf("CRTL+C to quit\n");
        pause();
-
-    /* break down lpt1 */
-    byte = inb(0x37A);
-    byte &= 0xEF;
-    outb(byte, 0x37A);
 }