/* Communique avec un arduino ou esp32 via un port série */ #include #include #include #include #include #include #include #include #include using namespace std; // Ouvre le port de communication static int ads_openserial(const char *serial, bool arduino) { int fd = open (serial,O_RDWR|O_NOCTTY); if (fd == -1){ tlmp_error ("Ne peut ouvrir le fichier /dev/ttyUSB0 pour arduino (%s)\n",strerror(errno)); }else{ struct termios options; if (tcgetattr(fd,&options) < 0) { tlmp_error ("ioctl TCGETS2\n"); close (fd); fd = -1; }else{ int baud = arduino ? B9600 : B115200; cfsetispeed(&options, baud); cfsetospeed(&options, baud); // Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; /* Mask the character size bits */ options.c_cflag |= CS8; /* Select 8 data bits */ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CRTSCTS; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHONL | ISIG); options.c_oflag &= ~OPOST; options.c_iflag = 0; tcsetattr(fd, TCSANOW, &options); sleep(2); } } return fd; } int main (int argc, char *argv[]) { glocal int ret = -1; glocal const char *serial = nullptr; glocal bool arduino = false; glocal.ret = (argc,argv); setproginfo ("serialtalk","0.0","..."); setarg ('s',"serial","Port série",glocal.serial,true); setarg ('a',"arduino","On parle a un arduino (ou esp32 bluetooth)",glocal.arduino,false); glocal int ret = -1; glocal argc; glocal argv; glocal int noarg = 0; int fd = ads_openserial(glocal.serial, glocal.arduino); if (fd != -1){ (); if (strcmp(line,"fin")==0){ if (glocal.noarg < glocal.argc){ string s = string_f("%s\n",glocal.argv[glocal.noarg]); glocal.noarg++; write (no,s.c_str(),s.size()); }else{ endserver = true; } }else{ printf ("%s\n",line); } o.inject(fd,nullptr); string s = string_f("%s\n",argv[0]); glocal.noarg=1; write (fd,s.c_str(),s.size()); o.loop(); } return glocal.ret; return glocal.ret; }