Re: [PARPORT] port doesn't hold states

From: filip (filip_@op.pl)
Date: Fri Apr 11 2003 - 21:08:18 EDT

  • Next message: Blaise Gassend: "Re: [PARPORT] port doesn't hold states"

    Hello,

    Thank you very much for the replay,

    Blaise Gassend <blaise@gassend.com>:
    >If your board is acknowledging the byte it is sent, there is no reason
    >for the parallel port to hold the byte that it is sending. Have you
    >tried not acknowledging?

    How I can not acknowledge?

    >If you just want to set byte on the port, you could use /dev/parport or
    >libieee1284 which would allow you to write the data without worrying
    >about the control bits.

    I used someones code and wrote simple program useing /dev/parport:

    cat port.cpp

    /**************************************************************************/
    #include <sys/ioctl.h>
    #include <linux/ppdev.h>
    #include <linux/parport.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <errno.h>
    #include <stdio.h>
    #include <sys/time.h>
    #include <string.h>
    #include <stdlib.h>
    #include <iostream.h>

    #define PortName "/dev/parport0"

    int main()
    {
      int desc;
      int buffer;
      int stat;
      unsigned char zz=0,ff=0xff;

      desc = open(PortName,O_RDWR);
      if(desc < 0)
              return -1;

      stat = ioctl(desc,PPCLAIM);
      if(stat) {
              ioctl(desc,PPRELEASE);
              close(desc);
              return -1;
      }

      buffer = IEEE1284_MODE_BYTE;

      stat = ioctl(desc,PPSETMODE,&buffer);
      if(stat) {
              ioctl(desc,PPRELEASE);
              close(desc);
              return -1;
      }

      for(;;) {
              stat = ioctl(desc,PPWDATA,&zz);
              if(stat) return stat;
              cout << "0x00" << endl;
              sleep(1);
              stat = ioctl(desc,PPWDATA,&ff);
              if(stat) return stat;
              cout << "0xff" << endl;
              sleep(1);
      }
    }

    /*************************************************************************/

    I checked, it works on some machines (generates square on pins - 0.5 Hz,
    50%),
    but not on this one with main board:
    ECS K7S5AL (SIS735),SND,DDR+DIMM,LAN,ATX.

    I checked, it works on some machines (generates square on pins - 0.5 Hz,
    50%),
    but not on this one with main board:
    ECS K7S5AL (SIS735),SND,DDR+DIMM,LAN,ATX.

    Maybe it is a problem with configuration of parport?
    Why it doesn't holt bytes under Linux, but holds under FreeBSD and WinXP?

    I would be grateful for some more suggestions,

    Regards,
    Filip

    >> I want to use /dev/lp0 (lp module) on my PC for controlling
    >> external devices.
    >> The problem is when I wtire 1 byte to /dev/lp0, paralel port
    >> holds this state just for a few ms - if I write to /dev/lp0 0x00
    >> pins change to LOW for a moment, and then some of the returns to HIGH
    >> and some stay LOW.
    >> (I made special plug - so the is no problem with handshake - details
    on:
    >> http://www.hut.fi/Misc/Electronics/circuits/nullprint.html)
    >>
    >> lsmod
    >> lp 8864 0 (unused)
    >> parport_pc 18724 1 (autoclean)
    >> parport 34208 1 (autoclean) [lp parport_pc]
    >>
    >> cat /proc/sys/dev/parport/parport0/modes
    >> PCSPP,TRISTATE
    >>
    >> In bios (Setup) I have set SPP mode.
    >>
    >> The problem is on this PC on RH7.3 and also on Slackware9.0
    >> but on FreeBSD everything is OK (on FreeBSD I use /dev/lpt0).
    >>
    >> It is strange because everything works corect on
    >> my old PC (Pentium160).
    >>
    >> Can you help?

    -- 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 : Fri Apr 11 2003 - 21:12:18 EDT