#include "rcs_defs.hh"
Include dependency graph for _tty.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Data Structures | |
struct | rcs_serial_port_setting |
Functions | |
int | print_serial_port_configuration (RCS_SERIAL_PORT_HANDLE _handle) |
int | set_serial_port_configuration (RCS_SERIAL_PORT_HANDLE _handle, struct rcs_serial_port_setting *_settings) |
RCS_SERIAL_PORT_HANDLE | open_serial_communications_port (char *name) |
int | read_serial_communications_port (RCS_SERIAL_PORT_HANDLE _handle, char *buf, int maxlen) |
int | write_serial_communications_port (RCS_SERIAL_PORT_HANDLE _handle, char *buf, int maxlen) |
|
Definition at line 28 of file _tty.c. Referenced by main().
00029 { 00030 #ifdef UNIX_LIKE_PLAT 00031 int ttyFileFd = _handle; 00032 struct termios ttysettings; 00033 if (tcgetattr (ttyFileFd, &ttysettings) < 0) 00034 { 00035 rcs_print ("tcgetattr failed.\n"); 00036 return -1; 00037 } 00038 rcs_print ("c_iflag: %x ", ttysettings.c_iflag); 00039 if (ttysettings.c_iflag & BRKINT) 00040 rcs_print ("BRKINT "); 00041 if (ttysettings.c_iflag & ICRNL) 00042 rcs_print ("ICRNL "); 00043 if (ttysettings.c_iflag & IGNBRK) 00044 rcs_print ("IGNBRK "); 00045 if (ttysettings.c_iflag & IGNCR) 00046 rcs_print ("IGNCR "); 00047 if (ttysettings.c_iflag & IMAXBEL) 00048 rcs_print ("IMAXBEL "); 00049 if (ttysettings.c_iflag & INLCR) 00050 rcs_print ("INLCR "); 00051 if (ttysettings.c_iflag & INPCK) 00052 rcs_print ("INPCK "); 00053 if (ttysettings.c_iflag & IUCLC) 00054 rcs_print ("IUCLC "); 00055 if (ttysettings.c_iflag & IXANY) 00056 rcs_print ("IXANY "); 00057 if (ttysettings.c_iflag & IXOFF) 00058 rcs_print ("IXOFF "); 00059 if (ttysettings.c_iflag & IXON) 00060 rcs_print ("IXON "); 00061 if (ttysettings.c_iflag & PARMRK) 00062 rcs_print ("PARMRK "); 00063 rcs_print ("\n"); 00064 rcs_print ("c_oflag: %x ", ttysettings.c_oflag); 00065 if (ttysettings.c_oflag & BSDLY) 00066 rcs_print ("BSDLY "); 00067 if (ttysettings.c_oflag & CRDLY) 00068 rcs_print ("CRDLY "); 00069 if (ttysettings.c_oflag & FFDLY) 00070 rcs_print ("FFDLY "); 00071 if (ttysettings.c_oflag & NLDLY) 00072 rcs_print ("NLDLY "); 00073 if (ttysettings.c_oflag & OCRNL) 00074 rcs_print ("OCRNL "); 00075 if (ttysettings.c_oflag & OFDEL) 00076 rcs_print ("OFDEL "); 00077 if (ttysettings.c_oflag & OFILL) 00078 rcs_print ("OFILL "); 00079 if (ttysettings.c_oflag & OLCUC) 00080 rcs_print ("OLCUC "); 00081 if (ttysettings.c_oflag & ONLCR) 00082 rcs_print ("ONLCR "); 00083 if (ttysettings.c_oflag & ONLRET) 00084 rcs_print ("ONLRET "); 00085 if (ttysettings.c_oflag & ONOCR) 00086 rcs_print ("ONOCR "); 00087 /* if(ttysettings.c_oflag & ONOEOT) rcs_print("ONEOT "); */ 00088 if (ttysettings.c_oflag & OPOST) 00089 rcs_print ("OPOST "); 00090 /* if(ttysettings.c_oflag & OXTABS) rcs_print("OXTABS "); */ 00091 if (ttysettings.c_oflag & TABDLY) 00092 rcs_print ("TABDLY "); 00093 if (ttysettings.c_oflag & VTDLY) 00094 rcs_print ("VTDLY "); 00095 rcs_print ("\n"); 00096 rcs_print ("c_cflag: %x ", ttysettings.c_cflag); 00097 #ifndef LINUX 00098 if (ttysettings.c_cflag & CCTS_OFLOW) 00099 rcs_print ("CCTS_OFLOW "); 00100 #endif 00101 /* if(ttysettings.c_cflag & CIGNORE) rcs_print("CIGNORE "); */ 00102 if (ttysettings.c_cflag & CLOCAL) 00103 rcs_print ("CLOCAL "); 00104 if (ttysettings.c_cflag & CREAD) 00105 rcs_print ("CREAD "); 00106 #ifndef LINUX 00107 if (ttysettings.c_cflag & CRTS_IFLOW) 00108 rcs_print ("CRTS_IFLOW "); 00109 #endif 00110 if ((ttysettings.c_cflag & CSIZE) == CS5) 00111 rcs_print ("CS5 "); 00112 if ((ttysettings.c_cflag & CSIZE) == CS6) 00113 rcs_print ("CS6 "); 00114 if ((ttysettings.c_cflag & CSIZE) == CS7) 00115 rcs_print ("CS7 "); 00116 if ((ttysettings.c_cflag & CSIZE) == CS8) 00117 rcs_print ("CS8 "); 00118 if (ttysettings.c_cflag & CSTOPB) 00119 rcs_print ("CSTOPB "); 00120 if (ttysettings.c_cflag & HUPCL) 00121 rcs_print ("HUPCL "); 00122 /* if(ttysettings.c_cflag & MDMBUF) rcs_print("MDMBUF "); */ 00123 if (ttysettings.c_cflag & PARENB) 00124 rcs_print ("PARENB "); 00125 if (ttysettings.c_cflag & PARODD) 00126 rcs_print ("PARODD "); 00127 rcs_print ("\n"); 00128 rcs_print ("c_lflag: %x ", ttysettings.c_lflag); 00129 /*if(ttysettings.c_cflag & ALTWERASE) rcs_print("ALTWERASE "); */ 00130 if (ttysettings.c_cflag & ECHO) 00131 rcs_print ("ECHO "); 00132 if (ttysettings.c_cflag & ECHOCTL) 00133 rcs_print ("ECHOCTL "); 00134 if (ttysettings.c_cflag & ECHOE) 00135 rcs_print ("ECHOE "); 00136 if (ttysettings.c_cflag & ECHOK) 00137 rcs_print ("ECHOK "); 00138 if (ttysettings.c_cflag & ECHOKE) 00139 rcs_print ("ECHOKE "); 00140 if (ttysettings.c_cflag & ECHONL) 00141 rcs_print ("ECHONL "); 00142 if (ttysettings.c_cflag & ECHOPRT) 00143 rcs_print ("ECHOPRT "); 00144 if (ttysettings.c_cflag & FLUSHO) 00145 rcs_print ("FLUSHO "); 00146 if (ttysettings.c_cflag & ICANON) 00147 rcs_print ("ICANON "); 00148 if (ttysettings.c_cflag & IEXTEN) 00149 rcs_print ("IEXTEN "); 00150 if (ttysettings.c_cflag & ISIG) 00151 rcs_print ("ISIG "); 00152 if (ttysettings.c_cflag & NOFLSH) 00153 rcs_print ("NOFLSH "); 00154 /* if(ttysettings.c_cflag & NOKERNINFO) rcs_print("NOKERNINFO "); */ 00155 if (ttysettings.c_cflag & PENDIN) 00156 rcs_print ("PENDIN "); 00157 if (ttysettings.c_cflag & TOSTOP) 00158 rcs_print ("TOSTOP "); 00159 if (ttysettings.c_cflag & XCASE) 00160 rcs_print ("XCASE "); 00161 rcs_print ("\n"); 00162 #endif 00163 00164 #ifdef WIN32 00165 DCB dcb; 00166 if (!GetCommState (_handle, &dcb)) 00167 { 00168 return -1; 00169 } 00170 rcs_print ("DCBlength=%d\n", dcb.DCBlength); /* sizeof(DCB) */ 00171 00172 rcs_print ("BaudRate=%d\n", dcb.BaudRate); /* current baud rate */ 00173 rcs_print ("fBinary=%d\n", dcb.fBinary); /* binary mode, no EOF check */ 00174 rcs_print ("fParity=%d\n", dcb.fParity); /* enable parity checking */ 00175 rcs_print ("fOutxCtsFlow=%d\n", dcb.fOutxCtsFlow); /* CTS output flow control */ 00176 rcs_print ("fOutxDsrFlow=%d\n", dcb.fOutxDsrFlow); /* DSR output flow control */ 00177 rcs_print ("fDtrControl=%d\n", dcb.fDsrSensitivity); /* DTR flow control type */ 00178 rcs_print ("fDsrSensitivity=%d\n", dcb.fDsrSensitivity); /* DSR sensitivity */ 00179 rcs_print ("fTXContinueOnXoff=%d\n", dcb.fTXContinueOnXoff); /* XOFF continues Tx */ 00180 rcs_print ("fOutX=%d\n", dcb.fOutX); /* XON/XOFF out flow control */ 00181 rcs_print ("fInX=%d\n", dcb.fInX); /* XON/XOFF in flow control */ 00182 rcs_print ("fErrorChar=%d\n", dcb.fErrorChar); /* enable error replacement */ 00183 rcs_print ("fNull=%d\n", dcb.fNull); /* enable null stripping */ 00184 rcs_print ("fRtsControl=%d\n", dcb.fRtsControl); /* RTS flow control */ 00185 rcs_print ("fAbortOnError=%d\n", dcb.fAbortOnError); /* abort reads/writes on error */ 00186 rcs_print ("XonLim=%d\n", dcb.XonLim); /* transmit XON threshold */ 00187 rcs_print ("XoffLim=%d\n", dcb.XoffLim); /* transmit XOFF threshold */ 00188 rcs_print ("ByteSize=%d\n", dcb.ByteSize); /* number of bits/byte, 4-8 */ 00189 rcs_print ("Parity=%d\n", dcb.Parity); /* 0-4=no,odd,even,mark,space */ 00190 rcs_print ("StopBits=%d\n", dcb.StopBits); /* 0,1,2 = 1, 1.5, 2 */ 00191 rcs_print ("XonChar=%x %c\n", dcb.XoffChar, dcb.XoffChar); /* Tx and Rx XON character */ 00192 rcs_print ("XoffChar=%x %c\n", dcb.XoffChar, dcb.XoffChar); /* Tx and Rx XOFF character */ 00193 rcs_print ("ErrorChar=%x %c\n", dcb.ErrorChar, dcb.ErrorChar); /* error replacement character */ 00194 rcs_print ("EofChar=%x %c\n", dcb.EofChar, dcb.EofChar); /* end of input character */ 00195 rcs_print ("EvtChar=%x %c\n", dcb.EvtChar, dcb.EvtChar); /* received event character */ 00196 return 0; 00197 #endif 00198 } |
|
Definition at line 201 of file _tty.c. Referenced by TTYMEM::TTYMEM(), main(), and CMS_SERVER_REMOTE_TTY_PORT::register_port().
00203 { 00204 #ifdef UNIX_LIKE_PLAT 00205 struct termios ttysettings; 00206 int ttyFileFd = _handle; 00207 speed_t spd = B9600; 00208 if (tcgetattr (ttyFileFd, &ttysettings) < 0) 00209 { 00210 rcs_print_error ("tcgetattr failed: %d -- %s\n", 00211 errno, strerror (errno)); 00212 return -1; 00213 } 00214 ttysettings.c_iflag = 0; 00215 ttysettings.c_oflag = 0; 00216 ttysettings.c_cflag = CS8 | CLOCAL | CREAD; 00217 ttysettings.c_lflag = 0; 00218 ttysettings.c_cc[VMIN] = 0; 00219 ttysettings.c_cc[VTIME] = 0; 00220 if (NULL != _settings) 00221 { 00222 switch (_settings->baud_rate) 00223 { 00224 case 300: 00225 spd = B300; 00226 break; 00227 00228 case 600: 00229 spd = B600; 00230 break; 00231 00232 case 1200: 00233 spd = B1200; 00234 break; 00235 00236 case 2400: 00237 spd = B2400; 00238 break; 00239 00240 case 9600: 00241 spd = B9600; 00242 break; 00243 00244 case 19200: 00245 spd = B19200; 00246 break; 00247 } 00248 if (_settings->data_bits == 7) 00249 { 00250 ttysettings.c_cflag &= ~CS8; 00251 ttysettings.c_cflag |= CS7; 00252 } 00253 if (_settings->stop_bits == 2) 00254 { 00255 ttysettings.c_cflag |= CSTOPB; 00256 } 00257 if (_settings->use_parity) 00258 { 00259 ttysettings.c_cflag |= PARENB; 00260 if (!_settings->even_parity) 00261 { 00262 ttysettings.c_cflag |= PARODD; 00263 } 00264 } 00265 } 00266 00267 if (cfsetospeed (&ttysettings, spd) < 0) 00268 { 00269 rcs_print_error ("cfsetospeed failed.\n"); 00270 return -1; 00271 } 00272 if (cfsetispeed (&ttysettings, spd) < 0) 00273 { 00274 rcs_print_error ("cfsetispeed failed.\n"); 00275 return -1; 00276 } 00277 if (tcsetattr (ttyFileFd, TCSANOW, &ttysettings) < 0) 00278 { 00279 rcs_print_error ("tcsetattr failed. %d -- %s\n", 00280 errno, strerror (errno)); 00281 return -1; 00282 } 00283 #endif 00284 #ifdef WIN32 00285 DCB dcb; 00286 if (!GetCommState (_handle, &dcb)) 00287 { 00288 return -1; 00289 } 00290 /* initialize TTY info structure */ 00291 dcb.BaudRate = CBR_9600; 00292 if (NULL != _settings) 00293 { 00294 dcb.BaudRate = _settings->baud_rate; 00295 } 00296 dcb.fBinary = FALSE; 00297 dcb.fParity = NOPARITY; 00298 dcb.fOutxCtsFlow = FALSE; 00299 dcb.fOutxDsrFlow = FALSE; 00300 dcb.fDtrControl = DTR_CONTROL_DISABLE; 00301 dcb.fDsrSensitivity = FALSE; 00302 dcb.fTXContinueOnXoff = TRUE; 00303 dcb.fOutX = FALSE; 00304 dcb.fInX = FALSE; 00305 dcb.fErrorChar = FALSE; 00306 dcb.fNull = FALSE; 00307 dcb.fRtsControl = RTS_CONTROL_DISABLE; 00308 dcb.ByteSize = 8; 00309 dcb.Parity = NOPARITY; 00310 dcb.StopBits = ONESTOPBIT; 00311 if (NULL != _settings) 00312 { 00313 dcb.ByteSize = _settings->data_bits; 00314 if (!_settings->use_parity) 00315 { 00316 dcb.Parity = NOPARITY; 00317 } 00318 else 00319 { 00320 if (!_settings->even_parity) 00321 { 00322 dcb.Parity = ODDPARITY; 00323 } 00324 else 00325 { 00326 dcb.Parity = EVENPARITY; 00327 } 00328 dcb.fParity = TRUE; 00329 } 00330 if (_settings->stop_bits == 2) 00331 { 00332 dcb.StopBits = TWOSTOPBITS; 00333 } 00334 } 00335 if (!SetCommState (_handle, &dcb)) 00336 { 00337 return -1; 00338 } 00339 return 0; 00340 #endif 00341 } |
|
Definition at line 345 of file _tty.c. Referenced by TTYMEM::TTYMEM(), main(), and CMS_SERVER_REMOTE_TTY_PORT::register_port().
00346 { 00347 #ifdef UNIX_LIKE_PLAT 00348 int ttyFileFd = open (name, O_RDWR | O_NDELAY); 00349 if (ttyFileFd < 0) 00350 { 00351 rcs_print_error ("Can't open %s : %d %s\n", 00352 name, errno, strerror (errno)); 00353 return (-1); 00354 } 00355 if (!isatty (ttyFileFd)) 00356 { 00357 rcs_print_error ("open_serial_communications_port: %s is not a tty.\n", 00358 name); 00359 return (-1); 00360 } 00361 return ttyFileFd; 00362 #endif 00363 #ifdef WIN32 00364 HANDLE handle = 00365 CreateFile (name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 00366 FILE_FLAG_NO_BUFFERING, NULL); 00367 return handle; 00368 #endif 00369 } |
|
Definition at line 372 of file _tty.c. Referenced by main(), and readn_serial_communications_port().
00374 { 00375 #ifdef UNIX_LIKE_PLAT 00376 int ttyFileFd = _handle; 00377 int bytes_read = read (ttyFileFd, buf, maxlen); 00378 return bytes_read; 00379 #endif 00380 #ifdef WIN32 00381 unsigned long bytes_read = 0; 00382 if (!ReadFile (_handle, buf, maxlen, &bytes_read, NULL)) 00383 { 00384 return -1; 00385 } 00386 return bytes_read; 00387 #endif 00388 } |
|
Definition at line 391 of file _tty.c. Referenced by TTYMEM::check_if_read(), TTYMEM::clear(), CMS_SERVER_REMOTE_TTY_PORT::handle_request(), main(), TTYMEM::peek(), TTYMEM::read(), and TTYMEM::verify_bufname().
00393 { 00394 #ifdef UNIX_LIKE_PLAT 00395 int ttyFileFd = _handle; 00396 return write (ttyFileFd, buf, maxlen); 00397 #endif 00398 #ifdef WIN32 00399 unsigned long bytes_written = 0; 00400 if (!WriteFile (_handle, buf, maxlen, &bytes_written, NULL)) 00401 { 00402 return -1; 00403 } 00404 return bytes_written; 00405 #endif 00406 } |