[Date Prev][Date Next] [Chronological] [Thread] [Top]

[rtl] linux push-button




First, let me thank all those who responded to my request for keyboard
control under RTL. Now I know the I don't need to use RTL.

I'm still having problems implementing a parallel port push button as
suggested. From what I've read, if I write 1 to bit 8 of the data port
and short pin 9 to pin 10, this should raise 1 on bit 7 of the status
port (ACK), leaving the resto of the bits low. However, bits 1-7 are
all high regardless of the button state. My button does indeed connect
pin 9 to pin 10 when it is pressed, so that's not the problem. My
program agrees with the BIOS setting for the port number, so I don't
think that's the problem. I'm including the code here just in case
I've done something obviously stupid. I've tried the three standard
port numbers (378, 278, 3bc).  The status byte reads 7f regardless of
whether the button is pushed (at least for port 378 --- for the other
ports it reads ff). 

I haven't ever used the parallel port on this computer, and certainly
not under linux. Is this possibly a configuration problem?

---------------------------------------------------------------------
/* Program to test a parallel port push button. */
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>

#define LPT_BASE    0x378
#define LPT_DATA    (LPT_BASE)
#define LPT_STATUS  (LPT_BASE+1)
#define LPT_CONTROL (LPT_BASE+2) 

main()
{
  int old, new;

  /* Permit access to parallel port. */
  ioperm(LPT_BASE, 3, 1);

  /* Set data bit 8 high so closing circuit between pin 9 and 10 powers ACK */
  outb(0x80, LPT_DATA); 

  /* Process press/release events */
  old = inb(LPT_STATUS);       /* Grab base status byte. */
  printf("Button is %s\n", old&0x40?"pressed":"released");
  for (;;) {
    new = inb(LPT_STATUS);     /* Grab current status byte. */
    if ((new^old)&0x40) {      /* Look for activity on bit 6. */
      printf("Button is %s\n", new&0x40?"pressed":"released");
      old = new;
    }
  }
}

--- [rtl] ---
For more information on Real-Time Linux see:
http://www.rtlinux.org/