|
1 | 1 |
|
| 2 | +#include <format> |
2 | 3 | #include <fstream> |
3 | 4 | #include <iostream> |
4 | 5 | #include <limits> |
5 | | -#include <string> |
| 6 | +#include <optional> |
6 | 7 | #include <string_view> |
7 | 8 |
|
8 | 9 | #include <magic_enum.hpp> |
|
14 | 15 | #include <windows/devices/uwb/UwbDevice.hxx> |
15 | 16 | #include <windows/devices/uwb/UwbDeviceDriver.hxx> |
16 | 17 |
|
| 18 | +#include <winrt/Windows.Foundation.Collections.h> |
17 | 19 | #include <winrt/Windows.Foundation.h> |
18 | 20 | #include <winrt/Windows.Storage.Streams.h> |
19 | | -#include <winrt/windows.devices.nearobject.h> |
20 | 21 |
|
21 | 22 | #include "NearObjectCliDataWindows.hxx" |
22 | 23 | #include "NearObjectCliHandlerWindows.hxx" |
@@ -168,6 +169,45 @@ NearObjectCliHandlerWindows::HandleStartRanging(::uwb::protocol::fira::DeviceTyp |
168 | 169 | m_sessionClient = sessionCreateResult.HostClient(); |
169 | 170 | } |
170 | 171 |
|
| 172 | + auto session = sessionCreateResult.Session(); |
| 173 | + |
| 174 | + // Register event handlers. |
| 175 | + m_sessionEndedEventToken = session.SessionEnded(winrt::auto_revoke, [session](auto&& sender, auto&& sessionEndedEventArgs) { |
| 176 | + PLOG_INFO << std::format("session {} ended, reason={}", session.Id(), magic_enum::enum_name(sessionEndedEventArgs.EndReason())); |
| 177 | + }); |
| 178 | + m_rangingStartedEventToken = session.RangingStarted(winrt::auto_revoke, [session](auto&& sender, [[maybe_unused]] auto&& rangingStartedEventArgs) { |
| 179 | + PLOG_INFO << std::format("sesion {} ranging started", session.Id()); |
| 180 | + }); |
| 181 | + m_rangingStoppedEventToken = session.RangingStopped(winrt::auto_revoke, [session]([[maybe_unused]] auto&& sender, [[maybe_unused]] auto&& rangingStoppedEventArgs) { |
| 182 | + PLOG_INFO << std::format("sesion {} ranging stopped", session.Id()); |
| 183 | + }); |
| 184 | + m_peerPropertiesChangedEventToken = session.PeerPropertiesChanged(winrt::auto_revoke, [session](auto&& sender, auto&& peerPropertiesChangedEventArgs) { |
| 185 | + PLOG_INFO << std::format("session {} peer properties changed:", session.Id()); |
| 186 | + for (auto&& nearObject : peerPropertiesChangedEventArgs.NearObjectsChanged()) { |
| 187 | + auto spatialProperties = nearObject.SpatialProperties(); |
| 188 | + std::optional<double> distance = spatialProperties.Distance(); |
| 189 | + std::optional<double> angleAzimuth = spatialProperties.AngleAzimuth(); |
| 190 | + std::optional<double> angleElevation = spatialProperties.AngleElevation(); |
| 191 | + std::optional<double> elevation = spatialProperties.Elevation(); |
| 192 | + PLOG_INFO << std::format("Distance {} AngleAzimuth {} AngleElevation {} Elevation {}", |
| 193 | + distance.has_value() ? std::to_string(distance.value()) : std::string("-"), |
| 194 | + angleAzimuth.has_value() ? std::to_string(angleAzimuth.value()) : std::string("-"), |
| 195 | + angleElevation.has_value() ? std::to_string(angleElevation.value()) : std::string("-"), |
| 196 | + elevation.has_value() ? std::to_string(elevation.value()) : "-"); |
| 197 | + } |
| 198 | + }); |
| 199 | + m_sessionMemembershipChangedEventToken = session.SessionMembershipChanged(winrt::auto_revoke, [session](auto&& sender, auto&& sessionMembershipChangedEventArgs) { |
| 200 | + auto nearObjectsAdded = sessionMembershipChangedEventArgs.NearObjectsAdded(); |
| 201 | + auto nearObjectsRemoved = sessionMembershipChangedEventArgs.NearObjectsRemoved(); |
| 202 | + PLOG_INFO << std::format("session {} session membership changed: +{} -{}", session.Id(), nearObjectsAdded.Size(), nearObjectsRemoved.Size()); |
| 203 | + for (auto&& nearObjectAdded : nearObjectsAdded) { |
| 204 | + // TODO: print out mac address when added to NearObject |
| 205 | + } |
| 206 | + for (auto&& nearObjectRemoved : nearObjectsRemoved) { |
| 207 | + // TODO: print out mac address when added to NearObject |
| 208 | + } |
| 209 | + }); |
| 210 | + |
171 | 211 | // Start the ranging session |
172 | 212 | if (m_sessionClient != nullptr) { |
173 | 213 | m_sessionClient.Start(); |
|
0 commit comments