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

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

minor changes to use system proxy settings if nothing is available from config file

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