I am trying to check whether the packed message is handled correctly.  
The message was serialized using:
    kj::VectorOutputStream output;
   capnp::MallocMessageBuilder message;
   typename msgT::Builder r1 = message.initRoot<msgT>();
   assign_function(&r1);
   capnp::writePackedMessage(output, message);
   serialized_size = output.getArray().size();
And was deserialized using:
    typename msgT::Reader r2;
    kj::ArrayInputStream input(output.getArray());
   capnp::PackedMessageReader reader(input);
   r2 = reader.getRoot<msgT>();
It was then checked using:
    capnp::AnyStruct::Reader left = r1.asReader();
   capnp::AnyStruct::Reader right = r2;
   return left == right;
The message assign function is:
void capnproto::assign_function(RobotControl::Builder *r) {
 auto states = r->initState(nested_iter);
 for (int i = 0; i < nested_iter; i++) {
   auto command = states[i].initRobotCommand();
   if (i%2 == 0) {
     command.setMove(1);
   } else {
     command.setGrasp(1);
   }
   auto pose = states[i].initPose();
   auto pos = pose.initPos();
   auto ori = pose.initOri();
   pos.setX(static_cast<double>(i + 1.0));
   pos.setY(static_cast<double>(i + 1.0));
   pos.setZ(static_cast<double>(i + 1.0));
   ori.setX(static_cast<double>(i + 1.0));
   ori.setY(static_cast<double>(i + 1.0));
   ori.setZ(static_cast<double>(i + 1.0));
   ori.setW(static_cast<double>(i + 1.0));
 }
}
I also tried to print out r2, but it returned:
unknown file: Failure
C++ exception with description "capnp/layout.c++:2240: failed: expected 
ref->kind() == WirePointer::LIST; Message contains non-list pointer where 
list pointer was expected.
stack: 0x4e86bb 0x4dfb0b 0x611d71 0x60b375 0x5ee6f8 0x5ef090 0x5ef783 
0x5f68ca 0x613349 0x60c1b7 0x5f5366 0x4dd3c8 0x7f84f1d6c830 0x4ddde9" 
thrown in the test body.
The print function is:
void capnproto::print_function(RobotControl::Reader *r) {
 auto states = r->getState();
 for (int i = 0; i < nested_iter; i++) {
   auto command = states[i].getRobotCommand();
   if (i%2 == 0) {
     std::cout << command.isMove() << std::endl;
   } else {
     std::cout << command.isGrasp() << std::endl;
   }
   auto pose = states[i].getPose();
   auto pos = pose.getPos();
   auto ori = pose.getOri();
   std::cout << pos.getX() << " " << pos.getY() <<
    " " << pos.getZ() << std::endl;
   std::cout << ori.getX() << " " << ori.getY() <<
    " " << ori.getZ() << " " << ori.getW() << std::endl;
 }
}
However, this test for simple scalar value message passed.
Can anyone help me with this?

Best,
Shuo

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/capnproto.

Reply via email to