hybridgroup.gobot/platforms/i2c/blinkm_driver.go

102 lines
2.5 KiB
Go
Raw Normal View History

2014-04-28 09:54:41 +08:00
package i2c
import (
"fmt"
2014-07-10 09:32:27 +08:00
2014-04-28 09:54:41 +08:00
"github.com/hybridgroup/gobot"
)
var _ gobot.DriverInterface = (*BlinkMDriver)(nil)
2014-04-28 09:54:41 +08:00
type BlinkMDriver struct {
gobot.Driver
}
// NewBlinkMDriver creates a new BlinkMDriver with specified name.
//
// Adds the following API commands:
// Rgb - sets RGB color
// Fade - fades the RGB color
// FirmwareVersion - returns the version of the current Frimware
// Color - returns the color of the LED.
2014-05-23 12:33:05 +08:00
func NewBlinkMDriver(a I2cInterface, name string) *BlinkMDriver {
b := &BlinkMDriver{
2014-07-08 07:59:19 +08:00
Driver: *gobot.NewDriver(
name,
"BlinkMDriver",
a.(gobot.AdaptorInterface),
),
2014-04-28 09:54:41 +08:00
}
2014-07-10 09:32:27 +08:00
b.AddCommand("Rgb", func(params map[string]interface{}) interface{} {
red := byte(params["red"].(float64))
green := byte(params["green"].(float64))
blue := byte(params["blue"].(float64))
b.Rgb(red, green, blue)
return nil
})
2014-07-10 09:32:27 +08:00
b.AddCommand("Fade", func(params map[string]interface{}) interface{} {
red := byte(params["red"].(float64))
green := byte(params["green"].(float64))
blue := byte(params["blue"].(float64))
b.Fade(red, green, blue)
return nil
})
2014-09-12 04:38:08 +08:00
b.AddCommand("FirmwareVersion", func(params map[string]interface{}) interface{} {
return b.FirmwareVersion()
})
b.AddCommand("Color", func(params map[string]interface{}) interface{} {
return b.Color()
})
return b
2014-04-28 09:54:41 +08:00
}
// adaptor returns I2C adaptor
func (b *BlinkMDriver) adaptor() I2cInterface {
2014-07-10 09:32:27 +08:00
return b.Adaptor().(I2cInterface)
}
// Start writes start bytes and resets color
func (b *BlinkMDriver) Start() error {
b.adaptor().I2cStart(0x09)
b.adaptor().I2cWrite([]byte("o"))
2014-04-28 09:54:41 +08:00
b.Rgb(0, 0, 0)
return nil
2014-04-28 09:54:41 +08:00
}
// Halt returns true if device is halted successfully
func (b *BlinkMDriver) Halt() error { return nil }
2014-04-28 09:54:41 +08:00
// Rgb sets color using r,g,b params
2014-04-28 09:54:41 +08:00
func (b *BlinkMDriver) Rgb(red byte, green byte, blue byte) {
b.adaptor().I2cWrite([]byte("n"))
b.adaptor().I2cWrite([]byte{red, green, blue})
2014-04-28 09:54:41 +08:00
}
// Fade removes color using r,g,b params
2014-04-28 09:54:41 +08:00
func (b *BlinkMDriver) Fade(red byte, green byte, blue byte) {
b.adaptor().I2cWrite([]byte("c"))
b.adaptor().I2cWrite([]byte{red, green, blue})
2014-04-28 09:54:41 +08:00
}
// FirmwareVersion returns version with MAYOR.minor format
2014-04-28 09:54:41 +08:00
func (b *BlinkMDriver) FirmwareVersion() string {
b.adaptor().I2cWrite([]byte("Z"))
data := b.adaptor().I2cRead(2)
2014-04-28 09:54:41 +08:00
if len(data) != 2 {
return ""
}
return fmt.Sprintf("%v.%v", data[0], data[1])
}
// Color returns an array with current rgb color
2014-04-28 09:54:41 +08:00
func (b *BlinkMDriver) Color() []byte {
b.adaptor().I2cWrite([]byte("g"))
data := b.adaptor().I2cRead(3)
2014-04-28 09:54:41 +08:00
if len(data) != 3 {
return make([]byte, 0)
}
return []byte{data[0], data[1], data[2]}
2014-04-28 09:54:41 +08:00
}