gobot.io/x/gobot/v2@v2.1.0/platforms/mavlink/mavlink_adaptor.go (about) 1 package mavlink 2 3 import ( 4 "io" 5 6 "go.bug.st/serial" 7 "gobot.io/x/gobot/v2" 8 common "gobot.io/x/gobot/v2/platforms/mavlink/common" 9 ) 10 11 // Adaptor is a Mavlink transport adaptor. 12 type BaseAdaptor interface { 13 gobot.Connection 14 15 io.Writer 16 ReadMAVLinkPacket() (*common.MAVLinkPacket, error) 17 } 18 19 // Adaptor is a Mavlink-over-serial adaptor. 20 type Adaptor struct { 21 name string 22 port string 23 sp io.ReadWriteCloser 24 connect func(string) (io.ReadWriteCloser, error) 25 } 26 27 // NewAdaptor creates a new mavlink adaptor with specified port 28 func NewAdaptor(port string) *Adaptor { 29 return &Adaptor{ 30 name: "Mavlink", 31 port: port, 32 connect: func(port string) (io.ReadWriteCloser, error) { 33 return serial.Open(port, &serial.Mode{BaudRate: 57600}) 34 }, 35 } 36 } 37 38 func (m *Adaptor) Name() string { return m.name } 39 func (m *Adaptor) SetName(n string) { m.name = n } 40 func (m *Adaptor) Port() string { return m.port } 41 42 // Connect returns true if connection to device is successful 43 func (m *Adaptor) Connect() (err error) { 44 if sp, e := m.connect(m.Port()); e != nil { 45 return e 46 } else { 47 m.sp = sp 48 } 49 return 50 } 51 52 // Finalize returns true if connection to devices is closed successfully 53 func (m *Adaptor) Finalize() (err error) { 54 err = m.sp.Close() 55 return 56 } 57 58 func (m *Adaptor) ReadMAVLinkPacket() (*common.MAVLinkPacket, error) { 59 return common.ReadMAVLinkPacket(m.sp) 60 } 61 62 func (m *Adaptor) Write(b []byte) (int, error) { 63 return m.sp.Write(b) 64 }