serial.h
Go to the documentation of this file.
1 
9 /*
10  * libmavconn
11  * Copyright 2013,2014,2015,2016 Vladimir Ermakov, All rights reserved.
12  *
13  * This file is part of the mavros package and subject to the license terms
14  * in the top-level LICENSE file of the mavros repository.
15  * https://github.com/mavlink/mavros/tree/master/LICENSE.md
16  */
17 
18 #pragma once
19 
20 #include <atomic>
21 #include <boost/asio.hpp>
22 #include <mavconn/interface.h>
23 #include <mavconn/msgbuffer.h>
24 
25 namespace mavconn {
30  public std::enable_shared_from_this<MAVConnSerial> {
31 public:
32  static constexpr auto DEFAULT_DEVICE = "/dev/ttyACM0";
33  static constexpr auto DEFAULT_BAUDRATE = 57600;
34 
41  MAVConnSerial(uint8_t system_id = 1, uint8_t component_id = MAV_COMP_ID_UDP_BRIDGE,
42  std::string device = DEFAULT_DEVICE, unsigned baudrate = DEFAULT_BAUDRATE, bool hwflow = false);
43  virtual ~MAVConnSerial();
44 
45  void connect(
46  const ReceivedCb &cb_handle_message,
47  const ClosedCb &cb_handle_closed_port = ClosedCb()) override;
48  void close() override;
49 
50  void send_message(const mavlink::mavlink_message_t *message) override;
51  void send_message(const mavlink::Message &message, const uint8_t source_compid) override;
52  void send_bytes(const uint8_t *bytes, size_t length) override;
53 
54  inline bool is_open() override {
55  return serial_dev.is_open();
56  }
57 
58 private:
59  boost::asio::io_service io_service;
60  std::thread io_thread;
61  boost::asio::serial_port serial_dev;
62 
63  std::atomic<bool> tx_in_progress;
64  std::deque<MsgBuffer> tx_q;
65  std::array<uint8_t, MsgBuffer::MAX_SIZE> rx_buf;
66  std::recursive_mutex mutex;
67 
68  void do_read();
69  void do_write(bool check_tx_state);
70 };
71 } // namespace mavconn
virtual ~MAVConnSerial()
Definition: serial.cpp:111
void connect(const ReceivedCb &cb_handle_message, const ClosedCb &cb_handle_closed_port=ClosedCb()) override
Establish connection, automatically called by open_url()
Definition: serial.cpp:116
std::function< void(const mavlink::mavlink_message_t *message, const Framing framing)> ReceivedCb
Definition: interface.h:102
boost::asio::io_service io_service
Definition: serial.h:59
std::thread io_thread
Definition: serial.h:60
static constexpr auto MAV_COMP_ID_UDP_BRIDGE
Same as mavlink::common::MAV_COMPONENT::COMP_ID_UDP_BRIDGE.
Definition: interface.h:45
std::array< uint8_t, MsgBuffer::MAX_SIZE > rx_buf
Definition: serial.h:65
void close() override
Close connection.
Definition: serial.cpp:133
Generic mavlink interface.
Definition: interface.h:97
MAVConn class interface.
void send_bytes(const uint8_t *bytes, size_t length) override
Send raw bytes (for some quirks)
Definition: serial.cpp:153
std::function< void(void)> ClosedCb
Definition: interface.h:103
MAVConn message buffer class (internal)
static constexpr auto DEFAULT_DEVICE
Definition: serial.h:32
boost::asio::serial_port serial_dev
Definition: serial.h:61
std::deque< MsgBuffer > tx_q
Definition: serial.h:64
static constexpr auto DEFAULT_BAUDRATE
Definition: serial.h:33
bool is_open() override
Definition: serial.h:54
std::atomic< bool > tx_in_progress
Definition: serial.h:63
MAVConnSerial(uint8_t system_id=1, uint8_t component_id=MAV_COMP_ID_UDP_BRIDGE, std::string device=DEFAULT_DEVICE, unsigned baudrate=DEFAULT_BAUDRATE, bool hwflow=false)
Definition: serial.cpp:40
Serial interface.
Definition: serial.h:29
void send_message(const mavlink::mavlink_message_t *message) override
Send message (mavlink_message_t)
void do_write(bool check_tx_state)
Definition: serial.cpp:230
std::recursive_mutex mutex
Definition: serial.h:66


libmavconn
Author(s): Vladimir Ermakov
autogenerated on Tue Jun 13 2023 02:17:45