Skip to content

Commit 2c0506a

Browse files
authored
Add WinRT event handlers to nocli service range start command (#312)
* Add WinRT event handlers. * Fix bad access of moved-from variable.
1 parent d20e5a9 commit 2c0506a

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

windows/devices/uwb/UwbSession.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ using namespace windows::devices::uwb;
2020
using namespace ::uwb::protocol::fira;
2121

2222
UwbSession::UwbSession(uint32_t sessionId, std::weak_ptr<::uwb::UwbDevice> device, std::shared_ptr<IUwbSessionDdiConnector> uwbSessionConnector, std::weak_ptr<::uwb::UwbSessionEventCallbacks> callbacks, ::uwb::protocol::fira::DeviceType deviceType) :
23-
::uwb::UwbSession(sessionId, std::move(device), std::move(callbacks), deviceType),
23+
::uwb::UwbSession(sessionId, std::move(device), callbacks, deviceType),
2424
m_uwbSessionConnector(std::move(uwbSessionConnector))
2525
{
2626
m_onSessionEndedCallback =

windows/tools/nocli/NearObjectCliHandlerWindows.cxx

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11

2+
#include <format>
23
#include <fstream>
34
#include <iostream>
45
#include <limits>
5-
#include <string>
6+
#include <optional>
67
#include <string_view>
78

89
#include <magic_enum.hpp>
@@ -14,9 +15,9 @@
1415
#include <windows/devices/uwb/UwbDevice.hxx>
1516
#include <windows/devices/uwb/UwbDeviceDriver.hxx>
1617

18+
#include <winrt/Windows.Foundation.Collections.h>
1719
#include <winrt/Windows.Foundation.h>
1820
#include <winrt/Windows.Storage.Streams.h>
19-
#include <winrt/windows.devices.nearobject.h>
2021

2122
#include "NearObjectCliDataWindows.hxx"
2223
#include "NearObjectCliHandlerWindows.hxx"
@@ -168,6 +169,45 @@ NearObjectCliHandlerWindows::HandleStartRanging(::uwb::protocol::fira::DeviceTyp
168169
m_sessionClient = sessionCreateResult.HostClient();
169170
}
170171

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+
171211
// Start the ranging session
172212
if (m_sessionClient != nullptr) {
173213
m_sessionClient.Start();

windows/tools/nocli/NearObjectCliHandlerWindows.hxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ private:
4343
private:
4444
std::vector<std::shared_ptr<windows::devices::uwb::UwbDevice>> m_uwbDevices;
4545
winrt::Windows::Devices::NearObject::INearObjectSessionClient m_sessionClient;
46+
47+
// Event handler tokens.
48+
winrt::Windows::Devices::NearObject::INearObjectSessionEventProducer::SessionEnded_revoker m_sessionEndedEventToken;
49+
winrt::Windows::Devices::NearObject::INearObjectSessionEventProducer::RangingStarted_revoker m_rangingStartedEventToken;
50+
winrt::Windows::Devices::NearObject::INearObjectSessionEventProducer::RangingStopped_revoker m_rangingStoppedEventToken;
51+
winrt::Windows::Devices::NearObject::INearObjectSessionEventProducer::PeerPropertiesChanged_revoker m_peerPropertiesChangedEventToken;
52+
winrt::Windows::Devices::NearObject::INearObjectSessionEventProducer::SessionMembershipChanged_revoker m_sessionMemembershipChangedEventToken;
4653
};
4754
} // namespace nearobject::cli
4855

0 commit comments

Comments
 (0)