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  }