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

Update neutral <-> ddi conversion functions involving types with flex-array members #89

Merged
merged 8 commits into from
Feb 22, 2023
Prev Previous commit
Next Next commit
Change conversion functions for flex-types to return wrappers.
  • Loading branch information
abeltrano committed Feb 22, 2023
commit 46824b853314769fd0b2994bf14f0ed54505377d
30 changes: 17 additions & 13 deletions windows/devices/uwb/UwbCxAdapterDdiLrp.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <windows/devices/uwb/UwbCxAdapterDdiLrp.hxx>

using namespace ::uwb::protocol::fira;
using namespace windows::devices::uwb::ddi::lrp;

UWB_STATUS
windows::devices::uwb::ddi::lrp::From(const UwbStatus &uwbStatus)
Expand Down Expand Up @@ -142,30 +143,32 @@ windows::devices::uwb::ddi::lrp::From(const UwbSessionUpdateMulticastListEntry &
return multicastListEntry;
}

UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST
UwbSessionUpdateMulicastListWrapper
windows::devices::uwb::ddi::lrp::From(const UwbSessionUpdateMulicastList &uwbSessionUpdateMulicastList)
{
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST sessionUpdateControllerMulticastList{};
sessionUpdateControllerMulticastList.size = sizeof sessionUpdateControllerMulticastList; // TODO: update for variable length
auto sessionUpdateControllerMulticastListWrapper = UwbSessionUpdateMulicastListWrapper::from_num_elements(std::size(uwbSessionUpdateMulicastList.Controlees));
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST& sessionUpdateControllerMulticastList = sessionUpdateControllerMulticastListWrapper;
sessionUpdateControllerMulticastList.size = sessionUpdateControllerMulticastListWrapper.size();
sessionUpdateControllerMulticastList.sessionId = uwbSessionUpdateMulicastList.SessionId;
sessionUpdateControllerMulticastList.action = From(uwbSessionUpdateMulicastList.Action);
sessionUpdateControllerMulticastList.numberOfControlees = std::size(uwbSessionUpdateMulicastList.Controlees);
// TODO: append controlee information

return sessionUpdateControllerMulticastList;
return sessionUpdateControllerMulticastListWrapper;
}

UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF
UwbSessionUpdateMulicastListStatusWrapper
windows::devices::uwb::ddi::lrp::From(const UwbSessionUpdateMulicastListStatus &uwbSessionUpdateMulicastListStatus)
{
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF multicastListStatus{};
multicastListStatus.size = sizeof multicastListStatus; // TODO: update for variable length
auto multicastListStatusWrapper = UwbSessionUpdateMulicastListStatusWrapper::from_num_elements(std::size(uwbSessionUpdateMulicastListStatus.Status));
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF& multicastListStatus = multicastListStatusWrapper;
multicastListStatus.size = multicastListStatusWrapper.size();
multicastListStatus.sessionId = uwbSessionUpdateMulicastListStatus.SessionId;
multicastListStatus.numberOfControlees = std::size(uwbSessionUpdateMulicastListStatus.Status);
multicastListStatus.remainingMulticastListSize = 0;
// TODO: append status information

return multicastListStatus;
return multicastListStatusWrapper;
}

UWB_RANGING_MEASUREMENT_TYPE
Expand Down Expand Up @@ -335,18 +338,19 @@ windows::devices::uwb::ddi::lrp::From(const UwbStatusDevice &uwbStatusDevice)
return statusDevice;
}

UWB_RANGING_DATA
UwbRangingDataWrapper
windows::devices::uwb::ddi::lrp::From(const UwbRangingData &uwbRangingData)
{
UWB_RANGING_DATA rangingData{}; // TODO: this must be allocated to account for 'RangingMeasurements' in uwbRangingData.
rangingData.size = sizeof rangingData + 0; // TODO: fix this to account for variable length
auto rangingDataWrapper = UwbRangingDataWrapper::from_num_elements(std::size(uwbRangingData.RangingMeasurements));
UWB_RANGING_DATA& rangingData = rangingDataWrapper;
rangingData.size = rangingDataWrapper.size();
rangingData.sequenceNumber = uwbRangingData.SequenceNumber;
rangingData.sessionId = uwbRangingData.SessionId;
rangingData.currentRangingInterval = uwbRangingData.CurrentRangingInterval;
rangingData.rangingMeasurementType = From(uwbRangingData.RangingMeasurementType);
rangingData.numberOfRangingMeasurements = std::size(uwbRangingData.RangingMeasurements);

return rangingData;
return rangingDataWrapper;
}

UWB_NOTIFICATION_DATA
Expand Down Expand Up @@ -379,7 +383,7 @@ windows::devices::uwb::ddi::lrp::From(const UwbNotificationData &uwbNotification
notificationData.rangingData = From(arg);
}
// Note: no else clause is needed here since if the type is not
// supported, at at() call above will throw std::out_of_range, ensuring
// supported, the at() call above will throw std::out_of_range, ensuring
// this code will never be reached.
},
uwbNotificationData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#ifndef UWB_CX_ADAPTER_DDI_LRP_HXX
#define UWB_CX_ADAPTER_DDI_LRP_HXX

#include <notstd/flextype_wrapper.hxx>

#include <uwb/protocols/fira/FiraDevice.hxx>
#include <uwb/protocols/fira/UwbApplicationConfiguration.hxx>
#include <uwb/protocols/fira/UwbCapability.hxx>
Expand Down Expand Up @@ -74,22 +76,26 @@ From(const ::uwb::protocol::fira::UwbMulticastListStatus &uwbStatusMulticastList
UWB_MULTICAST_CONTROLEE_LIST_ENTRY
From(const ::uwb::protocol::fira::UwbSessionUpdateMulticastListEntry &uwbSessionUpdateMulticastListEntry);

using UwbSessionUpdateMulicastListWrapper = notstd::flextype_wrapper<UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST, std::remove_extent<decltype(UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST::controleeList)>>;

/**
* @brief Converts UwbSessionUpdateMulicastList to UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST.
*
* @param uwbSessionUpdateMulicastList
* @return UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST
* @return UwbSessionUpdateMulicastListWrapper
*/
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST
UwbSessionUpdateMulicastListWrapper
From(const ::uwb::protocol::fira::UwbSessionUpdateMulicastList &uwbSessionUpdateMulicastList);

using UwbSessionUpdateMulicastListStatusWrapper = notstd::flextype_wrapper<UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF, std::remove_extent<decltype(UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF::statusList)>>;

/**
* @brief Converts UwbSessionUpdateMulicastListStatus to UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF.
*
* @param uwbSessionUpdateMulicastListStatus
* @return UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF
* @return UwbSessionUpdateMulicastListStatusWrapper
*/
UWB_SESSION_UPDATE_CONTROLLER_MULTICAST_LIST_NTF
UwbSessionUpdateMulicastListStatusWrapper
From(const ::uwb::protocol::fira::UwbSessionUpdateMulicastListStatus &uwbSessionUpdateMulicastListStatus);

/**
Expand Down Expand Up @@ -173,13 +179,15 @@ From(const ::uwb::protocol::fira::UwbStatusDevice &uwbStatusDevice);
UWB_DEVICE_CONFIG_PARAM_TYPE
From(const ::uwb::protocol::fira::UwbDeviceConfigurationParameterType &uwbDeviceConfigurationParameterType);

using UwbRangingDataWrapper = notstd::flextype_wrapper<UWB_RANGING_DATA, std::remove_extent<decltype(UWB_RANGING_DATA::rangingMeasurements)>>;

/**
* @brief Converts UwbRangingData to UWB_RANGING_DATA.
*
* @param uwbRangingData
* @return UWB_RANGING_DATA
* @return UwbRangingDataWrapper
*/
UWB_RANGING_DATA
UwbRangingDataWrapper
From(const ::uwb::protocol::fira::UwbRangingData &uwbRangingData);

/**
Expand Down