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:
parent
b57a26c5cb
commit
677d54eb86
@ -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 {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user