source: ntrip/branches/BNC_2.12/src/bncmain.cpp@ 9157

Last change on this file since 9157 was 9157, checked in by stuerze, 20 months ago

try to prevent an end of this program in case of SIGPIPE

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