serchan.cxx
来自「安装 H323需要的pwlib库」· CXX 代码 · 共 795 行 · 第 1/2 页
CXX
795 行
baud = B19200; break;#endif#ifdef B38400 case 38400: baud = B38400; break;#endif#ifdef B57600 case 57600: baud = B57600; break;#endif#ifdef B115200 case 115200: baud = B115200; break;#endif#ifdef B230400 case 230400: baud = B230400; break;#endif default: baud = -1; }; if (baud == -1) { errno = EINVAL; ConvertOSError(-1); return FALSE; } // save new baud rate baudRate = newBaudRate;#if defined(P_FREEBSD) || defined(P_OPENBSD) || defined (P_NETBSD) || defined(P_MACOSX) || defined(P_MACOS) // The BSD way Termio.c_ispeed = baud; Termio.c_ospeed = baud;#else // The Linux way Termio.c_cflag &= ~CBAUD; Termio.c_cflag |= baud;#endif if (os_handle < 0) return TRUE; // initialise the port return ConvertOSError(TCSETATTR(os_handle, &Termio));#endif // P_VXWORKS}BOOL PSerialChannel::SetDataBits(BYTE data){ if (data == dataBits) return TRUE;#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags; switch (data) {#ifdef CS5 case 5: flags = CS5; break;#endif#ifdef CS6 case 6: flags = CS6; break;#endif#ifdef CS7 case 7: flags = CS7; break;#endif#ifdef CS8 case 8: case 0: // default flags = CS8; break;#endif default: flags = -1; break; } if (flags == 0) { errno = EINVAL; ConvertOSError(-1); return FALSE; } // set the new number of data bits dataBits = data; Termio.c_cflag &= ~CSIZE; Termio.c_cflag |= flags; if (os_handle < 0) return TRUE; return ConvertOSError(TCSETATTR(os_handle, &Termio));#endif // P_VXWORKS}BOOL PSerialChannel::SetParity(Parity parity){ if (parity == parityBits) return TRUE;#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags; switch (parity) { case OddParity: flags = PARODD | PARENB; break; case EvenParity: flags = PARENB; case NoParity: case DefaultParity: flags = IGNPAR; break; case MarkParity: case SpaceParity: default: flags = -1; } if (flags < 0) { errno = EINVAL; ConvertOSError(-1); return FALSE; } if (os_handle < 0) return TRUE; // set the new parity parityBits = parity; Termio.c_cflag &= ~(PARENB|PARODD); Termio.c_cflag |= flags; return ConvertOSError(TCSETATTR(os_handle, &Termio));#endif // P_VXWORKS}BOOL PSerialChannel::SetStopBits(BYTE stop){ if (stop == stopBits) return TRUE;#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags; switch (stop) { case 2: flags = CSTOPB; break; default: case 1: flags = 0; break; } if (flags < 0) { errno = EINVAL; ConvertOSError(-1); return FALSE; } if (os_handle < 0) return TRUE; // set the new number of stop bits stopBits = stop; Termio.c_cflag &= ~CSTOPB; Termio.c_cflag |= flags; return ConvertOSError(TCSETATTR(os_handle, &Termio));#endif // P_VXWORKS}DWORD PSerialChannel::GetSpeed() const{ return baudRate;}BYTE PSerialChannel::GetStopBits() const{ return stopBits;}BYTE PSerialChannel::GetDataBits() const{ return dataBits;}PSerialChannel::Parity PSerialChannel::GetParity() const{ return parityBits;}BOOL PSerialChannel::SetInputFlowControl(FlowControl){ return TRUE;}PSerialChannel::FlowControl PSerialChannel::GetInputFlowControl() const{ return NoFlowControl;}BOOL PSerialChannel::SetOutputFlowControl(FlowControl){ return TRUE;}PSerialChannel::FlowControl PSerialChannel::GetOutputFlowControl() const{ return NoFlowControl;}void PSerialChannel::SetDTR(BOOL mode){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction);#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits flags &= ~TIOCM_DTR; if ( mode == TRUE ) flags |= TIOCM_DTR; ioctl(os_handle,TIOCMSET,&flags); // set back /* ALTERNATE IMPLEMENTATION? Uses "Local Mode" bits? if ( mode TRUE ) ioctl(os_handle, TIOCSDTR, 0); else ioctl(os_handle, TIOCCDTR, 0); */#endif // P_VXWORKS}void PSerialChannel::SetRTS(BOOL mode){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction);#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits flags &= ~TIOCM_RTS; if ( mode == TRUE ) flags |= TIOCM_RTS; ioctl(os_handle,TIOCMSET,&flags); // set back#endif // P_VXWORKS}void PSerialChannel::SetBreak(BOOL mode){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction);#else if (mode) ioctl(os_handle, TIOCSBRK, 0); else ioctl(os_handle, TIOCCBRK, 0);#endif // P_VXWORKS}BOOL PSerialChannel::GetCTS(){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits return (flags&TIOCM_CTS)?TRUE:FALSE;#endif // P_VXWORKS}BOOL PSerialChannel::GetDSR(){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits return (flags&TIOCM_DSR)?TRUE:FALSE;#endif // P_VXWORKS}BOOL PSerialChannel::GetDCD(){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits return (flags&TIOCM_CD)?TRUE:FALSE;#endif // P_VXWORKS}BOOL PSerialChannel::GetRing(){#if defined(P_VXWORKS) || defined (__BEOS__) PAssertAlways(PUnimplementedFunction); return FALSE;#else int flags = 0; ioctl(os_handle,TIOCMGET,&flags); // get the bits return (flags&TIOCM_RNG)?TRUE:FALSE;#endif // P_VXWORKS}PStringList PSerialChannel::GetPortNames(){ PStringList ports; char * env = getenv(PORTLISTENV); if (env != NULL) { PString str(env); PStringArray tokens = str.Tokenise(" ,\t", FALSE); PINDEX i; for (i = 0; i < tokens.GetSize(); i++) ports.AppendString(tokens[i]); } else {#if defined(__sun) && defined (__sparc) ports.AppendString(PString("ttya")); ports.AppendString(PString("ttyb"));#else ports.AppendString(PString("ttyS0")); ports.AppendString(PString("ttyS1")); ports.AppendString(PString("ttyS2")); ports.AppendString(PString("ttyS3"));#endif } return ports;}// End of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?