INSTINCT Code Coverage Report


Directory: src/
File: util/Vendor/Espressif/EspressifUtilities.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 0 23 0.0%
Functions: 0 2 0.0%
Branches: 0 40 0.0%

Line Branch Exec Source
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 "EspressifUtilities.hpp"
10
11 #include "util/Eigen.hpp"
12 #include "Navigation/Transformations/CoordinateFrames.hpp"
13 #include "util/Logger.hpp"
14 #include <cstring>
15
16 #include "util/Time/TimeBase.hpp"
17 #include "util/Vendor/VectorNav/BinaryOutputs/TimeOutputs.hpp"
18
19 bool NAV::vendor::espressif::decryptWiFiObs(const std::shared_ptr<NAV::WiFiObs>& obs, uart::protocol::Packet& packet, [[maybe_unused]] const std::string& nameId)
20 {
21 obs->insTime = util::time::GetCurrentInsTime();
22 if (packet.type() == uart::protocol::Packet::Type::TYPE_BINARY)
23 {
24 packet.extractUint16(); // payloadLength
25 // Mac address
26 std::array<uint8_t, 6> mac{};
27 std::ranges::generate(mac, [&]() { return packet.extractUint8(); });
28 // Format the MAC address in the correct order (independent of compiler)
29 obs->macAddress = fmt::format("{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}",
30 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
31 std::ranges::transform(obs->macAddress, obs->macAddress.begin(), ::toupper); // Convert to uppercase
32 // Distance
33 int rtt = packet.extractInt32(); // Round trip time in picoseconds
34 obs->distance = static_cast<double>(rtt) * InsConst::C_AIR * 1e-12 / 2;
35 int rttStd = packet.extractInt32(); // Standard deviation of the round trip time in picoseconds
36 obs->distanceStd = static_cast<double>(rttStd) * InsConst::C_AIR * 1e-12 / 2;
37 // Time of measurement
38 InsTime_YMDHMS yearMonthDayHMS(packet.extractInt32(), packet.extractInt32(), packet.extractInt32(), packet.extractInt32(), packet.extractInt32(), packet.extractInt32());
39 InsTime timeOfMeasurement(yearMonthDayHMS, UTC);
40 [[maybe_unused]] uint32_t microseconds = packet.extractUint32();
41 obs->insTime = timeOfMeasurement + std::chrono::microseconds(microseconds);
42 // Time outputs
43 std::shared_ptr<vendor::vectornav::TimeOutputs> timeOutputs = std::make_shared<vendor::vectornav::TimeOutputs>();
44 obs->timeOutputs.syncInCnt = packet.extractUint32();
45 obs->timeOutputs.timeSyncIn = packet.extractUint64();
46 // Log the measurement details
47 LOG_DATA("WiFiObs mac Address: {}, measured distance: {}, time of measurement: {}", obs->macAddress, obs->distance, obs->insTime);
48 }
49 else
50 {
51 LOG_DATA("Received non-binary packet. Ignoring.");
52 return false;
53 }
54 return true;
55 }
56