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

Last change on this file since 9292 was 9292, checked in by stuerze, 10 months ago

parameter added to be able to chose the corrections to be combined

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