diff options
| author | Manuel Traut <manut@mecka.net> | 2012-09-23 21:23:08 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2012-09-23 21:23:08 +0200 |
| commit | 2a81bd3d5cc7f6653adef9f6653ff4a20709b0d7 (patch) | |
| tree | b4b11094534907acb27272e4ea3c10cf6b75bda3 | |
| parent | bdf4c406cd80fe0e25df68ef98a8b626093290c4 (diff) | |
client/test: test client to lookup devices /functions etc
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | clients/test/Makefile | 38 | ||||
| -rwxr-xr-x | clients/test/run.sh | 10 | ||||
| -rw-r--r-- | clients/test/test.cpp | 41 | ||||
| -rw-r--r-- | common/distrio_helper.cpp | 45 | ||||
| -rw-r--r-- | common/distrio_helper.h | 6 | ||||
| -rwxr-xr-x | devices/simple_dev/run.sh | 2 | ||||
| -rw-r--r-- | devices/simple_dev/simple_dev.cpp | 8 | ||||
| -rwxr-xr-x | io/bin/generic_gpio/run.sh | 2 | ||||
| -rwxr-xr-x | manager/bin/run.sh | 2 |
10 files changed, 150 insertions, 6 deletions
@@ -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 \ $@ |
