added inital serial port flush, serial handeling changes. rate display bugfix
This commit is contained in:
		
							parent
							
								
									7fd14320db
								
							
						
					
					
						commit
						2ee39f1843
					
				
					 3 changed files with 40 additions and 35 deletions
				
			
		
							
								
								
									
										30
									
								
								main.cpp
									
										
									
									
									
								
							
							
						
						
									
										30
									
								
								main.cpp
									
										
									
									
									
								
							|  | @ -33,38 +33,11 @@ static void printUsage() | ||||||
|  -s, --sinkless   run without serial port\n"; |  -s, --sinkless   run without serial port\n"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void printRates() |  | ||||||
| { |  | ||||||
| std::cout<<"Rates:\n\
 |  | ||||||
|     B50      0000001\n\ |  | ||||||
|     B75      0000002\n\ |  | ||||||
|     B110     0000003\n\ |  | ||||||
|     B134     0000004\n\ |  | ||||||
|     B150     0000005\n\ |  | ||||||
|     B200     0000006\n\ |  | ||||||
|     B300     0000007\n\ |  | ||||||
|     B600     0000010\n\ |  | ||||||
|     B1200    0000011\n\ |  | ||||||
|     B1800    0000012\n\ |  | ||||||
|     B2400    0000013\n\ |  | ||||||
|     B4800    0000014\n\ |  | ||||||
|     B9600    0000015\n\ |  | ||||||
|     B19200   0000016\n\ |  | ||||||
|     B38400   0000017\n\ |  | ||||||
|     B57600   0010001\n\ |  | ||||||
|     B115200  0010002\n\ |  | ||||||
|     B500000  0010005\n\ |  | ||||||
|     B1000000 0010010\n\ |  | ||||||
|     B1152000 0010011\n\ |  | ||||||
|     B1500000 0010012\n\ |  | ||||||
|     B2000000 0010013\n"; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct Config | struct Config | ||||||
| { | { | ||||||
|     std::string portFileName = "/dev/ttyUSB0"; |     std::string portFileName = "/dev/ttyUSB0"; | ||||||
|     unsigned short port = 6856; |     unsigned short port = 6856; | ||||||
|     int baud = 0000017; |     int baud = B9600; | ||||||
|     bool noSerial = false; |     bool noSerial = false; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -135,6 +108,7 @@ int main(int argc, char* argv[]) | ||||||
|         std::cout<<"Using serial port: "<<config.portFileName<<" at "<<config.baud<<" baud\n"; |         std::cout<<"Using serial port: "<<config.portFileName<<" at "<<config.baud<<" baud\n"; | ||||||
|         serial = serialport_init(config.portFileName.c_str(), config.baud); |         serial = serialport_init(config.portFileName.c_str(), config.baud); | ||||||
|         if(serial == -1) return 1; |         if(serial == -1) return 1; | ||||||
|  | 		tcflush(serial, TCIOFLUSH); | ||||||
|     } |     } | ||||||
|     else std::cout<<"Sinkless mode\n"; |     else std::cout<<"Sinkless mode\n"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,5 @@ | ||||||
| #include "serial_io.h" | #include "serial_io.h" | ||||||
| 
 | 
 | ||||||
| struct termios toptions; |  | ||||||
| 
 |  | ||||||
| void sWrite(int port, char string[], size_t length) | void sWrite(int port, char string[], size_t length) | ||||||
| { | { | ||||||
|     if(port != -1) write(port, string, length); |     if(port != -1) write(port, string, length); | ||||||
|  | @ -18,9 +16,35 @@ ssize_t sRead(int port, void *buf, size_t count) | ||||||
|     return (port != -1) ? read(port, buf, count) : 0; |     return (port != -1) ? read(port, buf, count) : 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | void printRates() | ||||||
|  | { | ||||||
|  | std::cout<<"Rates:\n"\ | ||||||
|  |          <<"B50      "<<B50<<'\n'\ | ||||||
|  |          <<"B75      "<<B75<<'\n'\ | ||||||
|  |          <<"B110     "<<B110<<'\n'\ | ||||||
|  |          <<"B134     "<<B134<<'\n'\ | ||||||
|  |          <<"B150     "<<B150<<'\n'\ | ||||||
|  |          <<"B200     "<<B200<<'\n'\ | ||||||
|  |          <<"B300     "<<B300<<'\n'\ | ||||||
|  |          <<"B600     "<<B600<<'\n'\ | ||||||
|  |          <<"B1200    "<<B1200<<'\n'\ | ||||||
|  |          <<"B1800    "<<B1800<<'\n'\ | ||||||
|  |          <<"B2400    "<<B2400<<'\n'\ | ||||||
|  |          <<"B4800    "<<B4800<<'\n'\ | ||||||
|  |          <<"B9600    "<<B9600<<'\n'\ | ||||||
|  |          <<"B19200   "<<B19200<<'\n'\ | ||||||
|  |          <<"B38400   "<<B38400<<'\n'\ | ||||||
|  |          <<"B57600   "<<B57600<<'\n'\ | ||||||
|  |          <<"B115200  "<<B115200<<'\n'\ | ||||||
|  |          <<"B230400  "<<B230400<<'\n'; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| int serialport_init(const char* device, int baud) | int serialport_init(const char* device, int baud) | ||||||
| { | { | ||||||
|     int fd; |     int fd; | ||||||
|  |     struct termios toptions; | ||||||
|     fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); |     fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY); | ||||||
|     if (fd == -1) |     if (fd == -1) | ||||||
|     { |     { | ||||||
|  | @ -44,19 +68,20 @@ int serialport_init(const char* device, int baud) | ||||||
| 
 | 
 | ||||||
|     //Make Raw
 |     //Make Raw
 | ||||||
|     toptions.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); |     toptions.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); | ||||||
|     toptions.c_oflag &= ~OPOST; |     toptions.c_oflag &= ~OPOST; //hmm examine
 | ||||||
|     toptions.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); |     toptions.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); | ||||||
|     toptions.c_cflag &= ~(CSIZE | PARENB); |     toptions.c_cflag &= ~(CSIZE | PARENB); | ||||||
|     toptions.c_cflag |= CS8; |     toptions.c_cflag |= CS8; | ||||||
|      |      | ||||||
|     cfsetispeed(&toptions, baud); |     if(cfsetispeed(&toptions, baud) < 0 || cfsetospeed(&toptions, baud) < 0) | ||||||
|     cfsetospeed(&toptions, baud); |     { | ||||||
| 
 |         perror("init_serialport: Couldn't set baud rate"); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|     // see: http://unixwiz.net/techtips/termios-vmin-vtime.html
 |     // see: http://unixwiz.net/techtips/termios-vmin-vtime.html
 | ||||||
|     toptions.c_cc[VMIN]  = 0; |     toptions.c_cc[VMIN]  = 0; | ||||||
|     toptions.c_cc[VTIME] = 40; |     toptions.c_cc[VTIME] = 40; | ||||||
|     fcntl(fd, F_SETFL, FNDELAY); |     fcntl(fd, F_SETFL, FNDELAY); | ||||||
| 
 |  | ||||||
|     if( tcsetattr(fd, TCSANOW, &toptions) < 0) |     if( tcsetattr(fd, TCSANOW, &toptions) < 0) | ||||||
|     { |     { | ||||||
|         perror("init_serialport: Couldn't set term attributes"); |         perror("init_serialport: Couldn't set term attributes"); | ||||||
|  |  | ||||||
|  | @ -3,7 +3,10 @@ | ||||||
| #include <termios.h> | #include <termios.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
| #include <iostream> | #include <iostream> | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #define BAUDRATE B38400 | #define BAUDRATE B38400 | ||||||
| 
 | 
 | ||||||
|  | @ -13,6 +16,9 @@ void sWrite(int port, const char string[], size_t length); | ||||||
| 
 | 
 | ||||||
| ssize_t sRead(int port, void *buf, size_t count); | ssize_t sRead(int port, void *buf, size_t count); | ||||||
| 
 | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | void printRates(); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| int serialport_init(const char* device, int baud = BAUDRATE); | int serialport_init(const char* device, int baud = BAUDRATE); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 IMback
						IMback