-
Notifications
You must be signed in to change notification settings - Fork 110
/
gpio_pin.go
133 lines (117 loc) · 3.93 KB
/
gpio_pin.go
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
package inject
import (
"context"
"go.viam.com/rdk/components/board"
)
// GPIOPin is an injected GPIOPin.
type GPIOPin struct {
board.GPIOPin
SetFunc func(ctx context.Context, high bool, extra map[string]interface{}) error
setCap []interface{}
GetFunc func(ctx context.Context, extra map[string]interface{}) (bool, error)
getCap []interface{}
PWMFunc func(ctx context.Context, extra map[string]interface{}) (float64, error)
pwmCap []interface{}
SetPWMFunc func(ctx context.Context, dutyCyclePct float64, extra map[string]interface{}) error
setPWMCap []interface{}
PWMFreqFunc func(ctx context.Context, extra map[string]interface{}) (uint, error)
pwmFreqCap []interface{}
SetPWMFreqFunc func(ctx context.Context, freqHz uint, extra map[string]interface{}) error
setPWMFreqCap []interface{}
}
// Set calls the injected Set or the real version.
func (gp *GPIOPin) Set(ctx context.Context, high bool, extra map[string]interface{}) error {
gp.setCap = []interface{}{ctx, high}
if gp.SetFunc == nil {
return gp.GPIOPin.Set(ctx, high, extra)
}
return gp.SetFunc(ctx, high, extra)
}
// Get calls the injected Get or the real version.
func (gp *GPIOPin) Get(ctx context.Context, extra map[string]interface{}) (bool, error) {
gp.getCap = []interface{}{ctx}
if gp.GetFunc == nil {
return gp.GPIOPin.Get(ctx, extra)
}
return gp.GetFunc(ctx, extra)
}
// PWM calls the injected PWM or the real version.
func (gp *GPIOPin) PWM(ctx context.Context, extra map[string]interface{}) (float64, error) {
gp.pwmCap = []interface{}{ctx}
if gp.PWMFunc == nil {
return gp.GPIOPin.PWM(ctx, extra)
}
return gp.PWMFunc(ctx, extra)
}
// SetPWM calls the injected SetPWM or the real version.
func (gp *GPIOPin) SetPWM(ctx context.Context, dutyCyclePct float64, extra map[string]interface{}) error {
gp.setPWMCap = []interface{}{ctx, dutyCyclePct}
if gp.SetPWMFunc == nil {
return gp.GPIOPin.SetPWM(ctx, dutyCyclePct, extra)
}
return gp.SetPWMFunc(ctx, dutyCyclePct, extra)
}
// PWMFreq calls the injected PWMFreq or the real version.
func (gp *GPIOPin) PWMFreq(ctx context.Context, extra map[string]interface{}) (uint, error) {
gp.pwmFreqCap = []interface{}{ctx}
if gp.PWMFreqFunc == nil {
return gp.GPIOPin.PWMFreq(ctx, extra)
}
return gp.PWMFreqFunc(ctx, extra)
}
// SetPWMFreq calls the injected SetPWMFreq or the real version.
func (gp *GPIOPin) SetPWMFreq(ctx context.Context, freqHz uint, extra map[string]interface{}) error {
gp.setPWMFreqCap = []interface{}{ctx, freqHz}
if gp.SetPWMFreqFunc == nil {
return gp.GPIOPin.SetPWMFreq(ctx, freqHz, extra)
}
return gp.SetPWMFreqFunc(ctx, freqHz, extra)
}
// SetCap returns the last parameters received by Set, and then clears them.
func (gp *GPIOPin) SetCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.setCap = nil }()
return gp.setCap
}
// GetCap returns the last parameters received by Get, and then clears them.
func (gp *GPIOPin) GetCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.getCap = nil }()
return gp.getCap
}
// PWMCap returns the last parameters received by PWM, and then clears them.
func (gp *GPIOPin) PWMCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.pwmCap = nil }()
return gp.pwmCap
}
// SetPWMCap returns the last parameters received by SetPWM, and then clears them.
func (gp *GPIOPin) SetPWMCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.setPWMCap = nil }()
return gp.setPWMCap
}
// PWMFreqCap returns the last parameters received by PWMFreq, and then clears them.
func (gp *GPIOPin) PWMFreqCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.pwmFreqCap = nil }()
return gp.pwmFreqCap
}
// SetPWMFreqCap returns the last parameters received by SetPWMFreq, and then clears them.
func (gp *GPIOPin) SetPWMFreqCap() []interface{} {
if gp == nil {
return nil
}
defer func() { gp.setPWMFreqCap = nil }()
return gp.setPWMFreqCap
}