.. _program_listing_file_devices_device.cc: Program Listing for File device.cc ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``devices/device.cc``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "lupnt/devices/device.h" #include #include "lupnt/agents/agent.h" #include "lupnt/core/asset_factory.h" #include "lupnt/core/definitions.h" #include "lupnt/core/event.h" #include "lupnt/core/logger.h" #include "lupnt/core/simulation.h" #include "lupnt/measurements/channel.h" namespace lupnt { Device::Device(Config& config) { config_ = config; name_ = config["name"] ? config["name"].as() : "device"; Logger::Debug(fmt::format("Creating {}", name_), "Device"); if (config["frequency"]) { frequency_ = config["frequency"].as(); } } void Device::Step(Real t) { Logger::Debug(fmt::format("Step {}", name_), "Device", t); } void Device::Setup() { // Step if (frequency_ > 0.0) { agent_->GetSimulation()->Schedule( 0.0, [this](Real t) { Step(t); }, frequency_, Event::Priority::DEVICE); Logger::Debug(fmt::format("Scheduled {}, t={} s, f={} Hz", name_, 0.0, frequency_), "Device"); } } // Define the GetRegistry function for this specialization (must come before explicit // instantiation) template <> std::unordered_map::Creator>& AssetFactory::GetRegistry() { return Registry(); } // Explicit template instantiation to ensure single registry across library boundaries template class AssetFactory; } // namespace lupnt