File: Pin.pm

package info (click to toggle)
libhipi-perl 0.93-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 20,048 kB
  • sloc: perl: 471,917; ansic: 22; makefile: 10
file content (118 lines) | stat: -rw-r--r-- 2,749 bytes parent folder | download | duplicates (2)
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__