diff options
| author | Manuel Traut <manut@mecka.net> | 2012-06-07 23:56:05 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2012-06-07 23:56:05 +0200 |
| commit | 297e389057b702bbeb99139a8c248cfccfc0724e (patch) | |
| tree | 20c6e79d452ef505084712becf5093c105c0f9a4 | |
| parent | e3f225cd4fb60437d94288849f7af03179d56f6b (diff) | |
digital out can now be controlled by simple_device
- extended libdistrio_common to enable easy access
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | common/distrio_helper.cpp | 28 | ||||
| -rw-r--r-- | common/distrio_helper.h | 4 | ||||
| -rw-r--r-- | devices/simple_dev/simple_dev.cpp | 20 | ||||
| -rw-r--r-- | io/bin/generic_gpio/generic_gpio.cpp | 11 |
4 files changed, 49 insertions, 14 deletions
diff --git a/common/distrio_helper.cpp b/common/distrio_helper.cpp index ad0a5cd..362217d 100644 --- a/common/distrio_helper.cpp +++ b/common/distrio_helper.cpp @@ -97,25 +97,31 @@ int register_digital (Distrio_Digital_i *digital) return 0; } -Distrio::Digital_ptr lookup_digital (std::string _name) +void get_digital_list (Distrio::Digital_list_var *dig_list) { 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; + return; } try { - e = ref.manager->digital (dig_list); + e = ref.manager->digital (*dig_list); free (e); } catch (CORBA::Exception &_e) { - std::cerr << "CORBA lookup digital io "<< _name <<" failed: " + std::cerr << "CORBA get digital list failed: " << _e << std::endl; - return NULL; + } +} + +void lookup_digital (std::string _name, Distrio::Digital_list_var dig_list, + Distrio::Digital **ptr) +{ + if (ref.init != ORB_RUNNING) { + std::cerr << "corba not initialized" << std::endl; + return; } for (unsigned int i = 0; i < dig_list->length (); i++) { @@ -126,12 +132,12 @@ Distrio::Digital_ptr lookup_digital (std::string _name) free (e); if (! _name.compare (name.in ())) { - Distrio::Digital_ptr ptr = dig_list[i]; - return ptr; + *ptr = dig_list[i]; + (*ptr)->reset (); + std::cout << "yeah: " << *ptr << std::endl; + return; } } - - return NULL; } int register_device (std::string _name, Distrio_Device_i *dev) diff --git a/common/distrio_helper.h b/common/distrio_helper.h index 69a6ef0..b4d2d55 100644 --- a/common/distrio_helper.h +++ b/common/distrio_helper.h @@ -44,7 +44,9 @@ int init_corba (int argc, char **argv); /** register a digital io with a common name at the naming service */ int register_digital (Distrio_Digital_i *digital); /** lookup a digital io by a common name at the manager */ -Distrio::Digital_ptr lookup_digital (std::string _name); +void get_digital_list (Distrio::Digital_list_var *dig_list); +void lookup_digital (std::string _name, Distrio::Digital_list_var dig_list, + Distrio::Digital **ptr); /** 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 */ diff --git a/devices/simple_dev/simple_dev.cpp b/devices/simple_dev/simple_dev.cpp index ca31b6e..6e57e94 100644 --- a/devices/simple_dev/simple_dev.cpp +++ b/devices/simple_dev/simple_dev.cpp @@ -15,6 +15,9 @@ class My_device : public Distrio_Device_i { { my_id = id; } + + ::Distrio::Digital_list_var digitals; + private: ::CORBA::Long my_id; }; @@ -40,7 +43,22 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[]) std::cout << "registered id: " << dev->id () << std::endl; - digital_io = lookup_digital ("pin huhu"); + get_digital_list (&dev->digitals); + lookup_digital ("pin huhu", dev->digitals, &digital_io); + + std::cout << "digital io app: " << digital_io << std::endl; + + while (1) + { + try { + digital_io->set (); + sleep (1); + digital_io->reset (); + sleep (1); + } catch (::CORBA::Exception *ex) { + std::cerr << "sth went wrong " << ex << std::endl; + } + } out: free (dev); diff --git a/io/bin/generic_gpio/generic_gpio.cpp b/io/bin/generic_gpio/generic_gpio.cpp index 1042c09..14ab8cc 100644 --- a/io/bin/generic_gpio/generic_gpio.cpp +++ b/io/bin/generic_gpio/generic_gpio.cpp @@ -30,7 +30,16 @@ class My_digital : public Distrio_Digital_i { ::Distrio::Error *name (::CORBA::String_out _name) { _name = CORBA::string_dup (my_name.c_str ()); - std::cout << "name: " << my_name << std::endl; + return distrio_success (); + } + + ::Distrio::Error *set () { + std::cout << "set" << std::endl; + return distrio_success (); + } + + ::Distrio::Error *reset () { + std::cout << "reset" << std::endl; return distrio_success (); } |
