Re: [PARPORT] novice needs pointers

From: Aaron Solochek (leko@cmu.edu)
Date: Mon Jan 08 2001 - 13:00:10 EST

  • Next message: Penndragon: "[PARPORT] ls120, almost success"

    Hmm, that code segfaults on my machine. Any idea what could cause that?

    I'm running a 2.4.0 kernel on this machine with parallel port and pc-style
    hardware enabled. The parallelport is set to "normal" in the bios.

    Thanks.

    -Aaron Solochek
     leko@cmu.edu

    Matt Roberds wrote:

    > >Date: Mon, 08 Jan 2001 00:45:34 -0600
    > >From: Aaron Solochek <leko@cmu.edu>
    > >
    > >My goal is to have a computer, running linux, send a zephyr (instant
    > >message) when our doorbell is pressed. I built hardware which
    > >generates a rising edge on pin 10 when the doorbell is rung. I did
    > >this because someone told me that using the interrupt would be the
    > >easiest way to do this.
    >
    > I have done similar things but I've never used the interrupt. I
    > just save the state of the port, check the current state, and if
    > new != old, I know something changed. You can add a sleep() or
    > usleep() to this if you don't need to check that often.
    >
    > Here's some sample code that does exactly this. It has to be run
    > as root (or setuid root) because it hits the ports directly. Also,
    > for some reason, inb() is a macro that only shows up when you turn
    > on optimization in gcc. To get this to compile, you have to do
    > something like 'gcc readbit.c -o readbit -O'. Just 'gcc readbit.c
    > -o readbit' doesn't work.
    >
    > Right now this code only looks at one bit on the status port but
    > that could easily be expanded. It will run forever or until you
    > press ctl-C.
    >
    > ---readbit.c---
    > #include <stdio.h>
    >
    > #include <asm/io.h>
    > #include <sys/types.h>
    >
    > #define DATAPORT 0x0378
    > #define STATUS DATAPORT+1
    > #define CONTROL DATAPORT+2
    >
    > int main()
    > {
    > unsigned char state=0, old=0;
    >
    > while(1)
    > {
    > /* maybe sleep here if you can get away with it */
    >
    > old=state;
    >
    > state=inb(STATUS);
    >
    > state &= 0x10; /* mask off bit of interest */
    >
    > if(state == old)
    > {
    > ;
    > /* bit didn't change since last check */
    > }
    > else
    > {
    > ;
    > /* bit has changed since last check */
    > }
    > }
    >
    > return(0);
    > }
    > ---readbit.c---
    >
    > >If anyone has a good URL, or sample code for doing this sort of
    > >thing, I'd appreciate it.
    >
    > http://www.lvr.com/parport.htm will tell you which pins on the port
    > show up on what bits on what register, and also give you some other
    > good information.
    >
    > Advice: In all the "how to hook homebrew hardware to your parallel port"
    > guides on the net, they tell you to not hook to the nice parallel port
    > that's integrated on your motherboard - use a cheap parallel port add-in
    > card. Guess what? They really mean it. :) I have smoked the port on
    > my motherboard by ignoring this advice. If you have a laptop you may
    > be stuck, but if you have a desktop, scrounge up a parallel port card
    > to hack with.
    >
    > Good luck!
    >
    > Matt Roberds
    > mattroberds@home.com

    -- To unsubscribe, send mail to: linux-parport-request@torque.net --
    -- with the single word "unsubscribe" in the body of the message. --



    This archive was generated by hypermail 2b29 : Mon Jan 08 2001 - 13:07:55 EST