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 + -
显示快捷键?