File: 010-gpio.t

package info (click to toggle)
libhipi-perl 0.93-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,048 kB
  • sloc: perl: 471,917; ansic: 22; makefile: 10
file content (194 lines) | stat: -rw-r--r-- 6,644 bytes parent folder | download
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!perl

use Test::More tests => 49;
use HiPi qw( :rpi );
use HiPi::RaspberryPi;
use Time::HiRes;

my $sleepwait = 1000;

SKIP: {
      skip 'not in dist testing', 49 unless $ENV{HIPI_MODULES_DIST_TEST_GPIO};

diag('GPIO (/dev/gpiomem) tests are running');

use_ok( 'HiPi::GPIO' );

my $gpio = HiPi::GPIO->new;

## MODE

my $pin_36_startmode = $gpio->get_pin_mode( RPI_PIN_36 );

$gpio->set_pin_mode( RPI_PIN_36, RPI_MODE_INPUT );
Time::HiRes::usleep($sleepwait);
is ( $gpio->get_pin_mode( RPI_PIN_36 ), RPI_MODE_INPUT, 'pin mode input');
is ( $gpio->get_pin_function( RPI_PIN_36 ), 'INPUT', 'gpio function name' );

$gpio->set_pin_mode( RPI_PIN_36, RPI_MODE_OUTPUT );
Time::HiRes::usleep($sleepwait);
is( $gpio->get_pin_mode( RPI_PIN_36 ), RPI_MODE_OUTPUT, 'pin mode output');
is ( $gpio->get_pin_function( RPI_PIN_36 ), 'OUTPUT', 'gpio function name' );


$gpio->set_pin_mode( RPI_PIN_36, RPI_MODE_INPUT );
Time::HiRes::usleep($sleepwait);
is( $gpio->get_pin_mode( RPI_PIN_36 ), RPI_MODE_INPUT, 'pin mode input reset');

$gpio->set_pin_pud( RPI_PIN_36, RPI_PUD_UP );
Time::HiRes::usleep($sleepwait);
is( $gpio->pin_read( RPI_PIN_36 ), RPI_HIGH, 'pin pud up');
is( $gpio->get_pin_level( RPI_PIN_36 ), RPI_HIGH, 'pin pud up - level');

$gpio->set_pin_pud( RPI_PIN_36, RPI_PUD_OFF );
Time::HiRes::usleep($sleepwait);

$gpio->set_pin_pud( RPI_PIN_36, RPI_PUD_DOWN );
Time::HiRes::usleep($sleepwait);
is( $gpio->pin_read( RPI_PIN_36 ), RPI_LOW, 'pin pud low');
is( $gpio->get_pin_level( RPI_PIN_36 ), RPI_LOW, 'pin pud low - level');

$gpio->set_pin_pud( RPI_PIN_36, RPI_PUD_OFF );

is( $gpio->get_pin_interrupt_filepath( RPI_PIN_36 ), undef, 'pin interrupt filepath');

is( $gpio->get_pin_activelow( RPI_PIN_36 ), undef, 'active low is 0');

$gpio->set_pin_activelow( RPI_PIN_36, 1 );
Time::HiRes::usleep($sleepwait);
is( $gpio->get_pin_activelow( RPI_PIN_36 ), undef, 'active low is 1');

$gpio->set_pin_activelow( RPI_PIN_36, 0 );
Time::HiRes::usleep($sleepwait);
is( $gpio->get_pin_activelow( RPI_PIN_36 ), undef, 'active low is reset');


Time::HiRes::usleep($sleepwait);
# pins

my $pin = $gpio->get_pin( RPI_PIN_36 );

$pin->mode( RPI_MODE_INPUT );
Time::HiRes::usleep($sleepwait);
is ( $pin->mode(), RPI_MODE_INPUT, 'PIN pin mode input');
#
$pin->mode(  RPI_MODE_OUTPUT );
Time::HiRes::usleep($sleepwait);
is( $pin->mode(  ), RPI_MODE_OUTPUT, 'pin mode output');

$pin->mode(  RPI_MODE_INPUT );
Time::HiRes::usleep($sleepwait);
is( $pin->mode(  ), RPI_MODE_INPUT, 'pin mode input reset');

$pin->set_pud(  RPI_PUD_UP );
Time::HiRes::usleep($sleepwait);
is( $pin->value( ), RPI_HIGH, 'pin pud up');

$pin->set_pud(  RPI_PUD_OFF );
Time::HiRes::usleep($sleepwait);

$pin->set_pud(  RPI_PUD_DOWN );
Time::HiRes::usleep($sleepwait);
is( $pin->value(  ), RPI_LOW, 'pin pud low');

$pin->set_pud( RPI_PUD_OFF );

is( $pin->get_interrupt_filepath(), undef, 'PIN pin interrupt filepath');

is( $pin->active_low( ), undef, 'PIN active low is 0');

$pin->active_low(  1 );
Time::HiRes::usleep($sleepwait);
is( $pin->active_low(), undef, 'PIN active low is 1');

$pin->active_low( 0 );
Time::HiRes::usleep($sleepwait);
is( $pin->active_low(), undef, 'PIN active low is reset');

## return to startmode
$pin->mode($pin_36_startmode);
Time::HiRes::usleep($sleepwait);
is ( $gpio->get_pin_mode( RPI_PIN_36 ), $pin_36_startmode, 'starting pin mode input restored');

# OUTPUT

my $pin_37_startmode = $gpio->get_pin_mode( RPI_PIN_37 );

is ( $gpio->get_pin_mode( RPI_PIN_37 ), $pin_37_startmode, 'output pin mode at start');
$gpio->set_pin_mode( RPI_PIN_37, RPI_MODE_OUTPUT );
Time::HiRes::usleep($sleepwait);
is ( $gpio->get_pin_mode( RPI_PIN_37 ), RPI_MODE_OUTPUT, 'output pin mode output');

is ( $gpio->pin_read( RPI_PIN_37 ), 0, 'gpio output pin reads 0');
$gpio->pin_write( RPI_PIN_37, 1 );
diag 'LED IS ON';
sleep(4); # see the LED
is ( $gpio->pin_read( RPI_PIN_37 ), 1, 'gpio output pin reads 1');
$gpio->pin_write( RPI_PIN_37, 0 );
diag 'LED IS OFF';
sleep(4); # see the LED
$gpio->set_pin_mode( RPI_PIN_37, RPI_MODE_INPUT );

# PIN Interface

my $pinout = $gpio->get_pin( RPI_PIN_37 );

is ( $pinout->mode(), RPI_MODE_INPUT, 'PIN output pin mode input');
is ( $pinout->get_function(), 'INPUT', 'pin function name' );

$pinout->mode( RPI_MODE_OUTPUT );
Time::HiRes::usleep($sleepwait);
is ( $pinout->mode(), RPI_MODE_OUTPUT, 'PIN output pin mode output');
is ( $pinout->get_function(), 'OUTPUT', 'pin function name' );

is ( $pinout->value(), 0, 'PIN gpio output pin reads 0');
$pinout->value( 1 );
diag 'PIN LED IS ON';
sleep(4); # see the LED
is ( $pinout->value(), 1, 'PIN gpio output pin reads 1');
$pinout->value( 0 );
diag 'PIN LED IS OFF';
sleep(4); # see the LED
$pinout->mode( RPI_MODE_INPUT );
is ( $pinout->get_function(), 'INPUT', 'pin function name' );

$gpio->set_pin_mode( RPI_PIN_37, $pin_37_startmode );
Time::HiRes::usleep($sleepwait);
is ( $gpio->get_pin_mode( RPI_PIN_37 ), $pin_37_startmode, 'output pin mode start restored');

SKIP: {
        skip 'does not have RP1', 13 unless HiPi::RaspberryPi::has_rp1();
        $gpio->set_pin_mode( RPI_PIN_36, RPI_MODE_INPUT );
        Time::HiRes::usleep($sleepwait);
        is( $gpio->get_pin_mode( RPI_PIN_36 ), RPI_MODE_INPUT, 'gpio mode input reset');
        
        is( $gpio->get_pin_slew( RPI_PIN_36 ), RPI_SLEW_SLOW, 'gpio slew starts slow');
        $gpio->set_pin_slew( RPI_PIN_36, RPI_SLEW_FAST );
        is( $gpio->get_pin_slew( RPI_PIN_36 ), RPI_SLEW_FAST, 'gpio slew set fast');
        $gpio->set_pin_slew( RPI_PIN_36, RPI_SLEW_SLOW);
        is( $gpio->get_pin_slew( RPI_PIN_36 ), RPI_SLEW_SLOW, 'gpio slew reset slow');
        
        is( $gpio->get_pin_schmitt( RPI_PIN_36 ), RPI_SCHMITT_ON, 'gpio schmitt starts on');
        $gpio->set_pin_schmitt( RPI_PIN_36, RPI_SCHMITT_OFF );
        is( $gpio->get_pin_schmitt( RPI_PIN_36 ), RPI_SCHMITT_OFF, 'gpio schmitt set off');
        $gpio->set_pin_schmitt( RPI_PIN_36, RPI_SCHMITT_ON );
        is( $gpio->get_pin_schmitt( RPI_PIN_36 ), RPI_SCHMITT_ON, 'gpio schmitt reset on');
        
        is( $pin->slew(), RPI_SLEW_SLOW, 'pin slew starts low');
        $pin->slew( RPI_SLEW_FAST );
        is( $pin->slew(), RPI_SLEW_FAST, 'pin slew set fast');
        $pin->slew( RPI_SLEW_SLOW );
        is( $pin->slew(), RPI_SLEW_SLOW, 'pin slew reset low');
        
        is( $pin->schmitt(), RPI_SCHMITT_ON, 'pin schmitt starts on');
        $pin->schmitt( RPI_SCHMITT_OFF );
        is( $pin->schmitt(), RPI_SCHMITT_OFF, 'pin schmitt set off');
        $pin->schmitt( RPI_SCHMITT_ON );
        is( $pin->schmitt(), RPI_SCHMITT_ON, 'pin schmitt reset on');
        
      
} # END SKIP NOT RP1

} # End SKIP

1;