Subversion Repositories Code-Repo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
344 Kevin 1
#include "SerialController.h"
2
 
351 Kevin 3
SerialController::SerialController(QWidget *parent) : QWidget(parent)
344 Kevin 4
{
351 Kevin 5
    // Serial connection UI
6
    btnSerialConnect = new QPushButton("&Connect");
7
    btnSerialRefresh = new QPushButton("&Refresh");
8
    labelSerialPort = new QLabel("Serial Port:");
9
    labelSerialSpeed = new QLabel("Baud Rate:");
10
    labelSerialDataBits = new QLabel("Data:");
11
    labelSerialStopBits = new QLabel("Stop:");
12
    labelSerialParity = new QLabel("Parity Bit:");
13
    labelSerialFlowControl = new QLabel("Flow Control:");
14
    cboxSerialPort = new QComboBox();
15
    cboxSerialPort->setMinimumWidth(80);
16
    cboxSerialSpeed = new QComboBox();
17
    cboxSerialSpeed->setEditable(true);
18
    cboxSerialSpeed->setValidator(new QIntValidator(0, 100000000, this));
19
    cboxSerialDataBits = new QComboBox();
20
    cboxSerialDataBits->setMaximumWidth(60);
21
    cboxSerialStopBits = new QComboBox();
22
    cboxSerialStopBits->setMaximumWidth(60);
23
    cboxSerialParity = new QComboBox();
24
    cboxSerialFlowControl = new QComboBox();
25
    cboxSerialFlowControl->setMinimumWidth(70);
26
 
27
    QGridLayout *serialSettingsLayout = new QGridLayout();
28
    serialSettingsLayout->addWidget(btnSerialConnect, 0, 0);
29
    serialSettingsLayout->addWidget(labelSerialPort, 0, 1);
30
    serialSettingsLayout->addWidget(cboxSerialPort, 0, 2);
31
    serialSettingsLayout->addWidget(labelSerialDataBits, 0, 3);
32
    serialSettingsLayout->addWidget(cboxSerialDataBits, 0, 4);
33
    serialSettingsLayout->addWidget(labelSerialParity, 0, 5);
34
    serialSettingsLayout->addWidget(cboxSerialParity, 0, 6);
35
 
36
    serialSettingsLayout->addWidget(btnSerialRefresh, 1, 0);
37
    serialSettingsLayout->addWidget(labelSerialSpeed, 1, 1);
38
    serialSettingsLayout->addWidget(cboxSerialSpeed, 1, 2);
39
    serialSettingsLayout->addWidget(labelSerialStopBits, 1, 3);
40
    serialSettingsLayout->addWidget(cboxSerialStopBits, 1, 4);
41
    serialSettingsLayout->addWidget(labelSerialFlowControl, 1, 5);
42
    serialSettingsLayout->addWidget(cboxSerialFlowControl, 1, 6);
43
 
44
    setLayout(serialSettingsLayout);
45
 
46
    serialHelper = new SerialHelper();
47
    serialThread = new QThread();
48
    serialHelper->moveToThread(serialThread);
49
 
50
    connect(serialHelper, SIGNAL(UpdateStatus(QString)), this, SIGNAL(UpdateStatus(QString)));
51
 
52
    connect(this, SIGNAL(Serial_QueryParameters()), serialHelper, SLOT(Serial_QueryParameters()));
53
    connect(serialHelper, SIGNAL(Serial_UpdateParameters(QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)),
54
            this, SLOT(Serial_UpdateParameters(QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)));
55
 
56
    connect(this, SIGNAL(Serial_Connect(QString,QString,QString,QString,QString,QString)),
57
            serialHelper, SLOT(Serial_Connect(QString,QString,QString,QString,QString,QString)));
58
    connect(serialHelper, SIGNAL(Serial_Connected()), this, SIGNAL(Serial_Connected()));
59
    connect(serialHelper, SIGNAL(Serial_Connected()), this, SLOT(Serial_LocalConnected()));
60
 
61
    connect(this, SIGNAL(Serial_Disconnect()), serialHelper, SLOT(Serial_Disconnect()));
62
    connect(serialHelper, SIGNAL(Serial_Disconnected()), this, SIGNAL(Serial_Disconnected()));
63
    connect(serialHelper, SIGNAL(Serial_Disconnected()), this, SLOT(Serial_LocalDisconnected()));
64
 
65
    connect(this, SIGNAL(Serial_TransmitString(QString)), serialHelper, SLOT(Serial_TransmitString(QString)));
66
    connect(this, SIGNAL(Serial_TransmitByteArray(QByteArray)), serialHelper, SLOT(Serial_TransmitByteArray(QByteArray)));
67
 
68
    connect(serialHelper, SIGNAL(Serial_ReceivedByte(char)), this, SIGNAL(Serial_ReceivedByte(char)));
69
 
70
    connect(serialThread, SIGNAL(finished()), serialHelper, SLOT(deleteLater()));
71
    serialThread->start();
72
 
73
    connect(btnSerialConnect, SIGNAL(clicked()), this, SLOT(Serial_ConnectToggleBtn()));
74
    connect(btnSerialRefresh, SIGNAL(clicked()), this, SIGNAL(Serial_QueryParameters()));
75
 
76
    emit Serial_QueryParameters();
77
    Serial_LocalDisconnected();
344 Kevin 78
}
79
 
80
SerialController::~SerialController()
81
{
351 Kevin 82
    serialThread->quit();
344 Kevin 83
}
84
 
351 Kevin 85
void SerialController::Serial_UpdateParameters(QStringList ports, QStringList speeds, QStringList dataBits,
86
                                               QStringList stopBits, QStringList parity, QStringList flowControl)
344 Kevin 87
{
351 Kevin 88
    QString currPort = cboxSerialPort->currentText();
89
    cboxSerialPort->clear();
90
    cboxSerialPort->addItems(ports);
91
    if (currPort != "" && ports.contains(currPort))
92
        cboxSerialPort->setCurrentText(currPort);
344 Kevin 93
 
351 Kevin 94
    QString currSpeed = cboxSerialSpeed->currentText();
95
    cboxSerialSpeed->clear();
96
    cboxSerialSpeed->addItems(speeds);
97
    if (currSpeed != "") cboxSerialSpeed->setCurrentText(currSpeed);
344 Kevin 98
 
351 Kevin 99
    int currData = cboxSerialDataBits->currentIndex();
100
    cboxSerialDataBits->clear();
101
    cboxSerialDataBits->addItems(dataBits);
102
    if (currData >= 0) cboxSerialDataBits->setCurrentIndex(currData);
346 Kevin 103
 
351 Kevin 104
    int currStop = cboxSerialStopBits->currentIndex();
105
    cboxSerialStopBits->clear();
106
    cboxSerialStopBits->addItems(stopBits);
107
    if (currStop >= 0) cboxSerialStopBits->setCurrentIndex(currStop);
344 Kevin 108
 
351 Kevin 109
    int currParity = cboxSerialParity->currentIndex();
110
    cboxSerialParity->clear();
111
    cboxSerialParity->addItems(parity);
112
    if (currParity >= 0) cboxSerialParity->setCurrentIndex(currParity);
348 Kevin 113
 
351 Kevin 114
    int currFlow = cboxSerialFlowControl->currentIndex();
115
    cboxSerialFlowControl->clear();
116
    cboxSerialFlowControl->addItems(flowControl);
117
    if (currFlow >= 0) cboxSerialFlowControl->setCurrentIndex(currFlow);
344 Kevin 118
}
119
 
351 Kevin 120
void SerialController::Serial_LocalConnected()
344 Kevin 121
{
351 Kevin 122
    btnSerialConnect->setText("&Disconnect");
123
//    cboxSerialPort->setEnabled(false);
124
//    cboxSerialSpeed->setEnabled(false);
125
//    cboxSerialDataBits->setEnabled(false);
126
//    cboxSerialStopBits->setEnabled(false);
127
//    cboxSerialParity->setEnabled(false);
128
//    cboxSerialFlowControl->setEnabled(false);
129
//    btnSerialRefresh->setEnabled(false);
130
    btnSerialRefresh->hide();
131
    labelSerialPort->hide();
132
    labelSerialSpeed->hide();
133
    labelSerialDataBits->hide();
134
    labelSerialStopBits->hide();
135
    labelSerialParity->hide();
136
    labelSerialFlowControl->hide();
137
    cboxSerialPort->hide();
138
    cboxSerialSpeed->hide();
139
    cboxSerialDataBits->hide();
140
    cboxSerialStopBits->hide();
141
    cboxSerialParity->hide();
142
    cboxSerialFlowControl->hide();
344 Kevin 143
}
144
 
351 Kevin 145
void SerialController::Serial_LocalDisconnected()
344 Kevin 146
{
351 Kevin 147
    btnSerialConnect->setText("&Connect");
148
//    cboxSerialPort->setEnabled(true);
149
//    cboxSerialSpeed->setEnabled(true);
150
//    cboxSerialDataBits->setEnabled(true);
151
//    cboxSerialStopBits->setEnabled(true);
152
//    cboxSerialParity->setEnabled(true);
153
//    cboxSerialFlowControl->setEnabled(true);
154
//    btnSerialRefresh->setEnabled(true);
155
    btnSerialRefresh->show();
156
    labelSerialPort->show();
157
    labelSerialSpeed->show();
158
    labelSerialDataBits->show();
159
    labelSerialStopBits->show();
160
    labelSerialParity->show();
161
    labelSerialFlowControl->show();
162
    cboxSerialPort->show();
163
    cboxSerialSpeed->show();
164
    cboxSerialDataBits->show();
165
    cboxSerialStopBits->show();
166
    cboxSerialParity->show();
167
    cboxSerialFlowControl->show();
344 Kevin 168
}
169
 
351 Kevin 170
void SerialController::Serial_ConnectToggleBtn()
344 Kevin 171
{
351 Kevin 172
    if (serialHelper->connected) {
173
        emit Serial_Disconnect();
174
    } else {
175
        if (cboxSerialPort->currentText() != "" && cboxSerialSpeed->currentText() != "") {
176
            emit Serial_Connect(cboxSerialPort->currentText(), cboxSerialSpeed->currentText(), cboxSerialDataBits->currentText(),
177
                                cboxSerialStopBits->currentText(), cboxSerialParity->currentText(), cboxSerialFlowControl->currentText());
344 Kevin 178
        }
179
    }
180
}
351 Kevin 181
 
182
//void SerialController::Serial_ProcessIncomingData()
183
//{
184
//    char tmpBuffer[SERIAL_BUFFER_SIZE];
185
//    int len = serialPort->read(tmpBuffer, sizeof(tmpBuffer));
186
//    while (len > 0) {
187
//        for (int i = 0; i < len; i++) {
188
//            // Save received data into local buffer
189
//            bufferIn[bufferInIndex] = tmpBuffer[i];
190
 
191
//            // If newline char is received, end current string
192
//            if (tmpBuffer[i] == '\n') {
193
//                if (bufferInOverflow)
194
//                    currString.append(QString::fromLocal8Bit(bufferIn, bufferInIndex));
195
//                else
196
//                    currString = QString::fromLocal8Bit(bufferIn, bufferInIndex);
197
//                bufferInOverflow = false;
198
//                bufferInIndex = 0;
199
//                emit Serial_ReceivedString(currString);
200
//            } else {
201
//                bufferInIndex++;
202
//            }
203
 
204
//            // If received string is larger than our serial buffer, append to previous data
205
//            if (bufferInIndex == SERIAL_BUFFER_SIZE-1) {
206
//                bufferIn[SERIAL_BUFFER_SIZE-1] = 0x0;
207
//                if (bufferInOverflow)
208
//                    currString.append(QString::fromLocal8Bit(bufferIn, bufferInIndex));
209
//                else
210
//                    currString = QString::fromLocal8Bit(bufferIn, bufferInIndex);
211
//                bufferInOverflow = true;
212
//                bufferInIndex = 0;
213
//            }
214
//        }
215
//        // Check if there is more data to be read from the serial port
216
//        len = serialPort->read(tmpBuffer, sizeof(tmpBuffer));
217
//    }
218
//}