QSerialConsoleWindow::QSerialConsoleWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::QSerialConsoleWindow)
{
    ui->setupUi(this);
    _portSettingsDialog = new QDialog(this);
    _dialogButtonBox = new QDialogButtonBox(_portSettingsDialog);
    _mainLayout = new QVBoxLayout(_portSettingsDialog);
    _serialPort = new QSerialDevice();
    addToolBar(_serialPort->toolbar());
    _dialogButtonBox->addButton(QDialogButtonBox::Ok);
    _portSettingsDialog->setWindowTitle("Port Settings");
    _mainLayout->addWidget(_serialPort->widget());
    _mainLayout->addWidget(_dialogButtonBox);
    _protocol = new Protocol();

    _consoleWidget = new QConsoleWidget(ui->consoleFrame);
    _consoleWidget->showBanner("Welcome to QSerialConsole v 1.0\n");
    portClosed();

    connect(_serialPort, SIGNAL(portOpened()), this, SLOT(portOpened()));
    connect(_serialPort, SIGNAL(portClosed()), this, SLOT(portClosed()));
    connect(_serialPort, SIGNAL(msgAvailable(QByteArray)), _protocol, SLOT(decode(QByteArray)));
    connect(_protocol, SIGNAL(dataDecoded(QByteArray)), _consoleWidget, SLOT(showIncomingMessage(QByteArray)));
    connect(_consoleWidget, SIGNAL(newOutgoingMessage(QByteArray)), _protocol, SLOT(encode(QByteArray)));
    connect(_protocol, SIGNAL(dataEncoded(QByteArray)), _serialPort, SLOT(write(QByteArray)));
    connect(_dialogButtonBox, SIGNAL(accepted()), _portSettingsDialog, SLOT(close()));
}
bool MdQextSerialCom::setupPort (QString sport, QString speed) {
    if ( port )
        delete port;
    port = new QextSerialPort(sport, QextSerialPort::EventDriven);
    if ( speed == "115200")
        port->setBaudRate(BAUD115200);
    else
        port->setBaudRate(BAUD57600);
    port->setFlowControl(FLOW_OFF);
    port->setParity(PAR_NONE);
    port->setDataBits(DATA_8);
    port->setStopBits(STOP_1);
    //set timeouts to 500 ms
    port->setTimeout(500);

    if (port->open(QIODevice::ReadWrite) == true) {
        connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
//        connect(port, SIGNAL(dsrChanged(bool)), this, SLOT(onDsrChanged(bool)));
        qDebug() << "listening for data on" << port->portName();
        emit portOpened();
    } else {
        qDebug() << "device failed to open:" << port->errorString();
        return false;
    }
    return true;
}
void MdQextSerialCom::openPort()
{
    port->open(QIODevice::ReadWrite);
    qDebug("is open: %d", port->isOpen());
    if ( port->isOpen() ) {
        emit showStatusMessage( "Serial Port opened" );
        emit portOpened();
    } else {
        emit showStatusMessage( "Could not open Serial Port" );
    }
}
void SerialPort::on_openButton_clicked()
{
	// Make sure things are clear
	serial->close();
	emit(portClosed());
	
	// read in all the settings and open the port
	serial->setPortName(choosePort->currentText());
	switch(chooseBaudRate->currentIndex())
	{
		case 0:
			serial->setBaudRate(BAUD9600);
			break;
		case 1:
			serial->setBaudRate(BAUD19200);
			break;
		case 2:
			serial->setBaudRate(BAUD38400);
			break;
		case 3:
			serial->setBaudRate(BAUD57600);
			break;
		case 4:
			serial->setBaudRate(BAUD115200);
	}
	serial->setDataBits( (DataBitsType)(chooseDataBits->currentIndex()) );
	serial->setParity( (ParityType)(chooseParity->currentIndex()) );
	serial->setStopBits( (StopBitsType)(chooseStopBits->currentIndex()) );
	serial->setFlowControl( (FlowType)(chooseFlowControl->currentIndex()) );
	serial->setTimeout(0,100);
	
	if(serial->open())
	{
		timer->start();
		emit(portOpened());
	}
}