- Timestamp:
- Dec 19, 2008, 12:41:07 PM (16 years ago)
- Location:
- trunk/BNC
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/bncgetthread.cpp
r1299 r1307 173 173 // RTCM message types 174 174 // ------------------ 175 _checkMountPoint = settings.value("m essTypes").toString();175 _checkMountPoint = settings.value("miscMount").toString(); 176 176 177 177 // RINEX writer … … 667 667 // ---------------- 668 668 if ( _checkMountPoint == _staID || _checkMountPoint == "ALL" ) { 669 670 // RTCMv3 message types 671 // -------------------- 672 if (0<_decoder->_typeList.size()) { 673 QString type; 674 for (int ii=0;ii<_decoder->_typeList.size();ii++) { 675 type = QString("%1 ").arg(_decoder->_typeList[ii]); 676 emit(newMessage(_staID + ": Received message type " + type.toAscii(), true)); 677 } 678 } 679 680 // RTCMv3 antenna descriptor 681 // ------------------------- 682 if (0<_decoder->_antType.size()) { 683 QString ant1; 684 for (int ii=0;ii<_decoder->_antType.size();ii++) { 685 ant1 = QString("%1 ").arg(_decoder->_antType[ii]); 686 emit(newMessage(_staID + ": Antenna descriptor " + ant1.toAscii(), true)); 687 } 688 } 689 690 // antenna XYZ 691 // ------------------ 692 if (0<_decoder->_antList.size()) { 693 for (int ii=0;ii<_decoder->_antList.size();++ii) { 694 QByteArray ant1,ant2,ant3, antT; 695 ant1 = QString("%1 ").arg(_decoder->_antList[ii].xx,0,'f',4).toAscii(); 696 ant2 = QString("%1 ").arg(_decoder->_antList[ii].yy,0,'f',4).toAscii(); 697 ant3 = QString("%1 ").arg(_decoder->_antList[ii].zz,0,'f',4).toAscii(); 669 QSettings settings; 670 if ( Qt::CheckState(settings.value("scanRTCM").toInt()) == Qt::Checked) { 671 672 // RTCMv3 message types 673 // -------------------- 674 if (0<_decoder->_typeList.size()) { 675 QString type; 676 for (int ii=0;ii<_decoder->_typeList.size();ii++) { 677 type = QString("%1 ").arg(_decoder->_typeList[ii]); 678 emit(newMessage(_staID + ": Received message type " + type.toAscii(), true)); 679 } 680 } 681 682 // RTCMv3 antenna descriptor 683 // ------------------------- 684 if (0<_decoder->_antType.size()) { 685 QString ant1; 686 for (int ii=0;ii<_decoder->_antType.size();ii++) { 687 ant1 = QString("%1 ").arg(_decoder->_antType[ii]); 688 emit(newMessage(_staID + ": Antenna descriptor " + ant1.toAscii(), true)); 689 } 690 } 691 692 // Antenna XYZ 693 // ------------------ 694 if (0<_decoder->_antList.size()) { 695 for (int ii=0;ii<_decoder->_antList.size();++ii) { 696 QByteArray ant1,ant2,ant3, antT; 697 ant1 = QString("%1 ").arg(_decoder->_antList[ii].xx,0,'f',4).toAscii(); 698 ant2 = QString("%1 ").arg(_decoder->_antList[ii].yy,0,'f',4).toAscii(); 699 ant3 = QString("%1 ").arg(_decoder->_antList[ii].zz,0,'f',4).toAscii(); 700 switch (_decoder->_antList[ii].type) { 701 case GPSDecoder::t_antInfo::ARP: antT = "ARP"; break; 702 case GPSDecoder::t_antInfo::APC: antT = "APC"; break; 703 } 704 emit(newMessage(_staID + ": " + antT + " (ITRF) X " + ant1 + "m", true)); 705 emit(newMessage(_staID + ": " + antT + " (ITRF) Y " + ant2 + "m", true)); 706 emit(newMessage(_staID + ": " + antT + " (ITRF) Z " + ant3 + "m", true)); 707 if (_decoder->_antList[ii].height_f) { 708 QByteArray ant4 = QString("%1 ").arg(_decoder->_antList[ii].height,0,'f',4).toAscii(); 709 emit(newMessage(_staID + ": Antenna height above marker " + ant4 + "m", true)); 710 } 711 emit(newAntCrd(_staID, 712 _decoder->_antList[ii].xx, _decoder->_antList[ii].yy, _decoder->_antList[ii].zz, 713 antT)); 714 } 715 } 716 } 717 if ( _checkMountPoint == "ANTCRD_ONLY" && _decoder->_antList.size() ) { 718 for (int ii=0;ii<_decoder->_antList.size();++ii) { 719 QByteArray antT; 698 720 switch (_decoder->_antList[ii].type) { 699 721 case GPSDecoder::t_antInfo::ARP: antT = "ARP"; break; 700 722 case GPSDecoder::t_antInfo::APC: antT = "APC"; break; 701 723 } 702 emit(newMessage(_staID + ": " + antT + " (ITRF) X " + ant1 + "m", true));703 emit(newMessage(_staID + ": " + antT + " (ITRF) Y " + ant2 + "m", true));704 emit(newMessage(_staID + ": " + antT + " (ITRF) Z " + ant3 + "m", true));705 if (_decoder->_antList[ii].height_f) {706 QByteArray ant4 = QString("%1 ").arg(_decoder->_antList[ii].height,0,'f',4).toAscii();707 emit(newMessage(_staID + ": Antenna height above marker " + ant4 + "m", true));708 }709 724 emit(newAntCrd(_staID, 710 _decoder->_antList[ii].xx, _decoder->_antList[ii].yy, _decoder->_antList[ii].zz,711 antT));712 }713 }714 }715 if ( _checkMountPoint == "ANTCRD_ONLY" && _decoder->_antList.size() ) {716 for (int ii=0;ii<_decoder->_antList.size();++ii) {717 QByteArray antT;718 switch (_decoder->_antList[ii].type) {719 case GPSDecoder::t_antInfo::ARP: antT = "ARP"; break;720 case GPSDecoder::t_antInfo::APC: antT = "APC"; break;721 }722 emit(newAntCrd(_staID,723 725 _decoder->_antList[ii].xx, _decoder->_antList[ii].yy, _decoder->_antList[ii].zz, 724 726 antT)); 725 } 726 } 727 } 728 } 729 } 727 730 728 731 _decoder->_typeList.clear(); … … 767 770 // ------------------------ 768 771 if (_perfIntr>0) { 769 newSecGPS = static_cast<int>(obs->_o.GPSWeeks); 770 if (newSecGPS != oldSecGPS) { 771 if (newSecGPS % _perfIntr < oldSecGPS % _perfIntr) { 772 if (numLat>0) { 772 if ( _checkMountPoint == _staID || _checkMountPoint == "ALL" ) { 773 newSecGPS = static_cast<int>(obs->_o.GPSWeeks); 774 if (newSecGPS != oldSecGPS) { 775 if (newSecGPS % _perfIntr < oldSecGPS % _perfIntr) { 776 if (numLat>0) { 777 if (meanDiff>0.) { 778 emit( newMessage(QString("%1: Mean latency %2 sec, min %3, max %4, rms %5, %6 epochs, %7 gaps") 779 .arg(_staID.data()) 780 .arg(int(sumLat/numLat*100)/100.) 781 .arg(int(minLat*100)/100.) 782 .arg(int(maxLat*100)/100.) 783 .arg(int((sqrt((sumLatQ - sumLat * sumLat / numLat)/numLat))*100)/100.) 784 .arg(numLat) 785 .arg(numGaps) 786 .toAscii(), true) ); 787 } else { 788 emit( newMessage(QString("%1: Mean latency %2 sec, min %3, max %4, rms %5, %6 epochs") 789 .arg(_staID.data()) 790 .arg(int(sumLat/numLat*100)/100.) 791 .arg(int(minLat*100)/100.) 792 .arg(int(maxLat*100)/100.) 793 .arg(int((sqrt((sumLatQ - sumLat * sumLat / numLat)/numLat))*100)/100.) 794 .arg(numLat) 795 .toAscii(), true) ); 796 } 797 } 798 meanDiff = diffSecGPS/numLat; 799 diffSecGPS = 0; 800 numGaps = 0; 801 sumLat = 0.; 802 sumLatQ = 0.; 803 numLat = 0; 804 minLat = maxDt; 805 maxLat = -maxDt; 806 } 807 if (followSec) { 808 diffSecGPS += newSecGPS - oldSecGPS; 773 809 if (meanDiff>0.) { 774 emit( newMessage(QString("%1: Mean latency %2 sec, min %3, max %4, rms %5, %6 epochs, %7 gaps") 775 .arg(_staID.data()) 776 .arg(int(sumLat/numLat*100)/100.) 777 .arg(int(minLat*100)/100.) 778 .arg(int(maxLat*100)/100.) 779 .arg(int((sqrt((sumLatQ - sumLat * sumLat / numLat)/numLat))*100)/100.) 780 .arg(numLat) 781 .arg(numGaps) 782 .toAscii(), true) ); 783 } else { 784 emit( newMessage(QString("%1: Mean latency %2 sec, min %3, max %4, rms %5, %6 epochs") 785 .arg(_staID.data()) 786 .arg(int(sumLat/numLat*100)/100.) 787 .arg(int(minLat*100)/100.) 788 .arg(int(maxLat*100)/100.) 789 .arg(int((sqrt((sumLatQ - sumLat * sumLat / numLat)/numLat))*100)/100.) 790 .arg(numLat) 791 .toAscii(), true) ); 810 if (newSecGPS - oldSecGPS > 1.5 * meanDiff) { 811 numGaps += 1; 812 } 792 813 } 793 814 } 794 meanDiff = diffSecGPS/numLat;795 diffSecGPS = 0;796 numGaps = 0;797 sumLat = 0.;798 sumLatQ = 0.;799 numLat = 0;800 minLat = maxDt;801 maxLat = -maxDt;815 curLat = sec - obs->_o.GPSWeeks; 816 sumLat += curLat; 817 sumLatQ += curLat * curLat; 818 if (curLat < minLat) minLat = curLat; 819 if (curLat >= maxLat) maxLat = curLat; 820 numLat += 1; 821 oldSecGPS = newSecGPS; 822 followSec = true; 802 823 } 803 if (followSec) {804 diffSecGPS += newSecGPS - oldSecGPS;805 if (meanDiff>0.) {806 if (newSecGPS - oldSecGPS > 1.5 * meanDiff) {807 numGaps += 1;808 }809 }810 }811 curLat = sec - obs->_o.GPSWeeks;812 sumLat += curLat;813 sumLatQ += curLat * curLat;814 if (curLat < minLat) minLat = curLat;815 if (curLat >= maxLat) maxLat = curLat;816 numLat += 1;817 oldSecGPS = newSecGPS;818 followSec = true;819 824 } 820 825 } -
trunk/BNC/bnchelp.html
r1302 r1307 104 104 3.8.3. <a href=#corrport>Port</a><br> 105 105 3.8.4. <a href=#corrwait>Wait for Full Epoch</a><br> 106 3.9. <a href=#advnote> Monitor</a><br>106 3.9. <a href=#advnote>Outages</a><br> 107 107 3.9.1. <a href=#obsrate>Observation Rate</a><br> 108 108 3.9.2. <a href=#advfail>Failure Threshold</a><br> … … 110 110 3.9.4. <a href=#pause>Pause</a><br> 111 111 3.9.5. <a href=#advscript>Script</a><br> 112 3.9.6. <a href=#perflog>Performance Log</a><br> 113 3.10. <a href=#messtypes>RTCM Scan</a><br> 114 3.10.1. <a href=#messmount>Mountpoint</a><br> 112 3.10. <a href=#misc>Miscellaneous</a><br> 113 3.10.1. <a href=#mountpoint>Mountpoint</a><br> 114 3.10.2. <a href=#perflog>Log Latency</a><br> 115 3.10.3. <a href=#scanrtcm>Scan RTCM</a><br> 115 116 3.11. <a href=#mountpoints>Mountpoints</a><br> 116 117 3.11.1. <a href=#mountadd>Add Mountpoints</a><br> … … 519 520 </p> 520 521 521 <p><a name="advnote"><h4>3.9. Monitor</h4></p>522 <p><a name="advnote"><h4>3.9. Outages</h4></p> 522 523 523 524 <p> … … 592 593 </p> 593 594 594 <p><a name="perflog"><h4>3.9.6 Performance Log - optional </h4></p> 595 <p><a name="misc"><h4>3.10. Miscellaneous</h4></p> 596 <p> 597 This section describes a number of miscellaneous options which can be applied per stream (mountpoint) or for all configured streams. 598 </p> 599 600 <p><a name="mountpoint"><h4>3.10.1 Mountpoint - optional </h4></p> 601 <p> 602 Specify a mountpoint to apply one or several of the 'Miscellaneous' options to the corresponding stream. Enter 'ALL' if you want to apply these options to all configured streams. An empty option field (default) means that you don't want BNC to apply any of these options. 603 </p> 604 605 <p><a name="perflog"><h4>3.10.2 Log Latency - optional </h4></p> 606 <p> 607 BNC can average latencies per stream over a certain period of GPS time, the 'Performance log' interval. Mean latencies are calculated from the individual latencies of at most one (first incoming) observation or correction to Broadcast Ephemeris per second. Note that computing correct latencies requires the clock of the host computer to be properly synchronized. 608 </p> 595 609 <p> 596 610 <u>Latency:</u> Latency is defined in BNC by the following equation: … … 604 618 </pre> 605 619 <p> 606 BNC can average the latencies per stream over a certain period of GPS time, the 'Performance log' interval. Mean latencies are calculated from the individual latencies of at most one (first incoming) observation or correction to Broadcast Ephemeris per second. Note that computing correct latencies requires the clock of the host computer to be properly synchronized.607 </p>608 <p>609 620 <u>Statistics:</u> BNC counts the number of GPS seconds covered by at least one observation. It also estimates an observation rate (independent from the a priory specified 'Observation rate') from all observations received throughout the first full 'Performance log' interval. Based on this rate, BNC estimates the number of data gaps when appearing in subsequent intervals. 610 621 </p> … … 619 630 </p> 620 631 621 <p><a name="messtypes"><h4>3.10. RTCM Scan</h4></p> 632 633 <p><a name="scanrtcm"><h4>3.10.3 Scan RTCM - optional</h4></p> 622 634 <p> 623 635 When configuring a GNSS receiver for RTCM stream generation, the setup interface may not provide details about RTCM message types. As reliable information concerning stream contents should be available i.e. for NTRIP broadcaster operators to maintain the broadcaster's sourcetable, BNC allows to scan RTCM streams for incoming message types and printout some of the contained meta-data. The idea for this option arose from 'InspectRTCM', a comprehensive stream analyzing tool written by D. Stoecker. 624 636 </p> 625 626 <p><a name="messmount"><h4>3.10.1 Mountpoint - optional</h4></p> 627 <p> 628 Specify the mountpoint of an RTCM Version 2.x or 3.x stream to scan it and log all contained 637 <p> 638 Tick 'Scan RTCM' to scan RTCM Version 2.x or 3.x streams and log all contained 629 639 </p> 630 640 <ul> -
trunk/BNC/bncmain.cpp
r1299 r1307 122 122 settings.setValue("perfIntr", ""); 123 123 settings.setValue("corrTime", "5"); 124 settings.setValue("m essTypes", "");124 settings.setValue("miscMount", ""); 125 125 } 126 126 -
trunk/BNC/bncwindow.cpp
r1303 r1307 113 113 _proxyPortLineEdit = new QLineEdit(settings.value("proxyPort").toString()); 114 114 _proxyPortLineEdit->setMaximumWidth(9*ww); 115 _messTypesLineEdit = new QLineEdit(settings.value("messTypes").toString()); 116 _messTypesLineEdit->setMaximumWidth(20*ww); 115 _miscMountLineEdit = new QLineEdit(settings.value("miscMount").toString()); 116 _miscMountLineEdit->setMaximumWidth(20*ww); 117 _scanRTCMCheckBox = new QCheckBox(); 118 _scanRTCMCheckBox->setCheckState(Qt::CheckState( 119 settings.value("scanRTCM").toInt())); 117 120 _waitTimeSpinBox = new QSpinBox(); 118 121 _waitTimeSpinBox->setMinimum(1); … … 288 291 _logFileLineEdit->setWhatsThis(tr("Records of BNC's activities are shown in the Log section on the bottom of this window. They can be saved into a file when a valid path is specified in the 'Logfile (full path)' field.")); 289 292 _adviseScriptLineEdit->setWhatsThis(tr("<p>Specify the full path to a script or batch file to handle advisory notes generated in the event of corrupted streams or stream outages. The affected mountpoint and one of the comments 'Begin_Outage', 'End_Outage', 'Begin_Corrupted', or 'End_Corrupted' are passed on to the script as command line parameters.</p><p>The script can be configured to send an email to BNC's operator and/or to the affected stream provider. An empty option field (default) or invalid path means that you don't want to use this option.</p><p> Note that for using this function you need to specify the 'Observation rate'.</p>")); 290 _perfIntrComboBox->setWhatsThis(tr("<p>BNC can average latencies per stream over a certain period of GPS time. The resulting mean latencies are recorded in the Log file/section at the end of each ' Performance log' interval together with results of a statistical evaluation (approximate number of covered epochs, data gaps).</p><p>Select a 'Performance log' interval or select the empty option field if you do not want BNC to log latencies and statistical information.</p>"));293 _perfIntrComboBox->setWhatsThis(tr("<p>BNC can average latencies per stream over a certain period of GPS time. The resulting mean latencies are recorded in the Log file/section at the end of each 'Log latency' interval together with results of a statistical evaluation (approximate number of covered epochs, data gaps).</p><p>Select a 'Log latency' interval or select the empty option field if you do not want BNC to log latencies and statistical information.</p>")); 291 294 _mountPointsTable->setWhatsThis(tr("<p>Streams selected for retrieval are listed in the 'Mountpoints' section. Clicking on 'Add Mountpoints' button will open a window that allows the user to select data streams from an NTRIP broadcaster according to their mountpoints. To remove a stream from the 'Mountpoints' list, highlight it by clicking on it and hit the 'Delete Mountpoints' button. You can also remove multiple mountpoints by highlighting them using +Shift and +Ctrl.</p><p>BNC automatically allocates one of its internal decoders to a stream based on the stream's 'format' and 'format-details' as given in the sourcetable. However, there might be cases where you need to override the automatic selection due to incorrect sourcetable for example. BNC allows users to manually select the required decoder by editing the decoder string. Double click on the 'decoder' field, enter your preferred decoder and then hit Enter. The accepted decoder strings are 'RTCM_2.x', 'RTCM_3.x', and 'RTIGS'.</p><p>In case you need to log the raw data as is, BNC allows users to by-pass its decoders and and directly save the input in daily log files. To do this specify the decoder string as 'ZERO'.</p><p>BNC can also retrieve streams from virtual reference stations (VRS). To initiate these streams, an approximate rover position needs to be sent in NMEA GGA message to the NTRIP broadcaster. In return, a user-specific data stream is generated, typically by a Network-RTK software. This stream is customized to the exact latitude and longitude as shown in the 'lat' and 'long' columns under 'Mountpoints'. These VRS streams are indicated by a 'yes' in the 'nmea' column under 'Mountpoints' as well as in the sourcetable. The default 'lat' and 'long' values are taken from the sourcetable. However, in most cases you would probably want to change this according to your requirement. Double click on 'lat' and 'long' fields, enter the values you wish to send and then hit Enter. The format is in positive north latitude degrees (e.g. for northern hemisphere: 52.436, for southern hemisphere: -24.567) and eastern longitude degrees (e.g.: 358.872 or -1.128). Only mountpoints with a 'yes' in its 'nmea' column can be edited. The position should preferably be a point within the coverage of the network.</p>")); 292 295 _log->setWhatsThis(tr("Records of BNC's activities are shown in the Log section. The message log covers the communication status between BNC and the NTRIP broadcaster as well as any problems that occur in the communication link, stream availability, stream delay, stream conversion etc.")); 293 296 _ephV3CheckBox->setWhatsThis(tr("The default format for RINEX Navigation files containing Broadcast Ephemeris is RINEX Version 2.11. Select 'Version 3' if you want to save the ephemeris in RINEX Version 3 format.")); 294 297 _rnxV3CheckBox->setWhatsThis(tr("The default format for RINEX Observation files is RINEX Version 2.11. Select 'Version 3' if you want to save the observations in RINEX Version 3 format.")); 295 _messTypesLineEdit->setWhatsThis(tr("<p>Specify the mountpoint of an RTCM Version 2.x or 3.x stream to log the numbers of incoming message types as well as contained antenna coordinates, antenna height, and antenna descriptor.</p><p>An empty option field (default) means that you don't want BNC to log such information.</p>")); 298 _miscMountLineEdit->setWhatsThis(tr("<p>Specify a mountpoint to apply the options shown below. Enter 'ALL' if you want to apply the options to all configured streams.</p><p>An empty option field (default) means that you don't want BNC to apply any of these options.</p>")); 299 _scanRTCMCheckBox->setWhatsThis(tr("<p>Tick 'Scan RTCM' to log the numbers of incomming message types as well as contained antenna coordinates, antenna heigt, and antenna descriptor.</p><p>An empty option field (default) means that you don't want BNC to log such information.</p>")); 296 300 297 301 // Canvas with Editable Fields … … 315 319 aogroup->addTab(cgroup,tr("Ephemeris Corrections")); 316 320 aogroup->addTab(sgroup,tr("Feed Engine")); 317 aogroup->addTab(agroup,tr(" Monitor"));318 aogroup->addTab(rgroup,tr(" RTCM Scan"));321 aogroup->addTab(agroup,tr("Outages")); 322 aogroup->addTab(rgroup,tr("Miscellaneous")); 319 323 320 324 QGridLayout* pLayout = new QGridLayout; … … 385 389 aLayout->addWidget(new QLabel("Script (full path)"), 3, 0); 386 390 aLayout->addWidget(_adviseScriptLineEdit, 3, 1,1,10); 387 aLayout->addWidget(new QLabel("Performance log"), 4, 0); 388 aLayout->addWidget(_perfIntrComboBox, 4, 1); 389 aLayout->addWidget(new QLabel("Network monitoring, outages, handling of corrupted streams, latencies, statistics."),5,0,1,10,Qt::AlignLeft); 391 aLayout->addWidget(new QLabel("Outage report, handling of corrupted streams."),5,0,1,10,Qt::AlignLeft); 390 392 agroup->setLayout(aLayout); 391 393 … … 393 395 rLayout->setColumnMinimumWidth(0,14*ww); 394 396 rLayout->addWidget(new QLabel("Mountpoint"), 0, 0, Qt::AlignLeft); 395 rLayout->addWidget(_messTypesLineEdit, 0, 1,1,15,Qt::AlignLeft); 396 rLayout->addWidget(new QLabel("Scan RTCM stream to log numbers of message types and antenna information."),1, 0, 1, 4, Qt::AlignLeft); 397 rLayout->addWidget(new QLabel(" "), 2, 0); 398 rLayout->addWidget(new QLabel(" "), 3, 0); 397 rLayout->addWidget(_miscMountLineEdit, 0, 1,1,15,Qt::AlignLeft); 398 rLayout->addWidget(new QLabel("Log latency"), 1, 0); 399 rLayout->addWidget(_perfIntrComboBox, 1, 1); 400 rLayout->addWidget(new QLabel("Scan RTCM"), 2, 0); 401 rLayout->addWidget(_scanRTCMCheckBox, 2, 1); 402 rLayout->addWidget(new QLabel("Log latencies or scan RTCM streams for numbers of message types and antenna information."),3, 0, 1, 4, Qt::AlignLeft); 399 403 rLayout->addWidget(new QLabel(" "), 4, 0); 400 404 rLayout->addWidget(new QLabel(" "), 5, 0); … … 658 662 settings.setValue("logFile", _logFileLineEdit->text()); 659 663 settings.setValue("adviseScript",_adviseScriptLineEdit->text()); 660 settings.setValue("messTypes", _messTypesLineEdit->text()); 664 settings.setValue("miscMount", _miscMountLineEdit->text()); 665 settings.setValue("scanRTCM", _scanRTCMCheckBox->checkState()); 661 666 662 667 QStringList mountPoints; -
trunk/BNC/bncwindow.h
r1299 r1307 108 108 QLineEdit* _ephPathLineEdit; 109 109 QLineEdit* _corrPathLineEdit; 110 QLineEdit* _m essTypesLineEdit;110 QLineEdit* _miscMountLineEdit; 111 111 QCheckBox* _rnxV3CheckBox; 112 112 QCheckBox* _ephV3CheckBox; … … 120 120 QSpinBox* _binSamplSpinBox; 121 121 QCheckBox* _rnxAppendCheckBox; 122 QCheckBox* _scanRTCMCheckBox; 122 123 QCheckBox* _makePauseCheckBox; 123 124 QSpinBox* _waitTimeSpinBox;
Note:
See TracChangeset
for help on using the changeset viewer.