source: ntrip/trunk/BNC/src/t_prn.cpp@ 10798

Last change on this file since 10798 was 10791, checked in by mervart, 4 months ago

BNC Multifrequency and PPPAR Client (initial version)

File size: 3.9 KB
RevLine 
[5741]1#include <sstream>
2#include <iomanip>
3#include <stdlib.h>
4
5#include "t_prn.h"
6
7using namespace std;
8
[10791]9// Set from number
10//////////////////////////////////////////////////////////////////////////////
11void t_prn::set(unsigned nn) {
12 const static unsigned maxGPS = MAXPRN_GPS;
13 const static unsigned maxGLONASS = MAXPRN_GPS + MAXPRN_GLONASS;
14 const static unsigned maxGALILEO = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO;
15 const static unsigned maxQZSS = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS;
16 const static unsigned maxSBAS = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS;
17 const static unsigned maxBDS = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS;
18 const static unsigned maxNavIC = MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS + MAXPRN_NavIC;
19 _system = 'G';
20 _number = 0;
21 _flag = 0;
22 if (nn <= maxGPS) {
23 _system = 'G';
24 _number = nn;
25 }
26 else if (nn <= maxGLONASS) {
27 _system = 'R';
28 _number = nn - maxGPS;
29 }
30 else if (nn <= maxGALILEO) {
31 _system = 'E';
32 _number = nn - maxGLONASS;
33 }
34 else if (nn <= maxQZSS) {
35 _system = 'J';
36 _number = nn - maxGALILEO;
37 }
38 else if (nn <= maxSBAS) {
39 _system = 'S';
40 _number = nn - maxQZSS;
41 }
42 else if (nn <= maxBDS) {
43 _system = 'C';
44 _number = nn - maxSBAS;
45 }
46 else if (nn <= maxNavIC) {
47 _system = 'I';
48 _number = nn - maxBDS;
49 }
50}
51
[8148]52//
[5741]53//////////////////////////////////////////////////////////////////////////////
54int t_prn::toInt() const {
55 if (_system == 'G') {
56 return _number;
57 }
58 else if (_system == 'R') {
59 return MAXPRN_GPS + _number;
60 }
[6014]61 else if (_system == 'E') {
62 return MAXPRN_GPS + MAXPRN_GLONASS + _number;
63 }
[6321]64 else if (_system == 'J') {
65 return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + _number;
66 }
67 else if (_system == 'S') {
68 return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + _number;
69 }
70 else if (_system == 'C') {
[8168]71 return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + _number;
[6321]72 }
[8168]73 else if (_system == 'I') {
74 return MAXPRN_GPS + MAXPRN_GLONASS + MAXPRN_GALILEO + MAXPRN_QZSS + MAXPRN_SBAS + MAXPRN_BDS + _number;
75 }
[5741]76 return 0;
77}
78
[8148]79//
[5741]80//////////////////////////////////////////////////////////////////////////////
81string t_prn::toString() const {
82 stringstream ss;
83 ss << _system << setfill('0') << setw(2) << _number;
84 return ss.str();
85}
86
[6809]87//
88//////////////////////////////////////////////////////////////////////////////
89string t_prn::toInternalString() const {
90 stringstream ss;
[10599]91 ss << _system << setfill('0') << setw(2) << _number << '_' << _flag;
[6809]92 return ss.str();
93}
94
[5741]95// Set from string
96////////////////////////////////////////////////////////////////////////////
[5838]97void t_prn::set(const std::string& str) {
[5741]98 unsigned prn = 0;
99 char system = '\x0';
100 const char* number = 0;
[8168]101 if ( str[0] == 'G' || str[0] == 'R' || str[0] == 'E' ||
102 str[0] == 'J' || str[0] == 'S' || str[0] == 'C' ||
103 str[0] == 'I') {
[5741]104 system = str[0];
105 number = str.c_str() + 1;
106 }
107 else if ( isdigit(str[0]) ) {
108 system = 'G';
109 number = str.c_str();
110 }
111 else {
[5838]112 throw "t_prn::set: wrong satellite ID: " + str;
[5741]113 }
114
115 char* tmpc = 0;
116 prn = strtol(number, &tmpc, 10);
117 if ( tmpc == number || *tmpc != '\x0' ) {
[5838]118 throw "t_prn::set: wrong satellite ID: " + str;
[5741]119 }
120
121 try {
[5838]122 this->set(system, prn);
[5741]123 }
124 catch (string exc) {
[5838]125 throw "t_prn::set: wrong satellite ID: " + str;
[5741]126 }
127}
128
[8148]129//
[5741]130//////////////////////////////////////////////////////////////////////////////
131t_prn::operator unsigned() const {
132 return toInt();
133}
134
[8148]135//
[5741]136//////////////////////////////////////////////////////////////////////////////
[5745]137istream& operator >> (istream& in, t_prn& prn) {
[5741]138 string str;
139 in >> str;
140 if (str.length() == 1 && !isdigit(str[0])) {
141 string str2;
142 in >> str2;
143 str += str2;
144 }
[5838]145 prn.set(str);
[5741]146 return in;
147}
Note: See TracBrowser for help on using the repository browser.