@@ -36,9 +36,7 @@ type Adaptor struct {
36
36
* adaptors.PWMPinsAdaptor
37
37
* adaptors.I2cBusAdaptor
38
38
* adaptors.SpiBusAdaptor
39
- usrLed string
40
- pinMap map [string ]int
41
- pwmPinTranslate func (string ) (string , int , error )
39
+ usrLed string
42
40
}
43
41
44
42
// NewAdaptor returns a new Beaglebone Black/Green Adaptor
@@ -53,12 +51,10 @@ func NewAdaptor(opts ...interface{}) *Adaptor {
53
51
sys := system .NewAccesser (system .WithDigitalPinSysfsAccess ())
54
52
pwmPinTranslator := adaptors .NewPWMPinTranslator (sys , bbbPwmPinMap )
55
53
a := & Adaptor {
56
- name : gobot .DefaultName ("BeagleboneBlack" ),
57
- sys : sys ,
58
- mutex : & sync.Mutex {},
59
- pinMap : bbbPinMap ,
60
- pwmPinTranslate : pwmPinTranslator .Translate ,
61
- usrLed : "/sys/class/leds/beaglebone:green:" ,
54
+ name : gobot .DefaultName ("BeagleboneBlack" ),
55
+ sys : sys ,
56
+ mutex : & sync.Mutex {},
57
+ usrLed : "/sys/class/leds/beaglebone:green:" ,
62
58
}
63
59
64
60
var digitalPinsOpts []adaptors.DigitalPinsOptionApplier
@@ -69,6 +65,8 @@ func NewAdaptor(opts ...interface{}) *Adaptor {
69
65
digitalPinsOpts = append (digitalPinsOpts , o )
70
66
case adaptors.PwmPinsOptionApplier :
71
67
pwmPinsOpts = append (pwmPinsOpts , o )
68
+ case func (system.Optioner ):
69
+ o (sys )
72
70
default :
73
71
panic (fmt .Sprintf ("'%s' can not be applied on adaptor '%s'" , opt , a .name ))
74
72
}
@@ -83,7 +81,8 @@ func NewAdaptor(opts ...interface{}) *Adaptor {
83
81
84
82
a .AnalogPinsAdaptor = adaptors .NewAnalogPinsAdaptor (sys , analogPinTranslator .Translate )
85
83
a .DigitalPinsAdaptor = adaptors .NewDigitalPinsAdaptor (sys , a .translateAndMuxDigitalPin , digitalPinsOpts ... )
86
- a .PWMPinsAdaptor = adaptors .NewPWMPinsAdaptor (sys , a .translateAndMuxPWMPin , pwmPinsOpts ... )
84
+ a .PWMPinsAdaptor = adaptors .NewPWMPinsAdaptor (sys , a .getTranslateAndMuxPWMPinFunc (pwmPinTranslator .Translate ),
85
+ pwmPinsOpts ... )
87
86
a .I2cBusAdaptor = adaptors .NewI2cBusAdaptor (sys , i2cBusNumberValidator .Validate , defaultI2cBusNumber )
88
87
a .SpiBusAdaptor = adaptors .NewSpiBusAdaptor (sys , spiBusNumberValidator .Validate , defaultSpiBusNumber ,
89
88
defaultSpiChipNumber , defaultSpiMode , defaultSpiBitsNumber , defaultSpiMaxSpeed )
@@ -165,7 +164,7 @@ func (a *Adaptor) DigitalWrite(id string, val byte) error {
165
164
166
165
// translatePin converts digital pin name to pin position
167
166
func (a * Adaptor ) translateAndMuxDigitalPin (id string ) (string , int , error ) {
168
- line , ok := a . pinMap [id ]
167
+ line , ok := bbbPinMap [id ]
169
168
if ! ok {
170
169
return "" , - 1 , fmt .Errorf ("'%s' is not a valid id for a digital pin" , id )
171
170
}
@@ -176,17 +175,21 @@ func (a *Adaptor) translateAndMuxDigitalPin(id string) (string, int, error) {
176
175
return "" , line , nil
177
176
}
178
177
179
- func (a * Adaptor ) translateAndMuxPWMPin (id string ) (string , int , error ) {
180
- path , channel , err := a .pwmPinTranslate (id )
181
- if err != nil {
182
- return path , channel , err
183
- }
178
+ func (a * Adaptor ) getTranslateAndMuxPWMPinFunc (
179
+ pwmPinTranslate func (id string ) (string , int , error ),
180
+ ) func (id string ) (string , int , error ) {
181
+ return func (id string ) (string , int , error ) {
182
+ path , channel , err := pwmPinTranslate (id )
183
+ if err != nil {
184
+ return path , channel , err
185
+ }
184
186
185
- if err := a .muxPin (id , "pwm" ); err != nil {
186
- return "" , - 1 , err
187
- }
187
+ if err := a .muxPin (id , "pwm" ); err != nil {
188
+ return "" , - 1 , err
189
+ }
188
190
189
- return path , channel , nil
191
+ return path , channel , nil
192
+ }
190
193
}
191
194
192
195
func (a * Adaptor ) muxPin (pin , cmd string ) error {
0 commit comments