Skip to content

Commit

Permalink
core: Refactor DigiSpark platform for new Adaptor creation signature
Browse files Browse the repository at this point in the history
Signed-off-by: deadprogram <[email protected]>
deadprogram committed Sep 25, 2016
1 parent cd6d46d commit 12a5cec
Showing 4 changed files with 45 additions and 48 deletions.
6 changes: 3 additions & 3 deletions platforms/digispark/README.md
Original file line number Diff line number Diff line change
@@ -40,14 +40,14 @@ import (

"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/platforms/digispark"
"github.com/hybridgroup/gobot/platforms/gpio"
"github.com/hybridgroup/gobot/drivers/gpio"
)

func main() {
gbot := gobot.NewGobot()

digisparkAdaptor := digispark.NewDigisparkAdaptor("Digispark")
led := gpio.NewLedDriver(digisparkAdaptor, "led", "0")
digisparkAdaptor := digispark.NewAdaptor()
led := gpio.NewLedDriver(digisparkAdaptor, "0")

work := func() {
gobot.Every(1*time.Second, func() {
32 changes: 17 additions & 15 deletions platforms/digispark/digispark_adaptor.go
Original file line number Diff line number Diff line change
@@ -8,20 +8,19 @@ import (
// ErrConnection is the error resulting of a connection error with the digispark
var ErrConnection = errors.New("connection error")

// DigisparkAdaptor is the Gobot Adaptor for the Digispark
type DigisparkAdaptor struct {
// Adaptor is the Gobot Adaptor for the Digispark
type Adaptor struct {
name string
littleWire lw
servo bool
pwm bool
connect func(*DigisparkAdaptor) (err error)
connect func(*Adaptor) (err error)
}

// NewDigisparkAdaptor returns a new DigisparkAdaptor with specified name
func NewDigisparkAdaptor(name string) *DigisparkAdaptor {
return &DigisparkAdaptor{
name: name,
connect: func(d *DigisparkAdaptor) (err error) {
// NewAdaptor returns a new Digispark Adaptor
func NewAdaptor() *Adaptor {
return &Adaptor{
connect: func(d *Adaptor) (err error) {
d.littleWire = littleWireConnect()
if d.littleWire.(*littleWire).lwHandle == nil {
return ErrConnection
@@ -31,22 +30,25 @@ func NewDigisparkAdaptor(name string) *DigisparkAdaptor {
}
}

// Name returns the DigisparkAdaptors name
func (d *DigisparkAdaptor) Name() string { return d.name }
// Name returns the Digispark Adaptors name
func (d *Adaptor) Name() string { return d.name }

// SetName sets the Digispark Adaptors name
func (d *Adaptor) SetName(n string) { d.name = n }

// Connect starts a connection to the digispark
func (d *DigisparkAdaptor) Connect() (errs []error) {
func (d *Adaptor) Connect() (errs []error) {
if err := d.connect(d); err != nil {
return []error{err}
}
return
}

// Finalize implements the Adaptor interface
func (d *DigisparkAdaptor) Finalize() (errs []error) { return }
func (d *Adaptor) Finalize() (errs []error) { return }

// DigitalWrite writes a value to the pin. Acceptable values are 1 or 0.
func (d *DigisparkAdaptor) DigitalWrite(pin string, level byte) (err error) {
func (d *Adaptor) DigitalWrite(pin string, level byte) (err error) {
p, err := strconv.Atoi(pin)

if err != nil {
@@ -61,7 +63,7 @@ func (d *DigisparkAdaptor) DigitalWrite(pin string, level byte) (err error) {
}

// PwmWrite writes the 0-254 value to the specified pin
func (d *DigisparkAdaptor) PwmWrite(pin string, value byte) (err error) {
func (d *Adaptor) PwmWrite(pin string, value byte) (err error) {
if !d.pwm {
if err = d.littleWire.pwmInit(); err != nil {
return
@@ -77,7 +79,7 @@ func (d *DigisparkAdaptor) PwmWrite(pin string, value byte) (err error) {
}

// ServoWrite writes the 0-180 degree val to the specified pin.
func (d *DigisparkAdaptor) ServoWrite(pin string, angle uint8) (err error) {
func (d *Adaptor) ServoWrite(pin string, angle uint8) (err error) {
if !d.servo {
if err = d.littleWire.servoInit(); err != nil {
return
49 changes: 22 additions & 27 deletions platforms/digispark/digispark_adaptor_test.go
Original file line number Diff line number Diff line change
@@ -5,15 +5,15 @@ import (
"testing"

"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/drivers/gpio"
"github.com/hybridgroup/gobot/gobottest"
"github.com/hybridgroup/gobot/platforms/gpio"
)

var _ gobot.Adaptor = (*DigisparkAdaptor)(nil)
var _ gobot.Adaptor = (*Adaptor)(nil)

var _ gpio.DigitalWriter = (*DigisparkAdaptor)(nil)
var _ gpio.PwmWriter = (*DigisparkAdaptor)(nil)
var _ gpio.ServoWriter = (*DigisparkAdaptor)(nil)
var _ gpio.DigitalWriter = (*Adaptor)(nil)
var _ gpio.PwmWriter = (*Adaptor)(nil)
var _ gpio.ServoWriter = (*Adaptor)(nil)

type mock struct {
locationA uint8
@@ -61,35 +61,30 @@ var errorFunc = func() error { return nil }

func (l *mock) error() error { return errorFunc() }

func initTestDigisparkAdaptor() *DigisparkAdaptor {
a := NewDigisparkAdaptor("bot")
a.connect = func(a *DigisparkAdaptor) (err error) { return nil }
func initTestAdaptor() *Adaptor {
a := NewAdaptor()
a.connect = func(a *Adaptor) (err error) { return nil }
a.littleWire = new(mock)
errorFunc = func() error { return nil }
pwmInitErrorFunc = func() error { return nil }
return a
}

func TestDigisparkAdaptor(t *testing.T) {
a := NewDigisparkAdaptor("bot")
gobottest.Assert(t, a.Name(), "bot")
}

func TestDigisparkAdaptorConnect(t *testing.T) {
a := NewDigisparkAdaptor("bot")
func TestAdaptorConnect(t *testing.T) {
a := NewAdaptor()
gobottest.Assert(t, a.Connect()[0], ErrConnection)

a = initTestDigisparkAdaptor()
a = initTestAdaptor()
gobottest.Assert(t, len(a.Connect()), 0)
}

func TestDigisparkAdaptorFinalize(t *testing.T) {
a := initTestDigisparkAdaptor()
func TestAdaptorFinalize(t *testing.T) {
a := initTestAdaptor()
gobottest.Assert(t, len(a.Finalize()), 0)
}

func TestDigisparkAdaptorDigitalWrite(t *testing.T) {
a := initTestDigisparkAdaptor()
func TestAdaptorDigitalWrite(t *testing.T) {
a := initTestAdaptor()
err := a.DigitalWrite("0", uint8(1))
gobottest.Assert(t, err, nil)
gobottest.Assert(t, a.littleWire.(*mock).pin, uint8(0))
@@ -103,32 +98,32 @@ func TestDigisparkAdaptorDigitalWrite(t *testing.T) {
gobottest.Assert(t, err, errors.New("pin mode error"))
}

func TestDigisparkAdaptorServoWrite(t *testing.T) {
a := initTestDigisparkAdaptor()
func TestAdaptorServoWrite(t *testing.T) {
a := initTestAdaptor()
err := a.ServoWrite("2", uint8(80))
gobottest.Assert(t, err, nil)
gobottest.Assert(t, a.littleWire.(*mock).locationA, uint8(80))
gobottest.Assert(t, a.littleWire.(*mock).locationB, uint8(80))

a = initTestDigisparkAdaptor()
a = initTestAdaptor()
errorFunc = func() error { return errors.New("servo error") }
err = a.ServoWrite("2", uint8(80))
gobottest.Assert(t, err, errors.New("servo error"))
}

func TestDigisparkAdaptorPwmWrite(t *testing.T) {
a := initTestDigisparkAdaptor()
func TestAdaptorPwmWrite(t *testing.T) {
a := initTestAdaptor()
err := a.PwmWrite("1", uint8(100))
gobottest.Assert(t, err, nil)
gobottest.Assert(t, a.littleWire.(*mock).pwmChannelA, uint8(100))
gobottest.Assert(t, a.littleWire.(*mock).pwmChannelB, uint8(100))

a = initTestDigisparkAdaptor()
a = initTestAdaptor()
pwmInitErrorFunc = func() error { return errors.New("pwminit error") }
err = a.PwmWrite("1", uint8(100))
gobottest.Assert(t, err, errors.New("pwminit error"))

a = initTestDigisparkAdaptor()
a = initTestAdaptor()
errorFunc = func() error { return errors.New("pwm error") }
err = a.PwmWrite("1", uint8(100))
gobottest.Assert(t, err, errors.New("pwm error"))
6 changes: 3 additions & 3 deletions platforms/digispark/doc.go
Original file line number Diff line number Diff line change
@@ -17,14 +17,14 @@ Example:
"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/platforms/digispark"
"github.com/hybridgroup/gobot/platforms/gpio"
"github.com/hybridgroup/gobot/drivers/gpio"
)
func main() {
gbot := gobot.NewGobot()
digisparkAdaptor := digispark.NewDigisparkAdaptor("Digispark")
led := gpio.NewLedDriver(digisparkAdaptor, "led", "0")
digisparkAdaptor := digispark.NewAdaptor()
led := gpio.NewLedDriver(digisparkAdaptor, "0")
work := func() {
gobot.Every(1*time.Second, func() {

0 comments on commit 12a5cec

Please sign in to comment.