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 --- manager/bin/distrio_manager.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'manager/bin/distrio_manager.cpp') diff --git a/manager/bin/distrio_manager.cpp b/manager/bin/distrio_manager.cpp index 345eff6..d9f2ea9 100644 --- a/manager/bin/distrio_manager.cpp +++ b/manager/bin/distrio_manager.cpp @@ -29,19 +29,26 @@ Distrio_Manager_i::~Distrio_Manager_i (void) ::Distrio::Error * Distrio_Manager_i::digital ( ::Distrio::Digital_list_out io_list) { - io_list = &digital_list; + io_list->length (digital_list.length ()); + + for (unsigned int i = 0; i < digital_list.length (); i++) + io_list[i] = digital_list[i]; + + return distrio_success (); } ::Distrio::Error * Distrio_Manager_i::analog ( ::Distrio::Analog_list_out io_list) { io_list = &analog_list; + return distrio_success (); } ::Distrio::Error * Distrio_Manager_i::device ( ::Distrio::Device_list_out dev_list) { dev_list = &device_list; + return distrio_success (); } /* TODO: think about locking!!! */ @@ -66,9 +73,18 @@ Distrio_Manager_i::~Distrio_Manager_i (void) ::Distrio::Error * Distrio_Manager_i::register_io_analog ( ::Distrio::Analog_ptr & io_ana) { - io_ana->id (new_id ()); - analog_list.length (digital_list.length () + 1); - analog_list [analog_list.length () - 1] = io_ana; + Distrio::Analog_var analog; + + try { + analog = Distrio::Analog::_narrow (io_ana); + analog->id (new_id ()); + } catch (::CORBA::Exception *exc) { + std::cerr << "register analog io failed" << std::endl; + } + analog_list.length (analog_list.length () + 1); + analog_list [analog_list.length () - 1] = analog; + + return distrio_success (); } ::Distrio::Error * Distrio_Manager_i::register_io_device ( -- cgit v1.2.3