Program Listing for File space_comms.h

Return to documentation for file (devices/space_comms.h)

#pragma once

#include "lupnt/devices/comms.h"
#include "lupnt/measurements/antenna.h"

namespace lupnt {

  enum class GnssConst {
    GPS,      // Global Positioning System
    GLONASS,  // Global Navigation Satellite System
    GALILEO,  // European Global Navigation Satellite System
    BEIDOU,   // Chinese Global Navigation Satellite System
    QZSS,     // Quasi-Zenith Satellite System
  };

  enum class GnssFreq { L1, L2, L5, E1, E6, E5, E5a, E5b };

  extern const std::map<GnssFreq, Real> GNSS_FREQ_MAP;
  extern const std::map<GnssFreq, Real> GNSS_RC_MAP;

  class GnssTransmitter : public Transmitter {
  public:
    GnssTransmitter(GnssConst gnss_const, int prn);

    GnssTransmitter(Config& config);

    std::map<GnssFreq, Real> GetTransmitPower() { return P_tx_; }
    std::map<GnssFreq, Real> GetChipRate() { return R_c_; }
    std::map<GnssFreq, Antenna> GetAntennas() { return antennas_; }
    std::vector<GnssFreq> GetFreqList() { return freq_list_; }

  protected:
    GnssConst gnss_const_;                  // [-] Type of the GNSS system
    int prn_;                               // [-] PRN of the transmitter satellite
    std::vector<GnssFreq> freq_list_;       // [-] List of frequencies (by signal names)
    std::map<GnssFreq, Antenna> antennas_;  // [-] List of antennas
    std::map<GnssFreq, Real> P_tx_;         // [dB-W] Transmitter power
    std::map<GnssFreq, Real> R_c_;          // [m] Chip rate

    void InitGps();

    void InitGlonass();

    void InitGalileo();

    void InitBeidou();

    void InitQzss();
  };

  class GnssReceiver : public Receiver {
  public:
    GnssReceiver() = default;
    GnssReceiver(Config& config);
  };

}  // namespace lupnt