1
0
mirror of https://github.com/hybridgroup/gobot.git synced 2025-05-02 22:17:12 +08:00

Refactor mavlink to use new driver and adaptor interfaces

This commit is contained in:
Adrian Zankich 2014-11-28 17:56:34 -08:00
parent b57a26c5cb
commit 677d54eb86
2 changed files with 22 additions and 16 deletions

View File

@ -7,10 +7,11 @@ import (
"github.com/tarm/goserial"
)
var _ gobot.AdaptorInterface = (*MavlinkAdaptor)(nil)
var _ gobot.Adaptor = (*MavlinkAdaptor)(nil)
type MavlinkAdaptor struct {
gobot.Adaptor
name string
port string
sp io.ReadWriteCloser
connect func(*MavlinkAdaptor) (err error)
}
@ -18,11 +19,8 @@ type MavlinkAdaptor struct {
// NewMavLinkAdaptor creates a new mavlink adaptor with specified name and port
func NewMavlinkAdaptor(name string, port string) *MavlinkAdaptor {
return &MavlinkAdaptor{
Adaptor: *gobot.NewAdaptor(
name,
"mavlink.MavlinkAdaptor",
port,
),
name: name,
port: port,
connect: func(m *MavlinkAdaptor) (err error) {
s, err := serial.OpenPort(&serial.Config{Name: m.Port(), Baud: 57600})
if err != nil {
@ -34,6 +32,9 @@ func NewMavlinkAdaptor(name string, port string) *MavlinkAdaptor {
}
}
func (m *MavlinkAdaptor) Name() string { return m.name }
func (m *MavlinkAdaptor) Port() string { return m.port }
// Connect returns true if connection to device is successful
func (m *MavlinkAdaptor) Connect() (errs []error) {
if err := m.connect(m); err != nil {

View File

@ -7,10 +7,13 @@ import (
common "github.com/hybridgroup/gobot/platforms/mavlink/common"
)
var _ gobot.DriverInterface = (*MavlinkDriver)(nil)
var _ gobot.Driver = (*MavlinkDriver)(nil)
type MavlinkDriver struct {
gobot.Driver
name string
connection gobot.Connection
interval time.Duration
gobot.Eventer
}
type MavlinkInterface interface {
@ -23,11 +26,10 @@ type MavlinkInterface interface {
// "message" - triggered when a new valid message is processed
func NewMavlinkDriver(a *MavlinkAdaptor, name string) *MavlinkDriver {
m := &MavlinkDriver{
Driver: *gobot.NewDriver(
name,
"mavlink.MavlinkDriver",
a,
),
name: name,
connection: a,
Eventer: gobot.NewEventer(),
interval: 10 * time.Millisecond,
}
m.AddEvent("packet")
@ -37,9 +39,12 @@ func NewMavlinkDriver(a *MavlinkAdaptor, name string) *MavlinkDriver {
return m
}
func (m *MavlinkDriver) Connection() gobot.Connection { return m.connection }
func (m *MavlinkDriver) Name() string { return m.name }
// adaptor returns driver associated adaptor
func (m *MavlinkDriver) adaptor() *MavlinkAdaptor {
return m.Driver.Adaptor().(*MavlinkAdaptor)
return m.Connection().(*MavlinkAdaptor)
}
// Start begins process to read mavlink packets every m.Interval
@ -59,7 +64,7 @@ func (m *MavlinkDriver) Start() (errs []error) {
continue
}
gobot.Publish(m.Event("message"), message)
<-time.After(m.Interval())
<-time.After(m.interval)
}
}()
return