47#include "androidUTIL.h"
50using namespace std::literals::chrono_literals;
52typedef enum DS_ENUM_BUFFER_STATE {
55} _DS_ENUM_BUFFER_STATE;
59#define MAX_OUT_QUEUE_MESSAGE_LENGTH 100
65 std::lock_guard<std::mutex> lock(m_mutex);
66 return m_queque.size();
70 std::lock_guard<std::mutex> lock(m_mutex);
71 return m_queque.empty();
75 std::lock_guard<std::mutex> lock(m_mutex);
76 return m_queque.front();
79 void push(
const T& value) {
80 std::lock_guard<std::mutex> lock(m_mutex);
85 std::lock_guard<std::mutex> lock(m_mutex);
90 std::queue<T> m_queque;
91 mutable std::mutex m_mutex;
94#define OUT_QUEUE_LENGTH 20
95#define MAX_OUT_QUEUE_MESSAGE_LENGTH 100
97wxDEFINE_EVENT(wxEVT_COMMDRIVER_N0183_ANDROID_BT,
100CommDriverN0183AndroidBTEvent::CommDriverN0183AndroidBTEvent(
101 wxEventType commandType,
int id = 0)
102 : wxEvent(id, commandType) {};
104CommDriverN0183AndroidBTEvent::~CommDriverN0183AndroidBTEvent() {};
106void CommDriverN0183AndroidBTEvent::SetPayload(
107 std::shared_ptr<std::vector<unsigned char>> data) {
110std::shared_ptr<std::vector<unsigned char>>
111CommDriverN0183AndroidBTEvent::GetPayload() {
116wxEvent* CommDriverN0183AndroidBTEvent::Clone()
const {
119 newevent->m_payload = this->m_payload;
123CommDriverN0183AndroidBT::CommDriverN0183AndroidBT(
127 m_portstring(params->GetDSPort()),
129 m_listener(listener),
130 m_stats_timer(*this, 2s) {
131 this->attributes[
"commPort"] = params->Port.ToStdString();
132 this->attributes[
"userComment"] = params->UserComment.ToStdString();
134 m_driver_stats.driver_bus = NavAddr::Bus::N0183;
135 m_driver_stats.driver_iface = params->GetStrippedDSPort();
138 Bind(wxEVT_COMMDRIVER_N0183_ANDROID_BT,
139 &CommDriverN0183AndroidBT::handle_N0183_MSG,
this);
144CommDriverN0183AndroidBT::~CommDriverN0183AndroidBT() { Close(); }
146bool CommDriverN0183AndroidBT::Open() {
148 comx = m_params.GetDSPort().AfterFirst(
':');
150 wxString port_uc = m_params.GetDSPort().Upper();
152 androidStartBT(
this, port_uc);
153 m_driver_stats.available =
true;
158void CommDriverN0183AndroidBT::Close() {
160 wxString::Format(
"Closing NMEA BT Driver %s", m_portstring.c_str()));
161 m_stats_timer.Stop();
164 m_driver_stats.available =
false;
166 Unbind(wxEVT_COMMDRIVER_N0183_ANDROID_BT,
167 &CommDriverN0183AndroidBT::handle_N0183_MSG,
this);
170bool CommDriverN0183AndroidBT::SendMessage(
171 std::shared_ptr<const NavMsg> msg, std::shared_ptr<const NavAddr> addr) {
172 auto msg_0183 = std::dynamic_pointer_cast<const Nmea0183Msg>(msg);
173 wxString sentence(msg_0183->payload.c_str());
174 m_driver_stats.
tx_count += sentence.Length();
176 wxString payload = sentence;
177 if (!sentence.EndsWith(
"\r\n")) payload +=
"\r\n";
179 androidSendBTMessage(payload);
183void CommDriverN0183AndroidBT::handle_N0183_MSG(
185 auto p =
event.GetPayload();
186 std::vector<unsigned char>* payload = p.get();
187 m_driver_stats.
rx_count += payload->size();
188 SendToListener({payload->begin(), payload->end()}, m_listener, m_params);
NMEA0183 basic parsing common parts:
void SendToListener(const std::string &payload, DriverListener &listener, const ConnectionParams ¶ms)
Wrap argument string in NavMsg pointer, forward to listener.
Interface for handling incoming messages.
Where messages are sent to or received from.
Android nmea0183 internal bluetooth driver.
Driver registration container, a singleton.
Raw messages layer, supports sending and recieving navmsg messages.
std::string DsPortTypeToString(dsPortType type)
Return textual representation for use in driver ioDirection attribute.
unsigned tx_count
Number of bytes sent since program start.
unsigned rx_count
Number of bytes received since program start.