Hello Nikolay,
you ran into the same issue as Pruthivi Raj
http://sourceforge.net/mailarchive/message.php?msg_id=28616670
twelve month ago.
On Wed, Dec 19, 2012 at 02:50:50PM +0400, Nikolay Golikov wrote:
enum { MAX_BUFFER_SIZE = 256 }; typedef Genode::Rpc_in_buffer<MAX_BUFFER_SIZE> Byte_array;
Rpc_in_buffer can only be used for _input_ parameters of RPC functions.
virtual bool read(Genode::uint8_t address, Genode::uint8_t register, Byte_array &out) = 0;
You may use a fixed-size struct for the out parameter here
struct Byte_array { char v[256]; };
which unfortunately leaves you sending all 256 bytes - significant or not - on reply to the RPC.
A good option for bulk-data interfaces like yours is synchronized usage of shared memory:
* Put input parameters into shared memory * Call RPC * Read output parameters from shared memory
A good example for this approach can be found in os/include/terminal_session/client.h etc.
Regards