-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
spi_config.go
158 lines (131 loc) · 3.59 KB
/
spi_config.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
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
package spi
type spiConfig struct {
bus int
chip int
mode int
bits int
speed int64
}
// Config is the interface which describes how a Driver can specify
// optional SPI params such as which SPI bus it wants to use.
type Config interface {
// WithBus sets which bus to use
WithBus(bus int)
// GetBusOrDefault gets which bus to use
GetBusOrDefault(def int) int
// WithChip sets which chip to use
WithChip(chip int)
// GetChipOrDefault gets which chip to use
GetChipOrDefault(def int) int
// WithMode sets which mode to use
WithMode(mode int)
// GetModeOrDefault gets which mode to use
GetModeOrDefault(def int) int
// WithBIts sets how many bits to use
WithBits(bits int)
// GetBitsOrDefault gets how many bits to use
GetBitsOrDefault(def int) int
// WithSpeed sets which speed to use (in Hz)
WithSpeed(speed int64)
// GetSpeedOrDefault gets which speed to use (in Hz)
GetSpeedOrDefault(def int64) int64
}
// NewConfig returns a new SPI Config.
func NewConfig() Config {
return &spiConfig{
bus: NotInitialized,
chip: NotInitialized,
mode: NotInitialized,
bits: NotInitialized,
speed: NotInitialized}
}
// WithBus sets preferred bus to use.
func (s *spiConfig) WithBus(bus int) {
s.bus = bus
}
// GetBusOrDefault returns which bus to use, either the one set using WithBus(),
// or the default value which is passed in as the one param.
func (s *spiConfig) GetBusOrDefault(d int) int {
if s.bus == NotInitialized {
return d
}
return s.bus
}
// WithBus sets which bus to use as a optional param.
func WithBus(bus int) func(Config) {
return func(s Config) {
s.WithBus(bus)
}
}
// WithChip sets preferred chip to use.
func (s *spiConfig) WithChip(chip int) {
s.chip = chip
}
// GetChipOrDefault returns which chip to use, either the one set using WithChip(),
// or the default value which is passed in as the one param.
func (s *spiConfig) GetChipOrDefault(d int) int {
if s.chip == NotInitialized {
return d
}
return s.chip
}
// WithChip sets which chip to use as a optional param.
func WithChip(chip int) func(Config) {
return func(s Config) {
s.WithChip(chip)
}
}
// WithMode sets SPI mode to use.
func (s *spiConfig) WithMode(mode int) {
s.mode = mode
}
// GetModeOrDefault returns which mode to use, either the one set using WithChip(),
// or the default value which is passed in as the one param.
func (s *spiConfig) GetModeOrDefault(d int) int {
if s.mode == NotInitialized {
return d
}
return s.mode
}
// WithMode sets which mode to use as a optional param.
func WithMode(mode int) func(Config) {
return func(s Config) {
s.WithMode(mode)
}
}
// WithBits sets how many SPI bits to use.
func (s *spiConfig) WithBits(bits int) {
s.bits = bits
}
// GetBitsOrDefault returns how many to use, either the one set using WithBits(),
// or the default value which is passed in as the one param.
func (s *spiConfig) GetBitsOrDefault(d int) int {
if s.bits == NotInitialized {
return d
}
return s.bits
}
// WithBits sets how many bits to use as a optional param.
func WithBits(bits int) func(Config) {
return func(s Config) {
s.WithBits(bits)
}
}
// WithSpeed sets which SPI speed to use.
func (s *spiConfig) WithSpeed(speed int64) {
s.speed = speed
}
// GetSpeedOrDefault returns what speed to use, either the one set using WithSpeed(),
// or the default value which is passed in as the one param.
func (s *spiConfig) GetSpeedOrDefault(d int64) int64 {
if s.speed == NotInitialized {
return d
}
return s.speed
}
// WithSpeed sets what speed to use as a optional param.
func WithSpeed(speed int64) func(Config) {
return func(s Config) {
s.WithSpeed(speed)
}
}