source: ntrip/trunk/BNC/src/bncmain.cpp@ 7942

Last change on this file since 7942 was 7889, checked in by stuerze, 10 years ago

BNC's ephemeris upload is extended to allows an upload of more than one stream and to choose a single satellite system

File size: 24.8 KB
RevLine 
[280]1// Part of BNC, a utility for retrieving decoding and
[464]2// converting GNSS data streams from NTRIP broadcasters.
[280]3//
[464]4// Copyright (C) 2007
[280]5// German Federal Agency for Cartography and Geodesy (BKG)
6// http://www.bkg.bund.de
[464]7// Czech Technical University Prague, Department of Geodesy
[280]8// http://www.fsv.cvut.cz
9//
10// Email: euref-ip@bkg.bund.de
11//
12// This program is free software; you can redistribute it and/or
13// modify it under the terms of the GNU General Public License
14// as published by the Free Software Foundation, version 2.
15//
16// This program is distributed in the hope that it will be useful,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19// GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program; if not, write to the Free Software
23// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
[35]24
25/* -------------------------------------------------------------------------
[93]26 * BKG NTRIP Client
[35]27 * -------------------------------------------------------------------------
28 *
29 * Class: main
30 *
31 * Purpose: Application starts here
32 *
33 * Author: L. Mervart
34 *
35 * Created: 24-Dec-2005
36 *
[7268]37 * Changes:
[35]38 *
39 * -----------------------------------------------------------------------*/
40
[274]41#include <unistd.h>
[603]42#include <signal.h>
[35]43#include <QApplication>
44#include <QFile>
45#include <iostream>
46
[5066]47#include "app.h"
[5070]48#include "bnccore.h"
[35]49#include "bncwindow.h"
[1535]50#include "bncsettings.h"
[2012]51#include "bncversion.h"
[3251]52#include "upload/bncephuploadcaster.h"
[5887]53#include "rinex/reqcedit.h"
54#include "rinex/reqcanalyze.h"
[6343]55#include "orbComp/sp3Comp.h"
[35]56
57using namespace std;
58
[7854]59
[603]60void catch_signal(int) {
61 cout << "Program Interrupted by Ctrl-C" << endl;
[7854]62 qApp->quit();
[603]63}
64
[82]65// Main Program
66/////////////////////////////////////////////////////////////////////////////
[4490]67int main(int argc, char* argv[]) {
[35]68
[4446]69 bool interactive = true;
[4716]70#ifdef WIN32
71 bool displaySet = true;
72#else
[4490]73 bool displaySet = false;
[4716]74#endif
[1552]75 QByteArray rawFileName;
[1501]76 QString confFileName;
[1146]77
[7293]78 QByteArray printHelp =
[7510]79 "Usage:\n"
[7826]80 " bnc --help (MS Windows: bnc.exe --help | more)\n"
[7510]81 " --nw\n"
[7827]82 " --version (MS Windows: bnc.exe --version | more)\n"
[7510]83 " --display {name}\n"
84 " --conf {confFileName}\n"
85 " --file {rawFileName}\n"
86 " --key {keyName} {keyValue}\n"
[7273]87 "\n"
88 "Network Panel keys:\n"
[7510]89 " proxyHost {Proxy host, name or IP address [character string]}\n"
90 " proxyPort {Proxy port [integer number]}\n"
91 " sslCaCertPath {Full path to SSL certificates [character string]}\n"
[7513]92 " sslIgnoreErrors {Ignore SSL authorization errors [integer number: 0=no,2=yes]}\n"
[7273]93 "\n"
94 "General Panel keys:\n"
[7512]95 " logFile {Logfile, full path [character string]}\n"
96 " rnxAppend {Append files [integer number: 0=no,2=yes]}\n"
97 " onTheFlyInterval {Configuration reload interval [character string: 1 day|1 hour|5 min|1 min]}\n"
98 " autoStart {Auto start [integer number: 0=no,2=yes]}\n"
99 " rawOutFile {Raw output file, full path [character string]}\n"
[7273]100 "\n"
101 "RINEX Observations Panel keys:\n"
[7510]102 " rnxPath {Directory [character string]}\n"
103 " rnxIntr {File interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
104 " rnxSampl {File sampling rate [integer number of seconds: 0,5|10|15|20|25|30|35|40|45|50|55|60]} \n"
105 " rnxSkel {RINEX skeleton file extension [character string]}\n"
106 " rnxOnlyWithSKL {Using RINEX skeleton file is mandatory [integer number: 0=no,2=yes]}\n"
107 " rnxScript {File upload script, full path [character string]}\n"
108 " rnxV2Priority {Priority of signal attributes [character string, list separated by blank character, example: G:CWPX_? R:CP]}\n"
109 " rnxV3 {Produce version 3 file contents [integer number: 0=no,2=yes]}\n"
110 " rnxV3filenames {Produce version 3 filenames [integer number: 0=no,2=yes]}\n"
[7273]111 "\n"
112 "RINEX Ephemeris Panel keys:\n"
[7510]113 " ephPath {Directory [character string]}\n"
114 " ephIntr {File interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
115 " ephOutPort {Output port [integer number]}\n"
116 " ephV3 {Produce version 3 file contents [integer number: 0=no,2=yes]}\n"
117 " ephV3filenames {Produce version 3 filenames [integer number: 0=no,2=yes]}\n"
[7273]118 "\n"
119 "RINEX Editing and QC Panel keys:\n"
[7510]120 " reqcAction {Action specification [character string: Blank|Edit/Concatenate|Analyze]}\n"
121 " reqcObsFile {Input observations file(s), full path [character string, comma separated list in quotation marks]}\n"
122 " reqcNavFile {Input navigation file(s), full path [character string, comma separated list in quotation marks]}\n"
123 " reqcOutObsFile {Output observations file, full path [character string]}\n"
124 " reqcOutNavFile {Output navigation file, full path [character string]}\n"
125 " reqcOutLogFile {Output logfile, full path [character string]}\n"
126 " reqcLogSummaryOnly {Output only summary of logfile [integer number: 0=no,2=yes]}\n"
127 " reqcSkyPlotSignals {Observation signals [character string, list separated by blank character, example: C:2&7 E:1&5 G:1&2 J:1&2 R:1&2 S:1&5]}\n"
128 " reqcPlotDir {QC plots directory [character string]}\n"
129 " reqcRnxVersion {RINEX version [integer number: 2|3]}\n"
130 " reqcSampling {RINEX output file sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
131 " reqcV2Priority {Version 2 priority of signal attributes [character string, list separated by blank character, example: G:CWPX_? R:CP]}\n"
132 " reqcStartDateTime {Start time [character string, example: 1967-11-02T00:00:00]}\n"
133 " reqcEndDateTime {Stop time [character string, example: 2099-01-01T00:00:00 }\n"
134 " reqcRunBy {Operators name [character string]}\n"
135 " reqcUseObsTypes {Use observation types [character string, list separated by blank character, example: G:C1C G:L1C R:C1C RC1P]}\n"
136 " reqcComment {Additional comments [character string]}\n"
137 " reqcOldMarkerName {Old marker name [character string]}\n"
138 " reqcNewMarkerName {New marker name [character string]}\n"
139 " reqcOldAntennaName {Old antenna name [character string]}\n"
140 " reqcNewAntennaName {New antenna name [character string]}\n"
141 " reqcOldAntennaNumber {Old antenna number [character string]}\n"
142 " reqcNewAntennaNumber {New antenna number [character string]}\n"
143 " reqcOldAntennadN {Old north eccentritity [character string]}\n"
144 " reqcNewAntennadN {New north eccentricity [character string]}\n"
145 " reqcOldAntennadE {Old east eccentricity [character string]}\n"
146 " reqcNewAntennadE {New east eccentricity [character string]}\n"
147 " reqcOldAntennadU {Old up eccentricity [character string]}\n"
148 " reqcNewAntennadU {New up eccentricity [character string]}\n"
149 " reqcOldReceiverName {Old receiver name [character string]}\n"
150 " reqcNewReceiverName {New receiver name [character string]}\n"
151 " reqcOldReceiverNumber {Old receiver number [character string]}\n"
152 " reqcNewReceiverNumber {New receiver number [character string]}\n"
[7273]153 "\n"
154 "SP3 Comparison Panel keys:\n"
[7510]155 " sp3CompFile {SP3 input files, full path [character string, comma separated list in quotation marks]}\n"
[7840]156 " sp3CompExclude {Satellite exclusion list [character string, comma separated list in quotation marks, example: G04,G31,R]}\n"
[7510]157 " sp3CompOutLogFile {Output logfile, full path [character string]}\n"
[7273]158 "\n"
159 "Broadcast Corrections Panel keys:\n"
[7510]160 " corrPath {Directory for saving files in ASCII format [character string]}\n"
161 " corrIntr {File interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
162 " corrPort {Output port [integer number]}\n"
[7273]163 "\n"
164 "Feed Engine Panel keys:\n"
[7510]165 " outPort {Output port, synchronized [integer number]}\n"
166 " outWait {Wait for full observation epoch [integer number of seconds: 1-30]}\n"
167 " outSampl {Sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
168 " outFile {Output file, full path [character string]}\n"
169 " outUPort {Output port, unsynchronized [integer number]}\n"
[7273]170 "\n"
171 "Serial Output Panel:\n"
[7510]172 " serialMountPoint {Mountpoint [character string]}\n"
173 " serialPortName {Port name [character string]}\n"
174 " serialBaudRate {Baud rate [integer number: 110|300|600|1200|2400|4800|9600|19200|38400|57600|115200]}\n"
175 " serialFlowControl {Flow control [character string: OFF|XONXOFF|HARDWARE}\n"
176 " serialDataBits {Data bits [integer number: 5|6|7|8]}\n"
177 " serialParity {Parity [character string: NONE|ODD|EVEN|SPACE]}\n"
178 " serialStopBits {Stop bits [integer number: 1|2]}\n"
179 " serialAutoNMEA {NMEA specification [character string: no|Auto|Manual GPGGA|Manual GNGGA]}\n"
180 " serialFileNMEA {NMEA filename, full path [character string]}\n"
181 " serialHeightNMEA {Height [floating-point number]}\n"
182 " serialHeightNMEASampling {Sampling rate [integer number of seconds: 0|10|20|30|...|280|290|300]}\n"
[7273]183 "\n"
184 "Outages Panel keys:\n"
[7510]185 " adviseObsRate {Stream observation rate [character string: 0.1 Hz|0.2 Hz|0.5 Hz|1 Hz|5 Hz]} \n"
186 " adviseFail {Failure threshold [integer number of minutes: 0-60]}\n"
187 " adviseReco {Recovery threshold [integer number of minutes: 0-60]}\n"
188 " adviseScript {Advisory script, full path [character string]}\n"
[7273]189 "\n"
190 "Miscellaneous Panel keys:\n"
[7510]191 " miscMount {Mountpoint [character string]}\n"
192 " miscIntr {Interval for logging latency [character string: Blank|2 sec|10 sec|1 min|5 min|15 min|1 hour|6 hours|1 day]}\n"
193 " miscScanRTCM {Scan for RTCM message numbers [integer number: 0=no,2=yes]}\n"
194 " miscPort {Output port [integer number]}\n"
[7273]195 "\n"
196 "PPP Client Panel 1 keys:\n"
[7510]197 " PPP/dataSource {Data source [character string: Blank|Real-Time Streams|RINEX Files]}\n"
198 " PPP/rinexObs {RINEX observation file, full path [character string]}\n"
199 " PPP/rinexNav {RINEX navigation file, full path [character string]}\n"
200 " PPP/corrMount {Corrections mountpoint [character string]}\n"
201 " PPP/corrFile {Corrections file, full path [character string]}\n"
[7793]202 " PPP/v3filenames {Produce version 3 filenames, 0=no,2=yes}\n"
[7510]203 " PPP/crdFile {Coordinates file, full path [character string]}\n"
204 " PPP/logPath {Directory for PPP log files [character string]}\n"
205 " PPP/antexFile {ANTEX file, full path [character string]}\n"
206 " PPP/nmeaPath {Directory for NMEA output files [character string]}\n"
207 " PPP/snxtroPath {Directory for SINEX troposphere output files [character string]}\n"
208 " PPP/snxtroIntr {SINEX troposphere file interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
209 " PPP/snxtroSampl {SINEX troposphere file sampling rate [integer number of seconds: 0|30|60|90|120|150|180|210|240|270|300]}\n"
[7793]210 " PPP/snxtroAc {SINEX troposphere Analysis Center [character string]}\n"
211 " PPP/snxtroSol {SINEX troposphere solution ID [character string]}\n"
[7273]212 "\n"
213 "PPP Client Panel 2 keys:\n"
[7510]214 " PPP/staTable {Station specifications table [character string, semicolon separated list, each element in quotaion marks, example:\n"
[7840]215 " \"FFMJ1,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7777;CUT07,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7778\"]}\n"
[7273]216 "\n"
217 "PPP Client Panel 3 keys:\n"
[7510]218 " PPP/lcGPS {Select linear combination from GPS code or phase data [character string; P3|P3&L3]}\n"
219 " PPP/lcGLONASS {Select linear combination from GLONASS code or phase data [character string: no|P3|L3|P3&L3]}\n"
220 " PPP/lcGalileo {Select linear combination from Galileo code or phase data [character string: no|P3|L3|P3&L3]}\n"
221 " PPP/lcBDS {Select linear combination from BDS code or phase data [character string: no|P3|L3|P3&L3]}\n"
222 " PPP/sigmaC1 {Sigma for code observations in meters [floating-point number]}\n"
223 " PPP/sigmaL1 {Sigma for phase observations in meters [floating-point number]}\n"
224 " PPP/maxResC1 {Maximal residuum for code observations in meters [floating-point number]}\n"
225 " PPP/maxResL1 {Maximal residuum for phase observations in meters [floating-point number]}\n"
226 " PPP/eleWgtCode {Elevation dependent waiting of code observations [integer number: 0=no,2=yes]}\n"
227 " PPP/eleWgtPhase {Elevation dependent waiting of phase observations [integer number: 0=no,2=yes]}\n"
228 " PPP/minObs {Minimum number of observations [integer number: 4|5|6]}\n"
229 " PPP/minEle {Minimum satellite elevation in degrees [integer number: 0-20]}\n"
230 " PPP/corrWaitTime {Wait for clock corrections [integer number of seconds: no|1-20]}\n"
231 " PPP/seedingTime {Seeding time span for Quick Start [integer number of seconds]}\n"
[7273]232 "\n"
233 "PPP Client Panel 4 keys:\n"
[7510]234 " PPP/plotCoordinates {Mountpoint for time series plot [character string]}\n"
235 " PPP/audioResponse {Audio response threshold in meters [floating-point number]}\n"
236 " PPP/useOpenStreetMap {OSM track map [character string: true|false]}\n"
237 " PPP/useGoogleMap {Google track map [character string: true|false]}\n"
238 " PPP/mapWinDotSize {Size of dots on map [integer number: 0-10]}\n"
239 " PPP/mapWinDotColor {Color of dots and cross hair on map [character string: red|yellow]}\n"
240 " PPP/mapSpeedSlider {Offline processing speed for mapping [integer number: 1-100]}\n"
[7273]241 "\n"
242 "Combine Corrections Panel keys:\n"
[7510]243 " cmbStreams {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
[7840]244 " \"IGS01 ESA 1.0;IGS03 BKG 1.0\"]}\n"
[7510]245 " cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]\n"
246 " cmbMaxres {Clock outlier residuum threshold in meters [floating-point number]\n"
247 " cmbSampl {Clock sampling rate [integer number of seconds: 10|20|30|40|50|60]}\n"
248 " cmbUseGlonass {Use GLONASS in combination [integer number: 0=no,2=yes]\n"
[7273]249 "\n"
250 "Upload Corrections Panel keys:\n"
[7510]251 " uploadMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:\n"
[7840]252 " \"www.igs-ip.net,2101,IGS01,pass,IGS08,0,/home/user/BNC$[GPSWD}.sp3,/home/user/BNC$[GPSWD}.clk,258,1,0;\n"
253 " www.euref-ip.net,2101,EUREF01,pass,ETRF2000,0,,,258,2,0\"]}\n"
[7510]254 " uploadIntr {Length of SP3 and Clock RINEX file interval [character string: 1 min|2 min|5 min|10 min|15 min|30 min|1 hour|1 day]}\n"
255 " uploadSamplRtcmEphCorr {Orbit corrections stream sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
256 " uploadSamplSp3 {SP3 file sampling rate [integer number of minutes: 0-15]}\n"
257 " uploadSamplClkRnx {Clock RINEX file sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
[7273]258 "\n"
259 "Custom Trafo keys:\n"
[7510]260 " trafo_dx {Translation X in meters [floating-point number]\n"
261 " trafo_dy {Translation Y in meters [floating-point number]\n"
262 " trafo_dz {Translation Z in meters [floating-point number]\n"
263 " trafo_dxr {Translation change X in meters per year [floating-point number]\n"
264 " trafo_dyr {Translation change Y in meters per year [floating-point number]\n"
265 " trafo_dzr {Translation change Z in meters per year [floating-point number]\n"
266 " trafo_ox {Rotation X in arcsec [floating-point number]}\n"
267 " trafo_oy {Rotation Y in arcsec [floating-point number]}\n"
268 " trafo_oz {Rotation Z in arcsec [floating-point number]}\n"
269 " trafo_oxr {Rotation change X in arcsec per year [floating-point number]}\n"
270 " trafo_oyr {Rotation change Y in arcsec per year [floating-point number]}\n"
271 " trafo_ozr {Rotation change Z in arcsec per year [floating-point number]}\n"
272 " trafo_sc {Scale [10^-9, floating-point number]}\n"
273 " trafo_scr {Scale change [10^-9 per year, floating-point number]}\n"
274 " trafo_t0 {Reference year [integer number]}\n"
[7273]275 "\n"
276 "Upload Ephemeris Panel keys:\n"
[7889]277 " uploadEphMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:\n"
278 " \"www.igs-ip.net,2101,RTCM3EPH_GPS,pass,GPS\"]}\n"
279 " uploadSamplRtcmEph {Stream upload sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
[7273]280 "\n"
281 "Add Stream keys:\n"
[7510]282 " mountPoints {Mountpoints [character string, semicolon separated list, example:\n"
[7840]283 " \"//user:pass@www.igs-ip.net:2101/FFMJ1 RTCM_3.1 DEU 50.09 8.66 no 2;\n"
284 " //user:pass@www.igs-ip.net:2101/FFMJ2 RTCM_3.1 DEU 50.09 8.66 no 2\"}\n"
[7510]285 " ntripVersion {Ntrip Version [character string: 1|2|2s|R|U]}\n"
286 " casterUrlList {Visited Broadcasters [character string, comma separated list]}\n"
[7283]287 "\n"
[7541]288 "Appearance keys:\n"
289 " startTab {Index of top panel to be presented at start time [integer number: 0-17]}\n"
290 " statusTab {Index of bottom panel to be presented at start time [integer number: 0-3]}\n"
291 " font {Font specification [character string in quotation marks, example: \"Helvetica,14,-1,5,50,0,0,0,0,0\"]}\n"
292 "\n"
[7477]293 "Note:\n"
[7841]294 "The syntax of some command line configuration options slightly differs from that\n"
295 "used in configuration files: Configuration file options which contain one or more blank\n"
296 "characters or contain a semicolon separated parameter list must be enclosed by quotation\n"
297 "marks when specified on command line.\n"
[7477]298 "\n"
299 "Examples command lines:\n"
[7284]300 "(1) /home/weber/bin/bnc\n"
301 "(2) /Applications/bnc.app/Contents/MacOS/bnc\n"
[7286]302 "(3) /home/weber/bin/bnc --conf /home/weber/MyConfigFile.bnc\n"
303 "(4) bnc --conf /Users/weber/.config/BKG/BNC.bnc -nw\n"
[7284]304 "(5) bnc --conf /dev/null --key startTab 4 --key reqcAction Edit/Concatenate"
[7283]305 " --key reqcObsFile AGAR.15O --key reqcOutObsFile AGAR_X.15O"
[7477]306 " --key reqcRnxVersion 2 --key reqcSampling 30 --key reqcV2Priority CWPX_?\n"
307 "(6) bnc --key mountPoints \"//user:pass@mgex.igs-ip.net:2101/CUT07 RTCM_3.0 ETH 9.03 38.74 no 2;"
308 "//user:pass@www.igs-ip.net:2101/FFMJ1 RTCM_3.1 DEU 50.09 8.66 no 2\"\n"
309 "(7) bnc --key cmbStreams \"CLK11 BLG 1.0;CLK93 CNES 1.0\"\n"
[7840]310 "(8) bnc --key uploadMountpointsOut \"products.igs-ip.net,98756,TEST,letmein,IGS08,2,/Users/weber/BNC${GPSWD}.clk,,33,3,2;"
311 "www.euref-ip.net,333,TEST2,aaaaa,NAD83,2,,,33,5,5\"\n"
312 "(9) bnc --key PPP/staTable \"FFMJ1,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7777;"
[7477]313 "CUT07,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7778\"\n";
[3977]314
[100]315 for (int ii = 1; ii < argc; ii++) {
[3977]316 if (QRegExp("--?help").exactMatch(argv[ii])) {
317 cout << printHelp.data();
318 exit(0);
319 }
320 if (QRegExp("--?nw").exactMatch(argv[ii])) {
[4446]321 interactive = false;
[100]322 }
[7268]323 if (QRegExp("--?version").exactMatch(argv[ii])) {
324 cout << BNCPGMNAME << endl;
325 exit(0);
326 }
[4490]327 if (QRegExp("--?display").exactMatch(argv[ii])) {
328 displaySet = true;
[4492]329 strcpy(argv[ii], "-display"); // make it "-display" not "--display"
[4490]330 }
[1552]331 if (ii + 1 < argc) {
[3977]332 if (QRegExp("--?conf").exactMatch(argv[ii])) {
[1552]333 confFileName = QString(argv[ii+1]);
[1146]334 }
[3977]335 if (QRegExp("--?file").exactMatch(argv[ii])) {
[4446]336 interactive = false;
[1553]337 rawFileName = QByteArray(argv[ii+1]);
[1552]338 }
[1156]339 }
[1146]340 }
341
[4162]342#ifdef Q_OS_MAC
[4446]343 if (argc== 3 && interactive) {
[4162]344 confFileName = QString(argv[2]);
345 }
346#else
[4446]347 if (argc == 2 && interactive) {
[1585]348 confFileName = QString(argv[1]);
349 }
[4162]350#endif
[1585]351
[6548]352#ifdef Q_OS_MACX
353 if ( QSysInfo::MacintoshVersion > QSysInfo::MV_10_8 )
354 {
355 // fix Mac OS X 10.9 (mavericks) font issue
356 // https://bugreports.qt-project.org/browse/QTBUG-32789
357 QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
358 }
359#endif
360
[4491]361 bool GUIenabled = interactive || displaySet;
[5066]362 t_app app(argc, argv, GUIenabled);
[1516]363
[1538]364 app.setApplicationName("BNC");
365 app.setOrganizationName("BKG");
366 app.setOrganizationDomain("www.bkg.bund.de");
[5084]367
368 BNC_CORE->setGUIenabled(GUIenabled);
[5068]369 BNC_CORE->setConfFileName( confFileName );
[1538]370
[1535]371 bncSettings settings;
[1503]372
[3976]373 for (int ii = 1; ii < argc - 2; ii++) {
[3978]374 if (QRegExp("--?key").exactMatch(argv[ii])) {
[3976]375 QString key(argv[ii+1]);
376 QString val(argv[ii+2]);
[7476]377 if (val.indexOf(";") != -1) {
[7293]378 settings.setValue(key, val.split(";", QString::SkipEmptyParts));
379 }
380 else {
381 settings.setValue(key, val);
382 }
[3976]383 }
384 }
385
[7640]386 bncWindow* bncWin = 0;
387 t_reqcEdit* reqcEdit = 0;
388 t_reqcAnalyze* reqcAnalyze = 0;
389 t_sp3Comp* sp3Comp = 0;
390 bncEphUploadCaster* casterEph = 0;
391 bncCaster* caster = 0;
392 bncRawFile* rawFile = 0;
393 bncGetThread* getThread = 0;
394
[180]395 // Interactive Mode - open the main window
396 // ---------------------------------------
[4446]397 if (interactive) {
[113]398
[5072]399 BNC_CORE->setMode(t_bncCore::interactive);
[3280]400
[113]401 QString fontString = settings.value("font").toString();
402 if ( !fontString.isEmpty() ) {
403 QFont newFont;
404 if (newFont.fromString(fontString)) {
405 QApplication::setFont(newFont);
406 }
407 }
[7268]408
[173]409 app.setWindowIcon(QPixmap(":ntrip-logo.png"));
[113]410
[7640]411 bncWin = new bncWindow();
[5068]412 BNC_CORE->setMainWindow(bncWin);
[35]413 bncWin->show();
414 }
[180]415
[7268]416 // Post-Processing PPP
[6343]417 // -------------------
418 else if (settings.value("PPP/dataSource").toString() == "RINEX Files") {
[7640]419 caster = new bncCaster();
[6343]420 BNC_CORE->setCaster(caster);
421 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
422 BNC_CORE->startPPP();
423 }
424
[3974]425 // Post-Processing reqc edit
426 // -------------------------
[5864]427 else if (settings.value("reqcAction").toString() == "Edit/Concatenate") {
[5072]428 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
[7640]429 reqcEdit = new t_reqcEdit(0);
[3974]430 reqcEdit->start();
431 }
432
[3975]433 // Post-Processing reqc analyze
434 // ----------------------------
435 else if (settings.value("reqcAction").toString() == "Analyze") {
[5072]436 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
[7640]437 reqcAnalyze = new t_reqcAnalyze(0);
[3975]438 reqcAnalyze->start();
439 }
440
[6343]441 // SP3 Files Comparison
442 // --------------------
443 else if (!settings.value("sp3CompFile").toString().isEmpty()) {
[5926]444 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
[7640]445 sp3Comp = new t_sp3Comp(0);
[6343]446 sp3Comp->start();
[5926]447 }
448
[3974]449 // Non-Interactive (data gathering)
450 // --------------------------------
[35]451 else {
[621]452
[1138]453 signal(SIGINT, catch_signal);
454
[7640]455 casterEph = new bncEphUploadCaster(); (void) casterEph;
[7268]456
[7640]457 caster = new bncCaster();
[7268]458
[5068]459 BNC_CORE->setCaster(caster);
[7327]460 BNC_CORE->setPortEph(settings.value("ephOutPort").toInt());
[5068]461 BNC_CORE->setPortCorr(settings.value("corrPort").toInt());
462 BNC_CORE->initCombination();
[7268]463
[5729]464 BNC_CORE->connect(caster, SIGNAL(getThreadsFinished()), &app, SLOT(quit()));
[7268]465
[7884]466 BNC_CORE->slotMessage("========== Start BNC v" BNCVERSION" ("BNC_OS") ==========", true);
[5845]467
[1170]468 // Normal case - data from Internet
469 // --------------------------------
[3974]470 if ( rawFileName.isEmpty() ) {
[5072]471 BNC_CORE->setMode(t_bncCore::nonInteractive);
[5946]472 BNC_CORE->startPPP();
[5905]473
[4250]474 caster->readMountPoints();
[1170]475 if (caster->numStations() == 0) {
[1552]476 exit(0);
[1170]477 }
478 }
[7268]479
[1170]480 // Special case - data from file
481 // -----------------------------
482 else {
[5072]483 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
[5946]484 BNC_CORE->startPPP();
[5905]485
[7640]486 rawFile = new bncRawFile(rawFileName, "", bncRawFile::input);
487 getThread = new bncGetThread(rawFile);
[2528]488 caster->addGetThread(getThread, true);
[35]489 }
490 }
[180]491
492 // Start the application
493 // ---------------------
[7640]494 app.exec();
495 if (interactive) {
496 delete bncWin;
497 }
[7854]498 else {
499 BNC_CORE->stopPPP();
500 BNC_CORE->stopCombination();
501 }
[7640]502 if (caster) {
[7854]503 delete caster; caster = 0; BNC_CORE->setCaster(0);
[7640]504 }
505 if (casterEph) {
[7854]506 delete casterEph; casterEph = 0;
[7640]507 }
508 if (rawFile) {
509 delete rawFile;
510 }
511 return 0;
[35]512}
Note: See TracBrowser for help on using the repository browser.