Transfer data from server to client via Rpc_in_buf troubles

Christian Helmuth christian.helmuth at ...1...
Wed Dec 19 12:10:49 CET 2012


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
-- 
Christian Helmuth
Genode Labs

http://www.genode-labs.com/ · http://genode.org/
https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth




More information about the users mailing list