diff options
Diffstat (limited to 'common/distrio_helper.cpp')
| -rw-r--r-- | common/distrio_helper.cpp | 35 |
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; |
