I don't know that you can return parameters on a call. You may need to use global variables, or have the piston that receives the call to make a call back.
See:
If you need a larger application, you can use multiple pistons, and have a main piston call the sub-pistons. Again, leave the wait = true on when performing "execute piston"
do note:
to pass data to a piston, you can use arguments on the piston call, or global variables.
to get data returned from a piston execution, global variables are often the best choice.
note that a piston can subscribe to a global variable change. (globalvariable changes). This design paradigm can make it easy to not worry about the loading comments below.
global variables are "loaded" when a piston starts, and saved when a piston exits, so if:
Piston A calls piston B, and B modifies a global variable, piston A will not see the change until the next time piston A executes.
Piston A modifies a variable and calls piston B, since A has not exited yet, the change to the global variable is likely not to be seen by B until B runs again after A has exited (and saved changes)