00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "FEDetectReaderDlg.h"
00025 #include "InterfaceConfig.h"
00026
00027 #include "../../../../feusb-lib/include/feusb.h"
00028
00029 #include <stdio.h>
00030
00031
00032
00033
00034
00035
00036 FEDetectReaderDlg::FEDetectReaderDlg(QWidget *parent)
00037 : QDialog(parent)
00038 {
00039 ui.setupUi(this);
00040
00041
00042 config.readConfigFromFile();
00043
00044 connect(ui.detectPushButton, SIGNAL(clicked()), this, SLOT(onDetectButton()));
00045 connect(ui.morePushButton, SIGNAL(clicked()), this, SLOT(onMoreButton()));
00046 connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(onOkButton()));
00047
00048
00049 QStringList comPorts;
00050 int count = 0;
00051 int iPorts[256];
00052 count = config.getComPorts(iPorts);
00053 comPorts += "-";
00054 for (int i = 0; i < count; i++) {
00055 char cPortNr[30] = {0};
00056 sprintf(cPortNr, "%i", iPorts[i]);
00057 comPorts += cPortNr;
00058 }
00059
00060 m_bReaderDetected = false;
00061 m_reader = NULL;
00062
00063 ui.comPortComboBox->addItems(comPorts);
00064
00065
00066 if (config.getCommMode() == COM_DEVICE)
00067 ui.comPortRadio->setChecked(true);
00068 else if (config.getCommMode() == TCP_DEVICE)
00069 ui.tcpRadio->setChecked(true);
00070 else if (config.getCommMode() == USB_DEVICE)
00071 ui.usbRadio->setChecked(true);
00072
00073 char sHost[32] = {0};
00074 strcpy(sHost, config.getHost());
00075 ui.ipAddressLineEdit->setText(sHost);
00076
00077 int iIpPort = config.getIPPort();
00078 char sIpPort[16] = {0};
00079 sprintf(sIpPort, "%d", iIpPort);
00080 ui.ipPortLineEdit->setText(sIpPort);
00081
00082 char sComPort[8] = {0};
00083 sprintf(sComPort, "%d", config.getComPortNumber());
00084 for (int i=0; i<ui.comPortComboBox->count(); i++)
00085 {
00086 if (ui.comPortComboBox->itemText(i) == sComPort)
00087 {
00088 ui.comPortComboBox->setCurrentIndex(i);
00089 break;
00090 }
00091 }
00092 }
00093
00094
00095
00096
00097
00098 FEDetectReaderDlg::~FEDetectReaderDlg()
00099 {
00100
00101 }
00102
00103
00104
00105
00106
00107
00108 void FEDetectReaderDlg::setReader(FEDM_ISCReaderModule *reader)
00109 {
00110 this->m_reader = reader;
00111 }
00112
00113
00114
00115
00116
00117 FEDM_ISCReader *FEDetectReaderDlg::getReader()
00118 {
00119 return m_reader;
00120 }
00121
00122
00123
00124
00125
00126 void FEDetectReaderDlg::onDetectButton()
00127 {
00128 int tmpCharTimeoutMpy = 8;
00129 int status;
00130 int baud;
00131 int error = 0;
00132 int iBack;
00133 char sErrorText[256];
00134 QString sMsg;
00135 char* sPort;
00136
00137 m_bReaderDetected = false;
00138
00139 ui.readerListWidget->clear();
00140
00141 if (m_reader == NULL)
00142 {
00143 QMessageBox::critical(this, tr("Error"), "No reader set", QMessageBox::Abort);
00144 return;
00145 }
00146
00147
00148 if(m_reader->GetPortHnd() > 0)
00149 {
00150 m_reader->DisConnect();
00151 }
00152
00153
00154
00155 m_reader->SetProtocolFrameSupport(FEDM_PRT_FRAME_STANDARD);
00156
00157
00158 if (ui.comPortRadio->isChecked())
00159 {
00160 config.setCommMode(COM_DEVICE);
00161
00162 tmpCharTimeoutMpy = config.getCharTimeoutMpy();
00163 config.setCharTimeoutMpy(8);
00164
00165 if (ui.comPortComboBox->currentText() == "-")
00166 return;
00167
00168 sPort = qstrdup(ui.comPortComboBox->currentText().toLatin1());
00169 int iComPort;
00170 sscanf(sPort, "%d", &iComPort);
00171
00172 iBack = m_reader->ConnectCOMM(iComPort);
00173
00174 delete [] sPort;
00175
00176 if (iBack == FEDM_OK)
00177 {
00178 char val[256] = {0};
00179
00180 config.setComPortConfiguration(m_reader->GetPortHnd());
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 m_reader->FindBaudRate();
00192 status = m_reader->GetPortPara("Baud", val);
00193 if (status == 0)
00194 {
00195 baud = atoi(val);
00196 config.setBaud(baud);
00197 }
00198
00199 status = m_reader->GetPortPara("Frame", val);
00200 if (status == 0)
00201 {
00202 char frm[8] = {0};
00203 strcpy(frm, val);
00204 config.setFrame(frm);
00205 }
00206
00207
00208 }
00209 else
00210 {
00211 return;
00212 }
00213
00214 }
00215 else if (ui.usbRadio->isChecked())
00216 {
00217 config.setCommMode(USB_DEVICE);
00218 FEUSB_Scan(FEUSB_SCAN_ALL, NULL);
00219 if (FEUSB_GetScanListSize() > 1)
00220 {
00221 QMessageBox::critical(this, tr("Error"),
00222 "More than one USB-Reader detected.\nPlease connect only 1 USB-Reader!",
00223 QMessageBox::Abort);
00224 return;
00225 }
00226
00227 if (FEUSB_GetScanListSize() == 1)
00228 {
00229 iBack = m_reader->ConnectUSB(0);
00230 if (iBack != FEDM_OK)
00231 {
00232 m_reader->GetErrorText(sErrorText, iBack);
00233 QMessageBox::critical(this, tr("Error"), sErrorText,
00234 QMessageBox::Abort);
00235 return;
00236 }
00237 }
00238 else
00239 {
00240 return;
00241 }
00242
00243 }
00244 else if (ui.tcpRadio->isChecked())
00245 {
00246 char* sHost;
00247 char* sIpPort;
00248
00249 config.setCommMode(TCP_DEVICE);
00250
00251 sHost = qstrdup(ui.ipAddressLineEdit->text().toLatin1());
00252 sIpPort = qstrdup(ui.ipPortLineEdit->text().toLatin1());
00253 int iIpPort = atoi(sIpPort);
00254
00255 int iBack = m_reader->ConnectTCP(sHost, iIpPort);
00256
00257 delete [] sHost;
00258 delete [] sIpPort;
00259
00260 if(iBack != FEDM_OK)
00261 {
00262 m_reader->GetErrorText(sErrorText, iBack);
00263
00264 sMsg.sprintf("%d: %s", iBack, sErrorText);
00265 QMessageBox::critical(this, tr("QMessageBox::critical()"), sMsg, QMessageBox::Abort);
00266 }
00267 }
00268
00269
00270 if (m_reader->GetPortHnd() > 0)
00271 {
00272 error = m_reader->SendProtocol(0x65);
00273 if (error == FEDM_OK)
00274 {
00275 QString sReaderName = m_reader->GetReaderName();
00276 ui.readerListWidget->addItem(sReaderName);
00277 switch(m_reader->GetReaderType())
00278 {
00279 case FEDM_ISC_TYPE_ISCLRU1000:
00280 case FEDM_ISC_TYPE_ISCLRU2000:
00281 m_reader->SetProtocolFrameSupport(FEDM_PRT_FRAME_ADVANCED);
00282 break;
00283 default:
00284 m_reader->SetProtocolFrameSupport(FEDM_PRT_FRAME_STANDARD);
00285 break;
00286 }
00287 m_bReaderDetected = true;
00288 }
00289 else
00290 {
00291 m_reader->GetErrorText(sErrorText, error);
00292 QMessageBox::critical(this, tr("Error"), sErrorText, QMessageBox::Abort);
00293 }
00294 }
00295
00296
00297
00298 if (config.getCommMode() == COM_DEVICE && m_reader->GetPortHnd() > 0)
00299 {
00300 config.setCharTimeoutMpy(tmpCharTimeoutMpy);
00301 config.setComPortConfiguration(m_reader->GetPortHnd());
00302 }
00303 }
00304
00305
00306
00307
00308
00309 bool FEDetectReaderDlg::isReaderDetected()
00310 {
00311 return m_bReaderDetected;
00312 }
00313
00314
00315
00316
00317
00318 void FEDetectReaderDlg::onMoreButton()
00319 {
00320
00321 char cTimeout[16] = {0};
00322 sprintf(cTimeout, "%d", config.getTimeout());
00323 char cDelayTime[16] = {0};
00324 sprintf(cDelayTime, "%d", config.getTxDelayTime());
00325 char cCharTimeout[16] = {0};
00326 sprintf(cCharTimeout, "%d", config.getCharTimeoutMpy());
00327 serialPortSettingsDlg.ui.timeoutLineEdit->setText(cTimeout);
00328 serialPortSettingsDlg.ui.delayTimeLineEdit->setText(cDelayTime);
00329 serialPortSettingsDlg.ui.charTimeoutLineEdit->setText(cCharTimeout);
00330 serialPortSettingsDlg.ui.txTimeCheckBox->setChecked(config.getTxTimeControl());
00331 serialPortSettingsDlg.ui.rtsCheckBox->setChecked(config.getRTS());
00332 serialPortSettingsDlg.ui.dtrCheckBox->setChecked(config.getDTR());
00333
00334 char cBaud[16] = {0};
00335 bool found = false;
00336 sprintf(cBaud, "%d", config.getBaud());
00337 for (int i=0; i<serialPortSettingsDlg.ui.baudRateComboBox->count(); i++)
00338 {
00339 if (ui.comPortComboBox->itemText(i) == cBaud)
00340 {
00341 serialPortSettingsDlg.ui.baudRateComboBox->setCurrentIndex(i);
00342 found = true;
00343 break;
00344 }
00345 }
00346 if (!found)
00347 {
00348 serialPortSettingsDlg.ui.baudRateComboBox->setCurrentIndex(0);
00349 serialPortSettingsDlg.ui.baudRateComboBox->setItemText(0, cBaud);
00350 }
00351
00352
00353 if (serialPortSettingsDlg.exec() != QDialog::Accepted)
00354 return;
00355
00356 char* sTimeout = qstrdup(serialPortSettingsDlg.ui.timeoutLineEdit->text().toLatin1());
00357 char* sTxDelayTime = qstrdup(serialPortSettingsDlg.ui.delayTimeLineEdit->text().toLatin1());
00358 char* sCharTimeout = qstrdup(serialPortSettingsDlg.ui.charTimeoutLineEdit->text().toLatin1());
00359 int iIndex = serialPortSettingsDlg.ui.baudRateComboBox->currentIndex();
00360 char* sBaud = qstrdup(serialPortSettingsDlg.ui.baudRateComboBox->itemText(iIndex).toLatin1());
00361 bool bTxTimeCtl = serialPortSettingsDlg.ui.txTimeCheckBox->isChecked();
00362 bool bRts = serialPortSettingsDlg.ui.rtsCheckBox->isChecked();
00363 bool bDtr = serialPortSettingsDlg.ui.dtrCheckBox->isChecked();
00364
00365 config.setTimeout(atoi(sTimeout));
00366 config.setTxDelayTime(atoi(sTxDelayTime));
00367 config.setCharTimeoutMpy(atoi(sCharTimeout));
00368 config.setBaud(atoi(sBaud));
00369 config.setTxTimeControl(bTxTimeCtl);
00370 config.setRTS(bRts);
00371 config.setDTR(bDtr);
00372
00373 if (m_reader->GetPortHnd() > 0)
00374 config.setComPortConfiguration(m_reader->GetPortHnd());
00375
00376 delete [] sTimeout;
00377 delete [] sTxDelayTime;
00378 delete [] sCharTimeout;
00379 delete [] sBaud;
00380 }
00381
00382
00383
00384
00385
00386 void FEDetectReaderDlg::onOkButton()
00387 {
00388 if (ui.comPortRadio->isChecked())
00389 config.setCommMode(COM_DEVICE);
00390 else if (ui.usbRadio->isChecked())
00391 config.setCommMode(USB_DEVICE);
00392 else if (ui.tcpRadio->isChecked())
00393 config.setCommMode(TCP_DEVICE);
00394
00395 char* tmp = qstrdup(ui.ipAddressLineEdit->text().toLatin1());
00396 config.setHost(tmp);
00397 delete [] tmp;
00398
00399 tmp = qstrdup(ui.ipPortLineEdit->text().toLatin1());
00400 int ipPort = atoi(tmp);
00401 config.setIPPort(ipPort);
00402 delete [] tmp;
00403
00404 QString qsComPort = ui.comPortComboBox->currentText();
00405 if (qsComPort != "-")
00406 {
00407 tmp = qstrdup(qsComPort.toLatin1());
00408 int iComPort = atoi(tmp);
00409 config.setComPortNumber(iComPort);
00410 delete [] tmp;
00411 }
00412
00413 config.writeConfigToFile();
00414 }