@@ -3,6 +3,7 @@ package board
3
3
4
4
import (
5
5
"context"
6
+ "fmt"
6
7
7
8
commonpb "go.viam.com/api/common/v1"
8
9
pb "go.viam.com/api/component/board/v1"
@@ -11,6 +12,21 @@ import (
11
12
"go.viam.com/rdk/resource"
12
13
)
13
14
15
+ var (
16
+ // ErrGPIOPinByNameReturnNil is the error returned when a gpio pin is nil.
17
+ ErrGPIOPinByNameReturnNil = func (boardName string ) error {
18
+ return fmt .Errorf ("board component %v GPIOPinByName should not return nil pin" , boardName )
19
+ }
20
+ // ErrAnalogByNameReturnNil is the error returned when an analog is nil.
21
+ ErrAnalogByNameReturnNil = func (boardName string ) error {
22
+ return fmt .Errorf ("board component %v AnalogByName should not return nil analog" , boardName )
23
+ }
24
+ // ErrDigitalInterruptByNameReturnNil is the error returned when a digital interrupt is nil.
25
+ ErrDigitalInterruptByNameReturnNil = func (boardName string ) error {
26
+ return fmt .Errorf ("board component %v DigitalInterruptByName should not return nil digital interrupt" , boardName )
27
+ }
28
+ )
29
+
14
30
// serviceServer implements the BoardService from board.proto.
15
31
type serviceServer struct {
16
32
pb.UnimplementedBoardServiceServer
@@ -34,6 +50,9 @@ func (s *serviceServer) SetGPIO(ctx context.Context, req *pb.SetGPIORequest) (*p
34
50
if err != nil {
35
51
return nil , err
36
52
}
53
+ if p == nil {
54
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
55
+ }
37
56
38
57
return & pb.SetGPIOResponse {}, p .Set (ctx , req .High , req .Extra .AsMap ())
39
58
}
@@ -49,6 +68,9 @@ func (s *serviceServer) GetGPIO(ctx context.Context, req *pb.GetGPIORequest) (*p
49
68
if err != nil {
50
69
return nil , err
51
70
}
71
+ if p == nil {
72
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
73
+ }
52
74
53
75
high , err := p .Get (ctx , req .Extra .AsMap ())
54
76
if err != nil {
@@ -68,6 +90,9 @@ func (s *serviceServer) PWM(ctx context.Context, req *pb.PWMRequest) (*pb.PWMRes
68
90
if err != nil {
69
91
return nil , err
70
92
}
93
+ if p == nil {
94
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
95
+ }
71
96
72
97
pwm , err := p .PWM (ctx , req .Extra .AsMap ())
73
98
if err != nil {
@@ -87,6 +112,9 @@ func (s *serviceServer) SetPWM(ctx context.Context, req *pb.SetPWMRequest) (*pb.
87
112
if err != nil {
88
113
return nil , err
89
114
}
115
+ if p == nil {
116
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
117
+ }
90
118
91
119
return & pb.SetPWMResponse {}, p .SetPWM (ctx , req .DutyCyclePct , req .Extra .AsMap ())
92
120
}
@@ -102,6 +130,9 @@ func (s *serviceServer) PWMFrequency(ctx context.Context, req *pb.PWMFrequencyRe
102
130
if err != nil {
103
131
return nil , err
104
132
}
133
+ if p == nil {
134
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
135
+ }
105
136
106
137
freq , err := p .PWMFreq (ctx , req .Extra .AsMap ())
107
138
if err != nil {
@@ -125,6 +156,9 @@ func (s *serviceServer) SetPWMFrequency(
125
156
if err != nil {
126
157
return nil , err
127
158
}
159
+ if p == nil {
160
+ return nil , ErrGPIOPinByNameReturnNil (req .Name )
161
+ }
128
162
129
163
return & pb.SetPWMFrequencyResponse {}, p .SetPWMFreq (ctx , uint (req .FrequencyHz ), req .Extra .AsMap ())
130
164
}
@@ -143,6 +177,9 @@ func (s *serviceServer) ReadAnalogReader(
143
177
if err != nil {
144
178
return nil , err
145
179
}
180
+ if theReader == nil {
181
+ return nil , ErrAnalogByNameReturnNil (req .BoardName )
182
+ }
146
183
147
184
analogValue , err := theReader .Read (ctx , req .Extra .AsMap ())
148
185
if err != nil {
@@ -170,6 +207,9 @@ func (s *serviceServer) WriteAnalog(
170
207
if err != nil {
171
208
return nil , err
172
209
}
210
+ if analog == nil {
211
+ return nil , ErrAnalogByNameReturnNil (req .Name )
212
+ }
173
213
174
214
err = analog .Write (ctx , int (req .Value ), req .Extra .AsMap ())
175
215
if err != nil {
@@ -193,6 +233,9 @@ func (s *serviceServer) GetDigitalInterruptValue(
193
233
if err != nil {
194
234
return nil , err
195
235
}
236
+ if interrupt == nil {
237
+ return nil , ErrDigitalInterruptByNameReturnNil (req .BoardName )
238
+ }
196
239
197
240
val , err := interrupt .Value (ctx , req .Extra .AsMap ())
198
241
if err != nil {
@@ -218,6 +261,7 @@ func (s *serviceServer) StreamTicks(
218
261
if err != nil {
219
262
return err
220
263
}
264
+
221
265
interrupts = append (interrupts , di )
222
266
}
223
267
err = b .StreamTicks (server .Context (), interrupts , ticksChan , req .Extra .AsMap ())
0 commit comments