/* * PinFromDecoderSetupv2.cpp * * Created on: 22 окт. 2019 г. * Author: user */ #include "PinFromDecoderv2Setup.hh" #include "../../systemic/SystemException.hh" struct GpioPinDecoderError : public systemic::SystemException { const char * what() const noexcept { return "driver::GpioPinDecoder_v2::grab return nullptr"; } std::size_t id() const noexcept { return 3873; }; std::pair binary() const noexcept { return {reinterpret_cast(this), sizeof(GpioPinDecoderError)}; } GpioPinDecoderError( configuration::Environment::Id decoder_id, uint16_t pin_id ) : decoder_id(decoder_id), pin_id(pin_id) {} configuration::Environment::Id decoder_id; uint16_t pin_id; }; bool application::virtualization::PinFromDecoder_v2Setup::input( Environment & env ) { return grab( pin_decoder, env.rholder.getShared< driver::GpioPinDecoder_v2 >( links.gpio_decoder_id ) ); } void application::virtualization::PinFromDecoder_v2Setup::build( Environment & env ) { Local< driver::GpioPinDecoder_v2 > decoder( pin_decoder, *env.rholder.getShared< driver::GpioPinDecoder_v2 >( links.gpio_decoder_id ) ); peripheral::IGpio * pin = decoder->grab( config.pin_id ); if( not pin ) throw GpioPinDecoderError( links.gpio_decoder_id, config.pin_id ); if( links.gpio_id ) env.rholder.share( *pin, links.gpio_id ); } application::virtualization::PinFromDecoder_v2Setup::PinFromDecoder_v2Setup( const Links & links, const Setting & config ) : links(links), config(config) {}