summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-09-23 21:23:08 +0200
committerManuel Traut <manut@mecka.net>2012-09-23 21:23:08 +0200
commit2a81bd3d5cc7f6653adef9f6653ff4a20709b0d7 (patch)
treeb4b11094534907acb27272e4ea3c10cf6b75bda3
parentbdf4c406cd80fe0e25df68ef98a8b626093290c4 (diff)
client/test: test client to lookup devices /functions etc
Signed-off-by: Manuel Traut <manut@mecka.net>
-rw-r--r--Makefile2
-rw-r--r--clients/test/Makefile38
-rwxr-xr-xclients/test/run.sh10
-rw-r--r--clients/test/test.cpp41
-rw-r--r--common/distrio_helper.cpp45
-rw-r--r--common/distrio_helper.h6
-rwxr-xr-xdevices/simple_dev/run.sh2
-rw-r--r--devices/simple_dev/simple_dev.cpp8
-rwxr-xr-xio/bin/generic_gpio/run.sh2
-rwxr-xr-xmanager/bin/run.sh2
10 files changed, 150 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 8338471..af85b88 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-MAKE_DIRECTORIES = io/lib common manager/lib devices io/bin manager/bin
+MAKE_DIRECTORIES = io/lib common manager/lib devices io/bin manager/bin clients
.PHONY: all
idl: $(MAKE_DIRECTORIES)
diff --git a/clients/test/Makefile b/clients/test/Makefile
new file mode 100644
index 0000000..7ceb0f0
--- /dev/null
+++ b/clients/test/Makefile
@@ -0,0 +1,38 @@
+CC := $(CROSS_COMPILE)gcc
+CXX := $(CROSS_COMPILE)g++
+LD := $(CROSS_COMPILE)g++
+
+DISTRIO_BASE = ../../
+
+DISTRIO_MANAGER := $(DISTRIO_BASE)manager/lib
+DISTRIO_IO := $(DISTRIO_BASE)io/lib
+DISTRIO_COMMON := $(DISTRIO_BASE)common
+
+LDFLAGS += -L$(DISTRIO_COMMON) -ldistrio_common \
+ -L$(DISTRIO_IO) -ldistrio_io \
+ -L$(DISTRIO_MANAGER) -ldistrio_manager \
+ -lrt -lACE -lTAO -lTAO_AnyTypeCode -lTAO_CosNaming -lTAO_PortableServer
+CFLAGS += -g -fPIC -I$(DISTRIO_COMMON) -I$(DISTRIO_IO) -I$(DISTRIO_MANAGER)
+CXXFLAGS += $(CFLAGS)
+
+DESTDIR := /usr
+
+COMPONENT = distrio_test
+EXEC = $(COMPONENT)
+OBJ = test.o
+
+all: $(OBJ)
+ $(LD) $(LDFLAGS) -o $(EXEC) $(OBJ)
+
+clean:
+ rm -f *.o
+ rm -f $(EXEC)
+
+install: all
+ cp -a $(EXEC) $(DESTDIR)/bin
+
+uninstall:
+ rm -f $(DESTDIR)/bin/$(EXEC)
+
+idl:
+ /bin/true
diff --git a/clients/test/run.sh b/clients/test/run.sh
new file mode 100755
index 0000000..05a8234
--- /dev/null
+++ b/clients/test/run.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+#
+# startup script for distrio test
+#
+# author: Manuel Traut <manut@mecka.net>
+
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../io/lib:../../common:../../manager/lib \
+ ./distrio_test \
+ -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService \
+ $@
diff --git a/clients/test/test.cpp b/clients/test/test.cpp
new file mode 100644
index 0000000..5758d55
--- /dev/null
+++ b/clients/test/test.cpp
@@ -0,0 +1,41 @@
+#include <distrio_helper.h>
+#include <distrio_error.h>
+
+#include <distrio_io.h>
+
+#include <iostream>
+
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ int ret = 0;
+ Distrio::Device_list_var devs;
+ Distrio::Device *dev;
+ Distrio::Dev_function_list_var funcs;
+ ::CORBA::String_var name;
+
+ if (init_corba (argc, argv))
+ return -EINVAL;
+
+ if (run_orb ())
+ return -EINVAL;
+
+ get_device_list (&devs);
+ if (lookup_device ("simple_dev", devs, &dev)) {
+ std::cerr << "unable to get requested device" << std::endl;
+ goto out;
+ }
+
+ /* TODO: do sth */
+ dev->functions(funcs.out ());
+
+ for (unsigned int i = 0; i < funcs->length (); i++)
+ {
+ std::cout << funcs[i].description << std::endl;
+ }
+
+ join_orb ();
+
+out:
+ free (dev);
+ return ret;
+}
diff --git a/common/distrio_helper.cpp b/common/distrio_helper.cpp
index 6146265..451af40 100644
--- a/common/distrio_helper.cpp
+++ b/common/distrio_helper.cpp
@@ -220,6 +220,25 @@ int register_device (Distrio_Device_i *dev)
return 0;
}
+void get_device_list (Distrio::Device_list_var *dev_list)
+{
+ CORBA::Object_var obj;
+ Distrio::Error *e;
+
+ if (ref.init != ORB_RUNNING) {
+ std::cerr << "corba not initialized" << std::endl;
+ return;
+ }
+
+ try {
+ e = ref.manager->device (*dev_list);
+ free (e);
+ } catch (CORBA::Exception &_e) {
+ std::cerr << "CORBA get digital list failed: "
+ << _e << std::endl;
+ }
+}
+
void get_analog_list (Distrio::Analog_list_var *ana_list)
{
CORBA::Object_var obj;
@@ -309,3 +328,29 @@ int lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
}
return -EHOSTDOWN;
}
+
+int lookup_device (std::string _name, Distrio::Device_list_var dev_list,
+ Distrio::Device **ptr)
+{
+ if (ref.init != ORB_RUNNING) {
+ std::cerr << "corba not initialized" << std::endl;
+ return -EINVAL;
+ }
+
+ for (unsigned int i = 0; i < dev_list->length (); i++) {
+ ::CORBA::String_var name;
+ Distrio::Error *e;
+ try {
+ e = dev_list[i]->name (name);
+ if (!::CORBA::is_nil (e))
+ free (e);
+ if (! _name.compare (name.in ())) {
+ *ptr = dev_list[i];
+ return 0;
+ }
+ } catch (::CORBA::Exception &ex) {
+ std::cerr << "get name of device failed\n" << ex << std::cerr;
+ }
+ }
+ return -EHOSTDOWN;
+}
diff --git a/common/distrio_helper.h b/common/distrio_helper.h
index e25560b..87c38e0 100644
--- a/common/distrio_helper.h
+++ b/common/distrio_helper.h
@@ -57,10 +57,14 @@ int register_device (Distrio_Device_i *dev);
void get_digital_list (Distrio::Digital_list_var *dig_list);
/* returns a list of all registered analog ios */
void get_analog_list (Distrio::Analog_list_var *ana_list);
-
+/* returns a list of all registered devices */
+void get_device_list (Distrio::Device_list_var *dev_list);
/** lookup a digital io by a common name at the manager */
int lookup_digital (std::string _name, Distrio::Digital_list_var dig_list,
Distrio::Digital **ptr);
/** lookup a analog io by a common name at the manager */
int lookup_analog (std::string _name, Distrio::Analog_list_var ana_list,
Distrio::Analog **ptr);
+/** lookup a device by a common name at the manager */
+int lookup_device (std::string _name, Distrio::Device_list_var dev_list,
+ Distrio::Device **ptr);
diff --git a/devices/simple_dev/run.sh b/devices/simple_dev/run.sh
index 5377581..782822f 100755
--- a/devices/simple_dev/run.sh
+++ b/devices/simple_dev/run.sh
@@ -4,7 +4,7 @@
#
# author: Manuel Traut <manut@mecka.net>
-LD_LIBRARY_PATH=../../io/lib:../../common:../../manager/lib \
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../io/lib:../../common:../../manager/lib \
./distrio_simple_dev \
-ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService \
$@
diff --git a/devices/simple_dev/simple_dev.cpp b/devices/simple_dev/simple_dev.cpp
index fc79d77..7f32eb2 100644
--- a/devices/simple_dev/simple_dev.cpp
+++ b/devices/simple_dev/simple_dev.cpp
@@ -77,13 +77,19 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
goto out;
}
+
+ dev->huhu_pin->set ();
+ sleep (1);
+ dev->huhu_pin->reset ();
+
+/*
try {
dev->huhu_pin->register_callback ( (Distrio::Device_ptr) dev,
Distrio::TRIGGER_FALLING_EDGE);
} catch (::CORBA::Exception &ex) {
std::cerr << "register cb failed" << std::endl;
}
-
+*/
dev->function_list.length (2);
dev->function_list[0].id = ::Distrio::DEV_START;
diff --git a/io/bin/generic_gpio/run.sh b/io/bin/generic_gpio/run.sh
index efb1a72..249b770 100755
--- a/io/bin/generic_gpio/run.sh
+++ b/io/bin/generic_gpio/run.sh
@@ -4,7 +4,7 @@
#
# author: Manuel Traut <manut@mecka.net>
-LD_LIBRARY_PATH=../../lib:../../../common:../../../manager/lib \
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../lib:../../../common:../../../manager/lib \
./distrio_generic_gpio \
-ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService \
$@
diff --git a/manager/bin/run.sh b/manager/bin/run.sh
index 5403311..0bbe4c7 100755
--- a/manager/bin/run.sh
+++ b/manager/bin/run.sh
@@ -17,6 +17,6 @@ if [ -z "$NS" ]; then
sleep 1
fi
-LD_LIBRARY_PATH=../../io/lib:../../common ./distrio_manager \
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../io/lib:../../common ./distrio_manager \
-ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService \
$@