WIP: connect and disconnect terminal by name in GSI

This commit is contained in:
Matthias Koefferlein 2018-12-30 13:28:11 +01:00
parent 293c6f496e
commit a787204e77
2 changed files with 40 additions and 5 deletions

View File

@ -42,11 +42,25 @@ Class<db::Pin> decl_dbPin ("db", "Pin",
"This class has been added in version 0.26."
);
static void device_connect_terminal_by_name (db::Device *device, const std::string &terminal_name, db::Net *net)
{
if (! device->device_class ()) {
throw tl::Exception (tl::to_string (tr ("Device does not have a device class")));
}
size_t terminal_id = device->device_class ()->terminal_id_for_name (terminal_name);
device->connect_terminal (terminal_id, net);
}
static void device_disconnect_terminal (db::Device *device, size_t terminal_id)
{
device->connect_terminal (terminal_id, 0);
}
static void device_disconnect_terminal_by_name (db::Device *device, const std::string &terminal_name)
{
device_connect_terminal_by_name (device, terminal_name, 0);
}
Class<db::Device> decl_dbDevice ("db", "Device",
gsi::method ("device_class", &db::Device::device_class,
"@brief Gets the device class the device belongs to.\n"
@ -78,6 +92,14 @@ Class<db::Device> decl_dbDevice ("db", "Device",
gsi::method_ext ("disconnect_terminal", &device_disconnect_terminal, gsi::arg ("terminal_id"),
"@brief Disconnects the given terminal from any net.\n"
) +
gsi::method_ext ("connect_terminal", &device_connect_terminal_by_name, gsi::arg ("terminal_name"), gsi::arg ("net"),
"@brief Connects the given terminal to the specified net.\n"
"This version accepts a terminal name. If the name is not a valid terminal name, an exception is raised."
) +
gsi::method_ext ("disconnect_terminal", &device_disconnect_terminal_by_name, gsi::arg ("terminal_name"),
"@brief Disconnects the given terminal from any net.\n"
"This version accepts a terminal name. If the name is not a valid terminal name, an exception is raised."
) +
gsi::method ("parameter", (double (db::Device::*) (size_t) const) &db::Device::parameter_value, gsi::arg ("param_id"),
"@brief Gets the parameter value for the given parameter ID."
) +
@ -412,7 +434,7 @@ Class<db::DeviceClass> decl_dbDeviceClass ("db", "DeviceClass",
"Parameter definition IDs are used in some places to reference a specific parameter of a device. "
"This method obtains the corresponding definition object."
) +
gsi::method ("has_parameter", &db::DeviceClass::has_parameter_with_name, gsi::arg ("name"),
gsi::method ("has_parameter?", &db::DeviceClass::has_parameter_with_name, gsi::arg ("name"),
"@brief Returns true, if the device class has a parameter with the given name.\n"
) +
gsi::method ("parameter_id", &db::DeviceClass::parameter_id_for_name, gsi::arg ("name"),
@ -420,7 +442,7 @@ Class<db::DeviceClass> decl_dbDeviceClass ("db", "DeviceClass",
"An exception is thrown if there is no parameter with the given name. Use \\has_parameter to check "
"whether the name is a valid parameter name."
) +
gsi::method ("has_terminal", &db::DeviceClass::has_terminal_with_name, gsi::arg ("name"),
gsi::method ("has_terminal?", &db::DeviceClass::has_terminal_with_name, gsi::arg ("name"),
"@brief Returns true, if the device class has a terminal with the given name.\n"
) +
gsi::method ("terminal_id", &db::DeviceClass::terminal_id_for_name, gsi::arg ("name"),

View File

@ -156,6 +156,11 @@ class DBNetlist_TestClass < TestBase
pd.description = "Terminal B"
dc.add_terminal(pd)
assert_equal(dc.has_terminal?("X"), false)
assert_equal(dc.has_terminal?("A"), true)
assert_equal(dc.terminal_id("A"), 0)
assert_equal(dc.terminal_id("B"), 1)
c = RBA::Circuit::new
nl.add(c)
@ -221,6 +226,14 @@ class DBNetlist_TestClass < TestBase
assert_equal(d1.net_for_terminal(1).name, "NET")
assert_equal(d1.net_for_terminal(0).inspect, "nil")
d1.disconnect_terminal("B")
assert_equal(net.terminal_count, 0)
assert_equal(d1.net_for_terminal(1).inspect, "nil")
d1.connect_terminal("B", net)
assert_equal(net.terminal_count, 1)
assert_equal(d1.net_for_terminal(1).name, "NET")
d2.connect_terminal(0, net)
assert_equal(net.terminal_count, 2)
@ -547,9 +560,9 @@ class DBNetlist_TestClass < TestBase
dc.add_parameter(RBA::DeviceParameterDefinition::new("U", "Parameter U", 1.0))
dc.add_parameter(RBA::DeviceParameterDefinition::new("V", "Parameter V", 2.0))
assert_equal(dc.has_parameter("U"), true)
assert_equal(dc.has_parameter("V"), true)
assert_equal(dc.has_parameter("X"), false)
assert_equal(dc.has_parameter?("U"), true)
assert_equal(dc.has_parameter?("V"), true)
assert_equal(dc.has_parameter?("X"), false)
assert_equal(dc.parameter_id("U"), 0)
assert_equal(dc.parameter_id("V"), 1)
error = false