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