#include <termios.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
void * reader( void * arg) ;
void nonblock( ) ;
int aa= 0 ;
int main( void )
{
struct termios backup, mine;
pthread_t thread;
int leng= 256 , charr;
char test[ 256 ] = { 0 } ;
aa = open( "/dev/ttyS0" , O_RDWR | O_NOCTTY) ;
if ( aa < 0 ) return - 1 ;
tcgetattr( aa,& backup) ;
bzero( & mine, sizeof ( mine) ) ;
mine.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
mine.c_iflag = IGNPAR | ICRNL;
mine.c_oflag = 0 ;
mine.c_lflag = 0 ;
mine.c_cc [ VMIN] = 1 ;
tcflush( aa, TCIFLUSH) ;
tcsetattr( aa, TCSANOW,& mine) ;
if ( pthread_create( & thread, NULL, reader, NULL) ) return - 1 ;
nonblock( ) ;
while ( 1 )
{
if ( charr == 'q' ) break ;
tcflush( aa, TCIFLUSH) ;
write( aa,& charr, 1 ) ;
printf ( "Sending : %c\n " , charr
) ;
usleep( 100 ) ;
}
tcsetattr( aa, TCSANOW,& backup) ;
close( aa) ;
nonblock( ) ;
return 0 ;
}
void * reader( void * arg)
{
int tty= aa, leng= 0 ;
char buffer[ 512 ] = { 0 } ;
while ( 1 )
{
leng= read( tty, buffer, sizeof ( buffer) ) ;
if ( leng > 0 )
{
printf ( "Received : %s Length : %d\n " , buffer
, leng
) ; }
usleep( 100 ) ;
}
}
void nonblock( )
{
static struct termios state;
static int status = 0 ;
if ( status == 0 )
{
tcgetattr( STDIN_FILENO,& state) ;
state.c_lflag &= ~ICANON;
state.c_lflag &= ~ECHO;
state.c_cc [ VMIN] = 1 ;
status = 1 ;
}
else state.c_lflag |= ( ICANON | ECHO) ;
tcsetattr( STDIN_FILENO, TCSANOW,& state) ;
}
I2luY2x1ZGUgPHRlcm1pb3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCnZvaWQgKnJlYWRlcih2b2lkICphcmcpOwp2b2lkIG5vbmJsb2NrKCk7CgppbnQgYWE9MDsKCmludCBtYWluKHZvaWQpCnsKICAgIHN0cnVjdCB0ZXJtaW9zIGJhY2t1cCwgbWluZTsKICAgIHB0aHJlYWRfdCB0aHJlYWQ7CiAgICBpbnQgbGVuZz0yNTYsY2hhcnI7CiAgICBjaGFyIHRlc3RbMjU2XT17MH07CgogICAgcHJpbnRmKCJzdGFydC4uLlxuIik7CgogICAgYWEgPSBvcGVuKCIvZGV2L3R0eVMwIiwgT19SRFdSIHwgT19OT0NUVFkpOwogICAgaWYgKGFhIDwgMCkgcmV0dXJuIC0xOwoKICAgIHRjZ2V0YXR0cihhYSwmYmFja3VwKTsKICAgIGJ6ZXJvKCZtaW5lLHNpemVvZihtaW5lKSk7CgogICAgbWluZS5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDTE9DQUwgfCBDUkVBRDsKICAgIG1pbmUuY19pZmxhZyA9IElHTlBBUiB8IElDUk5MOwogICAgbWluZS5jX29mbGFnID0gMDsKICAgIG1pbmUuY19sZmxhZyA9IDA7CiAgICBtaW5lLmNfY2NbVk1JTl0gPSAxOwoKICAgIHRjZmx1c2goYWEsVENJRkxVU0gpOwogICAgdGNzZXRhdHRyKGFhLFRDU0FOT1csJm1pbmUpOwoKICAgIGlmIChwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLE5VTEwscmVhZGVyLE5VTEwpKSByZXR1cm4gLTE7CgogICAgbm9uYmxvY2soKTsKCiAgICB3aGlsZSgxKQogICAgewogICAgICAgIGlmKGNoYXJyID09ICdxJykgYnJlYWs7CiAgICAgICAgY2hhcnI9ZmdldGMoc3RkaW4pOwogICAgICAgIHRjZmx1c2goYWEsVENJRkxVU0gpOwogICAgICAgIHdyaXRlKGFhLCZjaGFyciwxKTsKICAgICAgICBwcmludGYoIlNlbmRpbmcgOiAlY1xuIixjaGFycik7CgogICAgICAgIHVzbGVlcCgxMDApOwogICAgfQoKICAgIHRjc2V0YXR0cihhYSxUQ1NBTk9XLCZiYWNrdXApOwogICAgY2xvc2UoYWEpOwogICAgbm9uYmxvY2soKTsKICAgIHJldHVybiAwOwoKfQoKdm9pZCAqcmVhZGVyKHZvaWQgKmFyZykKewogICAgaW50IHR0eT1hYSxsZW5nPTA7CiAgICBjaGFyIGJ1ZmZlcls1MTJdPXswfTsKICAgIHdoaWxlKDEpCiAgICB7CiAgICAgICAgbGVuZz1yZWFkKHR0eSxidWZmZXIsc2l6ZW9mKGJ1ZmZlcikpOwogICAgICAgIGlmKGxlbmcgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJSZWNlaXZlZCA6ICVzIExlbmd0aCA6ICVkXG4iLGJ1ZmZlcixsZW5nKTsKICAgICAgICB9CiAgICAgICAgdXNsZWVwKDEwMCk7CiAgICB9Cgp9Cgp2b2lkIG5vbmJsb2NrKCkKewogICAgc3RhdGljIHN0cnVjdCB0ZXJtaW9zIHN0YXRlOwogICAgc3RhdGljIGludCBzdGF0dXMgPSAwOwoKICAgIGlmKHN0YXR1cyA9PSAwKQoJewogICAgICAgIHRjZ2V0YXR0cihTVERJTl9GSUxFTk8sJnN0YXRlKTsKICAgICAgICBzdGF0ZS5jX2xmbGFnICY9IH5JQ0FOT047CiAgICAgICAgc3RhdGUuY19sZmxhZyAmPSB+RUNITzsKICAgICAgICBzdGF0ZS5jX2NjW1ZNSU5dID0gMTsKICAgICAgICBzdGF0dXMgPSAxOwogICAgfQogICAgZWxzZSBzdGF0ZS5jX2xmbGFnIHw9IChJQ0FOT04gfCBFQ0hPKTsKCiAgICB0Y3NldGF0dHIoU1RESU5fRklMRU5PLFRDU0FOT1csJnN0YXRlKTsKfQ==
compilation info
prog.c: In function ‘main’:
prog.c:20:10: warning: unused variable ‘test’ [-Wunused-variable]
char test[256]={0};
^
prog.c:19:9: warning: unused variable ‘leng’ [-Wunused-variable]
int leng=256,charr;
^
/home/BlE9pX/cc6GJJQ0.o: In function `main':
prog.c:(.text.startup+0xbe): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
stdout