/** * \brief USB session client implementation * \author Sebastian Sumpf * \date 2014-12-08 */ /* * Copyright (C) 2014-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ #ifndef _INCLUDE__USB_SESSION__CLIENT_H_ #define _INCLUDE__USB_SESSION__CLIENT_H_ #include #include #include #include namespace Usb { class Session_client; class Interface_client; } class Usb::Session_client : public Genode::Rpc_client { private: Packet_stream_tx::Client _tx; public: /** * Constructor * * \param session session capability * \param tx_buffer_alloc allocator used for managing the * transmission buffer */ Session_client(Session_capability session, Genode::Range_allocator &tx_buffer_alloc, Genode::Region_map &rm, Genode::Signal_context_capability state_change) : Genode::Rpc_client(session), _tx(call(), rm, tx_buffer_alloc) { if (state_change.valid()) sigh_state_change(state_change); } /*************************** ** USB session interface ** ***************************/ bool plugged() override { return call(); } Tx *tx_channel() override { return &_tx; } Tx::Source *source() override { return _tx.source(); } void sigh_state_change(Genode::Signal_context_capability sigh) override { call(sigh); } void config_descriptor(Device_descriptor *device_descr, Config_descriptor *config_descr) override { call(device_descr, config_descr); } unsigned alt_settings(unsigned index) { return call(index); } void interface_descriptor(unsigned index, unsigned alt_setting, Interface_descriptor *interface_descr) override { call(index, alt_setting, interface_descr); } void endpoint_descriptor(unsigned interface_num, unsigned alt_setting, unsigned endpoint_num, Endpoint_descriptor *endpoint_descr) override { call(interface_num, alt_setting, endpoint_num, endpoint_descr); } void claim_interface(unsigned interface_num) { call(interface_num); } void release_interface(unsigned interface_num) { call(interface_num); } }; #endif /* _INCLUDE__USB_SESSION__CLIENT_H_ */