2017-03-19 00:22:17 +08:00
|
|
|
package microbit
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
|
|
|
|
"gobot.io/x/gobot"
|
|
|
|
"gobot.io/x/gobot/platforms/ble"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TemperatureDriver is the Gobot driver for the Microbit's built-in thermometer
|
|
|
|
type TemperatureDriver struct {
|
|
|
|
name string
|
|
|
|
connection gobot.Connection
|
|
|
|
gobot.Eventer
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
// BLE services
|
|
|
|
temperatureService = "e95d6100251d470aa062fa1922dfa9a8"
|
|
|
|
|
|
|
|
// BLE characteristics
|
|
|
|
temperatureCharacteristic = "e95d9250251d470aa062fa1922dfa9a8"
|
|
|
|
|
|
|
|
// Temperature event
|
|
|
|
Temperature = "temperature"
|
|
|
|
)
|
|
|
|
|
|
|
|
// NewTemperatureDriver creates a Microbit TemperatureDriver
|
2017-04-05 18:40:17 +08:00
|
|
|
func NewTemperatureDriver(a ble.BLEConnector) *TemperatureDriver {
|
2017-03-19 00:22:17 +08:00
|
|
|
n := &TemperatureDriver{
|
|
|
|
name: gobot.DefaultName("Microbit Temperature"),
|
|
|
|
connection: a,
|
|
|
|
Eventer: gobot.NewEventer(),
|
|
|
|
}
|
|
|
|
|
|
|
|
n.AddEvent(Temperature)
|
|
|
|
|
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
|
|
|
// Connection returns the BLE connection
|
|
|
|
func (b *TemperatureDriver) Connection() gobot.Connection { return b.connection }
|
|
|
|
|
|
|
|
// Name returns the Driver Name
|
|
|
|
func (b *TemperatureDriver) Name() string { return b.name }
|
|
|
|
|
|
|
|
// SetName sets the Driver Name
|
|
|
|
func (b *TemperatureDriver) SetName(n string) { b.name = n }
|
|
|
|
|
|
|
|
// adaptor returns BLE adaptor
|
2017-04-05 18:40:17 +08:00
|
|
|
func (b *TemperatureDriver) adaptor() ble.BLEConnector {
|
|
|
|
return b.Connection().(ble.BLEConnector)
|
2017-03-19 00:22:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// Start tells driver to get ready to do work
|
|
|
|
func (b *TemperatureDriver) Start() (err error) {
|
|
|
|
// subscribe to temperature notifications
|
|
|
|
b.adaptor().Subscribe(temperatureCharacteristic, func(data []byte, e error) {
|
|
|
|
var l int8
|
|
|
|
buf := bytes.NewBuffer(data)
|
|
|
|
val, _ := buf.ReadByte()
|
|
|
|
l = int8(val)
|
|
|
|
|
|
|
|
b.Publish(b.Event(Temperature), l)
|
|
|
|
})
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Halt stops Temperature driver (void)
|
|
|
|
func (b *TemperatureDriver) Halt() (err error) {
|
|
|
|
return
|
|
|
|
}
|