0.5.1
Loading...
Searching...
No Matches
UbloxSensor.cpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#include "UbloxSensor.hpp"
10
11#include "util/Logger.hpp"
12
14
16
18
20
23{
24 LOG_TRACE("{}: called", name);
25
26 _onlyRealTime = true;
27 _hasConfig = true;
28 _guiConfigDefaultWindowSize = { 360, 70 };
29
30 // TODO: Update the library to handle different baudrates
32 _sensorPort = "/dev/ttyACM0";
33
35}
36
38{
39 LOG_TRACE("{}: called", nameId());
40}
41
43{
44 return "UbloxSensor";
45}
46
47std::string NAV::UbloxSensor::type() const
48{
49 return typeStatic();
50}
51
53{
54 return "Data Provider";
55}
56
58{
59 if (ImGui::InputTextWithHint("SensorPort", "/dev/ttyACM0", &_sensorPort))
60 {
61 LOG_DEBUG("{}: SensorPort changed to {}", nameId(), _sensorPort);
64 }
65 ImGui::SameLine();
66 gui::widgets::HelpMarker("COM port where the sensor is attached to\n"
67 "- \"COM1\" (Windows format for physical and virtual (USB) serial port)\n"
68 "- \"/dev/ttyS1\" (Linux format for physical serial port)\n"
69 "- \"/dev/ttyUSB0\" (Linux format for virtual (USB) serial port)\n"
70 "- \"/dev/tty.usbserial-FTXXXXXX\" (Mac OS X format for virtual (USB) serial port)\n"
71 "- \"/dev/ttyS0\" (CYGWIN format. Usually the Windows COM port number minus 1. This would connect to COM1)");
72}
73
74[[nodiscard]] json NAV::UbloxSensor::save() const
75{
76 LOG_TRACE("{}: called", nameId());
77
78 json j;
79
80 j["UartSensor"] = UartSensor::save();
81
82 return j;
83}
84
86{
87 LOG_TRACE("{}: called", nameId());
88
89 if (j.contains("UartSensor"))
90 {
91 UartSensor::restore(j.at("UartSensor"));
92 }
93}
94
96{
97 return true;
98}
99
101{
102 LOG_TRACE("{}: called", nameId());
103
104 // connect to the sensor
105 try
106 {
108
109 LOG_DEBUG("{} connected on port {} with baudrate {}", nameId(), _sensorPort, sensorBaudrate());
110 }
111 catch (...)
112 {
113 LOG_ERROR("{} could not connect", nameId());
114 return false;
115 }
116
117 _sensor->registerAsyncPacketReceivedHandler(this, asciiOrBinaryAsyncMessageReceived);
118 _connected = true;
119
120 return true;
121}
122
124{
125 LOG_TRACE("{}: called", nameId());
126
127 if (!_connected) { return; }
128
129 try
130 {
131 _sensor->unregisterAsyncPacketReceivedHandler();
132 LOG_TRACE("{}: Async packet receive handler unregistered", nameId());
133 }
134 catch (...) // NOLINT(bugprone-empty-catch)
135 {}
136
137 try
138 {
139 LOG_TRACE("{}: Disconnecting...", nameId());
140 _sensor->disconnect();
141 LOG_TRACE("{}: Disconnected", nameId());
142 }
143 catch (...) // NOLINT(bugprone-empty-catch)
144 {}
145
146 _connected = false;
147}
148
149void NAV::UbloxSensor::asciiOrBinaryAsyncMessageReceived(void* userData, uart::protocol::Packet& p, [[maybe_unused]] size_t index)
150{
151 auto* ubSensor = static_cast<UbloxSensor*>(userData);
152
153 auto packet = std::make_shared<UartPacket>(p);
154 packet->insTime = util::time::GetCurrentInsTime();
155
156 ubSensor->invokeCallbacks(OUTPUT_PORT_INDEX_UBLOX_OBS, packet);
157}
Save/Load the Nodes.
nlohmann::json json
json namespace
Text Help Marker (?) with Tooltip.
Utility class for logging to console and file.
#define LOG_DEBUG
Debug information. Should not be called on functions which receive observations (spamming)
Definition Logger.hpp:67
#define LOG_ERROR
Error occurred, which stops part of the program to work, but not everything.
Definition Logger.hpp:73
#define LOG_TRACE
Detailled info to trace the execution of the program. Should not be called on functions which receive...
Definition Logger.hpp:65
Keeps track of the current real/simulation time.
UART Packet storage class.
Ublox Sensor Class.
bool doDeinitialize(bool wait=false)
Asks the node worker to deinitialize the node.
Definition Node.cpp:465
ImVec2 _guiConfigDefaultWindowSize
Definition Node.hpp:522
Node(std::string name)
Constructor.
Definition Node.cpp:29
OutputPin * CreateOutputPin(const char *name, Pin::Type pinType, const std::vector< std::string > &dataIdentifier, OutputPin::PinData data=static_cast< void * >(nullptr), int idx=-1)
Create an Output Pin object.
Definition Node.cpp:278
std::string nameId() const
Node name and id.
Definition Node.cpp:323
std::string name
Name of the Node.
Definition Node.hpp:507
bool _onlyRealTime
Whether the node can run in post-processing or only real-time.
Definition Node.hpp:531
bool _hasConfig
Flag if the config window should be shown.
Definition Node.hpp:525
static std::string type()
Returns the type of the data class.
static int baudrate2Selection(Baudrate baud)
Returns the guiSelection for the given baudrate.
int _selectedBaudrate
Baudrate for the sensor.
@ BAUDRATE_9600
Baudrate with 9600 symbols per second [Baud].
std::string _sensorPort
void restore(const json &j)
Restores the node from a json object.
Baudrate sensorBaudrate() const
Returns the Baudrate for the element Selected by the GUI.
json save() const
Saves the node into a json object.
void deinitialize() override
Deinitialize the node.
~UbloxSensor() override
Destructor.
bool resetNode() override
Resets the node. It is guaranteed that the node is initialized when this is called.
std::string type() const override
String representation of the Class Type.
bool _connected
Boolean tracking if the sensor is connected.
static std::string category()
String representation of the Class Category.
static constexpr size_t OUTPUT_PORT_INDEX_UBLOX_OBS
Flow (UbloxObs)
json save() const override
Saves the node into a json object.
bool initialize() override
Initialize the node.
vendor::ublox::UbloxUartSensor _sensor
Sensor Object.
void restore(const json &j) override
Restores the node from a json object.
void guiConfig() override
ImGui config window which is shown on double click.
static std::string typeStatic()
String representation of the Class Type.
UbloxSensor()
Default constructor.
static void asciiOrBinaryAsyncMessageReceived(void *userData, uart::protocol::Packet &p, size_t index)
Callback handler for notifications of new asynchronous data packets received.
void ApplyChanges()
Signals that there have been changes to the flow.
void HelpMarker(const char *desc, const char *symbol="(?)")
Text Help Marker, e.g. '(?)', with Tooltip.
@ Flow
NodeData Trigger.
Definition Pin.hpp:52