Loading wifi/1.3/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ hidl_interface { types: [ "StaLinkLayerRadioStats", "StaLinkLayerStats", "WifiChannelStats", ], gen_java: true, } Loading wifi/1.3/default/hidl_struct_util.cpp +53 −17 Original line number Diff line number Diff line Loading @@ -797,6 +797,55 @@ bool convertLegacyVectorOfDebugRxPacketFateToHidl( return true; } bool convertLegacyLinkLayerRadioStatsToHidl( const legacy_hal::LinkLayerRadioStats& legacy_radio_stat, V1_3::StaLinkLayerRadioStats* hidl_radio_stat) { if (!hidl_radio_stat) { return false; } *hidl_radio_stat = {}; hidl_radio_stat->V1_0.onTimeInMs = legacy_radio_stat.stats.on_time; hidl_radio_stat->V1_0.txTimeInMs = legacy_radio_stat.stats.tx_time; hidl_radio_stat->V1_0.rxTimeInMs = legacy_radio_stat.stats.rx_time; hidl_radio_stat->V1_0.onTimeInMsForScan = legacy_radio_stat.stats.on_time_scan; hidl_radio_stat->V1_0.txTimeInMsPerLevel = legacy_radio_stat.tx_time_per_levels; hidl_radio_stat->onTimeInMsForNanScan = legacy_radio_stat.stats.on_time_nbd; hidl_radio_stat->onTimeInMsForBgScan = legacy_radio_stat.stats.on_time_gscan; hidl_radio_stat->onTimeInMsForRoamScan = legacy_radio_stat.stats.on_time_roam_scan; hidl_radio_stat->onTimeInMsForPnoScan = legacy_radio_stat.stats.on_time_pno_scan; hidl_radio_stat->onTimeInMsForHs20Scan = legacy_radio_stat.stats.on_time_hs20; std::vector<V1_3::WifiChannelStats> hidl_channel_stats; for (const auto& channel_stat : legacy_radio_stat.channel_stats) { V1_3::WifiChannelStats hidl_channel_stat; hidl_channel_stat.onTimeInMs = channel_stat.on_time; hidl_channel_stat.ccaBusyTimeInMs = channel_stat.cca_busy_time; /* * TODO once b/119142899 is fixed, * replace below code with convertLegacyWifiChannelInfoToHidl() */ hidl_channel_stat.channel.width = WifiChannelWidthInMhz::WIDTH_20; hidl_channel_stat.channel.centerFreq = channel_stat.channel.center_freq; hidl_channel_stat.channel.centerFreq0 = channel_stat.channel.center_freq0; hidl_channel_stat.channel.centerFreq1 = channel_stat.channel.center_freq1; hidl_channel_stats.push_back(hidl_channel_stat); } hidl_radio_stat->channelStats = hidl_channel_stats; return true; } bool convertLegacyLinkLayerStatsToHidl( const legacy_hal::LinkLayerStats& legacy_stats, V1_3::StaLinkLayerStats* hidl_stats) { Loading Loading @@ -843,23 +892,10 @@ bool convertLegacyLinkLayerStatsToHidl( std::vector<V1_3::StaLinkLayerRadioStats> hidl_radios_stats; for (const auto& legacy_radio_stats : legacy_stats.radios) { V1_3::StaLinkLayerRadioStats hidl_radio_stats; hidl_radio_stats.V1_0.onTimeInMs = legacy_radio_stats.stats.on_time; hidl_radio_stats.V1_0.txTimeInMs = legacy_radio_stats.stats.tx_time; hidl_radio_stats.V1_0.rxTimeInMs = legacy_radio_stats.stats.rx_time; hidl_radio_stats.V1_0.onTimeInMsForScan = legacy_radio_stats.stats.on_time_scan; hidl_radio_stats.V1_0.txTimeInMsPerLevel = legacy_radio_stats.tx_time_per_levels; hidl_radio_stats.onTimeInMsForNanScan = legacy_radio_stats.stats.on_time_nbd; hidl_radio_stats.onTimeInMsForBgScan = legacy_radio_stats.stats.on_time_gscan; hidl_radio_stats.onTimeInMsForRoamScan = legacy_radio_stats.stats.on_time_roam_scan; hidl_radio_stats.onTimeInMsForPnoScan = legacy_radio_stats.stats.on_time_pno_scan; hidl_radio_stats.onTimeInMsForHs20Scan = legacy_radio_stats.stats.on_time_hs20; if (!convertLegacyLinkLayerRadioStatsToHidl(legacy_radio_stats, &hidl_radio_stats)) { return false; } hidl_radios_stats.push_back(hidl_radio_stats); } hidl_stats->radios = hidl_radios_stats; Loading wifi/1.3/default/tests/hidl_struct_util_unit_tests.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ namespace wifi { namespace V1_3 { namespace implementation { using namespace android::hardware::wifi::V1_0; using ::android::hardware::wifi::V1_0::WifiChannelWidthInMhz; class HidlStructUtilTest : public Test {}; Loading Loading @@ -166,6 +167,17 @@ TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) { for (int i = 0; i < 4; i++) { radio.tx_time_per_levels.push_back(rand()); } legacy_hal::wifi_channel_stat channel_stat1 = { .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 2437, 2437, 0}, .cca_busy_time = 0x55, .on_time = 0x1111}; legacy_hal::wifi_channel_stat channel_stat2 = { .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 5180, 5180, 0}, .cca_busy_time = 0x66, .on_time = 0x2222}; radio.channel_stats.push_back(channel_stat1); radio.channel_stats.push_back(channel_stat2); } V1_3::StaLinkLayerStats converted{}; Loading Loading @@ -236,6 +248,25 @@ TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) { converted.radios[i].onTimeInMsForPnoScan); EXPECT_EQ(legacy_stats.radios[i].stats.on_time_hs20, converted.radios[i].onTimeInMsForHs20Scan); EXPECT_EQ(legacy_stats.radios[i].channel_stats.size(), converted.radios[i].channelStats.size()); for (int k = 0; k < legacy_stats.radios[i].channel_stats.size(); k++) { EXPECT_EQ(WifiChannelWidthInMhz::WIDTH_20, converted.radios[i].channelStats[k].channel.width); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq, converted.radios[i].channelStats[k].channel.centerFreq); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq0, converted.radios[i].channelStats[k].channel.centerFreq0); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq1, converted.radios[i].channelStats[k].channel.centerFreq1); EXPECT_EQ(legacy_stats.radios[i].channel_stats[k].cca_busy_time, converted.radios[i].channelStats[k].ccaBusyTimeInMs); EXPECT_EQ(legacy_stats.radios[i].channel_stats[k].on_time, converted.radios[i].channelStats[k].onTimeInMs); } } } Loading wifi/1.3/default/wifi_legacy_hal.cpp +23 −6 Original line number Diff line number Diff line Loading @@ -652,6 +652,8 @@ std::pair<wifi_error, LinkLayerStats> WifiLegacyHal::getLinkLayerStats( [&link_stats_ptr](wifi_request_id /* id */, wifi_iface_stat* iface_stats_ptr, int num_radios, wifi_radio_stat* radio_stats_ptr) { wifi_radio_stat* l_radio_stats_ptr; if (iface_stats_ptr != nullptr) { link_stats_ptr->iface = *iface_stats_ptr; link_stats_ptr->iface.num_peers = 0; Loading @@ -662,20 +664,35 @@ std::pair<wifi_error, LinkLayerStats> WifiLegacyHal::getLinkLayerStats( LOG(ERROR) << "Invalid radio stats in link layer stats"; return; } l_radio_stats_ptr = radio_stats_ptr; for (int i = 0; i < num_radios; i++) { LinkLayerRadioStats radio; radio.stats = radio_stats_ptr[i]; radio.stats = *l_radio_stats_ptr; // Copy over the tx level array to the separate vector. if (radio_stats_ptr[i].num_tx_levels > 0 && radio_stats_ptr[i].tx_time_per_levels != nullptr) { if (l_radio_stats_ptr->num_tx_levels > 0 && l_radio_stats_ptr->tx_time_per_levels != nullptr) { radio.tx_time_per_levels.assign( radio_stats_ptr[i].tx_time_per_levels, radio_stats_ptr[i].tx_time_per_levels + radio_stats_ptr[i].num_tx_levels); l_radio_stats_ptr->tx_time_per_levels, l_radio_stats_ptr->tx_time_per_levels + l_radio_stats_ptr->num_tx_levels); } radio.stats.num_tx_levels = 0; radio.stats.tx_time_per_levels = nullptr; /* Copy over the channel stat to separate vector */ if (l_radio_stats_ptr->num_channels > 0) { /* Copy the channel stats */ radio.channel_stats.assign( l_radio_stats_ptr->channels, l_radio_stats_ptr->channels + l_radio_stats_ptr->num_channels); } link_stats_ptr->radios.push_back(radio); l_radio_stats_ptr = (wifi_radio_stat*)((u8*)l_radio_stats_ptr + sizeof(wifi_radio_stat) + (sizeof(wifi_channel_stat) * l_radio_stats_ptr->num_channels)); } }; Loading wifi/1.3/default/wifi_legacy_hal.h +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ struct PacketFilterCapabilities { struct LinkLayerRadioStats { wifi_radio_stat stats; std::vector<uint32_t> tx_time_per_levels; std::vector<wifi_channel_stat> channel_stats; }; struct LinkLayerStats { Loading Loading
wifi/1.3/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ hidl_interface { types: [ "StaLinkLayerRadioStats", "StaLinkLayerStats", "WifiChannelStats", ], gen_java: true, } Loading
wifi/1.3/default/hidl_struct_util.cpp +53 −17 Original line number Diff line number Diff line Loading @@ -797,6 +797,55 @@ bool convertLegacyVectorOfDebugRxPacketFateToHidl( return true; } bool convertLegacyLinkLayerRadioStatsToHidl( const legacy_hal::LinkLayerRadioStats& legacy_radio_stat, V1_3::StaLinkLayerRadioStats* hidl_radio_stat) { if (!hidl_radio_stat) { return false; } *hidl_radio_stat = {}; hidl_radio_stat->V1_0.onTimeInMs = legacy_radio_stat.stats.on_time; hidl_radio_stat->V1_0.txTimeInMs = legacy_radio_stat.stats.tx_time; hidl_radio_stat->V1_0.rxTimeInMs = legacy_radio_stat.stats.rx_time; hidl_radio_stat->V1_0.onTimeInMsForScan = legacy_radio_stat.stats.on_time_scan; hidl_radio_stat->V1_0.txTimeInMsPerLevel = legacy_radio_stat.tx_time_per_levels; hidl_radio_stat->onTimeInMsForNanScan = legacy_radio_stat.stats.on_time_nbd; hidl_radio_stat->onTimeInMsForBgScan = legacy_radio_stat.stats.on_time_gscan; hidl_radio_stat->onTimeInMsForRoamScan = legacy_radio_stat.stats.on_time_roam_scan; hidl_radio_stat->onTimeInMsForPnoScan = legacy_radio_stat.stats.on_time_pno_scan; hidl_radio_stat->onTimeInMsForHs20Scan = legacy_radio_stat.stats.on_time_hs20; std::vector<V1_3::WifiChannelStats> hidl_channel_stats; for (const auto& channel_stat : legacy_radio_stat.channel_stats) { V1_3::WifiChannelStats hidl_channel_stat; hidl_channel_stat.onTimeInMs = channel_stat.on_time; hidl_channel_stat.ccaBusyTimeInMs = channel_stat.cca_busy_time; /* * TODO once b/119142899 is fixed, * replace below code with convertLegacyWifiChannelInfoToHidl() */ hidl_channel_stat.channel.width = WifiChannelWidthInMhz::WIDTH_20; hidl_channel_stat.channel.centerFreq = channel_stat.channel.center_freq; hidl_channel_stat.channel.centerFreq0 = channel_stat.channel.center_freq0; hidl_channel_stat.channel.centerFreq1 = channel_stat.channel.center_freq1; hidl_channel_stats.push_back(hidl_channel_stat); } hidl_radio_stat->channelStats = hidl_channel_stats; return true; } bool convertLegacyLinkLayerStatsToHidl( const legacy_hal::LinkLayerStats& legacy_stats, V1_3::StaLinkLayerStats* hidl_stats) { Loading Loading @@ -843,23 +892,10 @@ bool convertLegacyLinkLayerStatsToHidl( std::vector<V1_3::StaLinkLayerRadioStats> hidl_radios_stats; for (const auto& legacy_radio_stats : legacy_stats.radios) { V1_3::StaLinkLayerRadioStats hidl_radio_stats; hidl_radio_stats.V1_0.onTimeInMs = legacy_radio_stats.stats.on_time; hidl_radio_stats.V1_0.txTimeInMs = legacy_radio_stats.stats.tx_time; hidl_radio_stats.V1_0.rxTimeInMs = legacy_radio_stats.stats.rx_time; hidl_radio_stats.V1_0.onTimeInMsForScan = legacy_radio_stats.stats.on_time_scan; hidl_radio_stats.V1_0.txTimeInMsPerLevel = legacy_radio_stats.tx_time_per_levels; hidl_radio_stats.onTimeInMsForNanScan = legacy_radio_stats.stats.on_time_nbd; hidl_radio_stats.onTimeInMsForBgScan = legacy_radio_stats.stats.on_time_gscan; hidl_radio_stats.onTimeInMsForRoamScan = legacy_radio_stats.stats.on_time_roam_scan; hidl_radio_stats.onTimeInMsForPnoScan = legacy_radio_stats.stats.on_time_pno_scan; hidl_radio_stats.onTimeInMsForHs20Scan = legacy_radio_stats.stats.on_time_hs20; if (!convertLegacyLinkLayerRadioStatsToHidl(legacy_radio_stats, &hidl_radio_stats)) { return false; } hidl_radios_stats.push_back(hidl_radio_stats); } hidl_stats->radios = hidl_radios_stats; Loading
wifi/1.3/default/tests/hidl_struct_util_unit_tests.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ namespace wifi { namespace V1_3 { namespace implementation { using namespace android::hardware::wifi::V1_0; using ::android::hardware::wifi::V1_0::WifiChannelWidthInMhz; class HidlStructUtilTest : public Test {}; Loading Loading @@ -166,6 +167,17 @@ TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) { for (int i = 0; i < 4; i++) { radio.tx_time_per_levels.push_back(rand()); } legacy_hal::wifi_channel_stat channel_stat1 = { .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 2437, 2437, 0}, .cca_busy_time = 0x55, .on_time = 0x1111}; legacy_hal::wifi_channel_stat channel_stat2 = { .channel = {legacy_hal::WIFI_CHAN_WIDTH_20, 5180, 5180, 0}, .cca_busy_time = 0x66, .on_time = 0x2222}; radio.channel_stats.push_back(channel_stat1); radio.channel_stats.push_back(channel_stat2); } V1_3::StaLinkLayerStats converted{}; Loading Loading @@ -236,6 +248,25 @@ TEST_F(HidlStructUtilTest, canConvertLegacyLinkLayerStatsToHidl) { converted.radios[i].onTimeInMsForPnoScan); EXPECT_EQ(legacy_stats.radios[i].stats.on_time_hs20, converted.radios[i].onTimeInMsForHs20Scan); EXPECT_EQ(legacy_stats.radios[i].channel_stats.size(), converted.radios[i].channelStats.size()); for (int k = 0; k < legacy_stats.radios[i].channel_stats.size(); k++) { EXPECT_EQ(WifiChannelWidthInMhz::WIDTH_20, converted.radios[i].channelStats[k].channel.width); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq, converted.radios[i].channelStats[k].channel.centerFreq); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq0, converted.radios[i].channelStats[k].channel.centerFreq0); EXPECT_EQ( legacy_stats.radios[i].channel_stats[k].channel.center_freq1, converted.radios[i].channelStats[k].channel.centerFreq1); EXPECT_EQ(legacy_stats.radios[i].channel_stats[k].cca_busy_time, converted.radios[i].channelStats[k].ccaBusyTimeInMs); EXPECT_EQ(legacy_stats.radios[i].channel_stats[k].on_time, converted.radios[i].channelStats[k].onTimeInMs); } } } Loading
wifi/1.3/default/wifi_legacy_hal.cpp +23 −6 Original line number Diff line number Diff line Loading @@ -652,6 +652,8 @@ std::pair<wifi_error, LinkLayerStats> WifiLegacyHal::getLinkLayerStats( [&link_stats_ptr](wifi_request_id /* id */, wifi_iface_stat* iface_stats_ptr, int num_radios, wifi_radio_stat* radio_stats_ptr) { wifi_radio_stat* l_radio_stats_ptr; if (iface_stats_ptr != nullptr) { link_stats_ptr->iface = *iface_stats_ptr; link_stats_ptr->iface.num_peers = 0; Loading @@ -662,20 +664,35 @@ std::pair<wifi_error, LinkLayerStats> WifiLegacyHal::getLinkLayerStats( LOG(ERROR) << "Invalid radio stats in link layer stats"; return; } l_radio_stats_ptr = radio_stats_ptr; for (int i = 0; i < num_radios; i++) { LinkLayerRadioStats radio; radio.stats = radio_stats_ptr[i]; radio.stats = *l_radio_stats_ptr; // Copy over the tx level array to the separate vector. if (radio_stats_ptr[i].num_tx_levels > 0 && radio_stats_ptr[i].tx_time_per_levels != nullptr) { if (l_radio_stats_ptr->num_tx_levels > 0 && l_radio_stats_ptr->tx_time_per_levels != nullptr) { radio.tx_time_per_levels.assign( radio_stats_ptr[i].tx_time_per_levels, radio_stats_ptr[i].tx_time_per_levels + radio_stats_ptr[i].num_tx_levels); l_radio_stats_ptr->tx_time_per_levels, l_radio_stats_ptr->tx_time_per_levels + l_radio_stats_ptr->num_tx_levels); } radio.stats.num_tx_levels = 0; radio.stats.tx_time_per_levels = nullptr; /* Copy over the channel stat to separate vector */ if (l_radio_stats_ptr->num_channels > 0) { /* Copy the channel stats */ radio.channel_stats.assign( l_radio_stats_ptr->channels, l_radio_stats_ptr->channels + l_radio_stats_ptr->num_channels); } link_stats_ptr->radios.push_back(radio); l_radio_stats_ptr = (wifi_radio_stat*)((u8*)l_radio_stats_ptr + sizeof(wifi_radio_stat) + (sizeof(wifi_channel_stat) * l_radio_stats_ptr->num_channels)); } }; Loading
wifi/1.3/default/wifi_legacy_hal.h +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ struct PacketFilterCapabilities { struct LinkLayerRadioStats { wifi_radio_stat stats; std::vector<uint32_t> tx_time_per_levels; std::vector<wifi_channel_stat> channel_stats; }; struct LinkLayerStats { Loading