sub new { my ($self, %args) = @_; $self = bless {%args}, $self; if (! $ENV{NO_BOARD}){ if (my $scheme = $ENV{RPI_PIN_MODE}){ # this checks if another application has already run # a setup routine $self->pin_scheme($scheme); } else { # we default to gpio mode if (! defined $self->{setup}) { $self->SUPER::setup_gpio(); $self->pin_scheme(RPI_MODE_GPIO); } else { if ($self->_setup =~ /^w/) { $self->SUPER::setup(); $self->pin_scheme(RPI_MODE_WPI); } elsif ($self->_setup =~ /^g/) { $self->SUPER::setup_gpio(); $self->pin_scheme(RPI_MODE_GPIO); } elsif ($self->_setup =~ /^p/) { $self->SUPER::setup_phys(); $self->pin_scheme(RPI_MODE_PHYS); } elsif ($self->_setup =~ /^W/){ $self->pin_scheme(RPI_MODE_WPI); } else { $self->pin_scheme(RPI_MODE_UNINIT); } } } # set the env var so we can catch multiple # setup calls properly $ENV{RPI_SCHEME} = $self->pin_scheme; } $self->_fatal_exit; return $self; }