//--------------------------------------------------------------------------- // // SCSI Target Emulator RaSCSI (*^..^*) // for Raspberry Pi // // Copyright (C) 2021 Uwe Seimet // // The DeviceFactory singleton creates devices based on their type and the image file extension // //--------------------------------------------------------------------------- #pragma once #include #include #include #include #include "rascsi_interface.pb.h" using namespace std; using namespace rascsi_interface; typedef pair Geometry; class Device; class DeviceFactory { private: DeviceFactory(); ~DeviceFactory() {}; public: static DeviceFactory& instance(); Device *CreateDevice(PbDeviceType, const string&); PbDeviceType GetTypeForFile(const string&); const set& GetSectorSizes(PbDeviceType type) { return sector_sizes[type]; } const set& GetSectorSizes(const string&); const set GetCapacities(PbDeviceType); const map& GetDefaultParams(PbDeviceType type) { return default_params[type]; } const list GetNetworkInterfaces() const; const map GetExtensionMapping() const { return extension_mapping; } private: map> sector_sizes; // Optional mapping of drive capacities to drive geometries map> geometries; map> default_params; map extension_mapping; string GetExtension(const string&) const; };