48#include "androidUTIL.h"
51typedef enum DS_ENUM_BUFFER_STATE {
54} _DS_ENUM_BUFFER_STATE;
56using namespace std::literals::chrono_literals;
60#define MAX_OUT_QUEUE_MESSAGE_LENGTH 100
66 std::lock_guard<std::mutex> lock(m_mutex);
67 return m_queque.size();
71 std::lock_guard<std::mutex> lock(m_mutex);
72 return m_queque.empty();
76 std::lock_guard<std::mutex> lock(m_mutex);
77 return m_queque.front();
80 void push(
const T& value) {
81 std::lock_guard<std::mutex> lock(m_mutex);
86 std::lock_guard<std::mutex> lock(m_mutex);
91 std::queue<T> m_queque;
92 mutable std::mutex m_mutex;
95#define OUT_QUEUE_LENGTH 20
96#define MAX_OUT_QUEUE_MESSAGE_LENGTH 100
98wxDEFINE_EVENT(wxEVT_COMMDRIVER_N0183_ANDROID_INT,
101CommDriverN0183AndroidIntEvent::CommDriverN0183AndroidIntEvent(
102 wxEventType commandType,
int id = 0)
103 : wxEvent(id, commandType) {};
105CommDriverN0183AndroidIntEvent::~CommDriverN0183AndroidIntEvent() {};
107void CommDriverN0183AndroidIntEvent::SetPayload(
108 std::shared_ptr<std::vector<unsigned char>> data) {
111std::shared_ptr<std::vector<unsigned char>>
112CommDriverN0183AndroidIntEvent::GetPayload() {
117wxEvent* CommDriverN0183AndroidIntEvent::Clone()
const {
120 newevent->m_payload = this->m_payload;
124CommDriverN0183AndroidInt::CommDriverN0183AndroidInt(
128 m_portstring(params->GetDSPort()),
129 m_stats_timer(*this, 2s),
131 m_listener(listener) {
132 this->attributes[
"commPort"] = params->Port.ToStdString();
133 this->attributes[
"userComment"] = params->UserComment.ToStdString();
135 m_driver_stats.driver_bus = NavAddr::Bus::N0183;
136 m_driver_stats.driver_iface = params->GetStrippedDSPort();
139 Bind(wxEVT_COMMDRIVER_N0183_ANDROID_INT,
140 &CommDriverN0183AndroidInt::handle_N0183_MSG,
this);
145CommDriverN0183AndroidInt::~CommDriverN0183AndroidInt() { Close(); }
147bool CommDriverN0183AndroidInt::Open() {
148 androidStartGPS(
this);
149 m_driver_stats.available =
true;
153void CommDriverN0183AndroidInt::Close() {
155 wxString::Format(
"Closing NMEA Driver %s", m_portstring.c_str()));
156 m_stats_timer.Stop();
159 m_driver_stats.available =
false;
161 Unbind(wxEVT_COMMDRIVER_N0183_ANDROID_INT,
162 &CommDriverN0183AndroidInt::handle_N0183_MSG,
this);
165bool CommDriverN0183AndroidInt::SendMessage(
166 std::shared_ptr<const NavMsg> msg, std::shared_ptr<const NavAddr> addr) {
170void CommDriverN0183AndroidInt::handle_N0183_MSG(
172 auto p =
event.GetPayload();
173 std::vector<unsigned char>* payload = p.get();
175 m_driver_stats.
rx_count += payload->size();
178 std::string full_sentence = std::string(payload->begin(), payload->end());
180 if ((full_sentence[0] ==
'$') || (full_sentence[0] ==
'!')) {
182 if (m_params.SentencePassesFilter(full_sentence, FILTER_INPUT)) {
184 std::string
id = full_sentence.substr(1, 5);
186 std::make_shared<const Nmea0183Msg>(
id, full_sentence, GetAddress());
187 m_listener.
Notify(std::move(msg));
NMEA0183 basic parsing common parts:
Interface for handling incoming messages.
virtual void Notify(std::shared_ptr< const NavMsg > message)=0
Handle a received message.
Where messages are sent to or received from.
Android internal nmea0183 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 rx_count
Number of bytes received since program start.