-
Notifications
You must be signed in to change notification settings - Fork 2
/
gpio_server.go
96 lines (74 loc) · 3.18 KB
/
gpio_server.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
package rpi
import (
"context"
proto "github.com/gbbirkisson/rpi/pkg/proto"
)
// NewGpioServer creates a new gpio server that uses the gpio interface provided
func NewGpioServer(gpio Gpio) proto.GpioServer {
return &gpioServer{gpio: gpio}
}
type gpioServer struct {
gpio Gpio
}
func (s *gpioServer) Open(ctx context.Context, void *proto.Void) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Open(ctx)
}
func (s *gpioServer) Close(ctx context.Context, void *proto.Void) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Close(ctx)
}
func (s *gpioServer) Input(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Input(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Output(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Output(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Clock(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Clock(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Pwm(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Pwm(ctx, Pin(pin.Pin))
}
func (s *gpioServer) PullUp(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.PullUp(ctx, Pin(pin.Pin))
}
func (s *gpioServer) PullDown(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.PullDown(ctx, Pin(pin.Pin))
}
func (s *gpioServer) PullOff(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.PullOff(ctx, Pin(pin.Pin))
}
func (s *gpioServer) High(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.High(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Low(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Low(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Toggle(ctx context.Context, pin *proto.GpioPin) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Toggle(ctx, Pin(pin.Pin))
}
func (s *gpioServer) Write(ctx context.Context, req *proto.RequestWrite) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Write(ctx, Pin(req.Pin), PinState(req.State))
}
func (s *gpioServer) Read(ctx context.Context, pin *proto.GpioPin) (*proto.ResponseRead, error) {
res, err := s.gpio.Read(ctx, Pin(pin.Pin))
if err != nil {
return nil, err
}
return &proto.ResponseRead{State: int32(res)}, nil
}
func (s *gpioServer) Freq(ctx context.Context, req *proto.RequestFreq) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Freq(ctx, Pin(req.Pin), req.Freq)
}
func (s *gpioServer) DutyCycle(ctx context.Context, req *proto.RequestDutyCycle) (*proto.Void, error) {
return &proto.Void{}, s.gpio.DutyCycle(ctx, Pin(req.Pin), req.DutyLen, req.CycleLen)
}
func (s *gpioServer) Detect(ctx context.Context, req *proto.RequestEdgeDetect) (*proto.Void, error) {
return &proto.Void{}, s.gpio.Detect(ctx, Pin(req.Pin), PinEdge(req.Edge))
}
func (s *gpioServer) EdgeDetected(ctx context.Context, pin *proto.GpioPin) (*proto.ResponseEdgeDetected, error) {
res, err := s.gpio.EdgeDetected(ctx, Pin(pin.Pin))
if err != nil {
return nil, err
}
return &proto.ResponseEdgeDetected{Detected: res}, nil
}