summaryrefslogtreecommitdiff
path: root/common/distrio_helper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/distrio_helper.cpp')
-rw-r--r--common/distrio_helper.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/common/distrio_helper.cpp b/common/distrio_helper.cpp
index aaf43c1..076719c 100644
--- a/common/distrio_helper.cpp
+++ b/common/distrio_helper.cpp
@@ -96,6 +96,41 @@ int register_digital (std::string _name, Distrio_Digital_i *digital)
return 0;
}
+Distrio::Digital_ptr lookup_digital (std::string _name)
+{
+ CORBA::Object_var obj;
+ Distrio::Digital_var ret;
+ Distrio::Digital_list_var dig_list;
+ Distrio::Error *e;
+
+ if (ref.init != ORB_RUNNING) {
+ std::cerr << "corba not initialized" << std::endl;
+ return NULL;
+ }
+
+ try {
+ e = ref.manager->digital (dig_list);
+ free (e);
+ } catch (CORBA::Exception &_e) {
+ std::cerr << "CORBA lookup digital io "<< _name <<" failed: "
+ << _e << std::endl;
+ return NULL;
+ }
+
+ for (unsigned int i = 0; i < dig_list->length (); i++) {
+ ::CORBA::String_var name;
+ Distrio::Error *e;
+ e = dig_list[i]->name (name);
+ free (e);
+ if (! _name.compare (name)) {
+ Distrio::Digital_ptr ptr = dig_list[i];
+ return ptr;
+ }
+ }
+
+ return NULL;
+}
+
int register_device (std::string _name, Distrio_Device_i *dev)
{
CosNaming::Name name;