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->serial_port.ToStdString();
132 this->attributes[
"userComment"] = params->user_comment.ToStdString();
134 m_driver_stats.driver_bus = NavAddr::Bus::N0183;
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.
Connection data container close to a POD struct.
std::string GetStrippedDSPort() const
Return port string with possible windows extra data removed, in some cases empty.
wxString GetDSPort() const
Return port description including for example serial port or network address/port,...
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 PortDirectionToString(PortDirection pd)
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.