summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-06-07 23:56:05 +0200
committerManuel Traut <manut@mecka.net>2012-06-07 23:56:05 +0200
commit297e389057b702bbeb99139a8c248cfccfc0724e (patch)
tree20c6e79d452ef505084712becf5093c105c0f9a4
parente3f225cd4fb60437d94288849f7af03179d56f6b (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.cpp28
-rw-r--r--common/distrio_helper.h4
-rw-r--r--devices/simple_dev/simple_dev.cpp20
-rw-r--r--io/bin/generic_gpio/generic_gpio.cpp11
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 ();
}