In the builder's manual, it says you can call a OperationCaller's send method in c++ to send the operation.
To setup a OperationCaller object, you need a pointer to a TaskContext object, for example using the 'getPeer()' class function. Then you provide the name with which the operation was registered during 'addOperation':
// create a method: TaskContext* a_task_ptr = getPeer("ATask"); OperationCaller<void(void)> my_reset_meth = a_task_ptr->getOperation("reset"); // void reset(void) // Call 'reset' of a_task: reset_meth();If you wanted to send the same reset operation, you had written:
// Send 'reset' of a_task: SendHandle<void(void)> handle = reset_meth.send();A send() always returns a SendHandle object which offers three methods: collect(), collectIfDone() and ret(). All three come in two forms: with arguments or without arguments. The form without arguments can be used if you are only interested in the return values of these functions. collect() and collectIfDone() return a SendStatus, ret() returns the return value of the operation. SendStatus is an enum of SendSuccess, SendNotReady or SendFailure.
But I don't see "send" in the OperationCaller's API Doc. Therefore, I can't compile the code. Why? So, what's the way of doing non-blocking operation call now? Thanks very much.
I'm using orocos_toolchain + rtt_ros_integration in ros hydro.
how to send operation in
I think I made some stupid mistake and now I know what's going on. Now, it's working....
how to send operation in
Sorry for the mess blank... I just copy paste the manual..