0.5.1
Loading...
Searching...
No Matches
EspressifSensor.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 "EspressifSensor.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
41
43{
44 return "EspressifSensor";
45}
46
47std::string NAV::EspressifSensor::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::EspressifSensor::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 {
107 _sensor->connect(_sensorPort, BAUDRATE_115200); // change Baudrate here
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, binaryAsyncMessageReceived);
118
119 return true;
120}
121
123{
124 LOG_TRACE("{}: called", nameId());
125
126 if (_sensor->isConnected())
127 {
128 try
129 {
130 _sensor->unregisterAsyncPacketReceivedHandler();
131 }
132 catch (...) // NOLINT(bugprone-empty-catch)
133 {}
134
135 _sensor->disconnect();
136 }
137}
138
139void NAV::EspressifSensor::binaryAsyncMessageReceived(void* userData, uart::protocol::Packet& p, [[maybe_unused]] size_t index)
140{
141 LOG_DATA("binaryAsyncMessageReceived");
142 auto* ubSensor = static_cast<EspressifSensor*>(userData);
143
144 auto obs = std::make_shared<UartPacket>(p);
145 obs->insTime = util::time::GetCurrentInsTime();
146
147 ubSensor->invokeCallbacks(OUTPUT_PORT_INDEX_WIFI_OBS, obs);
148}
Espressif Sensor Class.
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_DATA
All output which occurs repeatedly every time observations are received.
Definition Logger.hpp:29
#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.
void guiConfig() override
ImGui config window which is shown on double click.
bool resetNode() override
Resets the node. It is guaranteed that the node is initialized when this is called.
EspressifSensor()
Default constructor.
static std::string typeStatic()
String representation of the Class Type.
vendor::espressif::EspressifUartSensor _sensor
Sensor Object.
std::string type() const override
String representation of the Class Type.
void restore(const json &j) override
Restores the node from a json object.
void deinitialize() override
Deinitialize the node.
~EspressifSensor() override
Destructor.
static constexpr size_t OUTPUT_PORT_INDEX_WIFI_OBS
Flow (EspressifObs)
static std::string category()
String representation of the Class Category.
json save() const override
Saves the node into a json object.
static void binaryAsyncMessageReceived(void *userData, uart::protocol::Packet &p, size_t index)
Callback handler for notifications of new asynchronous data packets received.
bool initialize() override
Initialize the node.
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_115200
Baudrate with 115200 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 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