gps_pvt 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb3abd803cfe1b0b5199c4187fe17c2595eb603ab27e09f71b66fde11eeafce0
4
- data.tar.gz: 351d46d74583346750aec426c087c33bc13f9e9e9adff746567e40df7eb1e39e
3
+ metadata.gz: b87c77fbb3844eb0fd835ef079b8a379708a6fe24e3de4ceeb6934206573f489
4
+ data.tar.gz: a280c1aa82bed41319e13069907940a062a073a0b01c95eefa3d3d8c1b32c517
5
5
  SHA512:
6
- metadata.gz: 0fb78d49675fbbcb3fcfeb80debd7ca15f351be478ed5716f94a61b23f26af7ff957ee446a5ab6c4cc2e67abf2f251cf62845a347ea3810282987da04fa9a2e8
7
- data.tar.gz: ac74ba61920cad427d6e848f4621227d150bfe9a30a2f1465bd6d87681cfdd935e20e8e141575306b87c770b485f8dad1555766b7281980ba1f412adddff4e7c
6
+ metadata.gz: 761d7e99868e04d93adb48fac0345ff71467068657c544efe857ed4f6206ed8d11698871ad7dc73c232f4bd51094cf13c6752d96fc17307caccb4a2eab8dbe03
7
+ data.tar.gz: fd70c1d59dbf3885e7a2286726a9c16e0cfbec3097a105bbffde59e3a65ee22eb09f1d0b4032b371faf2d1695b074b0752f37763ef6b5716dd4214fed4566755
data/exe/to_ubx CHANGED
@@ -74,6 +74,17 @@ proc{|src|
74
74
  rcv.attach_online_ephemeris(src) if src
75
75
  }.call(misc_options[:online_ephemeris])
76
76
 
77
+ proc{
78
+ cache = nil
79
+ rcv.define_singleton_method(:leap_seconds){|t_meas|
80
+ cache ||= if self.solver.gps_space_node.is_valid_utc then
81
+ self.solver.gps_space_node.iono_utc.delta_t_LS
82
+ else
83
+ t_meas.leap_seconds
84
+ end
85
+ }
86
+ }.call
87
+
77
88
  # parse RINEX NAV
78
89
  files.each{|fname, ftype|
79
90
  case ftype
@@ -236,13 +247,14 @@ gen_rawx = proc{|t_meas, meas| # Convert to RXM-RAWX(0x15)
236
247
  ubx = [0xB5, 0x62, 0x02, 0x15, 0, 0]
237
248
  ubx += [t_meas.seconds, t_meas.week].pack("Ev").unpack("C*")
238
249
  ubx += [0] * 6
239
- meas_ubx = meas.collect{|sat, items|
250
+ gen_packet = proc{|sys, svid, sig, items|
240
251
  res = [0] * 32
241
252
  setter = proc{|value, offset, len, str, pre_proc|
242
253
  array = case value
243
254
  when Array; value
244
255
  when Symbol
245
- [items[GPS_PVT::GPS::Measurement.const_get(value)]]
256
+ k = [sig, value].join('_').to_sym
257
+ [items[GPS_PVT::GPS::Measurement.const_get(k)]]
246
258
  else
247
259
  next nil
248
260
  end
@@ -251,50 +263,73 @@ gen_rawx = proc{|t_meas, meas| # Convert to RXM-RAWX(0x15)
251
263
  array = array.pack(str).unpack("C*") if str
252
264
  res[offset - 16, len] = array
253
265
  }
254
- sys, svid = case sat
255
- when 1..32 # GPS
256
- [0, sat]
257
- when 120..158 # SBAS
258
- [1, sat]
259
- when 193..202 # QZSS
260
- [5, sat]
261
- when (0x100 + 1)..(0x100 + 32) # GLONASS
262
- setter.call(:L1_FREQUENCY,
263
- 39, 1, nil, proc{|v| v.replace([(v[0] ? glonass_freq_ch.call(v[0]) : 0) + 7])} )
264
- [6, sat - 0x100]
265
- else
266
- next nil # TODO Galileo, Beidou, ...
267
- end
268
- setter.call([sys, svid], 36, 2)
269
266
 
267
+ setter.call([sys, svid], 36, 2)
268
+
270
269
  trk_stat = 0
271
- setter.call(:L1_PSEUDORANGE,
270
+ setter.call(:PSEUDORANGE,
272
271
  16, 8, "E", proc{|v| v[0] ? (trk_stat |= 0x1) : v.clear})
273
- setter.call(:L1_PSEUDORANGE_SIGMA,
272
+ setter.call(:PSEUDORANGE_SIGMA,
274
273
  43, 1, nil, proc{|v|
275
274
  b = (Math::log2(v[0] / 1E-2).to_i & 0xF) rescue 0x8
276
275
  v.replace((trk_stat & 0x1 == 0x1) ? [b] : [])
277
276
  })
278
- setter.call(:L1_DOPPLER, 32, 4, "e") rescue next nil
279
- setter.call(:L1_DOPPLER_SIGMA,
277
+ setter.call(:DOPPLER, 32, 4, "e") rescue next nil
278
+ setter.call(:DOPPLER_SIGMA,
280
279
  45, 1, nil, proc{|v| v.replace(v[0] ? [Math::log2(v[0] / 2E-3).to_i & 0xF] : [0x8])})
281
- setter.call(:L1_CARRIER_PHASE,
280
+ setter.call(:CARRIER_PHASE,
282
281
  24, 8, "E", proc{|v| v[0] ? (trk_stat |= 0x2) : v.clear})
283
- setter.call(:L1_CARRIER_PHASE_SIGMA,
282
+ setter.call(:CARRIER_PHASE_SIGMA,
284
283
  44, 1, nil, proc{|v|
285
284
  b = ((v[0] / 0.004).to_i & 0xF) rescue 0x8
286
285
  v.replace((trk_stat & 0x2 == 0x2) ? [b] : [])
287
286
  })
288
- setter.call(:L1_SIGNAL_STRENGTH_dBHz,
287
+ setter.call(:SIGNAL_STRENGTH_dBHz,
289
288
  42, 1, nil, proc{|v| v.replace(v[0] ? [v[0].to_i] : [])})
290
- setter.call(:L1_LOCK_SEC,
289
+ setter.call(:LOCK_SEC,
291
290
  40, 2, "v", proc{|v| v.replace(v[0] ? [(v[0] / 1E-3).to_i] : [])})
292
291
  setter.call([trk_stat], 46, 1)
292
+ res.define_singleton_method(:set, &setter)
293
293
 
294
294
  res
295
+ }
296
+ meas_ubx = meas.inject([]){|packets, (sat, items)|
297
+ case sat
298
+ when 1..32 # GPS
299
+ packets << gen_packet.call(0, sat, :L1, items)
300
+ packets += {:L2CL => 3, :L2CM => 4}.collect{|sig, sigid|
301
+ next nil unless packet = gen_packet.call(0, sat, sig, items)
302
+ packet[38 - 16] = sigid
303
+ packet
304
+ }
305
+ when 120..158 # SBAS
306
+ packets << gen_packet.call(1, sat, :L1, items)
307
+ when 193..202 # QZSS
308
+ packets << gen_packet.call(5, sat, :L1, items)
309
+ packets += {:L2CL => 5, :L2CM => 4}.collect{|sig, sigid|
310
+ next nil unless packet = gen_packet.call(5, sat, sig, items)
311
+ packet[38 - 16] = sigid
312
+ packet
313
+ }
314
+ when (0x100 + 1)..(0x100 + 32) # GLONASS
315
+ packet = gen_packet.call(6, sat - 0x100, :L1, items)
316
+ packet.set(:FREQUENCY,
317
+ 39, 1, nil,
318
+ proc{|v| v.replace([(v[0] ? glonass_freq_ch.call(v[0]) : 0) + 7])} ) if packet
319
+ packets << packet
320
+ else
321
+ # TODO Galileo, Beidou, ...
322
+ end
295
323
  }.compact
324
+
325
+ proc{|ls| # leap seconds
326
+ next unless ls
327
+ ubx[6 + 10] = ls
328
+ ubx[6 + 12] |= 0x01
329
+ }.call(rcv.leap_seconds(t_meas))
296
330
  ubx[6 + 11] = meas_ubx.size
297
- ubx += meas_ubx.flatten(1)
331
+ ubx[6 + 13] = 1 # version
332
+ ubx += meas_ubx.flatten
298
333
  ubx += [0, 0]
299
334
  GPS_PVT::UBX::update(ubx).pack("C*")
300
335
  }
@@ -1862,61 +1862,60 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
1862
1862
  #define SWIGTYPE_p_GPS_SolverOptionsT_double_t swig_types[12]
1863
1863
  #define SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t swig_types[13]
1864
1864
  #define SWIGTYPE_p_GPS_SolverT_double_t swig_types[14]
1865
- #define SWIGTYPE_p_GPS_Solver_GeneralOptionsT_double_t swig_types[15]
1866
- #define SWIGTYPE_p_GPS_SpaceNodeT_double_t swig_types[16]
1867
- #define SWIGTYPE_p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters swig_types[17]
1868
- #define SWIGTYPE_p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris swig_types[18]
1869
- #define SWIGTYPE_p_GPS_TimeT_double_t swig_types[19]
1870
- #define SWIGTYPE_p_GPS_TimeT_double_t__leap_second_event_t swig_types[20]
1871
- #define SWIGTYPE_p_GPS_TimeT_double_t__leap_year_prop_res_t swig_types[21]
1872
- #define SWIGTYPE_p_GPS_User_PVTT_double_t swig_types[22]
1873
- #define SWIGTYPE_p_MatrixT_ComplexT_double_t_Array2D_DenseT_ComplexT_double_t_t_MatrixViewBaseT_t_t swig_types[23]
1874
- #define SWIGTYPE_p_MatrixT_double_Array2D_DenseT_double_t_MatrixViewBaseT_t_t swig_types[24]
1875
- #define SWIGTYPE_p_MatrixViewBaseT_t swig_types[25]
1876
- #define SWIGTYPE_p_MatrixViewFilterT_MatrixViewBaseT_t_t swig_types[26]
1877
- #define SWIGTYPE_p_Matrix_FrozenT_double_Array2D_DenseT_double_t_MatrixViewBaseT_t_t swig_types[27]
1878
- #define SWIGTYPE_p_PushableData swig_types[28]
1879
- #define SWIGTYPE_p_RINEX_ClockT_double_t swig_types[29]
1880
- #define SWIGTYPE_p_RINEX_ObservationT_double_t swig_types[30]
1881
- #define SWIGTYPE_p_SBAS_EphemerisT_double_t swig_types[31]
1882
- #define SWIGTYPE_p_SBAS_SolverOptionsT_double_t swig_types[32]
1883
- #define SWIGTYPE_p_SBAS_SpaceNodeT_double_t swig_types[33]
1884
- #define SWIGTYPE_p_SBAS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris swig_types[34]
1885
- #define SWIGTYPE_p_SP3T_double_t swig_types[35]
1886
- #define SWIGTYPE_p_System_ENUT_double_WGS84_t swig_types[36]
1887
- #define SWIGTYPE_p_System_LLHT_double_WGS84_t swig_types[37]
1888
- #define SWIGTYPE_p_System_XYZT_double_WGS84_t swig_types[38]
1889
- #define SWIGTYPE_p_available_satellites_t swig_types[39]
1890
- #define SWIGTYPE_p_char swig_types[40]
1891
- #define SWIGTYPE_p_double swig_types[41]
1892
- #define SWIGTYPE_p_enu_t swig_types[42]
1893
- #define SWIGTYPE_p_eph_t swig_types[43]
1894
- #define SWIGTYPE_p_float_t swig_types[44]
1895
- #define SWIGTYPE_p_gps_space_node_t swig_types[45]
1896
- #define SWIGTYPE_p_gps_time_t swig_types[46]
1897
- #define SWIGTYPE_p_int swig_types[47]
1898
- #define SWIGTYPE_p_int_t swig_types[48]
1899
- #define SWIGTYPE_p_llh_t swig_types[49]
1900
- #define SWIGTYPE_p_p_GPS_Solver_RAIM_LSRT_double_GPS_Solver_Base_DebugT_double_GPS_Solver_BaseT_double_t_t_t__user_pvt_t__detection_t swig_types[50]
1901
- #define SWIGTYPE_p_p_GPS_Solver_RAIM_LSRT_double_GPS_Solver_Base_DebugT_double_GPS_Solver_BaseT_double_t_t_t__user_pvt_t__exclusion_t swig_types[51]
1902
- #define SWIGTYPE_p_p_double swig_types[52]
1903
- #define SWIGTYPE_p_range_correction_list_t swig_types[53]
1904
- #define SWIGTYPE_p_s16_t swig_types[54]
1905
- #define SWIGTYPE_p_s32_t swig_types[55]
1906
- #define SWIGTYPE_p_s8_t swig_types[56]
1907
- #define SWIGTYPE_p_satellites_t swig_types[57]
1908
- #define SWIGTYPE_p_self_t swig_types[58]
1909
- #define SWIGTYPE_p_std__vectorT_std__pairT_int_SBAS_SpaceNodeT_double_t__Satellite_const_p_t_t swig_types[59]
1910
- #define SWIGTYPE_p_super_t swig_types[60]
1911
- #define SWIGTYPE_p_swig__GC_VALUE swig_types[61]
1912
- #define SWIGTYPE_p_u16_t swig_types[62]
1913
- #define SWIGTYPE_p_u32_t swig_types[63]
1914
- #define SWIGTYPE_p_u8_t swig_types[64]
1915
- #define SWIGTYPE_p_uint_t swig_types[65]
1916
- #define SWIGTYPE_p_unsigned_int swig_types[66]
1917
- #define SWIGTYPE_p_xyz_t swig_types[67]
1918
- static swig_type_info *swig_types[69];
1919
- static swig_module_info swig_module = {swig_types, 68, 0, 0, 0, 0};
1865
+ #define SWIGTYPE_p_GPS_SpaceNodeT_double_t swig_types[15]
1866
+ #define SWIGTYPE_p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters swig_types[16]
1867
+ #define SWIGTYPE_p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris swig_types[17]
1868
+ #define SWIGTYPE_p_GPS_TimeT_double_t swig_types[18]
1869
+ #define SWIGTYPE_p_GPS_TimeT_double_t__leap_second_event_t swig_types[19]
1870
+ #define SWIGTYPE_p_GPS_TimeT_double_t__leap_year_prop_res_t swig_types[20]
1871
+ #define SWIGTYPE_p_GPS_User_PVTT_double_t swig_types[21]
1872
+ #define SWIGTYPE_p_MatrixT_ComplexT_double_t_Array2D_DenseT_ComplexT_double_t_t_MatrixViewBaseT_t_t swig_types[22]
1873
+ #define SWIGTYPE_p_MatrixT_double_Array2D_DenseT_double_t_MatrixViewBaseT_t_t swig_types[23]
1874
+ #define SWIGTYPE_p_MatrixViewBaseT_t swig_types[24]
1875
+ #define SWIGTYPE_p_MatrixViewFilterT_MatrixViewBaseT_t_t swig_types[25]
1876
+ #define SWIGTYPE_p_Matrix_FrozenT_double_Array2D_DenseT_double_t_MatrixViewBaseT_t_t swig_types[26]
1877
+ #define SWIGTYPE_p_PushableData swig_types[27]
1878
+ #define SWIGTYPE_p_RINEX_ClockT_double_t swig_types[28]
1879
+ #define SWIGTYPE_p_RINEX_ObservationT_double_t swig_types[29]
1880
+ #define SWIGTYPE_p_SBAS_EphemerisT_double_t swig_types[30]
1881
+ #define SWIGTYPE_p_SBAS_SolverOptionsT_double_t swig_types[31]
1882
+ #define SWIGTYPE_p_SBAS_SpaceNodeT_double_t swig_types[32]
1883
+ #define SWIGTYPE_p_SBAS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris swig_types[33]
1884
+ #define SWIGTYPE_p_SP3T_double_t swig_types[34]
1885
+ #define SWIGTYPE_p_System_ENUT_double_WGS84_t swig_types[35]
1886
+ #define SWIGTYPE_p_System_LLHT_double_WGS84_t swig_types[36]
1887
+ #define SWIGTYPE_p_System_XYZT_double_WGS84_t swig_types[37]
1888
+ #define SWIGTYPE_p_available_satellites_t swig_types[38]
1889
+ #define SWIGTYPE_p_char swig_types[39]
1890
+ #define SWIGTYPE_p_double swig_types[40]
1891
+ #define SWIGTYPE_p_enu_t swig_types[41]
1892
+ #define SWIGTYPE_p_eph_t swig_types[42]
1893
+ #define SWIGTYPE_p_float_t swig_types[43]
1894
+ #define SWIGTYPE_p_gps_space_node_t swig_types[44]
1895
+ #define SWIGTYPE_p_gps_time_t swig_types[45]
1896
+ #define SWIGTYPE_p_int swig_types[46]
1897
+ #define SWIGTYPE_p_int_t swig_types[47]
1898
+ #define SWIGTYPE_p_llh_t swig_types[48]
1899
+ #define SWIGTYPE_p_p_GPS_Solver_RAIM_LSRT_double_GPS_Solver_Base_DebugT_double_GPS_Solver_BaseT_double_t_t_t__user_pvt_t__detection_t swig_types[49]
1900
+ #define SWIGTYPE_p_p_GPS_Solver_RAIM_LSRT_double_GPS_Solver_Base_DebugT_double_GPS_Solver_BaseT_double_t_t_t__user_pvt_t__exclusion_t swig_types[50]
1901
+ #define SWIGTYPE_p_p_double swig_types[51]
1902
+ #define SWIGTYPE_p_range_correction_list_t swig_types[52]
1903
+ #define SWIGTYPE_p_s16_t swig_types[53]
1904
+ #define SWIGTYPE_p_s32_t swig_types[54]
1905
+ #define SWIGTYPE_p_s8_t swig_types[55]
1906
+ #define SWIGTYPE_p_satellites_t swig_types[56]
1907
+ #define SWIGTYPE_p_self_t swig_types[57]
1908
+ #define SWIGTYPE_p_std__vectorT_std__pairT_int_SBAS_SpaceNodeT_double_t__Satellite_const_p_t_t swig_types[58]
1909
+ #define SWIGTYPE_p_super_t swig_types[59]
1910
+ #define SWIGTYPE_p_swig__GC_VALUE swig_types[60]
1911
+ #define SWIGTYPE_p_u16_t swig_types[61]
1912
+ #define SWIGTYPE_p_u32_t swig_types[62]
1913
+ #define SWIGTYPE_p_u8_t swig_types[63]
1914
+ #define SWIGTYPE_p_uint_t swig_types[64]
1915
+ #define SWIGTYPE_p_unsigned_int swig_types[65]
1916
+ #define SWIGTYPE_p_xyz_t swig_types[66]
1917
+ static swig_type_info *swig_types[68];
1918
+ static swig_module_info swig_module = {swig_types, 67, 0, 0, 0, 0};
1920
1919
  #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
1921
1920
  #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
1922
1921
 
@@ -1965,6 +1964,7 @@ static VALUE mGPS;
1965
1964
  #include "navigation/GPS_Solver_Base.h"
1966
1965
  #include "navigation/GPS_Solver.h"
1967
1966
  #include "navigation/GPS_Solver_RAIM.h"
1967
+ #include "navigation/GPS_Solver_MultiFrequency.h"
1968
1968
  #include "navigation/SBAS_Solver.h"
1969
1969
  #include "navigation/GLONASS_Solver.h"
1970
1970
 
@@ -2538,6 +2538,16 @@ struct GPS_Measurement {
2538
2538
  L1_SIGNAL_STRENGTH_dBHz,
2539
2539
  L1_LOCK_SEC,
2540
2540
  L1_FREQUENCY,
2541
+
2542
+
2543
+ L2CM_PSEUDORANGE, L2CL_PSEUDORANGE, L2CM_PSEUDORANGE_SIGMA, L2CL_PSEUDORANGE_SIGMA,
2544
+ L2CM_CARRIER_PHASE, L2CL_CARRIER_PHASE, L2CM_CARRIER_PHASE_SIGMA, L2CL_CARRIER_PHASE_SIGMA,
2545
+ L2CM_DOPPLER, L2CL_DOPPLER, L2CM_DOPPLER_SIGMA, L2CL_DOPPLER_SIGMA,
2546
+ L2CM_RANGE_RATE, L2CL_RANGE_RATE, L2CM_RANGE_RATE_SIGMA, L2CL_RANGE_RATE_SIGMA,
2547
+ L2CM_SIGNAL_STRENGTH_dBHz, L2CL_SIGNAL_STRENGTH_dBHz,
2548
+ L2CM_LOCK_SEC, L2CL_LOCK_SEC,
2549
+
2550
+
2541
2551
  ITEMS_PREDEFINED,
2542
2552
  };
2543
2553
  void add(const int &prn, const int &key, const FloatT &value){
@@ -2556,12 +2566,14 @@ struct GPS_SolverOptions_Common {
2556
2566
 
2557
2567
  template <class FloatT>
2558
2568
  struct GPS_SolverOptions
2559
- : public GPS_SinglePositioning<FloatT>::options_t,
2569
+ : public GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >::options_t,
2560
2570
  GPS_SolverOptions_Common<FloatT> {
2561
- typedef typename GPS_SinglePositioning<FloatT>::options_t base_t;
2571
+ typedef typename GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >::options_t base_t;
2562
2572
  void exclude(const int &prn){base_t::exclude_prn.set(prn);}
2563
2573
  void include(const int &prn){base_t::exclude_prn.reset(prn);}
2564
2574
  std::vector<int> excluded() const {return base_t::exclude_prn.excluded();}
2575
+ bool get_exclude_L2C() {return base_t::exclude_L2C;}
2576
+ bool set_exclude_L2C(const bool &b) {return base_t::exclude_L2C = b;}
2565
2577
  GPS_Solver_GeneralOptions<FloatT> *cast_general(){return this;}
2566
2578
  const GPS_Solver_GeneralOptions<FloatT> *cast_general() const {return this;}
2567
2579
  };
@@ -2617,7 +2629,8 @@ template <class BaseT, class HookT>
2617
2629
  struct HookableSolver : public BaseT {
2618
2630
  typedef BaseT base_t;
2619
2631
  HookT *hook;
2620
- HookableSolver(const BaseT &base) : BaseT(base), hook(NULL) {}
2632
+ template <class ArgT>
2633
+ HookableSolver(const ArgT &);
2621
2634
  virtual typename base_t::relative_property_t relative_property(
2622
2635
  const typename base_t::prn_t &prn,
2623
2636
  const typename base_t::measurement_t::mapped_type &measurement,
@@ -2659,7 +2672,9 @@ struct GPS_Solver
2659
2672
  struct gps_t {
2660
2673
  GPS_SpaceNode<FloatT> space_node;
2661
2674
  GPS_SolverOptions<FloatT> options;
2662
- HookableSolver<GPS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
2675
+ HookableSolver<
2676
+ GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >,
2677
+ GPS_Solver<FloatT> > solver;
2663
2678
  struct ephemeris_proxy_t {
2664
2679
  struct item_t {
2665
2680
  const void *impl;
@@ -2681,19 +2696,21 @@ struct GPS_Solver
2681
2696
  solver.satellites.impl_select = forward;
2682
2697
  }
2683
2698
  } ephemeris_proxy;
2684
- gps_t() : space_node(), options(), solver(GPS_SinglePositioning<FloatT>(space_node)), ephemeris_proxy(solver) {}
2699
+ gps_t() : space_node(), options(), solver(space_node), ephemeris_proxy(solver) {
2700
+ options.exclude_L2C = true;
2701
+ }
2685
2702
  } gps;
2686
2703
  struct sbas_t {
2687
2704
  SBAS_SpaceNode<FloatT> space_node;
2688
2705
  SBAS_SolverOptions<FloatT> options;
2689
2706
  HookableSolver<SBAS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
2690
- sbas_t() : space_node(), options(), solver(SBAS_SinglePositioning<FloatT>(space_node)) {}
2707
+ sbas_t() : space_node(), options(), solver(space_node) {}
2691
2708
  } sbas;
2692
2709
  struct glonass_t {
2693
2710
  GLONASS_SpaceNode<FloatT> space_node;
2694
2711
  GLONASS_SolverOptions<FloatT> options;
2695
2712
  HookableSolver<GLONASS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
2696
- glonass_t() : space_node(), options(), solver(GLONASS_SinglePositioning<FloatT>(space_node)) {}
2713
+ glonass_t() : space_node(), options(), solver(space_node) {}
2697
2714
  } glonass;
2698
2715
  VALUE hooks;
2699
2716
  typedef std::vector<GPS_RangeCorrector<FloatT> > user_correctors_t;
@@ -4057,6 +4074,20 @@ SWIGINTERN double const &GPS_SolverOptions_Common_Sl_double_Sg__get_residual_mas
4057
4074
  return self->cast_general()->residual_mask;
4058
4075
  }
4059
4076
 
4077
+ template <> template <>
4078
+ HookableSolver<
4079
+ GPS_Solver_MultiFrequency<GPS_SinglePositioning<double> >,
4080
+ GPS_Solver<double> >
4081
+ ::HookableSolver<GPS_SpaceNode<double> >(const GPS_SpaceNode<double> &sn)
4082
+ : GPS_Solver_MultiFrequency<GPS_SinglePositioning<double> >(sn), hook(NULL) {}
4083
+ template <> template <>
4084
+ HookableSolver<SBAS_SinglePositioning<double>, GPS_Solver<double> >
4085
+ ::HookableSolver<SBAS_SpaceNode<double> >(const SBAS_SpaceNode<double> &sn)
4086
+ : SBAS_SinglePositioning<double>(sn), hook(NULL) {}
4087
+ template <> template <>
4088
+ HookableSolver<GLONASS_SinglePositioning<double>, GPS_Solver<double> >
4089
+ ::HookableSolver<GLONASS_SpaceNode<double> >(const GLONASS_SpaceNode<double> &sn)
4090
+ : GLONASS_SinglePositioning<double>(sn), hook(NULL) {}
4060
4091
  template <>
4061
4092
  GPS_Solver<double>::base_t::relative_property_t
4062
4093
  GPS_Solver<double>::relative_property(
@@ -16602,6 +16633,186 @@ A class method.
16602
16633
 
16603
16634
  A class method.
16604
16635
 
16636
+ */
16637
+ /*
16638
+ Document-method: GPS_PVT::GPS.L2CM_PSEUDORANGE
16639
+
16640
+ call-seq:
16641
+ L2CM_PSEUDORANGE -> int
16642
+
16643
+ A class method.
16644
+
16645
+ */
16646
+ /*
16647
+ Document-method: GPS_PVT::GPS.L2CL_PSEUDORANGE
16648
+
16649
+ call-seq:
16650
+ L2CL_PSEUDORANGE -> int
16651
+
16652
+ A class method.
16653
+
16654
+ */
16655
+ /*
16656
+ Document-method: GPS_PVT::GPS.L2CM_PSEUDORANGE_SIGMA
16657
+
16658
+ call-seq:
16659
+ L2CM_PSEUDORANGE_SIGMA -> int
16660
+
16661
+ A class method.
16662
+
16663
+ */
16664
+ /*
16665
+ Document-method: GPS_PVT::GPS.L2CL_PSEUDORANGE_SIGMA
16666
+
16667
+ call-seq:
16668
+ L2CL_PSEUDORANGE_SIGMA -> int
16669
+
16670
+ A class method.
16671
+
16672
+ */
16673
+ /*
16674
+ Document-method: GPS_PVT::GPS.L2CM_CARRIER_PHASE
16675
+
16676
+ call-seq:
16677
+ L2CM_CARRIER_PHASE -> int
16678
+
16679
+ A class method.
16680
+
16681
+ */
16682
+ /*
16683
+ Document-method: GPS_PVT::GPS.L2CL_CARRIER_PHASE
16684
+
16685
+ call-seq:
16686
+ L2CL_CARRIER_PHASE -> int
16687
+
16688
+ A class method.
16689
+
16690
+ */
16691
+ /*
16692
+ Document-method: GPS_PVT::GPS.L2CM_CARRIER_PHASE_SIGMA
16693
+
16694
+ call-seq:
16695
+ L2CM_CARRIER_PHASE_SIGMA -> int
16696
+
16697
+ A class method.
16698
+
16699
+ */
16700
+ /*
16701
+ Document-method: GPS_PVT::GPS.L2CL_CARRIER_PHASE_SIGMA
16702
+
16703
+ call-seq:
16704
+ L2CL_CARRIER_PHASE_SIGMA -> int
16705
+
16706
+ A class method.
16707
+
16708
+ */
16709
+ /*
16710
+ Document-method: GPS_PVT::GPS.L2CM_DOPPLER
16711
+
16712
+ call-seq:
16713
+ L2CM_DOPPLER -> int
16714
+
16715
+ A class method.
16716
+
16717
+ */
16718
+ /*
16719
+ Document-method: GPS_PVT::GPS.L2CL_DOPPLER
16720
+
16721
+ call-seq:
16722
+ L2CL_DOPPLER -> int
16723
+
16724
+ A class method.
16725
+
16726
+ */
16727
+ /*
16728
+ Document-method: GPS_PVT::GPS.L2CM_DOPPLER_SIGMA
16729
+
16730
+ call-seq:
16731
+ L2CM_DOPPLER_SIGMA -> int
16732
+
16733
+ A class method.
16734
+
16735
+ */
16736
+ /*
16737
+ Document-method: GPS_PVT::GPS.L2CL_DOPPLER_SIGMA
16738
+
16739
+ call-seq:
16740
+ L2CL_DOPPLER_SIGMA -> int
16741
+
16742
+ A class method.
16743
+
16744
+ */
16745
+ /*
16746
+ Document-method: GPS_PVT::GPS.L2CM_RANGE_RATE
16747
+
16748
+ call-seq:
16749
+ L2CM_RANGE_RATE -> int
16750
+
16751
+ A class method.
16752
+
16753
+ */
16754
+ /*
16755
+ Document-method: GPS_PVT::GPS.L2CL_RANGE_RATE
16756
+
16757
+ call-seq:
16758
+ L2CL_RANGE_RATE -> int
16759
+
16760
+ A class method.
16761
+
16762
+ */
16763
+ /*
16764
+ Document-method: GPS_PVT::GPS.L2CM_RANGE_RATE_SIGMA
16765
+
16766
+ call-seq:
16767
+ L2CM_RANGE_RATE_SIGMA -> int
16768
+
16769
+ A class method.
16770
+
16771
+ */
16772
+ /*
16773
+ Document-method: GPS_PVT::GPS.L2CL_RANGE_RATE_SIGMA
16774
+
16775
+ call-seq:
16776
+ L2CL_RANGE_RATE_SIGMA -> int
16777
+
16778
+ A class method.
16779
+
16780
+ */
16781
+ /*
16782
+ Document-method: GPS_PVT::GPS.L2CM_SIGNAL_STRENGTH_dBHz
16783
+
16784
+ call-seq:
16785
+ L2CM_SIGNAL_STRENGTH_dBHz -> int
16786
+
16787
+ A class method.
16788
+
16789
+ */
16790
+ /*
16791
+ Document-method: GPS_PVT::GPS.L2CL_SIGNAL_STRENGTH_dBHz
16792
+
16793
+ call-seq:
16794
+ L2CL_SIGNAL_STRENGTH_dBHz -> int
16795
+
16796
+ A class method.
16797
+
16798
+ */
16799
+ /*
16800
+ Document-method: GPS_PVT::GPS.L2CM_LOCK_SEC
16801
+
16802
+ call-seq:
16803
+ L2CM_LOCK_SEC -> int
16804
+
16805
+ A class method.
16806
+
16807
+ */
16808
+ /*
16809
+ Document-method: GPS_PVT::GPS.L2CL_LOCK_SEC
16810
+
16811
+ call-seq:
16812
+ L2CL_LOCK_SEC -> int
16813
+
16814
+ A class method.
16815
+
16605
16816
  */
16606
16817
  /*
16607
16818
  Document-method: GPS_PVT::GPS.ITEMS_PREDEFINED
@@ -16900,121 +17111,6 @@ free_GPS_SolverOptions_Common_Sl_double_Sg_(void *self) {
16900
17111
  delete arg1;
16901
17112
  }
16902
17113
 
16903
- /*
16904
- Document-method: GPS_PVT::GPS::SolverOptionsCommon.cast_general
16905
-
16906
- call-seq:
16907
- cast_general -> GPS_Solver_GeneralOptions< double > *
16908
- cast_general -> GPS_Solver_GeneralOptions< double > const
16909
-
16910
- An instance method.
16911
-
16912
- */
16913
- SWIGINTERN VALUE
16914
- _wrap_SolverOptionsCommon_cast_general__SWIG_0(int argc, VALUE *argv, VALUE self) {
16915
- GPS_SolverOptions_Common< double > *arg1 = (GPS_SolverOptions_Common< double > *) 0 ;
16916
- void *argp1 = 0 ;
16917
- int res1 = 0 ;
16918
- GPS_Solver_GeneralOptions< double > *result = 0 ;
16919
- VALUE vresult = Qnil;
16920
-
16921
- if ((argc < 0) || (argc > 0)) {
16922
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
16923
- }
16924
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t, 0 | 0 );
16925
- if (!SWIG_IsOK(res1)) {
16926
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GPS_SolverOptions_Common< double > *","cast_general", 1, self ));
16927
- }
16928
- arg1 = reinterpret_cast< GPS_SolverOptions_Common< double > * >(argp1);
16929
- {
16930
- try {
16931
- result = (GPS_Solver_GeneralOptions< double > *)(arg1)->cast_general();
16932
- } catch (const native_exception &e) {
16933
- e.regenerate();
16934
- SWIG_fail;
16935
- } catch (const std::exception& e) {
16936
- SWIG_exception_fail(SWIG_RuntimeError, e.what());
16937
- }
16938
- }
16939
- vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GPS_Solver_GeneralOptionsT_double_t, 0 | 0 );
16940
- return vresult;
16941
- fail:
16942
- return Qnil;
16943
- }
16944
-
16945
-
16946
- SWIGINTERN VALUE
16947
- _wrap_SolverOptionsCommon_cast_general__SWIG_1(int argc, VALUE *argv, VALUE self) {
16948
- GPS_SolverOptions_Common< double > *arg1 = (GPS_SolverOptions_Common< double > *) 0 ;
16949
- void *argp1 = 0 ;
16950
- int res1 = 0 ;
16951
- GPS_Solver_GeneralOptions< double > *result = 0 ;
16952
- VALUE vresult = Qnil;
16953
-
16954
- if ((argc < 0) || (argc > 0)) {
16955
- rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
16956
- }
16957
- res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t, 0 | 0 );
16958
- if (!SWIG_IsOK(res1)) {
16959
- SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GPS_SolverOptions_Common< double > const *","cast_general", 1, self ));
16960
- }
16961
- arg1 = reinterpret_cast< GPS_SolverOptions_Common< double > * >(argp1);
16962
- {
16963
- try {
16964
- result = (GPS_Solver_GeneralOptions< double > *)((GPS_SolverOptions_Common< double > const *)arg1)->cast_general();
16965
- } catch (const native_exception &e) {
16966
- e.regenerate();
16967
- SWIG_fail;
16968
- } catch (const std::exception& e) {
16969
- SWIG_exception_fail(SWIG_RuntimeError, e.what());
16970
- }
16971
- }
16972
- vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GPS_Solver_GeneralOptionsT_double_t, 0 | 0 );
16973
- return vresult;
16974
- fail:
16975
- return Qnil;
16976
- }
16977
-
16978
-
16979
- SWIGINTERN VALUE _wrap_SolverOptionsCommon_cast_general(int nargs, VALUE *args, VALUE self) {
16980
- int argc;
16981
- VALUE argv[2];
16982
- int ii;
16983
-
16984
- argc = nargs + 1;
16985
- argv[0] = self;
16986
- if (argc > 2) SWIG_fail;
16987
- for (ii = 1; (ii < argc); ++ii) {
16988
- argv[ii] = args[ii-1];
16989
- }
16990
- if (argc == 1) {
16991
- int _v;
16992
- void *vptr = 0;
16993
- int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t, 0);
16994
- _v = SWIG_CheckState(res);
16995
- if (_v) {
16996
- return _wrap_SolverOptionsCommon_cast_general__SWIG_0(nargs, args, self);
16997
- }
16998
- }
16999
- if (argc == 1) {
17000
- int _v;
17001
- void *vptr = 0;
17002
- int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t, 0);
17003
- _v = SWIG_CheckState(res);
17004
- if (_v) {
17005
- return _wrap_SolverOptionsCommon_cast_general__SWIG_1(nargs, args, self);
17006
- }
17007
- }
17008
-
17009
- fail:
17010
- Ruby_Format_OverloadedError( argc, 2, "SolverOptionsCommon.cast_general",
17011
- " GPS_Solver_GeneralOptions< double > SolverOptionsCommon.cast_general()\n"
17012
- " GPS_Solver_GeneralOptions< double > const * SolverOptionsCommon.cast_general()\n");
17013
-
17014
- return Qnil;
17015
- }
17016
-
17017
-
17018
17114
  /*
17019
17115
  Document-method: GPS_PVT::GPS::SolverOptionsCommon.elevation_mask=
17020
17116
 
@@ -17359,6 +17455,100 @@ fail:
17359
17455
  }
17360
17456
 
17361
17457
 
17458
+ /*
17459
+ Document-method: GPS_PVT::GPS::SolverOptions.exclude_L2C?
17460
+
17461
+ call-seq:
17462
+ exclude_L2C? -> bool
17463
+
17464
+ An instance method.
17465
+
17466
+ */
17467
+ SWIGINTERN VALUE
17468
+ _wrap_SolverOptions_exclude_L2Cq___(int argc, VALUE *argv, VALUE self) {
17469
+ GPS_SolverOptions< double > *arg1 = (GPS_SolverOptions< double > *) 0 ;
17470
+ void *argp1 = 0 ;
17471
+ int res1 = 0 ;
17472
+ bool result;
17473
+ VALUE vresult = Qnil;
17474
+
17475
+ if ((argc < 0) || (argc > 0)) {
17476
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
17477
+ }
17478
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GPS_SolverOptionsT_double_t, 0 | 0 );
17479
+ if (!SWIG_IsOK(res1)) {
17480
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GPS_SolverOptions< double > *","get_exclude_L2C", 1, self ));
17481
+ }
17482
+ arg1 = reinterpret_cast< GPS_SolverOptions< double > * >(argp1);
17483
+ {
17484
+ try {
17485
+ result = (bool)(arg1)->get_exclude_L2C();
17486
+ } catch (const native_exception &e) {
17487
+ e.regenerate();
17488
+ SWIG_fail;
17489
+ } catch (const std::exception& e) {
17490
+ SWIG_exception_fail(SWIG_RuntimeError, e.what());
17491
+ }
17492
+ }
17493
+ vresult = SWIG_From_bool(static_cast< bool >(result));
17494
+ return vresult;
17495
+ fail:
17496
+ return Qnil;
17497
+ }
17498
+
17499
+
17500
+ /*
17501
+ Document-method: GPS_PVT::GPS::SolverOptions.exclude_L2C=
17502
+
17503
+ call-seq:
17504
+ exclude_L2C=(bool const & b) -> bool
17505
+
17506
+ An instance method.
17507
+
17508
+ */
17509
+ SWIGINTERN VALUE
17510
+ _wrap_SolverOptions_exclude_L2Ce___(int argc, VALUE *argv, VALUE self) {
17511
+ GPS_SolverOptions< double > *arg1 = (GPS_SolverOptions< double > *) 0 ;
17512
+ bool *arg2 = 0 ;
17513
+ void *argp1 = 0 ;
17514
+ int res1 = 0 ;
17515
+ bool temp2 ;
17516
+ bool val2 ;
17517
+ int ecode2 = 0 ;
17518
+ bool result;
17519
+ VALUE vresult = Qnil;
17520
+
17521
+ if ((argc < 1) || (argc > 1)) {
17522
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 1)",argc); SWIG_fail;
17523
+ }
17524
+ res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_GPS_SolverOptionsT_double_t, 0 | 0 );
17525
+ if (!SWIG_IsOK(res1)) {
17526
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "GPS_SolverOptions< double > *","set_exclude_L2C", 1, self ));
17527
+ }
17528
+ arg1 = reinterpret_cast< GPS_SolverOptions< double > * >(argp1);
17529
+ ecode2 = SWIG_AsVal_bool(argv[0], &val2);
17530
+ if (!SWIG_IsOK(ecode2)) {
17531
+ SWIG_exception_fail(SWIG_ArgError(ecode2), Ruby_Format_TypeError( "", "bool","set_exclude_L2C", 2, argv[0] ));
17532
+ }
17533
+ temp2 = static_cast< bool >(val2);
17534
+ arg2 = &temp2;
17535
+ {
17536
+ try {
17537
+ result = (bool)(arg1)->set_exclude_L2C((bool const &)*arg2);
17538
+ } catch (const native_exception &e) {
17539
+ e.regenerate();
17540
+ SWIG_fail;
17541
+ } catch (const std::exception& e) {
17542
+ SWIG_exception_fail(SWIG_RuntimeError, e.what());
17543
+ }
17544
+ }
17545
+ vresult = SWIG_From_bool(static_cast< bool >(result));
17546
+ return vresult;
17547
+ fail:
17548
+ return Qnil;
17549
+ }
17550
+
17551
+
17362
17552
  SWIGINTERN VALUE
17363
17553
  #ifdef HAVE_RB_DEFINE_ALLOC_FUNC
17364
17554
  _wrap_SolverOptions_allocate(VALUE self)
@@ -27276,7 +27466,6 @@ static swig_type_info _swigt__p_GPS_MeasurementT_double_t = {"_p_GPS_Measurement
27276
27466
  static swig_type_info _swigt__p_GPS_SolverOptionsT_double_t = {"_p_GPS_SolverOptionsT_double_t", "GPS_SolverOptions< double > *", 0, 0, (void*)0, 0};
27277
27467
  static swig_type_info _swigt__p_GPS_SolverOptions_CommonT_double_t = {"_p_GPS_SolverOptions_CommonT_double_t", "GPS_SolverOptions_Common< double > *", 0, 0, (void*)0, 0};
27278
27468
  static swig_type_info _swigt__p_GPS_SolverT_double_t = {"_p_GPS_SolverT_double_t", "GPS_Solver< double > *", 0, 0, (void*)0, 0};
27279
- static swig_type_info _swigt__p_GPS_Solver_GeneralOptionsT_double_t = {"_p_GPS_Solver_GeneralOptionsT_double_t", "GPS_Solver_GeneralOptions< double > *", 0, 0, (void*)0, 0};
27280
27469
  static swig_type_info _swigt__p_GPS_SpaceNodeT_double_t = {"_p_GPS_SpaceNodeT_double_t", "GPS_SpaceNode< double >::self_t *|GPS_SpaceNode< double > *", 0, 0, (void*)0, 0};
27281
27470
  static swig_type_info _swigt__p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters = {"_p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters", "GPS_SpaceNode< double >::Ionospheric_UTC_Parameters *", 0, 0, (void*)0, 0};
27282
27471
  static swig_type_info _swigt__p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris = {"_p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris", "GPS_SpaceNode< double >::SatelliteProperties::Ephemeris *", 0, 0, (void*)0, 0};
@@ -27346,7 +27535,6 @@ static swig_type_info *swig_type_initial[] = {
27346
27535
  &_swigt__p_GPS_SolverOptionsT_double_t,
27347
27536
  &_swigt__p_GPS_SolverOptions_CommonT_double_t,
27348
27537
  &_swigt__p_GPS_SolverT_double_t,
27349
- &_swigt__p_GPS_Solver_GeneralOptionsT_double_t,
27350
27538
  &_swigt__p_GPS_SpaceNodeT_double_t,
27351
27539
  &_swigt__p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters,
27352
27540
  &_swigt__p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris,
@@ -27416,7 +27604,6 @@ static swig_cast_info _swigc__p_GPS_MeasurementT_double_t[] = { {&_swigt__p_GPS
27416
27604
  static swig_cast_info _swigc__p_GPS_SolverOptionsT_double_t[] = { {&_swigt__p_GPS_SolverOptionsT_double_t, 0, 0, 0},{0, 0, 0, 0}};
27417
27605
  static swig_cast_info _swigc__p_GPS_SolverOptions_CommonT_double_t[] = { {&_swigt__p_GPS_SolverOptions_CommonT_double_t, 0, 0, 0}, {&_swigt__p_GPS_SolverOptionsT_double_t, _p_GPS_SolverOptionsT_double_tTo_p_GPS_SolverOptions_CommonT_double_t, 0, 0}, {&_swigt__p_SBAS_SolverOptionsT_double_t, _p_SBAS_SolverOptionsT_double_tTo_p_GPS_SolverOptions_CommonT_double_t, 0, 0}, {&_swigt__p_GLONASS_SolverOptionsT_double_t, _p_GLONASS_SolverOptionsT_double_tTo_p_GPS_SolverOptions_CommonT_double_t, 0, 0},{0, 0, 0, 0}};
27418
27606
  static swig_cast_info _swigc__p_GPS_SolverT_double_t[] = { {&_swigt__p_GPS_SolverT_double_t, 0, 0, 0},{0, 0, 0, 0}};
27419
- static swig_cast_info _swigc__p_GPS_Solver_GeneralOptionsT_double_t[] = { {&_swigt__p_GPS_Solver_GeneralOptionsT_double_t, 0, 0, 0},{0, 0, 0, 0}};
27420
27607
  static swig_cast_info _swigc__p_GPS_SpaceNodeT_double_t[] = { {&_swigt__p_GPS_SpaceNodeT_double_t, 0, 0, 0},{0, 0, 0, 0}};
27421
27608
  static swig_cast_info _swigc__p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters[] = { {&_swigt__p_GPS_Ionospheric_UTC_ParametersT_double_t, _p_GPS_Ionospheric_UTC_ParametersT_double_tTo_p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters, 0, 0}, {&_swigt__p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters, 0, 0, 0},{0, 0, 0, 0}};
27422
27609
  static swig_cast_info _swigc__p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris[] = { {&_swigt__p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris, 0, 0, 0}, {&_swigt__p_GPS_EphemerisT_double_t, _p_GPS_EphemerisT_double_tTo_p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris, 0, 0},{0, 0, 0, 0}};
@@ -27486,7 +27673,6 @@ static swig_cast_info *swig_cast_initial[] = {
27486
27673
  _swigc__p_GPS_SolverOptionsT_double_t,
27487
27674
  _swigc__p_GPS_SolverOptions_CommonT_double_t,
27488
27675
  _swigc__p_GPS_SolverT_double_t,
27489
- _swigc__p_GPS_Solver_GeneralOptionsT_double_t,
27490
27676
  _swigc__p_GPS_SpaceNodeT_double_t,
27491
27677
  _swigc__p_GPS_SpaceNodeT_double_t__Ionospheric_UTC_Parameters,
27492
27678
  _swigc__p_GPS_SpaceNodeT_double_t__SatelliteProperties__Ephemeris,
@@ -28067,6 +28253,26 @@ SWIGEXPORT void Init_GPS(void) {
28067
28253
  rb_define_const(SwigClassMeasurement.klass, "L1_SIGNAL_STRENGTH_dBHz", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L1_SIGNAL_STRENGTH_dBHz)));
28068
28254
  rb_define_const(SwigClassMeasurement.klass, "L1_LOCK_SEC", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L1_LOCK_SEC)));
28069
28255
  rb_define_const(SwigClassMeasurement.klass, "L1_FREQUENCY", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L1_FREQUENCY)));
28256
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_PSEUDORANGE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_PSEUDORANGE)));
28257
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_PSEUDORANGE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_PSEUDORANGE)));
28258
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_PSEUDORANGE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_PSEUDORANGE_SIGMA)));
28259
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_PSEUDORANGE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_PSEUDORANGE_SIGMA)));
28260
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_CARRIER_PHASE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_CARRIER_PHASE)));
28261
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_CARRIER_PHASE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_CARRIER_PHASE)));
28262
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_CARRIER_PHASE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_CARRIER_PHASE_SIGMA)));
28263
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_CARRIER_PHASE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_CARRIER_PHASE_SIGMA)));
28264
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_DOPPLER", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_DOPPLER)));
28265
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_DOPPLER", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_DOPPLER)));
28266
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_DOPPLER_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_DOPPLER_SIGMA)));
28267
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_DOPPLER_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_DOPPLER_SIGMA)));
28268
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_RANGE_RATE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_RANGE_RATE)));
28269
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_RANGE_RATE", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_RANGE_RATE)));
28270
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_RANGE_RATE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_RANGE_RATE_SIGMA)));
28271
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_RANGE_RATE_SIGMA", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_RANGE_RATE_SIGMA)));
28272
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_SIGNAL_STRENGTH_dBHz", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_SIGNAL_STRENGTH_dBHz)));
28273
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_SIGNAL_STRENGTH_dBHz", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_SIGNAL_STRENGTH_dBHz)));
28274
+ rb_define_const(SwigClassMeasurement.klass, "L2CM_LOCK_SEC", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CM_LOCK_SEC)));
28275
+ rb_define_const(SwigClassMeasurement.klass, "L2CL_LOCK_SEC", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::L2CL_LOCK_SEC)));
28070
28276
  rb_define_const(SwigClassMeasurement.klass, "ITEMS_PREDEFINED", SWIG_From_int(static_cast< int >(GPS_Measurement< double >::ITEMS_PREDEFINED)));
28071
28277
  rb_define_method(SwigClassMeasurement.klass, "add", VALUEFUNC(_wrap_Measurement_add), -1);
28072
28278
  rb_define_method(SwigClassMeasurement.klass, "each", VALUEFUNC(_wrap_Measurement_each), -1);
@@ -28078,7 +28284,6 @@ SWIGEXPORT void Init_GPS(void) {
28078
28284
  SwigClassSolverOptionsCommon.klass = rb_define_class_under(mGPS, "SolverOptionsCommon", rb_cObject);
28079
28285
  SWIG_TypeClientData(SWIGTYPE_p_GPS_SolverOptions_CommonT_double_t, (void *) &SwigClassSolverOptionsCommon);
28080
28286
  rb_undef_alloc_func(SwigClassSolverOptionsCommon.klass);
28081
- rb_define_method(SwigClassSolverOptionsCommon.klass, "cast_general", VALUEFUNC(_wrap_SolverOptionsCommon_cast_general), -1);
28082
28287
  rb_define_method(SwigClassSolverOptionsCommon.klass, "elevation_mask=", VALUEFUNC(_wrap_SolverOptionsCommon_elevation_maske___), -1);
28083
28288
  rb_define_method(SwigClassSolverOptionsCommon.klass, "elevation_mask", VALUEFUNC(_wrap_SolverOptionsCommon_elevation_mask), -1);
28084
28289
  rb_define_method(SwigClassSolverOptionsCommon.klass, "residual_mask=", VALUEFUNC(_wrap_SolverOptionsCommon_residual_maske___), -1);
@@ -28094,6 +28299,8 @@ SWIGEXPORT void Init_GPS(void) {
28094
28299
  rb_define_method(SwigClassSolverOptions.klass, "exclude", VALUEFUNC(_wrap_SolverOptions_exclude), -1);
28095
28300
  rb_define_method(SwigClassSolverOptions.klass, "include", VALUEFUNC(_wrap_SolverOptions_include), -1);
28096
28301
  rb_define_method(SwigClassSolverOptions.klass, "excluded", VALUEFUNC(_wrap_SolverOptions_excluded), -1);
28302
+ rb_define_method(SwigClassSolverOptions.klass, "exclude_L2C?", VALUEFUNC(_wrap_SolverOptions_exclude_L2Cq___), -1);
28303
+ rb_define_method(SwigClassSolverOptions.klass, "exclude_L2C=", VALUEFUNC(_wrap_SolverOptions_exclude_L2Ce___), -1);
28097
28304
  SwigClassSolverOptions.mark = 0;
28098
28305
  SwigClassSolverOptions.destroy = (void (*)(void *)) free_GPS_SolverOptions_Sl_double_Sg_;
28099
28306
  SwigClassSolverOptions.trackObjects = 0;
@@ -57,13 +57,15 @@ struct GLONASS_SinglePositioning_Options : public GPS_Solver_GeneralOptions<Floa
57
57
 
58
58
  template <class FloatT, class SolverBaseT = GPS_Solver_Base<FloatT> >
59
59
  class GLONASS_SinglePositioning : public SolverBaseT {
60
- private:
61
- GLONASS_SinglePositioning<FloatT> &operator=(const GLONASS_SinglePositioning<FloatT> &);
62
60
  public:
63
- typedef GLONASS_SinglePositioning<FloatT> self_t;
61
+ typedef GLONASS_SinglePositioning<FloatT, SolverBaseT> self_t;
64
62
  typedef SolverBaseT base_t;
65
63
  typedef SolverBaseT super_t;
64
+ private:
65
+ self_t &operator=(const self_t &);
66
+ GLONASS_SinglePositioning(const self_t &);
66
67
 
68
+ public:
67
69
  #if defined(__GNUC__) && (__GNUC__ < 5)
68
70
  #define inheritate_type(x) typedef typename base_t::x x;
69
71
  #else
@@ -77,12 +77,14 @@ struct GPS_SinglePositioning_Options : public GPS_Solver_GeneralOptions<FloatT>
77
77
 
78
78
  template <class FloatT, class SolverBaseT = GPS_Solver_Base<FloatT> >
79
79
  class GPS_SinglePositioning : public SolverBaseT {
80
- private:
81
- GPS_SinglePositioning<FloatT> &operator=(const GPS_SinglePositioning<FloatT> &);
82
80
  public:
83
- typedef GPS_SinglePositioning<FloatT> self_t;
81
+ typedef GPS_SinglePositioning<FloatT, SolverBaseT> self_t;
84
82
  typedef SolverBaseT base_t;
83
+ private:
84
+ self_t &operator=(const self_t &);
85
+ GPS_SinglePositioning(const self_t &);
85
86
 
87
+ public:
86
88
  #if defined(__GNUC__) && (__GNUC__ < 5)
87
89
  #define inheritate_type(x) typedef typename base_t::x x;
88
90
  #else
@@ -52,6 +52,7 @@ class GPS_Solver_MultiFrequency : public BaseSolver {
52
52
  typedef BaseSolver super_t;
53
53
  private:
54
54
  self_t &operator=(const self_t &);
55
+ GPS_Solver_MultiFrequency(const self_t &);
55
56
  public:
56
57
  #if defined(__GNUC__) && (__GNUC__ < 5)
57
58
  #define inheritate_type(x) typedef typename super_t::x x;
@@ -56,12 +56,14 @@ struct SBAS_SinglePositioning_Options : public GPS_Solver_GeneralOptions<FloatT>
56
56
 
57
57
  template <class FloatT, class SolverBaseT = GPS_Solver_Base<FloatT> >
58
58
  class SBAS_SinglePositioning : public SolverBaseT {
59
- private:
60
- SBAS_SinglePositioning<FloatT> &operator=(const SBAS_SinglePositioning<FloatT> &);
61
59
  public:
62
- typedef SBAS_SinglePositioning<FloatT> self_t;
60
+ typedef SBAS_SinglePositioning<FloatT, SolverBaseT> self_t;
63
61
  typedef SolverBaseT base_t;
62
+ private:
63
+ self_t &operator=(const self_t &);
64
+ SBAS_SinglePositioning(const self_t &);
64
65
 
66
+ public:
65
67
  #if defined(__GNUC__) && (__GNUC__ < 5)
66
68
  #define inheritate_type(x) typedef typename base_t::x x;
67
69
  #else
@@ -29,6 +29,7 @@
29
29
  #include "navigation/GPS_Solver_Base.h"
30
30
  #include "navigation/GPS_Solver.h"
31
31
  #include "navigation/GPS_Solver_RAIM.h"
32
+ #include "navigation/GPS_Solver_MultiFrequency.h"
32
33
  #include "navigation/SBAS_Solver.h"
33
34
  #include "navigation/GLONASS_Solver.h"
34
35
 
@@ -1119,6 +1120,16 @@ struct GPS_Measurement {
1119
1120
  L1_SIGNAL_STRENGTH_dBHz,
1120
1121
  L1_LOCK_SEC,
1121
1122
  L1_FREQUENCY,
1123
+ #define make_entry(key) L2CM_ ## key, L2CL_ ## key
1124
+ #define make_entry2(key) make_entry(key), make_entry(key ## _SIGMA)
1125
+ make_entry2(PSEUDORANGE),
1126
+ make_entry2(CARRIER_PHASE),
1127
+ make_entry2(DOPPLER),
1128
+ make_entry2(RANGE_RATE),
1129
+ make_entry(SIGNAL_STRENGTH_dBHz),
1130
+ make_entry(LOCK_SEC),
1131
+ #undef make_entry2
1132
+ #undef make_entry
1122
1133
  ITEMS_PREDEFINED,
1123
1134
  };
1124
1135
  void add(const int &prn, const int &key, const FloatT &value){
@@ -1142,7 +1153,7 @@ const type &get_ ## name () const {
1142
1153
  MAKE_ACCESSOR2(residual_mask, FloatT);
1143
1154
  #undef MAKE_ACCESSOR2
1144
1155
  MAKE_VECTOR2ARRAY(int);
1145
- %ignore cast_base;
1156
+ %ignore cast_general;
1146
1157
  }
1147
1158
  %inline %{
1148
1159
  template <class FloatT>
@@ -1156,17 +1167,23 @@ struct GPS_SolverOptions_Common {
1156
1167
  %extend GPS_SolverOptions {
1157
1168
  %ignore base_t;
1158
1169
  %ignore cast_general;
1170
+ #ifdef SWIGRUBY
1171
+ %rename("exclude_L2C?") get_exclude_L2C;
1172
+ %rename("exclude_L2C=") set_exclude_L2C;
1173
+ #endif
1159
1174
  MAKE_VECTOR2ARRAY(int);
1160
1175
  }
1161
1176
  %inline %{
1162
1177
  template <class FloatT>
1163
1178
  struct GPS_SolverOptions
1164
- : public GPS_SinglePositioning<FloatT>::options_t,
1179
+ : public GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >::options_t,
1165
1180
  GPS_SolverOptions_Common<FloatT> {
1166
- typedef typename GPS_SinglePositioning<FloatT>::options_t base_t;
1181
+ typedef typename GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >::options_t base_t;
1167
1182
  void exclude(const int &prn){base_t::exclude_prn.set(prn);}
1168
1183
  void include(const int &prn){base_t::exclude_prn.reset(prn);}
1169
1184
  std::vector<int> excluded() const {return base_t::exclude_prn.excluded();}
1185
+ bool get_exclude_L2C() {return base_t::exclude_L2C;}
1186
+ bool set_exclude_L2C(const bool &b) {return base_t::exclude_L2C = b;}
1170
1187
  GPS_Solver_GeneralOptions<FloatT> *cast_general(){return this;}
1171
1188
  const GPS_Solver_GeneralOptions<FloatT> *cast_general() const {return this;}
1172
1189
  };
@@ -1236,7 +1253,8 @@ template <class BaseT, class HookT>
1236
1253
  struct HookableSolver : public BaseT {
1237
1254
  typedef BaseT base_t;
1238
1255
  HookT *hook;
1239
- HookableSolver(const BaseT &base) : BaseT(base), hook(NULL) {}
1256
+ template <class ArgT>
1257
+ HookableSolver(const ArgT &);
1240
1258
  virtual typename base_t::relative_property_t relative_property(
1241
1259
  const typename base_t::prn_t &prn,
1242
1260
  const typename base_t::measurement_t::mapped_type &measurement,
@@ -1289,6 +1307,20 @@ struct HookableSolver : public BaseT {
1289
1307
  fragment=SWIG_From_frag(int),
1290
1308
  fragment=SWIG_Traits_frag(FloatT),
1291
1309
  fragment=SWIG_Traits_frag(GPS_Measurement<FloatT>)){
1310
+ template <> template <>
1311
+ HookableSolver<
1312
+ GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >,
1313
+ GPS_Solver<FloatT> >
1314
+ ::HookableSolver<GPS_SpaceNode<FloatT> >(const GPS_SpaceNode<FloatT> &sn)
1315
+ : GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >(sn), hook(NULL) {}
1316
+ template <> template <>
1317
+ HookableSolver<SBAS_SinglePositioning<FloatT>, GPS_Solver<FloatT> >
1318
+ ::HookableSolver<SBAS_SpaceNode<FloatT> >(const SBAS_SpaceNode<FloatT> &sn)
1319
+ : SBAS_SinglePositioning<FloatT>(sn), hook(NULL) {}
1320
+ template <> template <>
1321
+ HookableSolver<GLONASS_SinglePositioning<FloatT>, GPS_Solver<FloatT> >
1322
+ ::HookableSolver<GLONASS_SpaceNode<FloatT> >(const GLONASS_SpaceNode<FloatT> &sn)
1323
+ : GLONASS_SinglePositioning<FloatT>(sn), hook(NULL) {}
1292
1324
  template <>
1293
1325
  GPS_Solver<FloatT>::base_t::relative_property_t
1294
1326
  GPS_Solver<FloatT>::relative_property(
@@ -1581,7 +1613,9 @@ struct GPS_Solver
1581
1613
  struct gps_t {
1582
1614
  GPS_SpaceNode<FloatT> space_node;
1583
1615
  GPS_SolverOptions<FloatT> options;
1584
- HookableSolver<GPS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
1616
+ HookableSolver<
1617
+ GPS_Solver_MultiFrequency<GPS_SinglePositioning<FloatT> >,
1618
+ GPS_Solver<FloatT> > solver;
1585
1619
  struct ephemeris_proxy_t {
1586
1620
  struct item_t {
1587
1621
  const void *impl;
@@ -1603,19 +1637,21 @@ struct GPS_Solver
1603
1637
  solver.satellites.impl_select = forward;
1604
1638
  }
1605
1639
  } ephemeris_proxy;
1606
- gps_t() : space_node(), options(), solver(GPS_SinglePositioning<FloatT>(space_node)), ephemeris_proxy(solver) {}
1640
+ gps_t() : space_node(), options(), solver(space_node), ephemeris_proxy(solver) {
1641
+ options.exclude_L2C = true;
1642
+ }
1607
1643
  } gps;
1608
1644
  struct sbas_t {
1609
1645
  SBAS_SpaceNode<FloatT> space_node;
1610
1646
  SBAS_SolverOptions<FloatT> options;
1611
1647
  HookableSolver<SBAS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
1612
- sbas_t() : space_node(), options(), solver(SBAS_SinglePositioning<FloatT>(space_node)) {}
1648
+ sbas_t() : space_node(), options(), solver(space_node) {}
1613
1649
  } sbas;
1614
1650
  struct glonass_t {
1615
1651
  GLONASS_SpaceNode<FloatT> space_node;
1616
1652
  GLONASS_SolverOptions<FloatT> options;
1617
1653
  HookableSolver<GLONASS_SinglePositioning<FloatT>, GPS_Solver<FloatT> > solver;
1618
- glonass_t() : space_node(), options(), solver(GLONASS_SinglePositioning<FloatT>(space_node)) {}
1654
+ glonass_t() : space_node(), options(), solver(space_node) {}
1619
1655
  } glonass;
1620
1656
  SWIG_Object hooks;
1621
1657
  typedef std::vector<GPS_RangeCorrector<FloatT> > user_correctors_t;
@@ -924,6 +924,9 @@ __RINEX_CLK_TEXT__
924
924
  }}.not_to raise_error
925
925
  expect(solver.correction[:gps_ionospheric]).to include(:no_correction)
926
926
  expect(solver.correction[:options][:f_10_7]).to eq(10)
927
+ expect(solver.gps_options.exclude_L2C?).to eq(true) #default
928
+ solver.gps_options.exclude_L2C = false
929
+ expect(solver.gps_options.exclude_L2C?).to eq(false)
927
930
  sn.read(input[:rinex_nav])
928
931
  t_meas = GPS::Time::new(1849, 172413)
929
932
  sn.update_all_ephemeris(t_meas)
@@ -290,6 +290,11 @@ class Receiver
290
290
  when :fault_exclusion
291
291
  @solver.options = {:skip_exclusion => !(output_options[:FDE] = v.to_b)}
292
292
  next true
293
+ when :use_signal
294
+ {
295
+ :GPS_L2C => proc{@solver.gps_options.exclude_L2C = false},
296
+ }[v.to_sym].call rescue next false
297
+ next true
293
298
  end
294
299
  false
295
300
  }
@@ -334,9 +339,9 @@ class Receiver
334
339
  }.flatten(1))]
335
340
  }
336
341
  }.call
337
- alias_method(:add_orig, :add)
342
+ add_orig = instance_method(:add)
338
343
  define_method(:add){|prn, key, value|
339
- add_orig(prn, key.kind_of?(Symbol) ? GPS::Measurement.const_get(key) : key, value)
344
+ add_orig.bind(self).call(prn, key.kind_of?(Symbol) ? GPS::Measurement.const_get(key) : key, value)
340
345
  }
341
346
  }
342
347
 
@@ -523,33 +528,39 @@ class Receiver
523
528
  v
524
529
  }
525
530
  sys, svid = gnss_serial.call(*loader.call(36, 2).reverse)
526
- # sigID check to restrict signal to L1 if version(>0); @see UBX-18010854
527
- next if (packet[6 + 13] != 0) && (loader.call(38, 1, "C") != 0)
531
+ sigid = (packet[6 + 13] != 0) ? loader.call(38, 1, "C") : 0 # sigID if version(>0); @see UBX-18010854
528
532
  case sys
529
- when :GPS, :SBAS, :QZSS;
533
+ when :GPS
534
+ sigid = {0 => :L1, 3 => :L2CL, 4 => :L2CM}[sigid]
535
+ when :SBAS
536
+ sigid = :L1
537
+ when :QZSS
538
+ sigid = {0 => :L1, 5 => :L2CL, 4 => :L2CM}[sigid]
530
539
  when :GLONASS
531
540
  svid += 0x100
541
+ sigid = {0 => :L1}[sigid] # TODO: to support {2 -> :L2}
532
542
  meas.add(svid, :L1_FREQUENCY,
533
543
  GPS::SpaceNode_GLONASS::L1_frequency(loader.call(39, 1, "C") - 7))
534
544
  else; next
535
545
  end
546
+ next unless sigid
536
547
  trk_stat = loader.call(46, 1)[0]
537
548
  {
538
- :L1_PSEUDORANGE => [16, 8, "E", proc{|v| (trk_stat & 0x1 == 0x1) ? v : nil}],
539
- :L1_PSEUDORANGE_SIGMA => [43, 1, nil, proc{|v|
549
+ :PSEUDORANGE => [16, 8, "E", proc{|v| (trk_stat & 0x1 == 0x1) ? v : nil}],
550
+ :PSEUDORANGE_SIGMA => [43, 1, nil, proc{|v|
540
551
  (trk_stat & 0x1 == 0x1) ? (1E-2 * (1 << (v[0] & 0xF))) : nil
541
552
  }],
542
- :L1_DOPPLER => [32, 4, "e"],
543
- :L1_DOPPLER_SIGMA => [45, 1, nil, proc{|v| 2E-3 * (1 << (v[0] & 0xF))}],
544
- :L1_CARRIER_PHASE => [24, 8, "E", proc{|v| (trk_stat & 0x2 == 0x2) ? v : nil}],
545
- :L1_CARRIER_PHASE_SIGMA => [44, 1, nil, proc{|v|
553
+ :DOPPLER => [32, 4, "e"],
554
+ :DOPPLER_SIGMA => [45, 1, nil, proc{|v| 2E-3 * (1 << (v[0] & 0xF))}],
555
+ :CARRIER_PHASE => [24, 8, "E", proc{|v| (trk_stat & 0x2 == 0x2) ? v : nil}],
556
+ :CARRIER_PHASE_SIGMA => [44, 1, nil, proc{|v|
546
557
  (trk_stat & 0x2 == 0x2) ? (0.004 * (v[0] & 0xF)) : nil
547
558
  }],
548
- :L1_SIGNAL_STRENGTH_dBHz => [42, 1, "C"],
549
- :L1_LOCK_SEC => [40, 2, "v", proc{|v| 1E-3 * v}],
559
+ :SIGNAL_STRENGTH_dBHz => [42, 1, "C"],
560
+ :LOCK_SEC => [40, 2, "v", proc{|v| 1E-3 * v}],
550
561
  }.each{|k, prop|
551
562
  next unless v = loader.call(*prop)
552
- meas.add(svid, k, v)
563
+ meas.add(svid, "#{sigid}_#{k}".to_sym, v) rescue nil # unsupported signal
553
564
  }
554
565
  }
555
566
  after_run.call(run(meas, t_meas), [meas, t_meas])
@@ -605,18 +616,19 @@ class Receiver
605
616
 
606
617
  types ||= Hash[*(item[:meas_types].collect{|sys, values|
607
618
  [sys, values.collect.with_index{|type_, i|
608
- case type_
609
- when "C1", "C1C"
610
- [i, :L1_PSEUDORANGE]
611
- when "L1", "L1C"
612
- [i, :L1_CARRIER_PHASE]
613
- when "D1", "D1C"
614
- [i, :L1_DOPPLER]
615
- when "S1", "S1C"
616
- [i, :L1_SIGNAL_STRENGTH_dBHz]
617
- else
618
- nil
619
- end
619
+ sig_obs_type = [case type_[1..-1]
620
+ when /^1C?$/; :L1
621
+ when /^2[XL]$/; :L2CL
622
+ when /^2S$/; :L2CM
623
+ else; nil
624
+ end, {
625
+ 'C' => :PSEUDORANGE,
626
+ 'L' => :CARRIER_PHASE,
627
+ 'D' => :DOPPLER,
628
+ 'S' => :SIGNAL_STRENGTH_dBHz,
629
+ }[type_[0]]]
630
+ next nil unless sig_obs_type.all?
631
+ [i, sig_obs_type.join('_').to_sym]
620
632
  }.compact]
621
633
  }.flatten(1))]
622
634
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GPS_PVT
4
- VERSION = "0.8.1"
4
+ VERSION = "0.8.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gps_pvt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - fenrir(M.Naruoka)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-17 00:00:00.000000000 Z
11
+ date: 2022-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyserial