1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
#########################################################################################
# Package HiPi::Pin
# Description: GPIO / Extender Pin
# Copyright : Copyright (c) 2013-2023 Mark Dootson
# License : This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#########################################################################################
package HiPi::Pin;
#########################################################################################
use strict;
use warnings;
use parent qw( HiPi::Class );
use HiPi qw( :rpi );
our $VERSION ='0.89';
__PACKAGE__->create_ro_accessors( qw( pinid ) );
sub _open {
my $class = shift;
my $self = $class->SUPER::new(@_);
return $self;
}
sub value {
my($self, $newval) = @_;
if(defined($newval)) {
return $self->_do_setvalue($newval);
} else {
return $self->_do_getvalue();
}
}
sub mode {
my($self, $newval) = @_;
if(defined($newval)) {
return $self->_do_setmode($newval);
} else {
return $self->_do_getmode();
}
}
sub schmitt {
my($self, $newval) = @_;
if(defined($newval)) {
return $self->_do_setschmitt($newval);
} else {
return $self->_do_getschmitt();
}
}
sub slew {
my($self, $newval) = @_;
if(defined($newval)) {
return $self->_do_setslew($newval);
} else {
return $self->_do_getslew();
}
}
sub set_pud {
my($self, $newval) = @_;
$newval //= RPI_PUD_OFF;
my $rval;
if( $newval == RPI_PUD_OFF || $newval == RPI_PUD_DOWN || $newval == RPI_PUD_UP ) {
$rval = $self->_do_setpud( $newval );
} else {
croak(qq(Invalid PUD setting $newval));
}
return $rval;
}
sub get_pud {
my( $self ) = @_;
my $rval = $self->_do_getpud();
return $rval;
}
sub get_function {
my( $self ) = @_;
return $self->_do_get_function_name();
}
sub active_low {
my($self, $newval) = @_;
if(defined($newval)) {
return $self->_do_activelow($newval);
} else {
return $self->_do_activelow();
}
}
sub interrupt {
my($self, $newedge) = @_;
if(defined($newedge)) {
$newedge ||= RPI_INT_NONE;
$newedge = RPI_INT_FALL if $newedge eq 'falling';
$newedge = RPI_INT_RISE if $newedge eq 'rising';
$newedge = RPI_INT_BOTH if $newedge eq 'both';
$newedge = RPI_INT_NONE if $newedge eq 'none';
return $self->_do_setinterrupt($newedge);
} else {
return $self->_do_getinterrupt();
}
}
sub get_interrupt_filepath {
my( $self ) = @_;
return $self->_do_get_interrupt_filepath();
}
1;
__END__
|