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