LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   data transfer bet RH8.0 pc to & fro device thru /dev/ttyS0 (https://www.linuxquestions.org/questions/linux-newbie-8/data-transfer-bet-rh8-0-pc-to-and-fro-device-thru-dev-ttys0-110347/)

shivanitha 10-30-2003 07:25 AM

data transfer bet RH8.0 pc to & fro device thru /dev/ttyS0
 
hi
i need to issue a command which is of ~20 hex bytes to a device connected to /dev/ttyS0 and in turn capture the ~24 hex bytes of response.it works fine under cygwin and dos.i feel that i ve not done the settings properly. i referred the serial prg howto. but unable to resolve the write operation thru /dev/ttyS0.

i have the same problem what togunter faced long back,
he had posted a message to the same forum with thread (below)
"writing to serial port, /dev/ttyS0"
- but there are no replies.

awaiting ur help
thanks a lot
shivani

Registered: Apr 2002
Location: Los Angeles
Distribution: Red Hat 7.0 & 7.2
Posts: 4

Hi all-
I'm trying to write some data to a device on the com1 port on my Redhat 7.2 box, but when I write data to /dev/ttyS0, the characters I write appear to get garbled(and i dont even seem to get the same number of characters).
The same code works fine under windows using cygwin to write to /dev/com1 (after using stty to determine that the serial port is setup the same as in linux).

the code i am using is below.

any ideas?
thanks for any help
--tim

//
// begin code:
//


#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */

main()
{
int fd;
struct termios options;

int i ;
unsigned char data[20] = { 0x40, 0x28, 0x6b, 0xfe,
0x00, 0x00, 0x00, 0x00,
0x00, 0x23, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00,
0xd9, 0xff, 0xff, 0xff} ;

// linux
//fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);

// cygwin
fd = open("/dev/com1", O_RDWR | O_NOCTTY | O_NONBLOCK);
fcntl(fd, F_SETFL, 0);

/* get the current options */
tcgetattr(fd, &options);

cfsetispeed(&options, B57600);
cfsetospeed(&options, B57600);

/* set raw input, 1 second timeout */
options.c_cflag |= (CLOCAL | CREAD);
options.c_oflag &= ~OPOST;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;


options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

options.c_cflag &= ~CRTSCTS;

// options.c_iflag &= ~(IXON | IXOFF | IXANY); /* no flow control */

options.c_oflag &= ~(IXON | IXOFF | IXANY); /* no flow control */

options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag &= ~OPOST; /* No output processing */
options.c_oflag &= ~ONLCR; /* Don't convert linefeeds */

/* Miscellaneous stuff */
options.c_cflag |= (CLOCAL | CREAD); /* Enable receiver, set local */
/* Linux seems to have problem with the following ??!! */
options.c_cflag |= (IXON | IXOFF); /* Software flow control */
options.c_lflag = 0; /* no local flags */
options.c_cflag |= HUPCL; /* Drop DTR on close */

/* Setup non blocking, return on 1 character */
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 1;

/* Clear the line */
tcflush(fd,TCIFLUSH);

/* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0) {
perror("SetupSerial 3");
return(0);
}

write(fd, data, 20 ) ;
close(fd);
return 0 ;
}


All times are GMT -5. The time now is 06:09 AM.