void QextSerialPortPrivate::setFlowControl(FlowType flow, bool update) { Settings.FlowControl=flow; settingsDirtyFlags |= DFE_Flow; if (update && q_func()->isOpen()) updatePortSettings(); }
void QextSerialPortPrivate::setTimeout(long millisec, bool update) { Settings.Timeout_Millisec = millisec; settingsDirtyFlags |= DFE_TimeOut; if (update && q_func()->isOpen()) updatePortSettings(); }
void QextSerialPortPrivate::setParity(ParityType parity, bool update) { switch (parity) { case PAR_SPACE: if (Settings.DataBits==DATA_8) { #ifdef Q_OS_WIN QESP_PORTABILITY_WARNING("QextSerialPort Portability Warning: Space parity with 8 data bits is not supported by POSIX systems."); #else QESP_WARNING("Space parity with 8 data bits is not supported by POSIX systems."); #endif } break; #ifdef Q_OS_WIN /*mark parity - WINDOWS ONLY*/ case PAR_MARK: QESP_PORTABILITY_WARNING("QextSerialPort Portability Warning: Mark parity is not supported by POSIX systems"); break; #endif case PAR_NONE: case PAR_EVEN: case PAR_ODD: break; default: QESP_WARNING()<<"QextSerialPort does not support Parity:" << parity; } Settings.Parity=parity; settingsDirtyFlags |= DFE_Parity; if (update && q_func()->isOpen()) updatePortSettings(); }
void QextSerialPortPrivate::setDataBits(DataBitsType dataBits, bool update) { switch(dataBits) { case DATA_5: if (Settings.StopBits==STOP_2) { QESP_WARNING("QextSerialPort: 5 Data bits cannot be used with 2 stop bits."); } else { Settings.DataBits=dataBits; settingsDirtyFlags |= DFE_DataBits; } break; case DATA_6: #ifdef Q_OS_WIN if (Settings.StopBits==STOP_1_5) { QESP_WARNING("QextSerialPort: 6 Data bits cannot be used with 1.5 stop bits."); } else #endif { Settings.DataBits=dataBits; settingsDirtyFlags |= DFE_DataBits; } break; case DATA_7: #ifdef Q_OS_WIN if (Settings.StopBits==STOP_1_5) { QESP_WARNING("QextSerialPort: 7 Data bits cannot be used with 1.5 stop bits."); } else #endif { Settings.DataBits=dataBits; settingsDirtyFlags |= DFE_DataBits; } break; case DATA_8: #ifdef Q_OS_WIN if (Settings.StopBits==STOP_1_5) { QESP_WARNING("QextSerialPort: 8 Data bits cannot be used with 1.5 stop bits."); } else #endif { Settings.DataBits=dataBits; settingsDirtyFlags |= DFE_DataBits; } break; default: QESP_WARNING()<<"QextSerialPort does not support Data bits:"<<dataBits; } if (update && q_func()->isOpen()) updatePortSettings(); }
KeytrackSerial::KeytrackSerial(QWidget *parent) : QWidget(parent), ui(new Ui::KeytrackSerial) { ui->setupUi(this); _serial_port = new QSerialPort(this); refreshPortList(); //Populate baudRate combo box with baud rate options ui->baudRate->addItem(QString::number(QSerialPort::Baud1200)); ui->baudRate->addItem(QString::number(QSerialPort::Baud2400)); ui->baudRate->addItem(QString::number(QSerialPort::Baud4800)); ui->baudRate->addItem(QString::number(QSerialPort::Baud9600)); ui->baudRate->addItem(QString::number(QSerialPort::Baud19200)); ui->baudRate->addItem(QString::number(QSerialPort::Baud38400)); ui->baudRate->addItem(QString::number(QSerialPort::Baud57600)); ui->baudRate->addItem(QString::number(QSerialPort::Baud115200)); //Preset baud rate selection to 9600 ui->baudRate->setCurrentText(QString::number(QSerialPort::Baud9600)); //Populate parity combo box with parity options ui->parity->addItem("No Parity"); ui->parity->addItem("Even Parity"); ui->parity->addItem("Odd Parity"); ui->parity->addItem("Space Parity"); ui->parity->addItem("Mark Parity"); updatePortSettings(); connect(ui->connectButton,SIGNAL(clicked()),SLOT(connectPort())); connect(ui->disconnectButton, SIGNAL(clicked()),SLOT(disconnectPort())); connect(ui->baudRate,SIGNAL(currentTextChanged(QString)),SLOT(updatePortSettings())); connect(ui->parity,SIGNAL(currentTextChanged(QString)), SLOT(updatePortSettings())); connect(ui->dataBits,SIGNAL(currentTextChanged(QString)),SLOT(updatePortSettings())); connect(ui->stopBits,SIGNAL(currentTextChanged(QString)),SLOT(updatePortSettings())); connect(_serial_port, SIGNAL(readyRead()),SLOT(handleReadyRead())); connect(ui->sendButton,SIGNAL(clicked()),SLOT(sendTextFromBox())); connect(ui->sendBox,SIGNAL(returnPressed()),SLOT(sendTextFromBox())); connect(this,SIGNAL(destroyed()),SLOT(disconnectPort())); }
void QextSerialPortPrivate::setPortSettings(const PortSettings &settings, bool update) { setBaudRate(settings.BaudRate, false); setDataBits(settings.DataBits, false); setStopBits(settings.StopBits, false); setParity(settings.Parity, false); setFlowControl(settings.FlowControl, false); setTimeout(settings.Timeout_Millisec, false); settingsDirtyFlags = DFE_ALL; if (update && q_func()->isOpen()) updatePortSettings(); }
bool QextSerialPortPrivate::open_sys(QIODevice::OpenMode mode) { Q_Q(QextSerialPort); DWORD confSize = sizeof(COMMCONFIG); commConfig.dwSize = confSize; DWORD dwFlagsAndAttributes = 0; if (queryMode == QextSerialPort::EventDriven) dwFlagsAndAttributes += FILE_FLAG_OVERLAPPED; /*open the port*/ handle = CreateFileW((wchar_t *)fullPortNameWin(port).utf16(), GENERIC_READ|GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, dwFlagsAndAttributes, nullptr); if (handle != INVALID_HANDLE_VALUE) { q->setOpenMode(mode); /*configure port settings*/ GetCommConfig(handle, &commConfig, &confSize); GetCommState(handle, &(commConfig.dcb)); /*set up parameters*/ commConfig.dcb.fBinary = TRUE; commConfig.dcb.fInX = FALSE; commConfig.dcb.fOutX = FALSE; commConfig.dcb.fAbortOnError = FALSE; commConfig.dcb.fNull = FALSE; /* Dtr default to true. See Issue 122*/ commConfig.dcb.fDtrControl = TRUE; /*flush all settings*/ settingsDirtyFlags = DFE_ALL; updatePortSettings(); //init event driven approach if (queryMode == QextSerialPort::EventDriven) { if (!SetCommMask(handle, EV_TXEMPTY | EV_RXCHAR | EV_DSR)) { QESP_WARNING()<<"failed to set Comm Mask. Error code:"<<GetLastError(); return false; } winEventNotifier = new QWinEventNotifier(overlap.hEvent, q); qRegisterMetaType<HANDLE>("HANDLE"); q->connect(winEventNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_onWinEvent(HANDLE)), Qt::DirectConnection); WaitCommEvent(handle, &eventMask, &overlap); } return true; } return false; }
void QextSerialPortPrivate::setStopBits(StopBitsType stopBits, bool update) { switch (stopBits) { /*one stop bit*/ case STOP_1: Settings.StopBits = stopBits; settingsDirtyFlags |= DFE_StopBits; break; #ifdef Q_OS_WIN /*1.5 stop bits*/ case STOP_1_5: QESP_PORTABILITY_WARNING("QextSerialPort Portability Warning: 1.5 stop bit operation is not supported by POSIX."); if (Settings.DataBits!=DATA_5) { QESP_WARNING("QextSerialPort: 1.5 stop bits can only be used with 5 data bits"); } else { Settings.StopBits = stopBits; settingsDirtyFlags |= DFE_StopBits; } break; #endif /*two stop bits*/ case STOP_2: if (Settings.DataBits==DATA_5) { QESP_WARNING("QextSerialPort: 2 stop bits cannot be used with 5 data bits"); } else { Settings.StopBits = stopBits; settingsDirtyFlags |= DFE_StopBits; } break; default: QESP_WARNING()<<"QextSerialPort does not support stop bits: "<<stopBits; } if (update && q_func()->isOpen()) updatePortSettings(); }
void QextSerialPortPrivate::setBaudRate(BaudRateType baudRate, bool update) { switch (baudRate) { #ifdef Q_OS_WIN //Windows Special case BAUD14400: case BAUD56000: case BAUD128000: case BAUD256000: QESP_PORTABILITY_WARNING()<<"QextSerialPort Portability Warning: POSIX does not support baudRate:"<<baudRate; #elif defined(Q_OS_UNIX) //Unix Special case BAUD50: case BAUD75: case BAUD134: case BAUD150: case BAUD200: case BAUD1800: # ifdef B76800 case BAUD76800: # endif # if defined(B230400) && defined(B4000000) case BAUD230400: case BAUD250000: case BAUD460800: case BAUD500000: case BAUD576000: case BAUD921600: case BAUD1000000: case BAUD1152000: case BAUD1500000: case BAUD2000000: case BAUD2500000: case BAUD3000000: case BAUD3500000: case BAUD4000000: # endif QESP_PORTABILITY_WARNING()<<"QextSerialPort Portability Warning: Windows does not support baudRate:"<<baudRate; #endif case BAUD110: case BAUD300: case BAUD600: case BAUD1200: case BAUD2400: case BAUD4800: case BAUD9600: case BAUD19200: case BAUD38400: case BAUD57600: case BAUD115200: #ifdef Q_OS_WIN default: #endif Settings.BaudRate=baudRate; settingsDirtyFlags |= DFE_BaudRate; if (update && q_func()->isOpen()) updatePortSettings(); break; #ifndef Q_OS_WIN default: QESP_WARNING()<<"QextSerialPort does not support baudRate:"<<baudRate; #endif } }