Program Listing for File space_channel.h

Return to documentation for file (include/lupnt/measurements/space_channel.h)

#pragma once

#include <memory>

#include "lupnt/physics/occultation.h"

namespace lupnt {

  struct ITransmission;

  class ICommDevice;
  class Transmitter;
  class Receiver;

  class SpaceChannel {
  private:
    std::vector<NaifId> occult_bodies_;
    VecXd occult_alt_;

  public:
    SpaceChannel() = default;

    void SetOccultationBodies(std::vector<NaifId> occult_bodies, VecXd occult_alt) {
      occult_bodies_ = occult_bodies;
      occult_alt_ = occult_alt;
    }

    ITransmission ComputeLinkBudget(std::shared_ptr<Transmitter> &txDevice,
                                    std::shared_ptr<Receiver> &rxDevice, Real t,
                                    std::string time_fixed);

    ITransmission ComputeLinkBudgetDR(std::shared_ptr<Transmitter> &txDevice,
                                      std::shared_ptr<Receiver> &rxDevice, Real t,
                                      std::string time_fixed, double data_rate);

    Real SolveLightTimeDelayRx(std::shared_ptr<Transmitter> &tx, std::shared_ptr<Receiver> &rx,
                               Real t_rx);

    Real SolveLightTimeDelayTx(std::shared_ptr<Transmitter> &tx, std::shared_ptr<Receiver> &rx,
                               Real t_tx);

    double ComputeFreeSpaceLossdB(double dist, double lambda);
  };

}  // namespace lupnt