From 557e5a239c5d652d1301522f8089cbbe930ad216 Mon Sep 17 00:00:00 2001 From: Adrian Zankich Date: Wed, 19 Nov 2014 17:18:01 -0800 Subject: [PATCH] Update beaglebone package for new i2c interface --- examples/beaglebone_blinkm.go | 3 +- platforms/beaglebone/beaglebone_adaptor.go | 80 ++++++++++------ .../beaglebone/beaglebone_adaptor_test.go | 3 +- platforms/beaglebone/coverage.out | 91 +++++++++++++++++++ 4 files changed, 148 insertions(+), 29 deletions(-) create mode 100644 platforms/beaglebone/coverage.out diff --git a/examples/beaglebone_blinkm.go b/examples/beaglebone_blinkm.go index c4f0dbb8..55424a5e 100644 --- a/examples/beaglebone_blinkm.go +++ b/examples/beaglebone_blinkm.go @@ -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) }) } diff --git a/platforms/beaglebone/beaglebone_adaptor.go b/platforms/beaglebone/beaglebone_adaptor.go index 6a341f70..8644533f 100644 --- a/platforms/beaglebone/beaglebone_adaptor.go +++ b/platforms/beaglebone/beaglebone_adaptor.go @@ -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) diff --git a/platforms/beaglebone/beaglebone_adaptor_test.go b/platforms/beaglebone/beaglebone_adaptor_test.go index 116f154f..d540b8bc 100644 --- a/platforms/beaglebone/beaglebone_adaptor_test.go +++ b/platforms/beaglebone/beaglebone_adaptor_test.go @@ -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) } diff --git a/platforms/beaglebone/coverage.out b/platforms/beaglebone/coverage.out new file mode 100644 index 00000000..8035ea5e --- /dev/null +++ b/platforms/beaglebone/coverage.out @@ -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