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 {
118 CommDriverN0183AndroidIntEvent* newevent =
119 new CommDriverN0183AndroidIntEvent(*
this);
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->serial_port.ToStdString();
133 this->attributes[
"userComment"] = params->user_comment.ToStdString();
135 m_driver_stats.driver_bus = NavAddr::Bus::N0183;
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:
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.
Interface for handling incoming messages.
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 PortDirectionToString(PortDirection pd)
Return textual representation for use in driver ioDirection attribute.