Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Nov 2002 14:32:58 +0100
From:      Andre Albsmeier <andre@albsmeier.net>
To:        David Nicholas Kayal <davek@saturn5.com>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: i am looking for a 5 volt signal
Message-ID:  <20021103143258.A1092@schlappy.albsmeier.net>
In-Reply-To: <Pine.BSF.4.44.0210270911490.329-100000@blackbox.yayproductions.com>; from davek@saturn5.com on Sun, Oct 27, 2002 at 09:12:33AM -0800
References:  <Pine.BSF.4.44.0210270911490.329-100000@blackbox.yayproductions.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--G4iJoqBmSsgzjUCe
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, 27-Oct-2002 at 09:12:33 -0800, David Nicholas Kayal wrote:
> I'm looking for a 5 volt signal.
> 
> I have wires plugged into pins 2 and 25 of the parallel port.
> 
> I have written a small program:
> 
> #include <stdio.h>
> #include <dev/ppbus/ppi.h>
> #include <dev/ppbus/ppbconf.h>
> 
> int main()
> {
>   int fd;
>   while(1)
>     {
>       ioctl(fd, PPISDATA, 255);
>     }
> }
> 

I had at least one machine where I had to drive the STROBE signal
to actually get the data appear on the bus. The program attached
below did the trick. It does a little bit more so here is a quick
explanation:

I wanted to physically push the RESET button of another machine
(running Windoze, btw. :-)). To make things a bit more robust
I used all 8 lines of data which are attached to a HC 688 (iirc)
whose second 8 bit input is hardwired to the value 0x5A. Its
output drives an optocoupler whose output is connected to the
RESET connector of the Windoze box. The power was supplied by
all output capable lines of the parallel port (8 data, strobe,
some control lines) which are all connected via diodes and a
resistor to a capacitor. The program first drives the 8 databits
high to charge the capacitor for 5 seconds. It then puts the
0x5A word on the wire for one second. This is when the HC 688's
output goes high and drives the optocoupler to reset the windoze
box.

If you look at the program you'll find that every dataoutput
is surrounded by the apprpropriate STROBE action.

Hth,

	-Andre

--G4iJoqBmSsgzjUCe
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ppi.c"

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <err.h>
#include <sysexits.h>
#include <dev/ppbus/ppi.h>
#include <dev/ppbus/ppbconf.h>

int	Fd;

void send( u_int8_t byte )
{
  u_int8_t	myc, tmp;

  printf( "Sending %02X\n", byte );

  if( ioctl( Fd, PPIGCTRL, &myc ) == -1 )		// save old control
    err( EX_IOERR, "save control" );

  myc &= ~STROBE & ~PCD;				// strobe high
  tmp = myc;
  if( ioctl( Fd, PPISCTRL, &tmp )== -1 )
    err( EX_IOERR, "set control" );

  if( ioctl( Fd, PPISDATA, &byte ) == 1 )		// set my code
    err( EX_IOERR, "set data" );

  tmp = myc | STROBE;					// strobe low
  if( ioctl( Fd, PPISCTRL, &tmp )== -1 )
    err( EX_IOERR, "set control" );

  tmp = myc;
  if( ioctl( Fd, PPISCTRL, &tmp )== -1 )		// strobe high
    err( EX_IOERR, "set control" );
}

int main( int argc, const char* argv[] )
{
  if( (Fd = open( "/dev/ppi0", O_RDWR)) <= 0 )
    err( EX_IOERR, "open /dev/ppi0" );
  
  send( 0xFF );						// charge C
  sleep( 5 );

  send( 0x5A );						// send code
  sleep( 1 );
  send( 0xFF );						// disable code

  return( 0 );
}

--G4iJoqBmSsgzjUCe--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021103143258.A1092>