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

Last change on this file since 8056 was 7980, checked in by stuerze, 10 years ago

System and frequency specific signal priorities are added for RINEX3 to RINEX2 conversion and the default 'Signal priority' list is improved

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_signal(int) {
60 cout << "Program Interrupted by Ctrl-C" << endl;
61 BNC_CORE->sigintReceived = 1;
62 qApp->quit();
63}
64
65// Main Program
66/////////////////////////////////////////////////////////////////////////////
67int main(int argc, char* argv[]) {
68
69 bool interactive = true;
70#ifdef WIN32
71 bool displaySet = true;
72#else
73 bool displaySet = false;
74#endif
75 QByteArray rawFileName;
76 QString confFileName;
77
78 QByteArray printHelp =
79 "Usage:\n"
80 " bnc --help (MS Windows: bnc.exe --help | more)\n"
81 " --nw\n"
82 " --version (MS Windows: bnc.exe --version | more)\n"
83 " --display {name}\n"
84 " --conf {confFileName}\n"
85 " --file {rawFileName}\n"
86 " --key {keyName} {keyValue}\n"
87 "\n"
88 "Network Panel keys:\n"
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"
92 " sslIgnoreErrors {Ignore SSL authorization errors [integer number: 0=no,2=yes]}\n"
93 "\n"
94 "General Panel keys:\n"
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"
100 "\n"
101 "RINEX Observations Panel keys:\n"
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:12&PWCSLXYN G:5&IQX C:IQX]}\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"
111 "\n"
112 "RINEX Ephemeris Panel keys:\n"
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"
118 "\n"
119 "RINEX Editing and QC Panel keys:\n"
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:12&PWCSLXYN G:5&IQX C:IQX]}\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"
153 "\n"
154 "SP3 Comparison Panel keys:\n"
155 " sp3CompFile {SP3 input files, full path [character string, comma separated list in quotation marks]}\n"
156 " sp3CompExclude {Satellite exclusion list [character string, comma separated list in quotation marks, example: G04,G31,R]}\n"
157 " sp3CompOutLogFile {Output logfile, full path [character string]}\n"
158 "\n"
159 "Broadcast Corrections Panel keys:\n"
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"
163 "\n"
164 "Feed Engine Panel keys:\n"
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"
170 "\n"
171 "Serial Output Panel:\n"
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"
183 "\n"
184 "Outages Panel keys:\n"
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"
189 "\n"
190 "Miscellaneous Panel keys:\n"
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"
195 "\n"
196 "PPP Client Panel 1 keys:\n"
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"
202 " PPP/v3filenames {Produce version 3 filenames, 0=no,2=yes}\n"
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#ifdef USE_PPP
207 " PPP/blqFile {ANTEX file, full path [character string]}\n"
208#endif
209 " PPP/nmeaPath {Directory for NMEA output files [character string]}\n"
210 " PPP/snxtroPath {Directory for SINEX troposphere output files [character string]}\n"
211 " 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"
212 " PPP/snxtroSampl {SINEX troposphere file sampling rate [integer number of seconds: 0|30|60|90|120|150|180|210|240|270|300]}\n"
213 " PPP/snxtroAc {SINEX troposphere Analysis Center [character string]}\n"
214 " PPP/snxtroSol {SINEX troposphere solution ID [character string]}\n"
215 "\n"
216 "PPP Client Panel 2 keys:\n"
217 " PPP/staTable {Station specifications table [character string, semicolon separated list, each element in quotaion marks, example:\n"
218 " \"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"
219 "\n"
220 "PPP Client Panel 3 keys:\n"
221 " PPP/lcGPS {Select linear combination from GPS code or phase data [character string; P3|P3&L3]}\n"
222 " PPP/lcGLONASS {Select linear combination from GLONASS code or phase data [character string: no|P3|L3|P3&L3]}\n"
223 " PPP/lcGalileo {Select linear combination from Galileo code or phase data [character string: no|P3|L3|P3&L3]}\n"
224 " PPP/lcBDS {Select linear combination from BDS code or phase data [character string: no|P3|L3|P3&L3]}\n"
225 " PPP/sigmaC1 {Sigma for code observations in meters [floating-point number]}\n"
226 " PPP/sigmaL1 {Sigma for phase observations in meters [floating-point number]}\n"
227 " PPP/maxResC1 {Maximal residuum for code observations in meters [floating-point number]}\n"
228 " PPP/maxResL1 {Maximal residuum for phase observations in meters [floating-point number]}\n"
229 " PPP/eleWgtCode {Elevation dependent waiting of code observations [integer number: 0=no,2=yes]}\n"
230 " PPP/eleWgtPhase {Elevation dependent waiting of phase observations [integer number: 0=no,2=yes]}\n"
231 " PPP/minObs {Minimum number of observations [integer number: 4|5|6]}\n"
232 " PPP/minEle {Minimum satellite elevation in degrees [integer number: 0-20]}\n"
233 " PPP/corrWaitTime {Wait for clock corrections [integer number of seconds: 0-20]}\n"
234 " PPP/seedingTime {Seeding time span for Quick Start [integer number of seconds]}\n"
235 "\n"
236 "PPP Client Panel 4 keys:\n"
237 " PPP/plotCoordinates {Mountpoint for time series plot [character string]}\n"
238 " PPP/audioResponse {Audio response threshold in meters [floating-point number]}\n"
239 " PPP/useOpenStreetMap {OSM track map [character string: true|false]}\n"
240 " PPP/useGoogleMap {Google track map [character string: true|false]}\n"
241 " PPP/mapWinDotSize {Size of dots on map [integer number: 0-10]}\n"
242 " PPP/mapWinDotColor {Color of dots and cross hair on map [character string: red|yellow]}\n"
243 " PPP/mapSpeedSlider {Offline processing speed for mapping [integer number: 1-100]}\n"
244 "\n"
245 "Combine Corrections Panel keys:\n"
246 " cmbStreams {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
247 " \"IGS01 ESA 1.0;IGS03 BKG 1.0\"]}\n"
248 " cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]\n"
249 " cmbMaxres {Clock outlier residuum threshold in meters [floating-point number]\n"
250 " cmbSampl {Clock sampling rate [integer number of seconds: 10|20|30|40|50|60]}\n"
251 " cmbUseGlonass {Use GLONASS in combination [integer number: 0=no,2=yes]\n"
252 "\n"
253 "Upload Corrections Panel keys:\n"
254 " uploadMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:\n"
255 " \"www.igs-ip.net,2101,IGS01,pass,IGS08,0,/home/user/BNC$[GPSWD}.sp3,/home/user/BNC$[GPSWD}.clk,258,1,0;\n"
256 " www.euref-ip.net,2101,EUREF01,pass,ETRF2000,0,,,258,2,0\"]}\n"
257 " 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"
258 " uploadSamplRtcmEphCorr {Orbit corrections stream sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
259 " uploadSamplSp3 {SP3 file sampling rate [integer number of minutes: 0-15]}\n"
260 " uploadSamplClkRnx {Clock RINEX file sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
261 "\n"
262 "Custom Trafo keys:\n"
263 " trafo_dx {Translation X in meters [floating-point number]\n"
264 " trafo_dy {Translation Y in meters [floating-point number]\n"
265 " trafo_dz {Translation Z in meters [floating-point number]\n"
266 " trafo_dxr {Translation change X in meters per year [floating-point number]\n"
267 " trafo_dyr {Translation change Y in meters per year [floating-point number]\n"
268 " trafo_dzr {Translation change Z in meters per year [floating-point number]\n"
269 " trafo_ox {Rotation X in arcsec [floating-point number]}\n"
270 " trafo_oy {Rotation Y in arcsec [floating-point number]}\n"
271 " trafo_oz {Rotation Z in arcsec [floating-point number]}\n"
272 " trafo_oxr {Rotation change X in arcsec per year [floating-point number]}\n"
273 " trafo_oyr {Rotation change Y in arcsec per year [floating-point number]}\n"
274 " trafo_ozr {Rotation change Z in arcsec per year [floating-point number]}\n"
275 " trafo_sc {Scale [10^-9, floating-point number]}\n"
276 " trafo_scr {Scale change [10^-9 per year, floating-point number]}\n"
277 " trafo_t0 {Reference year [integer number]}\n"
278 "\n"
279 "Upload Ephemeris Panel keys:\n"
280 " uploadEphMountpointsOut {Upload corrections table [character string, semicolon separated list, each element in quotation marks, example:\n"
281 " \"www.igs-ip.net,2101,RTCM3EPH_GPS,pass,GPS\"]}\n"
282 " uploadSamplRtcmEph {Stream upload sampling rate [integer number of seconds: 0|5|10|15|20|25|30|35|40|45|50|55|60]}\n"
283 "\n"
284 "Add Stream keys:\n"
285 " mountPoints {Mountpoints [character string, semicolon separated list, example:\n"
286 " \"//user:pass@www.igs-ip.net:2101/FFMJ1 RTCM_3.1 DEU 50.09 8.66 no 2;\n"
287 " //user:pass@www.igs-ip.net:2101/FFMJ2 RTCM_3.1 DEU 50.09 8.66 no 2\"}\n"
288 " ntripVersion {Ntrip Version [character string: 1|2|2s|R|U]}\n"
289 " casterUrlList {Visited Broadcasters [character string, comma separated list]}\n"
290 "\n"
291 "Appearance keys:\n"
292 " startTab {Index of top panel to be presented at start time [integer number: 0-17]}\n"
293 " statusTab {Index of bottom panel to be presented at start time [integer number: 0-3]}\n"
294 " font {Font specification [character string in quotation marks, example: \"Helvetica,14,-1,5,50,0,0,0,0,0\"]}\n"
295 "\n"
296 "Note:\n"
297 "The syntax of some command line configuration options slightly differs from that\n"
298 "used in configuration files: Configuration file options which contain one or more blank\n"
299 "characters or contain a semicolon separated parameter list must be enclosed by quotation\n"
300 "marks when specified on command line.\n"
301 "\n"
302 "Examples command lines:\n"
303 "(1) /home/weber/bin/bnc\n"
304 "(2) /Applications/bnc.app/Contents/MacOS/bnc\n"
305 "(3) /home/weber/bin/bnc --conf /home/weber/MyConfigFile.bnc\n"
306 "(4) bnc --conf /Users/weber/.config/BKG/BNC.bnc -nw\n"
307 "(5) bnc --conf /dev/null --key startTab 4 --key reqcAction Edit/Concatenate"
308 " --key reqcObsFile AGAR.15O --key reqcOutObsFile AGAR_X.15O"
309 " --key reqcRnxVersion 2 --key reqcSampling 30 --key reqcV2Priority CWPX_?\n"
310 "(6) bnc --key mountPoints \"//user:pass@mgex.igs-ip.net:2101/CUT07 RTCM_3.0 ETH 9.03 38.74 no 2;"
311 "//user:pass@www.igs-ip.net:2101/FFMJ1 RTCM_3.1 DEU 50.09 8.66 no 2\"\n"
312 "(7) bnc --key cmbStreams \"CLK11 BLG 1.0;CLK93 CNES 1.0\"\n"
313 "(8) bnc --key uploadMountpointsOut \"products.igs-ip.net,98756,TEST,letmein,IGS08,2,/Users/weber/BNC${GPSWD}.clk,,33,3,2;"
314 "www.euref-ip.net,333,TEST2,aaaaa,NAD83,2,,,33,5,5\"\n"
315 "(9) bnc --key PPP/staTable \"FFMJ1,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7777;"
316 "CUT07,100.0,100.0,100.0,100.0,100.0,100.0,0.1,3e-6,7778\"\n";
317
318 for (int ii = 1; ii < argc; ii++) {
319 if (QRegExp("--?help").exactMatch(argv[ii])) {
320 cout << printHelp.data();
321 exit(0);
322 }
323 if (QRegExp("--?nw").exactMatch(argv[ii])) {
324 interactive = false;
325 }
326 if (QRegExp("--?version").exactMatch(argv[ii])) {
327 cout << BNCPGMNAME << endl;
328 exit(0);
329 }
330 if (QRegExp("--?display").exactMatch(argv[ii])) {
331 displaySet = true;
332 strcpy(argv[ii], "-display"); // make it "-display" not "--display"
333 }
334 if (ii + 1 < argc) {
335 if (QRegExp("--?conf").exactMatch(argv[ii])) {
336 confFileName = QString(argv[ii+1]);
337 }
338 if (QRegExp("--?file").exactMatch(argv[ii])) {
339 interactive = false;
340 rawFileName = QByteArray(argv[ii+1]);
341 }
342 }
343 }
344
345#ifdef Q_OS_MAC
346 if (argc== 3 && interactive) {
347 confFileName = QString(argv[2]);
348 }
349#else
350 if (argc == 2 && interactive) {
351 confFileName = QString(argv[1]);
352 }
353#endif
354
355#ifdef Q_OS_MACX
356 if ( QSysInfo::MacintoshVersion > QSysInfo::MV_10_8 )
357 {
358 // fix Mac OS X 10.9 (mavericks) font issue
359 // https://bugreports.qt-project.org/browse/QTBUG-32789
360 QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
361 }
362#endif
363
364 bool GUIenabled = interactive || displaySet;
365 t_app app(argc, argv, GUIenabled);
366
367 app.setApplicationName("BNC");
368 app.setOrganizationName("BKG");
369 app.setOrganizationDomain("www.bkg.bund.de");
370
371 BNC_CORE->setGUIenabled(GUIenabled);
372 BNC_CORE->setConfFileName( confFileName );
373
374 bncSettings settings;
375
376 for (int ii = 1; ii < argc - 2; ii++) {
377 if (QRegExp("--?key").exactMatch(argv[ii])) {
378 QString key(argv[ii+1]);
379 QString val(argv[ii+2]);
380 if (val.indexOf(";") != -1) {
381 settings.setValue(key, val.split(";", QString::SkipEmptyParts));
382 }
383 else {
384 settings.setValue(key, val);
385 }
386 }
387 }
388
389 bncWindow* bncWin = 0;
390 t_reqcEdit* reqcEdit = 0;
391 t_reqcAnalyze* reqcAnalyze = 0;
392 t_sp3Comp* sp3Comp = 0;
393 bncEphUploadCaster* casterEph = 0;
394 bncCaster* caster = 0;
395 bncRawFile* rawFile = 0;
396 bncGetThread* getThread = 0;
397
398 // Interactive Mode - open the main window
399 // ---------------------------------------
400 if (interactive) {
401
402 BNC_CORE->setMode(t_bncCore::interactive);
403
404 QString fontString = settings.value("font").toString();
405 if ( !fontString.isEmpty() ) {
406 QFont newFont;
407 if (newFont.fromString(fontString)) {
408 QApplication::setFont(newFont);
409 }
410 }
411
412 app.setWindowIcon(QPixmap(":ntrip-logo.png"));
413
414 bncWin = new bncWindow();
415 BNC_CORE->setMainWindow(bncWin);
416 bncWin->show();
417 }
418
419 // Post-Processing PPP
420 // -------------------
421 else if (settings.value("PPP/dataSource").toString() == "RINEX Files") {
422 caster = new bncCaster();
423 BNC_CORE->setCaster(caster);
424 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
425 BNC_CORE->startPPP();
426 }
427
428 // Post-Processing reqc edit
429 // -------------------------
430 else if (settings.value("reqcAction").toString() == "Edit/Concatenate") {
431 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
432 reqcEdit = new t_reqcEdit(0);
433 reqcEdit->start();
434 }
435
436 // Post-Processing reqc analyze
437 // ----------------------------
438 else if (settings.value("reqcAction").toString() == "Analyze") {
439 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
440 reqcAnalyze = new t_reqcAnalyze(0);
441 reqcAnalyze->start();
442 }
443
444 // SP3 Files Comparison
445 // --------------------
446 else if (!settings.value("sp3CompFile").toString().isEmpty()) {
447 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
448 sp3Comp = new t_sp3Comp(0);
449 sp3Comp->start();
450 }
451
452 // Non-Interactive (data gathering)
453 // --------------------------------
454 else {
455
456 signal(SIGINT, catch_signal);
457
458 casterEph = new bncEphUploadCaster(); (void) casterEph;
459
460 caster = new bncCaster();
461
462 BNC_CORE->setCaster(caster);
463 BNC_CORE->setPortEph(settings.value("ephOutPort").toInt());
464 BNC_CORE->setPortCorr(settings.value("corrPort").toInt());
465 BNC_CORE->initCombination();
466
467 BNC_CORE->connect(caster, SIGNAL(getThreadsFinished()), &app, SLOT(quit()));
468
469 BNC_CORE->slotMessage("========== Start BNC v" BNCVERSION" ("BNC_OS") ==========", true);
470
471 // Normal case - data from Internet
472 // --------------------------------
473 if ( rawFileName.isEmpty() ) {
474 BNC_CORE->setMode(t_bncCore::nonInteractive);
475 BNC_CORE->startPPP();
476
477 caster->readMountPoints();
478 if (caster->numStations() == 0) {
479 exit(0);
480 }
481 }
482
483 // Special case - data from file
484 // -----------------------------
485 else {
486 BNC_CORE->sigintReceived = 0;
487 BNC_CORE->setMode(t_bncCore::batchPostProcessing);
488 BNC_CORE->startPPP();
489
490 rawFile = new bncRawFile(rawFileName, "", bncRawFile::input);
491 getThread = new bncGetThread(rawFile);
492 caster->addGetThread(getThread, true);
493 }
494 }
495
496 // Start the application
497 // ---------------------
498 app.exec();
499 if (interactive) {
500 delete bncWin;
501 }
502 else {
503 BNC_CORE->stopPPP();
504 BNC_CORE->stopCombination();
505 }
506 if (caster) {
507 delete caster; caster = 0; BNC_CORE->setCaster(0);
508 }
509 if (casterEph) {
510 delete casterEph; casterEph = 0;
511 }
512 if (rawFile) {
513 delete rawFile;
514 }
515 return 0;
516}
Note: See TracBrowser for help on using the repository browser.