Hello everyone...
I have written a program to write and read data from serial port....
I am able to write 80(in binary)..and is expecting 1B but i am uable to read it...
My code goes as follows,,.... -
-
int main()
-
-
{
-
-
int mainfd=0;
-
-
-
-
-
mainfd = open_port();
-
close(mainfd);
-
-
fd = open( "/dev/ttyS0" ,O_RDWR |O_NOCTTY | O_NDELAY);
-
if (fd == -1) {
-
perror("open_port: Unable to open /dev/ttyS0 - ");
-
return 1;
-
} else {
-
fcntl(fd, F_SETFL,0);
-
}
-
/* Clear the line */
-
tcflush(fd,TCIFLUSH);
-
-
initport(fd);
-
-
-
char sCmd[1];
-
sCmd[0] =0010;//0010;
-
sCmd[1] =0000;//0000;
-
-
if (!writeport(fd, sCmd)) {
-
printf("write failed\n");
-
close(fd);
-
return 1;
-
}
-
-
-
printf("written: %d%d\n", sCmd[0],sCmd[1]);
-
close(fd);
-
-
usleep(30000);
-
fd = 0;
-
fd = open( "/dev/ttyS0" ,O_RDONLY |O_NOCTTY | O_NDELAY);
-
char sResult[1];
-
fcntl(fd, F_SETFL, FNDELAY); // don't block serial read
-
-
if (!readport(fd,sResult)) {
-
printf("read failed\n");
-
close(fd);
-
return 1;
-
}
-
else
-
close(fd);
-
return 0;
-
}
-
-
-
the read write functions are as follows....
-
-
-
int fd;
-
char iIn[1];
-
-
int open_port (void)
-
{
-
-
-
int ser_cmd, ser_stat;
-
ser_cmd = TIOCM_RTS;
-
-
fd = open("/dev/ttyS0", O_RDONLY); // Open the serial port.
-
-
if (fd == -1)
-
{
-
perror("open_port: Unable to open /dev/ttyS0 -%s\n ");
-
return 1;
-
} else{
-
printf("Port 0 opened\n");
-
fcntl(fd, F_SETFL, 0);
-
}
-
-
// Read the RTS pin status.....
-
-
ioctl(fd, TIOCMGET, &ser_stat);
-
if (ser_stat & TIOCM_RTS)
-
{
-
printf("RTS pin is set.\n");
-
}
-
else
-
{
-
printf("RTS pin is reset.\n");
-
ioctl(fd, TIOCMBIC, &ser_cmd); // set the RTS pin.
-
if (ser_stat & TIOCM_RTS)
-
printf("RTS pin is set.\n");
-
else
-
printf("RTS pin is reset.\n");
-
-
}
-
return (fd);
-
}
-
-
-
-
-
int writeport(int fd, char *chars)
-
-
{
-
int len =strlen(chars);
-
-
int n = write(fd, chars,strlen(chars));
-
if (n < 0)
-
{
-
fputs("write failed!\n", stderr);
-
-
return 0;
-
}
-
fcntl(fd, F_SETFL,0);//changed
-
return 1;
-
}
-
-
int readport(int fd, char *result) {
-
int iIn = read(fd, result, 1);
-
printf("Value Received: %x\n",*result);
-
-
-
return 1;
-
}
-
-
-
**************************************
-
here it gives 40...
-
************************************
-
int initport(int fd){
-
-
struct termios options;
-
printf("Setting Parameters...\n");
-
tcgetattr(fd, &options);
-
cfsetispeed(&options, B9600); /* Set the baud rates to 9600 */
-
cfsetospeed(&options, B9600);
-
-
/* Enable the receiver and set local mode */
-
options.c_cflag |= (CLOCAL | CREAD);
-
options.c_cflag &= ~PARENB; /* Mask the character size to 8 bits, no parity */
-
options.c_cflag &= ~CSTOPB;
-
options.c_cflag &= ~CSIZE;
-
options.c_cflag |= CS8; /* Select 8 data bits */
-
options.c_cflag &= ~CRTSCTS; /* Disable hardware flow control */
-
-
/* Enable data to be processed as raw input */
-
options.c_lflag &= ~(ICANON | ECHO | ISIG);
-
-
options.c_cc[VMIN]=0;//it will wait for one byte at a time.
-
options.c_cc[VTIME]=10;// it will wait for 0.1s at a time.
-
/* Set the new options for the port */
-
tcsetattr(fd, TCSANOW, &options);
-
printf("Parameters SET!!!...\n");
-
return 1;
-
}
-
6 8317
Hi,
whenever you are reading froma serial port try to read in chunks.
After reading a certain chunk check whther you have read desired bytes or else read the remaining bytes.
Do this in a loop always.
Thanks
Raghu
okk but can u plz guide me how to do this...
can u suggest modifications for the same in my program...
thanks
in advance
I have made some changes to the code . I wont say that this is perfectly right and this is only to make you understand the idea -
-
int readport(int fd, char *result)
-
{
-
//Have a while loop here
-
int lnReadLength=0;
-
while(lnReadLength <= 100)//I am assuming u want to read 100 bytes
-
{
-
int iIn = read(fd, result, 10);
-
lnReadLength += iln;
-
result = (result+lnReadLength);
-
}
-
//printf("Value Received: %x\n",*result);
-
return 1;
-
}
-
Raghu
ya thank you very much...for ur help...
i hope u read my code i think i making a mistake in writing the data..as i mentioned that i have to send 80(hex value) to the serial port and then read..
i think the write function is not working and hence the read function...
the write function i am pasting again...........
can u plz have a look at it and confirm its correctness...
thanks
code as follows...
...
...
int main()
{
...
...
...
initport(fd);
int sCmd[1];
sCmd[0]=0200;
(this value is gives given in octal as we cannot give 80 in hex directly...
and serial port accepts only hex or octal values)
if (!writeport(fd, sCmd)) {
printf("write failed\n");
close(fd);
return 1;
}
printf("written: %x\n", sCmd[0]);
close(fd);
************************************************** ***********************
and this is the writeport function.....
int writeport(int fd, char *chars)
{
int len =strlen(chars);
int n = write(fd, chars,strlen(chars));
if (n < 0)
{
fputs("write failed!\n", stderr);
return 0;
}
fcntl(fd, F_SETFL,0);//changed
return 1;
}
i think u shuld follow the same approach like writing in chunks and then return the status.
Thanks
Raghu
i have tried that but dnot know the program is not reading data from port...now it is writing correctly....
can u please guide me..
thanks
Sign in to post your reply or Sign up for a free account.
Similar topics
by: lec |
last post by:
Hi,
I'm trying to write a program to read from the serial port & write
whatever that is read to the X console (/dev/tty7).
For X to recognize the characters sent, I believe you have to send...
|
by: Kris |
last post by:
try this free ActiveX control:
http://ourworld.compuserve.com/homepages/richard_grier/NETC
ommOCX.htm
also you can buy ActiveX controls for serial
communications from www.sax.net and other...
|
by: joe bloggs |
last post by:
I am writing a mobile application to interface with a legacy system and I am
planning to use web services to communicate with this system. The legacy
system receives data through a serial port. ...
|
by: Mo |
last post by:
I am trying to set a text box value when data is received from the com
port (barcode reader). I am getting the following error when I try to
set the text box TXNumber after data is received
...
|
by: Petr Jakes |
last post by:
I am trying to save data it is comming from the serial port continually
for some period.
(expect reading from serial port is 100% not a problem)
Following is an example of the code I am trying to...
|
by: ss2000 |
last post by:
I have a scale that attached to my pc, i created a vb program using mscomm it's not working, i copied several programs from internet and it's not working. do i need to buy another software that can...
|
by: Shark |
last post by:
Hi,
I need a help. My application reads data from COM port, this data is then
parsed and displyed on:
1. two plotters
2. text box.
I'm using Invoke method to update UI when new data is...
|
by: cmdolcet69 |
last post by:
This code below write a serial command to the com port then read the
results and disaplays it into the label1.text property when
button1_click event is triggered. I think what is going on is that...
|
by: Hal Vaughan |
last post by:
I've done a fair amount of Googling for information on reading the serial
port in C++ (and in Linux). Unfortunately, out of every 4 hits, 1 seems to
be an unanswered question, 1 is someone saying,...
|
by: Sean |
last post by:
I'm trying to read data from the Serial Port but I'm running in to a
strange problem. The data parses correctly in a Console Application,
but when I try to read the same way in a Windows Form...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: tracyyun |
last post by:
Hello everyone,
I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
|
by: giovanniandrean |
last post by:
The energy model is structured as follows and uses excel sheets to give input data:
1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
|
by: NeoPa |
last post by:
Hello everyone.
I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report).
I know it can be done by selecting :...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 1 Nov 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM)
Please note that the UK and Europe revert to winter time on...
|
by: nia12 |
last post by:
Hi there,
I am very new to Access so apologies if any of this is obvious/not clear.
I am creating a data collection tool for health care employees to complete. It consists of a number of...
|
by: SueHopson |
last post by:
Hi All,
I'm trying to create a single code (run off a button that calls the Private Sub) for our parts list report that will allow the user to filter by either/both PartVendor and PartType. On...
| |