Networking Forums

Networking Forums > Computer Networking > Linux Networking > Parallel port programming

Reply
Thread Tools Display Modes

Parallel port programming

 
 
Md.Zaheeruddin Khan
Guest
Posts: n/a

 
      10-07-2004, 01:35 PM
Hello,

I am trying to write a small user land program for
transfer of data b/w 2 computers via parallel port. I
am using the Linux 2.4 parport system.

While receiving data, I get the same character
repeated multiple time, if I send 'good' I receive
'gggoooooddd' at the other end. I tried using
select(fd +1, &rfds, NULL, NULL, NULL); along with
PPWCTLOIRQ and PPWCONTROL, but I was not able to catch
any interrupt. I do not know what I am doing wrong.
Pls help....


/*CODE for transmitting data*/

#include<fcntl.h>
#include<stdio.h>
#include<errno.h>
#include<sys/ioctl.h>
#include<linux/ppdev.h>
#include<linux/parport.h>
#include<unistd.h>
#define BASE 0x378
int main(void){
int fd;
int mode;
char buf;
size_t got = 1;
int fd1, j=0;
int dir =0;// direction is 0 coz we need to transmit

/*Open the serial port for writing*/
fd = open ("/dev/parport0" , O_RDWR);

/* Open the file in which data to be transmitted is
present*/
fd1 = open("par",O_RDONLY);

/*gain access or permission for the port*/
if (ioctl (fd, PPCLAIM))

/*assign mode */
mode = IEEE1284_MODE_COMPAT;

/*set the desired mode*/
ioctl (fd, PPNEGOT, &mode);

/*set the direction of data flow(write) */
ioctl(fd, PPDATADIR, &dir);

/*until 1 or more character is there to read in the
file*/
for (;got == 1 {

/*read from the data file*/
got = read (fd1 , &buf, 1);

/*Write to the serial port*/
ioctl (fd, PPWDATA, &buf);

/*print the written data */
fflush(stdout);
printf("%c\n", buf);

/*delay a bit*/
usleep(1000);

/*output a value to control register*/
ioctl(fd, PPWCONTROL, &j);
j++;

/*if 5th bit of Control register is set, the data
lines cannot output data but they can only read, hence
j is changed from 1 to 31. i.e all the 4 bits of
control register are used*/
if(j == 31)
j=0;

}
}

/*End of code for transmitting data*/

I am printing out the received data in the CODE for
receivng data.

/*CODE for receiving data*/
#include<fcntl.h>
#include<sys/ioctl.h>
#include<linux/ppdev.h>
#include<linux/parport.h>
#include<stdio.h>
#include<sys/times.h>
#include<sys/types.h>
#include<sys/unistd.h>
#include<signal.h>

int fd;

/* this catcher() func is invoked when ctrl-C is
pressed*/
catcher(){
ioctl(fd, PPRELEASE);
exit();
}

int main(void){

int retval;
char buf;
int dir = 1; //since we are receiving data,
direction should be 1
int mode = IEEE1284_MODE_COMPAT; //used as a
parameter to set mode
char ch;

/* Open the serial port */
fd = open("/dev/parport0" , O_RDONLY );

/*catcht ctrl-c*/
signal(SIGINT, catcher);

/*gain access or claim the parallel port*/
ioctl(fd , PPCLAIM);

/*set the desired mode of communication(COMPAT in
this case*/
ioctl(fd, PPSETMODE, &mode);

/*set the direction of transmission(reception in
this case) */
ioctl(fd, PPDATADIR, &dir);

/*read value from Control register */
ioctl(fd, PPRCONTROL, &ch);
printf("Intial values of Control register is %d\n",
ch);

/*read value from Status register */
ioctl(fd, PPRSTATUS, &ch);
printf("Intial value of status register is %d\n",
ch);

while(1){
printf("B4 read{");//before reading from data
register

/*read value from Status register */
ioctl(fd, PPRSTATUS, &ch);
printf("Status->%d", ch);

/*read value from Control register*/
ioctl(fd, PPRCONTROL, &ch);
printf("Control->%d}\t",ch);

/* READ the Sent Data from data register*/
ioctl(fd, PPRDATA, &buf);
printf("Data->%c\t",buf);

printf("After read{"); // after reading from data
register

/*read from Control register*/
ioctl(fd, PPRCONTROL, &ch);
printf("Control->%d",ch);

/*read from Status register*/
ioctl(fd, PPRSTATUS, &ch);
printf("Status->%d}\n", ch);

/*delay a bit*/
usleep(1000);
}

return 0;
}
/*END of CODE for receiving data*/

------------SAMPLE OUTPUT-------------

Intial values of Control register is 12
Intial value of status register is 127

B4 read{Status->127Control->12} Data->ÿ After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->J After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->J After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->J After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->e After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->e After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->s After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->s After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->u After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->u After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->s After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->s After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->s After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->! After
read{Control->12Status->127}
B4 read{Status->127Control->12} Data->! After
read{Control->12Status->127}

----------END of output---------------
 
Reply With Quote
 
 
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Connecting laptop via serial or parallel port - w/virtual drive letter jim_b@mailinator.com Windows Networking 16 12-18-2006 01:30 PM
Wireless print server with parallel port & WPA Emlynfluff Wireless Internet 5 09-06-2005 05:14 AM
Print sever Parallel port -> USB Printer Rick Network Routers 1 09-04-2005 03:15 AM
Re: Parallel (LPT) Port to Ethernet Hub for Networking Sir Fluke Windows Networking 2 01-18-2004 03:38 AM
programming serial port Carmin Linux Networking 11 11-20-2003 01:32 AM



1 2 3 4 5 6 7 8 9 10 11