Hi Hoang Vu, 

I am not really writing serial port driver, at least not kernel module. I'm 
using C for user space to program UART4 for beaglebone black. I have posted 
my question in following: 

https://groups.google.com/forum/#!category-topic/beaglebone/beagleboardorg-beaglebone-black/wfvfAUsu7fo

If you happen to know the solution, do let me know. Thanks!

Regina

On Monday, July 18, 2016 at 12:53:52 PM UTC+8, Lê Hoàng Vũ wrote:
>
> Hi Regina,
>
> Can I help you?
> Are you writing serial port driver with C?
>
> Best regard, 
>
> Le Hoang Vu
>
> Vào 18-07-2016 10:59, "Regina Choi" <[email protected] <javascript:>> 
> đã viết:
>
>> Hello Andrey, 
>>
>> I am having almost similar problem as yours, just wondering have you 
>> found the reason behind it?  I have searching through the web but couldn't 
>> find related answer. 
>>
>>
>> Regards,
>> Regina
>> On Wednesday, May 7, 2014 at 2:42:34 AM UTC+8, Andrey wrote:
>>>
>>> Hello,
>>>
>>> I need to use an UART to communicate between beaglebone and the device. 
>>> I have written the C code, but it has a few problems within it. I can't 
>>> identify the cause of the problem or to be more precise don't know how fix 
>>> it.  
>>>
>>> The problem is of 
>>> reading in the information and displaying it on a shell. I can easily 
>>> write any information data set that I wish, but when I try to read in 
>>> response it either doesn't read in, with the perror being displayed as 
>>> (erno = EINTR [Interrupted function call]) meaning read () function 
>>> returned negative number. 
>>>  
>>> #include <iostream>
>>>
>>> #include <termios.h>
>>>
>>> #include <stdio.h>
>>>
>>> #include <unistd.h>
>>>
>>> #include <fcntl.h>
>>>
>>> #include <sys/signal.h>
>>>
>>> #include <stdlib.h>
>>>
>>> #include <sys/ioctl.h>
>>>
>>> #include <errno.h>
>>>
>>> #define BAUDRATE B19200
>>>
>>> #define PORT "/dev/ttyO4"
>>>
>>> #define _POSIX_SOURCE 1
>>>
>>>  
>>>
>>> #define FALSE 0
>>>
>>> #define TRUE 1
>>>
>>> volatile int STOP=FALSE;
>>>
>>>  
>>>
>>> void signal_handler_IO(int status);
>>>
>>> int wait_flag = TRUE;
>>>
>>>  
>>>
>>> int main ()
>>>
>>> {
>>>
>>>     int fd=0, res=0;
>>>
>>>     int check=0;
>>>
>>>  
>>>
>>>     char SYNC  [] = {0x55};
>>>
>>>     char PID [] = {0x6A};
>>>
>>>  
>>>
>>>     struct termios oldtio, newtio;
>>>
>>>     struct sigaction saio;
>>>
>>>     char buff[255];
>>>
>>>  
>>>
>>>     fd = open(PORT, O_RDWR | O_NOCTTY | O_NONBLOCK);
>>>
>>>     if (fd<0) {perror(PORT); exit(-1);}
>>>
>>>  
>>>
>>>     saio.sa_handler=signal_handler_IO;
>>>
>>>     saio.sa_flags=0;
>>>
>>>     saio.sa_restorer = NULL;
>>>
>>>     sigaction(SIGIO, &saio,NULL);
>>>
>>>     fcntl(fd, F_SETFL, FASYNC);
>>>
>>>     check = tcgetattr(fd, &oldtio);
>>>
>>>     if (check<0){perror("tcgetattr");}
>>>
>>>  
>>>
>>>     check = newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD ; if (check
>>> <0){perror("c_cflag");}
>>>
>>>     check = newtio.c_iflag = IGNPAR | IXON; if (check<0){perror(
>>> "c_iflag");}
>>>
>>>     check = newtio.c_oflag = 0; if (check<0){perror("c_oflag");}
>>>
>>>     //check = newtio.c_lflag = ICANON | ISIG;
>>>
>>>     check = newtio.c_lflag = 0; if (check<0){perror("c_lflag  ");}
>>> /* c_cc is responsible for an erno error */
>>>
>>>     check = newtio.c_cc[VMIN]=1; if (check<0){perror("c_cc[VMIN]");}
>>>
>>>     check = newtio.c_cc[VTIME]=0; if (check<0){perror("c_cc[VTIME]");}
>>>
>>>     tcflush(fd, TCIFLUSH); 
>>>  
>>>
>>>     check = tcsetattr(fd, TCSANOW, &newtio); if (check<0){perror(
>>> "tcsetattr");}
>>>
>>>  
>>>
>>> for(;;)
>>>
>>> {
>>>     ioctl(fd, TIOCSBRK);
>>>
>>>     usleep(1300);
>>>
>>>     ioctl(fd,TIOCCBRK);
>>>
>>>     usleep(200);
>>>
>>>  
>>> /* send request to actuator to receive the current setting and setup */
>>>     check = write(fd, SYNC, sizeof(SYNC));  if (check<0){perror("SYNC"
>>> );}
>>>
>>>     check = write(fd,PID, sizeof(PID)); if (check<0){perror("PID");}
>>>
>>> /* read response*/
>>>     res = read(fd, buff,255); 
>>>     if (res < 0)
>>>
>>>     {
>>>
>>>         perror("read");
>>>         //if(errno ==EINTR) continue;
>>>     }
>>>
>>>         printf(": :%d :%d\n", res,buff);
>>>
>>>
>>>
>>> usleep(10000);
>>>
>>> }
>>>
>>>     close (fd);
>>>
>>> } 
>>>
>>>  
>>>
>>> void signal_handler_IO(int status)
>>>
>>> {
>>>
>>> wait_flag=FALSE;
>>>
>>>
>>> e}
>>>
>>> erno EINTR error is displayed only when i'm setting any non-zero values 
>>> to c_cc[VTIME] or c_cc[VMIN]. but still even if i set the both to zero, I 
>>> cannot read anything from the port, it's just blank. 
>>>
>>>
>>> I'm confident that i'm receiving response from the device, I have 
>>> checked it with oscilloscope. 
>>>
>>> Any assistance would be appreciated. if possible with the code examples 
>>> for me to see what should I modify.
>>>
>>> Thank you very much for the help. 
>>>
>> -- 
>> For more options, visit http://beagleboard.org/discuss
>> --- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "BeagleBoard" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/beagleboard/vbRrGiqZyfs/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/beagleboard/61ab7f12-c3c4-407b-a14a-82f2a0a3e2e3%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/beagleboard/61ab7f12-c3c4-407b-a14a-82f2a0a3e2e3%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/4f146bf7-68cd-4cc0-bcfb-ec36e226f904%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to