Program Listing for File comms.cc¶
↰ Return to documentation for file (devices/comms.cc)
#include "lupnt/devices/comms.h"
#include <fmt/format.h>
#include "lupnt/core/asset_factory.h"
#include "lupnt/core/logger.h"
#include "lupnt/core/simulation.h"
#include "lupnt/devices/device.h"
#include "lupnt/measurements/channel.h"
namespace lupnt {
// Transmitter **************************************************************
// Constructor
Transmitter::Transmitter(Config& config) : Device(config) {
std::string device_name = config["name"] ? config["name"].as<std::string>() : "transmitter";
Logger::Debug("Creating", "Transmitter");
}
// Setup
void Transmitter::Setup() {
Logger::Debug(fmt::format("Setting up {}", name_), "Transmitter");
if (config_["channel"]) {
auto sim = agent_->GetSimulation();
channel_ = sim->GetChannel(config_["channel"].as<std::string>());
Logger::Debug(fmt::format("Channel {} set for {}", channel_->GetName(), name_),
"Transmitter");
} else {
Logger::Warn(fmt::format("No channel set for {}", name_), "Transmitter");
}
}
// Step
void Transmitter::Step(Real t) { Logger::Debug("Step", "Transmitter", t); }
// Called by channel requesting data
void Transmitter::Send(Real t) {
LUPNT_CHECK(channel_, "Channel not set", "Transmitter");
Logger::Debug(fmt::format("Transmitter {} sending", name_), "Transmitter", t);
}
// Called by external device providing data
void Transmitter::Send(Real t, void* data) {
LUPNT_CHECK(channel_, "Channel not set", "Transmitter");
LUPNT_CHECK(data, "Data not set", "Transmitter");
Logger::Debug(fmt::format("Transmitter {} sending", name_), "Transmitter", t);
channel_->Send(this, t, data);
}
REGISTER_FACTORY_CLASS(Device, Transmitter)
// Receiver **************************************************************
// Constructor
Receiver::Receiver(Config& config) : Device(config) {
Logger::Debug(fmt::format("Creating {}", name_), "Receiver");
}
void Receiver::Setup() {
Logger::Debug(fmt::format("Setting up {}", name_), "Receiver");
if (config_["channel"]) {
LUPNT_CHECK(agent_, "Agent not set", "Receiver");
auto sim = agent_->GetSimulation();
LUPNT_CHECK(sim, "Simulation not set", "Receiver");
channel_ = sim->GetChannel(config_["channel"].as<std::string>());
Logger::Debug(fmt::format("Channel {} set for {}", channel_->GetName(), name_), "Receiver");
} else {
Logger::Warn(fmt::format("No channel set for {}", name_), "Receiver");
}
}
void Receiver::Step(Real t) { Logger::Debug("Step", "Receiver", t); }
// Called by channel requesting data
void Receiver::Receive(Real t) {
Logger::Debug(fmt::format("Receiver {} receiving", name_), "Receiver", t);
}
// Called by channel providing data
void Receiver::Receive(Real t, void* data) {
Logger::Debug(fmt::format("Receiver {} receiving", name_), "Receiver", t);
data_.push_back(data);
}
REGISTER_FACTORY_CLASS(Device, Receiver)
// Transponder **************************************************************
// Constructor
Transponder::Transponder(Config& config) : Device(config) {
Logger::Debug(fmt::format("Creating {}", name_), "Transponder");
}
// Setup
void Transponder::Setup() {
Logger::Debug(fmt::format("Setting up {}", name_), "Transponder");
if (config_["channel"]) {
LUPNT_CHECK(agent_, "Agent not set", "Transponder");
auto sim = agent_->GetSimulation();
LUPNT_CHECK(sim, "Simulation not set", "Transponder");
channel_ = sim->GetChannel(config_["channel"].as<std::string>());
Logger::Debug(fmt::format("Channel {} set for {}", channel_->GetName(), name_),
"Transponder");
} else {
Logger::Warn(fmt::format("No channel set for {}", name_), "Transponder");
}
}
// Step
void Transponder::Step(Real t) { Logger::Debug("Step", "Transponder", t); }
// Called by channel requesting data
void Transponder::Send(Real t) {
LUPNT_CHECK(channel_, "Channel not set", "Transponder");
Logger::Debug(fmt::format("Transponder {} sending", name_), "Transponder", t);
}
// Called by external device providing data
void Transponder::Send(Real t, void* data) {
LUPNT_CHECK(channel_, "Channel not set", "Transponder");
LUPNT_CHECK(data, "Data not set", "Transponder");
Logger::Debug(fmt::format("Transponder {} sending", name_), "Transponder", t);
channel_->Send(this, t, data);
}
// Called by external device requesting data
void Transponder::Receive(Real t) {
LUPNT_CHECK(channel_, "Channel not set", "Transponder");
Logger::Debug(fmt::format("Transponder {} receiving", name_), "Transponder", t);
channel_->Receive(this, t);
}
// Called by channel providing data
void Transponder::Receive(Real t, void* data) {
LUPNT_CHECK(data, "Data not set", "Transponder");
Logger::Debug(fmt::format("Transponder {} receiving", name_), "Transponder", t);
data_.push_back(data);
}
REGISTER_FACTORY_CLASS(Device, Transponder)
} // namespace lupnt