84 void* Entry()
override;
85 void OnExit()
override;
93 void QueueWrite(
const std::string& command);
98 void ParseReceivedData(
const char* buf,
size_t len,
99 std::vector<can_frame>* out_frames);
100 bool DecodeSLCANFrame(
const std::string& line, can_frame* frame);
104 bool WriteFrame(
const std::string& bytes);
109 std::atomic<bool> m_stopRequested;
112 std::mutex m_transmitMutex;
113 std::vector<std::string> m_transmitQueue;
117 std::string m_partialLine;
119 bool m_hasStartDelimiter =
false;
122 HANDLE m_serialPortHandle = INVALID_HANDLE_VALUE;
132 HANDLE m_stopEvent =
nullptr;
133 HANDLE m_pendingWriteEvent =
nullptr;
134 OVERLAPPED m_overlappedRead = {};
135 OVERLAPPED m_overlappedWrite = {};
139 bool m_isReadPending =
false;
155 bool SendMessage(std::shared_ptr<const NavMsg> msg,
156 std::shared_ptr<const NavAddr> addr)
override;
162 bool WriteFrame(
const std::string& bytes);
166 bool SendAddressClaim(
int proposed_source_address);
170 bool SendProductInfo();
173 void UpdateAttrCanAddress();
181 void EncodeActisenseMessage(
const can_frame& frame);
187 void ProcessMessages(
const std::shared_ptr<const Nmea2000Msg>& msg);
193 std::string EncodeSLCANFrame(uint32_t can_id,
194 const std::vector<uint8_t>& data);
197 std::vector<std::string> FormatCanMessage(uint8_t priority, uint8_t source,
198 uint8_t destination, uint64_t pgn,
199 const std::vector<uint8_t>& data);
207 bool m_isPortOpen =
false;
214 std::unique_ptr<FastMessageMap> m_fastMessageMap;
217 std::unique_ptr<CanableSerialThread> m_serialThread;
220 std::mutex m_sequenceNumberMutex;
223 int m_sequenceNumber = 0;
227 int m_uniqueNumber = 1;
231 static const int kDefaultSourceAddress = 72;
232 std::atomic<int> m_sourceAddress{kDefaultSourceAddress};
239 std::chrono::steady_clock::time_point m_startTime;