From e84faa1a220ebdcf79a3d95e539dfc8d86a8c460 Mon Sep 17 00:00:00 2001 From: Manuel Traut Date: Sun, 3 Jun 2012 21:25:38 +0200 Subject: try to implement lookup_digital () - manager crashes at the moment .. Signed-off-by: Manuel Traut --- common/distrio_helper.cpp | 35 +++++++++++++++++++++++++++++++++++ common/distrio_helper.h | 2 ++ 2 files changed, 37 insertions(+) (limited to 'common') 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; diff --git a/common/distrio_helper.h b/common/distrio_helper.h index e46b42f..3f96d93 100644 --- a/common/distrio_helper.h +++ b/common/distrio_helper.h @@ -43,6 +43,8 @@ static corba_ref ref = { int init_corba (int argc, char **argv); /** register a digital io with a common name at the naming service */ int register_digital (std::string _name, Distrio_Digital_i *digital); +/** lookup a digital io by a common name at the manager */ +Distrio::Digital_ptr lookup_digital (std::string _name); /** register a device with a common name at the naming service */ int register_device (std::string _name, Distrio_Device_i *dev); /** run the orb - function blocks until orb shutdown */ -- cgit v1.2.3