[C] Linux - Obsługa LPT (wejścia)

0

Witam.
Potrzebuję małej pomocy w C z portem LPT.
Działam na systemie Linux, a dokładniej Debian Wheezy.

Chciałbym uzyskać sterowanie komputerem poprzez przyciski.

Mam kod:

//  /home/user/lpt
#include <stdio.h>
#include <sys/io.h>
 
int main ()
{
int stan;
 
ioperm(0x378,3,1);
stan=inb(0x379);
printf("%d\n",stan);
 
return 0;
}

Przyciski podłączone według schematu:

      O 5V 
      | 
      | 
      - 
     | | 10k 
     | | 
      - 
      | 
      +-----------o input  (X) 
      | 
      | 
      o 
       \ 
      o 
      | 
      | 
     === GND 

Gdzie "X" to 10, 11 i 12 pin portu LPT.
Dzięki temu programowi wiem, że jak nic nie jest zwarte do masy to mam "126".
Pin 10 zwarty do masy "110",
pin 11 zwarty do masy "62",
pin 12 zwarty do masy "254"

A teraz do sedna.

  1. Jak to zrobić, aby gdy nic nie jest zwarte to nic się nie dzieje, jeżeli zwarty jest któryś z pinów to uruchomią się skrypty bash:
    pin 10-/home/user/skrypt1.sh
    pin 11-/home/user/skrypt2.sh
    pin 12-/home/user/skrypt3.sh
  2. Wszystko będzie działać w nie skończonej pętli.
  3. Program sam wystartuje po starcie systemu i będzie działał w tle.

EDYTA:
Czy to ma sens:

//  /home/user/lpt
#include <stdio.h>
#include <sys/io.h>
 
int main (void)
 
 {
  while(1) {
   int stan;
   ioperm(0x378,3,1);
   stan=inb(0x379);
 
   switch( stan )
    {
     case 110:
        system("/home/user/skrypt1.sh", NULL);
     break;
 
     case 254:
        system("/home/user/skrypt2.sh", NULL);
     break;
 
     case 62:
        system("/home/user/skrypt3.sh", NULL);
     break;
    }
  }
 return 0;
}

I w /etc/rc.local

/home/user/lpt > /dev/null 2>&1 

Teoretycznie działa, teoretycznie bo po naciśnięciu przycisku wykonuje się skrypt, ale obciążenie procesora wzrasta do 100%. Bez uruchomionego programu obciążenie procesora 0%-max10%.

0

daj krótkiego sleep'a na końcu while.

0

Śliczne dzięki.
Program teraz działa z lekkim opóźnieniem, ale procesor nawet nie zauważa, że program działa.

Co jeszcze można zmienić/ulepszyć w tym programie?
To jest mój pierwszy program :)

#include <stdio.h>
#include <sys/io.h>

int main (void)

 {
  while(1) 
  {
   int stan;
   ioperm(0x378,3,1);
   stan=inb(0x379);

   switch(stan) {
   case 110 : system("/home/user/skrypt1.sh"); break;
   case 254 : system("/home/user/skrypt2.sh"); break;
   case 62 : system("/home/user/skrypt3.sh"); break;
   default : system("> /dev/null 2>&1");
   }
  sleep(1);
 }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1