Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use UwbApplicationConfigurationParameter in place of IUwbAppConfigurationParameter #153

Merged
merged 5 commits into from
Mar 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion tests/unit/windows/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ target_sources(nearobject-test-windows
${CMAKE_CURRENT_LIST_DIR}/Main.cxx
${CMAKE_CURRENT_LIST_DIR}/TestNearObjectDeviceDiscoveryAgentUwb.cxx
${CMAKE_CURRENT_LIST_DIR}/TestNotStd.cxx
${CMAKE_CURRENT_LIST_DIR}/TestUwbAppConfiguration.cxx
${CMAKE_CURRENT_LIST_DIR}/TestUwbCxAdapterDdiLrpConversion.cxx
)

Expand Down
3 changes: 0 additions & 3 deletions windows/devices/uwb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@ set(UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX ${UWBCXADAPTER_DIR_PUBLIC_INCLUDE}/wi

target_sources(windev-uwb-cx-adapter
PRIVATE
${CMAKE_CURRENT_LIST_DIR}/UwbAppConfiguration.cxx
${CMAKE_CURRENT_LIST_DIR}/UwbCxAdapter.cxx
${CMAKE_CURRENT_LIST_DIR}/UwbCxAdapterDdiLrp.cxx
${CMAKE_CURRENT_LIST_DIR}/UwbDeviceConnector.cxx
PUBLIC
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/IUwbDeviceDdi.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbAppConfiguration.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbCxAdapter.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbCxAdapterDdiLrp.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbDeviceConnector.hxx
Expand All @@ -36,7 +34,6 @@ target_link_libraries(windev-uwb-cx-adapter

list(APPEND UWBCXADAPTER_PUBLIC_HEADERS
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/IUwbDeviceDdi.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbAppConfiguration.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbCxAdapter.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbCxAdapterDdiLrp.hxx
${UWBCXADAPTER_DIR_PUBLIC_INCLUDE_PREFIX}/UwbDeviceConnector.hxx
Expand Down
94 changes: 41 additions & 53 deletions windows/devices/uwb/UwbDeviceConnector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -322,73 +322,61 @@ UwbDeviceConnector::SessionUpdateControllerMulticastList(uint32_t sessionId, Uwb
return resultFuture;
}

std::future<std::tuple<UwbStatus, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>>>>
std::future<std::tuple<UwbStatus, std::vector<UwbApplicationConfigurationParameter>>>
UwbDeviceConnector::GetApplicationConfigurationParameters(uint32_t sessionId, std::vector<UwbApplicationConfigurationParameterType> applicationConfigurationParameterTypes)
{
std::promise<std::tuple<UwbStatus, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>>>> promiseResult;
std::promise<std::tuple<UwbStatus, std::vector<UwbApplicationConfigurationParameter>>> promiseResult;
auto resultFuture = promiseResult.get_future();
// TODO: invoke IOCTL_UWB_GET_APP_CONFIG_PARAMS

return resultFuture;
}

std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
UwbDeviceConnector::SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> applicationConfigurationParameters)
UwbDeviceConnector::SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter> applicationConfigurationParameters)
{
std::promise<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>> resultPromise;
auto resultFuture = resultPromise.get_future();
// TODO: invoke IOCTL_UWB_SET_APP_CONFIG_PARAMS

return resultFuture;
}

std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
UwbDeviceConnector::SetApplicationConfigurationParameters(uint32_t sessionId, UwbSetAppConfigurationParameters applicationConfigurationParameters)
{
std::promise<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>> resultPromise;
auto resultFuture = resultPromise.get_future();

wil::shared_hfile handleDriver;
auto hr = OpenDriverHandle(handleDriver, m_deviceName.c_str());
if (FAILED(hr)) {
PLOG_ERROR << "failed to obtain driver handle for " << m_deviceName << ", hr=" << std::showbase << std::hex << hr;
resultPromise.set_exception(std::make_exception_ptr(UwbException(UwbStatusGeneric::Rejected)));
return resultFuture;
}

auto& setParamsBuffer = applicationConfigurationParameters.DdiBuffer();
auto& setParams = applicationConfigurationParameters.DdiParameters();

// Allocate memory for the UWB_SET_APP_CONFIG_PARAMS_STATUS structure, and pass this to the driver request
auto statusSize = offsetof(UWB_SET_APP_CONFIG_PARAMS_STATUS, appConfigParamsStatus[setParams.appConfigParamsCount]);
std::vector<uint8_t> statusBuffer(statusSize);
BOOL ioResult = DeviceIoControl(handleDriver.get(), IOCTL_UWB_SET_APP_CONFIG_PARAMS, std::data(setParamsBuffer), std::size(setParamsBuffer), std::data(statusBuffer), statusSize, nullptr, nullptr);
if (!LOG_IF_WIN32_BOOL_FALSE(ioResult)) {
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
PLOG_ERROR << "error when sending IOCTL_UWB_SET_APP_CONFIG_PARAMS with sessionId " << sessionId << ", hr = " << std::showbase << std::hex << hr;
resultPromise.set_exception(std::make_exception_ptr(UwbException(UwbStatusGeneric::Rejected)));
return resultFuture;
} else {
PLOG_DEBUG << "IOCTL_UWB_SET_APP_CONFIG_PARAMS succeeded";
auto& uwbSetAppConfigParamsStatus = *reinterpret_cast<UWB_SET_APP_CONFIG_PARAMS_STATUS*>(std::data(statusBuffer));
auto uwbStatus = UwbCxDdi::To(uwbSetAppConfigParamsStatus.status);
if (!IsUwbStatusOk(uwbStatus)) {
resultPromise.set_exception(std::make_exception_ptr(UwbException(std::move(uwbStatus))));
} else {
// TODO: Could move this logic into its own UwbCxDdi::To() function
std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>> appConfigParamsStatusList;
for (auto i = 0; i < uwbSetAppConfigParamsStatus.appConfigParamsCount; i++)
{
auto paramType = UwbCxDdi::To(uwbSetAppConfigParamsStatus.appConfigParamsStatus[i].paramType);
auto paramStatus = UwbCxDdi::To(uwbSetAppConfigParamsStatus.appConfigParamsStatus[i].status);

auto appConfigParamStatus = std::make_tuple(paramType, paramStatus);
appConfigParamsStatusList.push_back(appConfigParamStatus);
}
auto result = std::make_tuple(uwbStatus, std::move(appConfigParamsStatusList));
resultPromise.set_value(std::move(result));
}
}
//
// Old code that used the original one-off UwbSetAppConfigurationParameters wrapper.
// TODO: Once this is implemented, delete the commented out code.
//

// auto& setParamsBuffer = applicationConfigurationParameters.DdiBuffer();
// auto& setParams = applicationConfigurationParameters.DdiParameters();

// // Allocate memory for the UWB_SET_APP_CONFIG_PARAMS_STATUS structure, and pass this to the driver request
// auto statusSize = offsetof(UWB_SET_APP_CONFIG_PARAMS_STATUS, appConfigParamsStatus[setParams.appConfigParamsCount]);
// std::vector<uint8_t> statusBuffer(statusSize);
// BOOL ioResult = DeviceIoControl(handleDriver.get(), IOCTL_UWB_SET_APP_CONFIG_PARAMS, std::data(setParamsBuffer), std::size(setParamsBuffer), std::data(statusBuffer), statusSize, nullptr, nullptr);
// if (!LOG_IF_WIN32_BOOL_FALSE(ioResult)) {
// HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
// PLOG_ERROR << "error when sending IOCTL_UWB_SET_APP_CONFIG_PARAMS with sessionId " << sessionId << ", hr = " << std::showbase << std::hex << hr;
// resultPromise.set_exception(std::make_exception_ptr(UwbException(UwbStatusGeneric::Rejected)));
// return resultFuture;
// } else {
// PLOG_DEBUG << "IOCTL_UWB_SET_APP_CONFIG_PARAMS succeeded";
// auto& uwbSetAppConfigParamsStatus = *reinterpret_cast<UWB_SET_APP_CONFIG_PARAMS_STATUS*>(std::data(statusBuffer));
// auto uwbStatus = UwbCxDdi::To(uwbSetAppConfigParamsStatus.status);
// if (!IsUwbStatusOk(uwbStatus)) {
// resultPromise.set_exception(std::make_exception_ptr(UwbException(std::move(uwbStatus))));
// } else {
// // TODO: Could move this logic into its own UwbCxDdi::To() function
// std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>> appConfigParamsStatusList;
// for (auto i = 0; i < uwbSetAppConfigParamsStatus.appConfigParamsCount; i++)
// {
// auto paramType = UwbCxDdi::To(uwbSetAppConfigParamsStatus.appConfigParamsStatus[i].paramType);
// auto paramStatus = UwbCxDdi::To(uwbSetAppConfigParamsStatus.appConfigParamsStatus[i].status);

// auto appConfigParamStatus = std::make_tuple(paramType, paramStatus);
// appConfigParamsStatusList.push_back(appConfigParamStatus);
// }
// auto result = std::make_tuple(uwbStatus, std::move(appConfigParamsStatusList));
// resultPromise.set_value(std::move(result));
// }
// }

return resultFuture;
}
Expand Down
4 changes: 2 additions & 2 deletions windows/devices/uwb/UwbSession.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ UwbSession::ConfigureImpl(const ::uwb::protocol::fira::UwbSessionData& uwbSessio
m_sessionId = sessionId;

// Set the application configuration parameters for the session.
auto setParamsAdaptor = GenerateUwbSetAppConfigParameterDdi(uwbSessionData);
auto setAppConfigParamsFuture = m_uwbDeviceConnector->SetApplicationConfigurationParameters(sessionId, setParamsAdaptor);
std::vector<UwbApplicationConfigurationParameter> applicationConfigurationParameters{};
auto setAppConfigParamsFuture = m_uwbDeviceConnector->SetApplicationConfigurationParameters(sessionId, applicationConfigurationParameters);
if (!setAppConfigParamsFuture.valid()) {
// TODO: need to signal to upper layer that this failed instead of just returning
PLOG_ERROR << "failed to set the application configuration parameters";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

#include <uwb/protocols/fira/FiraDevice.hxx>
#include <uwb/protocols/fira/UwbCapability.hxx>
#include <windows/devices/uwb/UwbAppConfiguration.hxx>

namespace windows::devices::uwb
{
Expand Down Expand Up @@ -62,16 +61,12 @@ struct IUwbDeviceDdi
SessionUpdateControllerMulticastList(uint32_t sessionId, ::uwb::protocol::fira::UwbMulticastAction multicastAction, std::vector<::uwb::UwbMacAddress> controlees) = 0;

// IOCTL_UWB_GET_APP_CONFIG_PARAMS
virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>>>>
virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter>>>
GetApplicationConfigurationParameters(uint32_t sessionId, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameterType> applicationConfigurationParameterTypes) = 0;

// IOCTL_UWB_SET_APP_CONFIG_PARAMS
virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> applicationConfigurationParameters) = 0;

// IOCTL_UWB_SET_APP_CONFIG_PARAMS
virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
SetApplicationConfigurationParameters(uint32_t sessionId, UwbSetAppConfigurationParameters applicationConfigurationParameters) = 0;
SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter> applicationConfigurationParameters) = 0;

// TODO: unspecified IOCTLs below
// IOCTL_UWB_SET_DEVICE_CONFIG_PARAMS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,14 +132,11 @@ public:
virtual std::future<::uwb::protocol::fira::UwbSessionUpdateMulicastListStatus>
SessionUpdateControllerMulticastList(uint32_t sessionId, ::uwb::protocol::fira::UwbMulticastAction multicastAction, std::vector<::uwb::UwbMacAddress> controlees) override;

virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>>>>
virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter>>>
GetApplicationConfigurationParameters(uint32_t sessionId, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameterType> applicationConfigurationParameterTypes) override;

virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> applicationConfigurationParameters) override;

virtual std::future<std::tuple<::uwb::protocol::fira::UwbStatus, std::vector<std::tuple<::uwb::protocol::fira::UwbApplicationConfigurationParameterType, ::uwb::protocol::fira::UwbStatus>>>>
SetApplicationConfigurationParameters(uint32_t sessionId, UwbSetAppConfigurationParameters applicationConfigurationParameters) override;
SetApplicationConfigurationParameters(uint32_t sessionId, std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter> applicationConfigurationParameters) override;

private:
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <windows.h>

#include <wdf.h>
#include <windows/devices/uwb/UwbAppConfiguration.hxx>

#include <uwb/protocols/fira/FiraDevice.hxx>
#include <uwb/protocols/fira/UwbCapability.hxx>
Expand Down Expand Up @@ -85,7 +84,7 @@ struct IUwbSimulatorDdiCallbacksLrp
* @return UwbStatus
*/
virtual UwbStatus
GetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> &applicationConfigurationParameters) = 0;
GetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<UwbApplicationConfigurationParameter> &applicationConfigurationParameters) = 0;

/**
* @brief Set the Application Configuration Parameters object
Expand All @@ -95,7 +94,7 @@ struct IUwbSimulatorDdiCallbacksLrp
* @return UwbStatus
*/
virtual UwbStatus
SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> &applicationConfigurationParameters, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults) = 0;
SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameter> &applicationConfigurationParameters, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults) = 0;

/**
* @brief Get the Session Count object
Expand Down
3 changes: 1 addition & 2 deletions windows/drivers/uwb/simulator/IUwbSimulatorSession.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

#include <uwb/UwbMacAddress.hxx>
#include <uwb/protocols/fira/FiraDevice.hxx>
#include <windows/devices/uwb/UwbAppConfiguration.hxx>

namespace windows::devices::uwb::simulator
{
Expand All @@ -23,7 +22,7 @@ struct IUwbSimulatorSession
uint32_t Sequence{ 0 };
uint32_t RangingCount{ 0 };
std::unordered_set<::uwb::UwbMacAddress> Controlees;
std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> ApplicationConfigurationParameters;
std::vector<::uwb::protocol::fira::UwbApplicationConfigurationParameter> ApplicationConfigurationParameters;
};
} // namespace windows::devices::uwb::simulator

Expand Down
4 changes: 2 additions & 2 deletions windows/drivers/uwb/simulator/UwbSimulatorDdiCallbacks.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ UwbSimulatorDdiCallbacks::SessionDeninitialize(uint32_t sessionId)
}

UwbStatus
UwbSimulatorDdiCallbacks::SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> & /* applicationConfigurationParameters */, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults)
UwbSimulatorDdiCallbacks::SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameter> & /* applicationConfigurationParameters */, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults)
{
TraceLoggingWrite(
UwbSimulatorTraceloggingProvider,
Expand All @@ -179,7 +179,7 @@ UwbSimulatorDdiCallbacks::SetApplicationConfigurationParameters(uint32_t session
}

UwbStatus
UwbSimulatorDdiCallbacks::GetApplicationConfigurationParameters(uint32_t sessionId, [[maybe_unused]] const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> &applicationConfigurationParameters)
UwbSimulatorDdiCallbacks::GetApplicationConfigurationParameters(uint32_t sessionId, [[maybe_unused]] const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<UwbApplicationConfigurationParameter> &applicationConfigurationParameters)
{
TraceLoggingWrite(
UwbSimulatorTraceloggingProvider,
Expand Down
5 changes: 2 additions & 3 deletions windows/drivers/uwb/simulator/UwbSimulatorDdiCallbacks.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#include "UwbSimulatorSession.hxx"

#include <uwb/protocols/fira/UwbCapability.hxx>
#include <windows/devices/uwb/UwbAppConfiguration.hxx>

namespace windows::devices::uwb::simulator
{
Expand Down Expand Up @@ -56,10 +55,10 @@ struct UwbSimulatorDdiCallbacks :
SessionDeninitialize(uint32_t sessionId) override;

virtual UwbStatus
SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> &applicationConfigurationParameters, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults) override;
SetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameter> &applicationConfigurationParameters, std::vector<std::tuple<UwbApplicationConfigurationParameterType, UwbStatus>> &applicationConfigurationParameterResults) override;

virtual UwbStatus
GetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<std::shared_ptr<IUwbAppConfigurationParameter>> &applicationConfigurationParameters) override;
GetApplicationConfigurationParameters(uint32_t sessionId, const std::vector<UwbApplicationConfigurationParameterType> &applicationConfigurationParameterTypes, std::vector<UwbApplicationConfigurationParameter> &applicationConfigurationParameters) override;

virtual UwbStatus
GetSessionCount(uint32_t &sessionCount) override;
Expand Down
Loading