gps_pvt 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
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