Skip to content

Commit cfabecd

Browse files
committed
Properly set the mode during OpenPin()
1 parent bac54fd commit cfabecd

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

examples/blink/blink.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ package main
22

33
import (
44
"fmt"
5-
"github.com/davecheney/gpio"
65
"os"
76
"os/signal"
87
"time"
8+
9+
"github.com/davecheney/gpio"
10+
"github.com/davecheney/gpio/rpi"
911
)
1012

1113
func main() {
1214
// set GPIO25 to output mode
13-
pin, err := gpio.OpenPin(25, gpio.ModeOutput)
15+
pin, err := gpio.OpenPin(rpi.GPIO_P1_22, gpio.ModeOutput)
1416
if err != nil {
1517
fmt.Printf("Error opening pin! %s\n", err)
1618
return

gpio_linux.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,17 @@ func OpenPin(n int, mode Mode) (Pin, error) {
6767
modePath: filepath.Join(pinBase, "direction"),
6868
valueFile: value,
6969
}
70-
p.SetMode(mode)
70+
if err := p.setMode(mode); err != nil {
71+
p.Close()
72+
return nil, err
73+
}
7174
return p, nil
7275
}
7376

7477
// write opens a file for writing, writes the byte slice to it and closes the
7578
// file.
7679
func write(buf []byte, path string) error {
77-
file, err := os.OpenFile(filepath.Join(gpiobase, path), os.O_WRONLY, 0600)
80+
file, err := os.OpenFile(path, os.O_WRONLY, 0600)
7881
if err != nil {
7982
return err
8083
}
@@ -103,7 +106,11 @@ func (p *pin) Mode() Mode {
103106

104107
// SetMode sets the mode of the pin.
105108
func (p *pin) SetMode(mode Mode) {
106-
p.err = write([]byte(mode), p.modePath)
109+
p.err = p.setMode(mode)
110+
}
111+
112+
func (p *pin) setMode(mode Mode) error {
113+
return write([]byte(mode), p.modePath)
107114
}
108115

109116
// Set sets the pin level high.

gpio_linux_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ func TestSetDirection(t *testing.T) {
3636
t.Fatal(err)
3737
}
3838
defer pin.Close()
39+
if dir, err := pin.Mode(), pin.Err(); dir != gpio.ModeInput || err != nil {
40+
t.Fatalf("pin.Mode(): expected %v %v , got %v %v", gpio.ModeInput, nil, dir, err)
41+
}
3942
pin.SetMode(gpio.ModeOutput)
4043
if pin.Err() != nil {
4144
t.Fatal(err)
4245
}
43-
dir := pin.Mode()
44-
if err := pin.Err(); dir != gpio.ModeOutput || err != nil {
46+
if dir, err := pin.Mode(), pin.Err(); dir != gpio.ModeOutput || err != nil {
4547
t.Fatalf("pin.Mode(): expected %v %v , got %v %v", gpio.ModeOutput, nil, dir, err)
4648
}
4749
}

0 commit comments

Comments
 (0)