Re: [PARPORT] ppdev and select() woes

From: Tim Waugh (twaugh@redhat.com)
Date: Mon Sep 03 2001 - 13:06:51 EDT

  • Next message: Angela: "[PARPORT] status register problem.."
  • Next message: Batalov Grigory: "[PARPORT] 'loss of streaming' error"

    On Mon, Sep 03, 2001 at 05:01:19PM +0800, Jeff Murphy wrote:

    > /* lines i'm interested in - is that what PPWCTLONIRQ means?? */
    > int busy = PARPORT_STATUS_PAPEROUT | PARPORT_STATUS_ERROR;
    > int ready = PARPORT_STATUS_PAPEROUT | PARPORT_STATUS_ERROR;

    No. It means 'write this to the control port the next time an
    interrupt happens'.

    > ioctl( fd, PPWCTLONIRQ, &busy );
    > ioctl( fd, PPWCONTROL, &ready );

    So what you're doing here is writing a value to the control port with
    PPWCONTROL, and queuing up a response to an interrupt: but the
    response is 'no change'.

    > res = select( fd+1, &readfds, NULL, NULL, NULL );

    And then you're waiting for the interrupt, which never comes since
    it's tied to nAck (which presumably your device doesn't touch).

    The point about PPWCTLONIRQ is that it's for implementing handshakes.
    You write control lines to say 'give me data and then shake nAck', the
    peripheral writes data and shakes nAck to trigger an interrupt, and
    then the kernel driver (since it's faster than user space) writes the
    control lines to say 'okay, thanks, now hold on while I deal with
    it'. Then, if user space is in select() it can wake it up.

    Does that make sense?

    Tim.
    */



    -- 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 Sep 03 2001 - 13:07:56 EDT