From 32d0ca967ac3fff6a4566323ec55f8acff0f9226 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Fri, 2 Dec 2016 11:21:19 -0800 Subject: [PATCH] wifi: Convert packet fate structures from legacy to HIDL While there fixed a couple of nits, 1. Correct a typo in one of the packet fate structs in the .hal file. 2. Renamed the scan data flag and added a helper function to convert the legacy flag to it's equivalent and loop through it. Bug: 32221997 Test: Compiles Change-Id: I414a7731054e6400d22d4e6deae9495b48dce461 --- wifi/1.0/default/hidl_struct_util.cpp | 129 +++++++++++++++++++++++++- wifi/1.0/default/hidl_struct_util.h | 6 ++ wifi/1.0/types.hal | 4 +- 3 files changed, 134 insertions(+), 5 deletions(-) diff --git a/wifi/1.0/default/hidl_struct_util.cpp b/wifi/1.0/default/hidl_struct_util.cpp index 234f526afd..d5f517b396 100644 --- a/wifi/1.0/default/hidl_struct_util.cpp +++ b/wifi/1.0/default/hidl_struct_util.cpp @@ -26,7 +26,7 @@ namespace V1_0 { namespace implementation { namespace hidl_struct_util { -uint8_t ConvertHidlReportEventFlagToLegacy( +uint8_t convertHidlScanReportEventFlagToLegacy( StaBackgroundScanBucketEventReportSchemeMask hidl_flag) { using HidlFlag = StaBackgroundScanBucketEventReportSchemeMask; switch (hidl_flag) { @@ -39,6 +39,17 @@ uint8_t ConvertHidlReportEventFlagToLegacy( }; } +StaScanDataFlagMask convertLegacyScanDataFlagToHidl(uint8_t legacy_flag) { + switch (legacy_flag) { + case legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED: + return StaScanDataFlagMask::INTERRUPTED; + }; + CHECK(false) << "Unknown legacy flag: " << legacy_flag; + // To silence the compiler warning about reaching the end of non-void + // function. + return StaScanDataFlagMask::INTERRUPTED; +} + bool convertHidlScanParamsToLegacy( const StaBackgroundScanParameters& hidl_scan_params, legacy_hal::wifi_scan_cmd_params* legacy_scan_params) { @@ -76,7 +87,7 @@ bool convertHidlScanParamsToLegacy( if (hidl_bucket_spec.eventReportScheme & static_cast::type>(flag)) { legacy_bucket_spec.report_events |= - ConvertHidlReportEventFlagToLegacy(flag); + convertHidlScanReportEventFlagToLegacy(flag); } } // TODO(b/33194311): Expose these max limits in the HIDL interface. @@ -159,7 +170,13 @@ bool convertLegacyCachedScanResultsToHidl( if (!hidl_scan_data) { return false; } - hidl_scan_data->flags = legacy_cached_scan_result.flags; + for (const auto flag : {legacy_hal::WIFI_SCAN_FLAG_INTERRUPTED}) { + if (legacy_cached_scan_result.flags & flag) { + hidl_scan_data->flags |= + static_cast::type>( + convertLegacyScanDataFlagToHidl(flag)); + } + } hidl_scan_data->bucketsScanned = legacy_cached_scan_result.buckets_scanned; CHECK(legacy_cached_scan_result.num_results >= 0 && @@ -199,6 +216,112 @@ bool convertLegacyVectorOfCachedScanResultsToHidl( return true; } +WifiDebugTxPacketFate convertLegacyDebugTxPacketFateToHidl( + legacy_hal::wifi_tx_packet_fate fate) { + switch (fate) { + case legacy_hal::TX_PKT_FATE_ACKED: + return WifiDebugTxPacketFate::ACKED; + case legacy_hal::TX_PKT_FATE_SENT: + return WifiDebugTxPacketFate::SENT; + case legacy_hal::TX_PKT_FATE_FW_QUEUED: + return WifiDebugTxPacketFate::FW_QUEUED; + case legacy_hal::TX_PKT_FATE_FW_DROP_INVALID: + return WifiDebugTxPacketFate::FW_DROP_INVALID; + case legacy_hal::TX_PKT_FATE_FW_DROP_NOBUFS: + return WifiDebugTxPacketFate::FW_DROP_NOBUFS; + case legacy_hal::TX_PKT_FATE_FW_DROP_OTHER: + return WifiDebugTxPacketFate::FW_DROP_OTHER; + case legacy_hal::TX_PKT_FATE_DRV_QUEUED: + return WifiDebugTxPacketFate::DRV_QUEUED; + case legacy_hal::TX_PKT_FATE_DRV_DROP_INVALID: + return WifiDebugTxPacketFate::DRV_DROP_INVALID; + case legacy_hal::TX_PKT_FATE_DRV_DROP_NOBUFS: + return WifiDebugTxPacketFate::DRV_DROP_NOBUFS; + case legacy_hal::TX_PKT_FATE_DRV_DROP_OTHER: + return WifiDebugTxPacketFate::DRV_DROP_OTHER; + }; +} + +WifiDebugRxPacketFate convertLegacyDebugRxPacketFateToHidl( + legacy_hal::wifi_rx_packet_fate fate) { + switch (fate) { + case legacy_hal::RX_PKT_FATE_SUCCESS: + return WifiDebugRxPacketFate::SUCCESS; + case legacy_hal::RX_PKT_FATE_FW_QUEUED: + return WifiDebugRxPacketFate::FW_QUEUED; + case legacy_hal::RX_PKT_FATE_FW_DROP_FILTER: + return WifiDebugRxPacketFate::FW_DROP_FILTER; + case legacy_hal::RX_PKT_FATE_FW_DROP_INVALID: + return WifiDebugRxPacketFate::FW_DROP_INVALID; + case legacy_hal::RX_PKT_FATE_FW_DROP_NOBUFS: + return WifiDebugRxPacketFate::FW_DROP_NOBUFS; + case legacy_hal::RX_PKT_FATE_FW_DROP_OTHER: + return WifiDebugRxPacketFate::FW_DROP_OTHER; + case legacy_hal::RX_PKT_FATE_DRV_QUEUED: + return WifiDebugRxPacketFate::DRV_QUEUED; + case legacy_hal::RX_PKT_FATE_DRV_DROP_FILTER: + return WifiDebugRxPacketFate::DRV_DROP_FILTER; + case legacy_hal::RX_PKT_FATE_DRV_DROP_INVALID: + return WifiDebugRxPacketFate::DRV_DROP_INVALID; + case legacy_hal::RX_PKT_FATE_DRV_DROP_NOBUFS: + return WifiDebugRxPacketFate::DRV_DROP_NOBUFS; + case legacy_hal::RX_PKT_FATE_DRV_DROP_OTHER: + return WifiDebugRxPacketFate::DRV_DROP_OTHER; + }; +} + +WifiDebugPacketFateFrameType convertLegacyDebugPacketFateFrameTypeToHidl( + legacy_hal::frame_type type) { + switch (type) { + case legacy_hal::FRAME_TYPE_UNKNOWN: + return WifiDebugPacketFateFrameType::UNKNOWN; + case legacy_hal::FRAME_TYPE_ETHERNET_II: + return WifiDebugPacketFateFrameType::ETHERNET_II; + case legacy_hal::FRAME_TYPE_80211_MGMT: + return WifiDebugPacketFateFrameType::MGMT_80211; + }; +} + +bool convertLegacyDebugPacketFateFrameToHidl( + const legacy_hal::frame_info& legacy_frame, + WifiDebugPacketFateFrameInfo* hidl_frame) { + if (!hidl_frame) { + return false; + } + hidl_frame->frameType = + convertLegacyDebugPacketFateFrameTypeToHidl(legacy_frame.payload_type); + hidl_frame->frameLen = legacy_frame.frame_len; + hidl_frame->driverTimestampUsec = legacy_frame.driver_timestamp_usec; + hidl_frame->firmwareTimestampUsec = legacy_frame.firmware_timestamp_usec; + const uint8_t* frame_begin = reinterpret_cast( + legacy_frame.frame_content.ethernet_ii_bytes); + hidl_frame->frameContent = + std::vector(frame_begin, frame_begin + legacy_frame.frame_len); + return true; +} + +bool convertLegacyDebugTxPacketFateToHidl( + const legacy_hal::wifi_tx_report& legacy_fate, + WifiDebugTxPacketFateReport* hidl_fate) { + if (!hidl_fate) { + return false; + } + hidl_fate->fate = convertLegacyDebugTxPacketFateToHidl(legacy_fate.fate); + return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, + &hidl_fate->frameInfo); +} + +bool convertLegacyDebugRxPacketFateToHidl( + const legacy_hal::wifi_rx_report& legacy_fate, + WifiDebugRxPacketFateReport* hidl_fate) { + if (!hidl_fate) { + return false; + } + hidl_fate->fate = convertLegacyDebugRxPacketFateToHidl(legacy_fate.fate); + return convertLegacyDebugPacketFateFrameToHidl(legacy_fate.frame_inf, + &hidl_fate->frameInfo); +} + bool convertLegacyLinkLayerStatsToHidl( const legacy_hal::LinkLayerStats& legacy_stats, StaLinkLayerStats* hidl_stats) { diff --git a/wifi/1.0/default/hidl_struct_util.h b/wifi/1.0/default/hidl_struct_util.h index ae1cf70586..ed096f7e80 100644 --- a/wifi/1.0/default/hidl_struct_util.h +++ b/wifi/1.0/default/hidl_struct_util.h @@ -59,6 +59,12 @@ bool convertLegacyVectorOfCachedScanResultsToHidl( bool convertLegacyLinkLayerStatsToHidl( const legacy_hal::LinkLayerStats& legacy_stats, StaLinkLayerStats* hidl_stats); +bool convertLegacyDebugTxPacketFateToHidl( + const legacy_hal::wifi_tx_report& legacy_fate, + WifiDebugTxPacketFateReport* hidl_fate); +bool convertLegacyDebugRxPacketFateToHidl( + const legacy_hal::wifi_rx_report& legacy_fate, + WifiDebugRxPacketFateReport* hidl_fate); // NAN iface conversion methods. bool convertHidlNanEnableRequestToLegacy( diff --git a/wifi/1.0/types.hal b/wifi/1.0/types.hal index 9e53377c2e..5d19524e5a 100644 --- a/wifi/1.0/types.hal +++ b/wifi/1.0/types.hal @@ -491,7 +491,7 @@ enum StaScanDataFlagMask : int32_t { * Indicates that a scan was interrupted/did not occur so results may be * incomplete. */ - WIFI_SCAN_FLAG_INTERRUPTED = 1 << 0, + INTERRUPTED = 1 << 0, }; /** @@ -3053,7 +3053,7 @@ struct WifiDebugPacketFateFrameInfo { */ struct WifiDebugTxPacketFateReport { WifiDebugTxPacketFate fate; - WifiDebugPacketFateFrameInfo frameInf; + WifiDebugPacketFateFrameInfo frameInfo; }; /**