I'm really puzzled about this one..
I already took a look into the rtt_typelib package.
The correct thing seems to be to call
handle.transport->setTypelibSample(handle.transportHandle,
sample.data.data(), false);
but the it gives me a std:bad_alloc when it tries to
allocate the 'typlib' type (in this case base::samples::Frame) in
orogen_transports::OpaqueTypelibMarshaller<base::samples::frame::Frame,
RTT::extras::ReadOnlyPointer<base::samples::frame::Frame>,
0>::setTypelibSample(orogen_transports::TypelibMarshallerBase::Handle*,
unsigned char*, bool)
Any Ideas ?
Janosch
Am 01.09.2015 um 15:16 schrieb Sylvain Joyeux:
Have a look at opaque handling in the mqueue transport, that should
show you how to do it.
Sylvain
On Tue, Sep 1, 2015 at 9:16 AM, Janosch Machowinski
<[email protected] <mailto:[email protected]>> wrote:
Hey,
we are using the typelib marshaler to implement a
second network transport. For Mashaling we use this code :
while (static_cast<RTT::base::InputPortInterface
*>(handle.port)->read(handle.sample, false) == RTT::NewData)
gotNewData = true;
if (gotNewData) {
Communication::DataContainer data;
handle.transport->refreshTypelibSample(handle.transportHandle);
handle.transport->marshal(data.buffer,
handle.transportHandle);
which works fine.
In case that the port contains a RoPtr<base::samples::Frame> we get an
std::bad_alloc on
unmashaling using this code :
handle.transport->unmarshal(data.buffer,
handle.transportHandle);
The Handle here looks like this :
class PortHandle
{
public:
std::string name;
orogen_transports::TypelibMarshallerBase *transport;
RTT::base::DataSourceBase::shared_ptr sample;
orogen_transports::TypelibMarshallerBase::Handle
*transportHandle;
RTT::base::PortInterface *port;
};
And is set up using this code :
RTT::types::TypeInfo const *type = port->getTypeInfo();
curHandle.transport =
dynamic_cast<orogen_transports::TypelibMarshallerBase
*>(type->getProtocol(orogen_transports::TYPELIB_MARSHALLER_ID));
if (! curHandle.transport) {
return false;
}
curHandle.transportHandle =
curHandle.transport->createSample();
curHandle.sample =
curHandle.transport->getDataSource(curHandle.transportHandle);
Any ideas what is wrong ? I suspect, that I need to initialize the
orocos sample somehow on the
receiving end, before unmarhsaling the data...
Greetings
Janosch
--
Dipl. Inf. Janosch Machowinski
SAR- & Sicherheitsrobotik
Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany
Zentrale: +49 421 178 45-6611 <tel:%2B49%20421%20178%2045-6611>
Besuchsadresse der Nebengeschäftstelle:
Robert-Hooke-Straße 5
28359 Bremen, Germany
Tel.: +49 421 178 45-6614 <tel:%2B49%20421%20178%2045-6614>
Empfang: +49 421 178 45-6600 <tel:%2B49%20421%20178%2045-6600>
Fax: +49 421 178 45-4150 <tel:%2B49%20421%20178%2045-4150>
E-Mail: [email protected]
<mailto:[email protected]>
Weitere Informationen: http://www.informatik.uni-bremen.de/robotik
_______________________________________________
Rock-dev mailing list
[email protected] <mailto:[email protected]>
http://www.dfki.de/mailman/cgi-bin/listinfo/rock-dev
--
Dipl. Inf. Janosch Machowinski
SAR- & Sicherheitsrobotik
Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany
Zentrale: +49 421 178 45-6611
Besuchsadresse der Nebengeschäftstelle:
Robert-Hooke-Straße 5
28359 Bremen, Germany
Tel.: +49 421 178 45-6614
Empfang: +49 421 178 45-6600
Fax: +49 421 178 45-4150
E-Mail: [email protected]
Weitere Informationen: http://www.informatik.uni-bremen.de/robotik
_______________________________________________
Rock-dev mailing list
[email protected]
http://www.dfki.de/mailman/cgi-bin/listinfo/rock-dev