1
0
mirror of https://github.com/hybridgroup/gobot.git synced 2025-04-26 13:48:49 +08:00

Update beaglebone package for new i2c interface

This commit is contained in:
Adrian Zankich 2014-11-19 17:18:01 -08:00
parent 82500837a7
commit 557e5a239c
4 changed files with 148 additions and 29 deletions

View File

@ -20,7 +20,8 @@ func main() {
g := byte(gobot.Rand(255))
b := byte(gobot.Rand(255))
blinkm.Rgb(r, g, b)
fmt.Println("color", blinkm.Color())
color, _ := blinkm.Color()
fmt.Println("color", color)
})
}

View File

@ -2,6 +2,7 @@ package beaglebone
import (
"bufio"
"errors"
"fmt"
"io"
"os"
@ -202,7 +203,11 @@ func (b *BeagleboneAdaptor) ServoWrite(pin string, val byte) (err error) {
// DigitalRead returns a digital value from specified pin
func (b *BeagleboneAdaptor) DigitalRead(pin string) (val int, err error) {
return b.digitalPin(pin, sysfs.IN).Read()
sysfsPin, err := b.digitalPin(pin, sysfs.IN)
if err != nil {
return
}
return sysfsPin.Read()
}
// DigitalWrite writes a digital value to specified pin.
@ -217,12 +222,17 @@ func (b *BeagleboneAdaptor) DigitalWrite(pin string, val byte) (err error) {
_, err = fi.WriteString(strconv.Itoa(int(val)))
return err
}
return b.digitalPin(pin, sysfs.OUT).Write(int(val))
sysfsPin, err := b.digitalPin(pin, sysfs.OUT)
return sysfsPin.Write(int(val))
}
// AnalogRead returns an analog value from specified pin
func (b *BeagleboneAdaptor) AnalogRead(pin string) (val int, err error) {
fi, err := sysfs.OpenFile(fmt.Sprintf("%v/%v", b.helper, b.translateAnalogPin(pin)), os.O_RDONLY, 0644)
analogPin, err := b.translateAnalogPin(pin)
if err != nil {
return
}
fi, err := sysfs.OpenFile(fmt.Sprintf("%v/%v", b.helper, analogPin), os.O_RDONLY, 0644)
defer fi.Close()
if err != nil {
@ -245,75 +255,91 @@ func (b *BeagleboneAdaptor) AnalogWrite(pin string, val byte) (err error) {
}
// I2cStart starts a i2c device in specified address
func (b *BeagleboneAdaptor) I2cStart(address byte) {
b.i2cDevice, _ = sysfs.NewI2cDevice("/dev/i2c-1", address)
func (b *BeagleboneAdaptor) I2cStart(address byte) (err error) {
b.i2cDevice, err = sysfs.NewI2cDevice("/dev/i2c-1", address)
return
}
// I2CWrite writes data to i2c device
func (b *BeagleboneAdaptor) I2cWrite(data []byte) {
b.i2cDevice.Write(data)
func (b *BeagleboneAdaptor) I2cWrite(data []byte) (err error) {
_, err = b.i2cDevice.Write(data)
return err
}
// I2cRead returns value from i2c device using specified size
func (b *BeagleboneAdaptor) I2cRead(size uint) []byte {
buf := make([]byte, size)
b.i2cDevice.Read(buf)
return buf
func (b *BeagleboneAdaptor) I2cRead(size uint) (data []byte, err error) {
data = make([]byte, size)
_, err = b.i2cDevice.Read(data)
return
}
// translatePin converts digital pin name to pin position
func (b *BeagleboneAdaptor) translatePin(pin string) int {
func (b *BeagleboneAdaptor) translatePin(pin string) (value int, err error) {
for key, value := range pins {
if key == pin {
return value
return value, nil
}
}
panic("Not a valid pin")
err = errors.New("Not a valid pin")
return
}
// translatePwmPin converts pwm pin name to pin position
func (b *BeagleboneAdaptor) translatePwmPin(pin string) string {
func (b *BeagleboneAdaptor) translatePwmPin(pin string) (value string, err error) {
for key, value := range pwmPins {
if key == pin {
return value
return value, nil
}
}
panic("Not a valid pin")
err = errors.New("Not a valid pin")
return
}
// translateAnalogPin converts analog pin name to pin position
func (b *BeagleboneAdaptor) translateAnalogPin(pin string) string {
func (b *BeagleboneAdaptor) translateAnalogPin(pin string) (value string, err error) {
for key, value := range analogPins {
if key == pin {
return value
return value, nil
}
}
panic("Not a valid pin")
err = errors.New("Not a valid pin")
return
}
// digitalPin retrieves digital pin value by name
func (b *BeagleboneAdaptor) digitalPin(pin string, dir string) sysfs.DigitalPin {
i := b.translatePin(pin)
func (b *BeagleboneAdaptor) digitalPin(pin string, dir string) (sysfsPin sysfs.DigitalPin, err error) {
i, err := b.translatePin(pin)
if err != nil {
return
}
if b.digitalPins[i] == nil {
b.digitalPins[i] = sysfs.NewDigitalPin(i)
err := b.digitalPins[i].Export()
if err != nil {
fmt.Println(err)
return nil, err
}
}
b.digitalPins[i].Direction(dir)
return b.digitalPins[i]
if err = b.digitalPins[i].Direction(dir); err != nil {
return
}
return b.digitalPins[i], nil
}
// pwPin retrieves pwm pin value by name
func (b *BeagleboneAdaptor) pwmPin(pin string) (i string, err error) {
i = b.translatePwmPin(pin)
i, err = b.translatePwmPin(pin)
if err != nil {
return
}
if b.pwmPins[i] == nil {
err = ensureSlot(b.slots, fmt.Sprintf("bone_pwm_%v", pin))
if err != nil {
return
}
b.pwmPins[i], err = newPwmPin(i, b.ocp)
if err != nil {
return
}
}
return
}
@ -352,7 +378,7 @@ func ensureSlot(slots, item string) (err error) {
}
err = fi.Sync()
if err != nil {
return nil
return err
}
scanner = bufio.NewScanner(fi)

View File

@ -106,7 +106,8 @@ func TestBeagleboneAdaptor(t *testing.T) {
a.I2cStart(0xff)
a.I2cWrite([]byte{0x00, 0x01})
gobot.Assert(t, a.I2cRead(2), []byte{0x00, 0x01})
data, _ := a.I2cRead(2)
gobot.Assert(t, data, []byte{0x00, 0x01})
gobot.Assert(t, a.Finalize(), nil)
}

View File

@ -0,0 +1,91 @@
mode: set
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:125.59,131.19 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:131.19,134.4 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:140.44,146.2 5 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:149.45,150.32 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:155.2,155.36 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:160.2,160.24 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:163.2,163.13 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:150.32,151.17 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:151.17,153.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:155.36,156.17 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:156.17,158.4 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:160.24,162.3 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:167.60,169.2 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:172.41,172.43 0 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:175.62,180.2 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:183.61,186.2 2 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:190.64,191.34 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:191.34,194.17 3 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:197.3,197.41 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:194.17,196.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:198.3,200.3 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:204.56,207.2 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:210.63,212.2 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:215.52,217.2 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:220.51,222.2 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:225.55,229.2 3 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:232.58,233.31 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:238.2,238.26 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:233.31,234.17 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:234.17,236.4 1 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:242.64,243.34 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:248.2,248.26 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:243.34,244.17 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:244.17,246.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:252.67,253.37 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:258.2,258.26 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:253.37,254.17 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:254.17,256.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:262.58,264.28 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:267.2,267.10 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:264.28,266.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:271.81,273.29 2 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:280.2,281.25 2 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:273.29,276.17 3 1
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:276.17,278.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:285.55,287.25 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:290.2,290.10 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:287.25,289.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:294.60,299.2 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:301.30,306.16 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:309.2,310.16 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:313.2,318.21 3 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:325.2,329.21 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:306.16,308.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:310.16,312.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:318.21,320.36 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:320.36,322.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:329.21,331.36 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/beaglebone_adaptor.go:331.36,333.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:16.39,27.16 6 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:31.2,32.16 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:36.2,38.26 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:47.2,51.6 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:56.2,56.6 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:61.2,61.10 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:27.16,29.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:32.16,34.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:38.26,40.27 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:40.27,42.4 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:42.4,43.9 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:51.6,52.75 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:52.75,53.9 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:56.6,57.73 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:57.73,58.9 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:65.55,70.16 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:73.2,77.16 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:80.2,81.12 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:70.16,72.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:77.16,79.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:85.28,87.16 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:90.2,91.12 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/pwm_pin.go:87.16,89.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:16.45,21.2 3 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:25.38,30.16 4 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:34.2,35.16 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:39.2,40.16 2 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:44.2,49.10 5 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:30.16,32.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:35.16,37.3 1 0
github.com/hybridgroup/gobot/platforms/beaglebone/analog_pin.go:40.16,42.3 1 0