1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef AIDL_STRUCT_UTIL_H_ 18 #define AIDL_STRUCT_UTIL_H_ 19 20 #include <aidl/android/hardware/wifi/IWifiChip.h> 21 #include <aidl/android/hardware/wifi/IWifiChipEventCallback.h> 22 #include <aidl/android/hardware/wifi/NanBandIndex.h> 23 #include <aidl/android/hardware/wifi/StaBackgroundScanBucketEventReportSchemeMask.h> 24 #include <aidl/android/hardware/wifi/StaScanDataFlagMask.h> 25 #include <aidl/android/hardware/wifi/WifiDebugRingBufferFlags.h> 26 #include <aidl/android/hardware/wifi/WifiIfaceMode.h> 27 28 #include <vector> 29 30 #include "wifi_legacy_hal.h" 31 32 /** 33 * This file contains a bunch of functions to convert structs from the legacy 34 * HAL to AIDL and vice versa. 35 */ 36 namespace aidl { 37 namespace android { 38 namespace hardware { 39 namespace wifi { 40 namespace aidl_struct_util { 41 42 // Chip conversion methods. 43 bool convertLegacyChipFeaturesToAidl(uint64_t legacy_feature_set, uint32_t* aidl_feature_set); 44 bool convertLegacyDebugRingBufferStatusToAidl( 45 const legacy_hal::wifi_ring_buffer_status& legacy_status, 46 WifiDebugRingBufferStatus* aidl_status); 47 bool convertLegacyVectorOfDebugRingBufferStatusToAidl( 48 const std::vector<legacy_hal::wifi_ring_buffer_status>& legacy_status_vec, 49 std::vector<WifiDebugRingBufferStatus>* aidl_status_vec); 50 bool convertLegacyWakeReasonStatsToAidl(const legacy_hal::WakeReasonStats& legacy_stats, 51 WifiDebugHostWakeReasonStats* aidl_stats); 52 legacy_hal::wifi_power_scenario convertAidlTxPowerScenarioToLegacy( 53 IWifiChip::TxPowerScenario aidl_scenario); 54 legacy_hal::wifi_latency_mode convertAidlLatencyModeToLegacy( 55 IWifiChip::LatencyMode aidl_latency_mode); 56 bool convertLegacyWifiMacInfosToAidl( 57 const std::vector<legacy_hal::WifiMacInfo>& legacy_mac_infos, 58 std::vector<IWifiChipEventCallback::RadioModeInfo>* aidl_radio_mode_infos); 59 legacy_hal::wifi_interface_type convertAidlIfaceTypeToLegacy(IfaceType aidl_interface_type); 60 legacy_hal::wifi_multi_sta_use_case convertAidlMultiStaUseCaseToLegacy( 61 IWifiChip::MultiStaUseCase use_case); 62 bool convertAidlCoexUnsafeChannelToLegacy( 63 const IWifiChip::CoexUnsafeChannel& aidl_unsafe_channel, 64 legacy_hal::wifi_coex_unsafe_channel* legacy_unsafe_channel); 65 bool convertAidlVectorOfCoexUnsafeChannelToLegacy( 66 const std::vector<IWifiChip::CoexUnsafeChannel>& aidl_unsafe_channels, 67 std::vector<legacy_hal::wifi_coex_unsafe_channel>* legacy_unsafe_channels); 68 bool convertLegacyRadioCombinationsMatrixToAidl( 69 legacy_hal::wifi_radio_combination_matrix* legacy_matrix, 70 std::vector<WifiRadioCombination>* aidl_combinations); 71 WifiBand convertLegacyMacBandToAidlWifiBand(uint32_t band); 72 WifiAntennaMode convertLegacyAntennaConfigurationToAidl(uint32_t antenna_cfg); 73 bool convertLegacyIfaceCombinationsMatrixToChipMode( 74 legacy_hal::wifi_iface_concurrency_matrix& legacy_matrix, IWifiChip::ChipMode* chip_mode); 75 76 // STA iface conversion methods. 77 bool convertLegacyStaIfaceFeaturesToAidl(uint64_t legacy_feature_set, uint32_t* aidl_feature_set); 78 bool convertLegacyApfCapabilitiesToAidl(const legacy_hal::PacketFilterCapabilities& legacy_caps, 79 StaApfPacketFilterCapabilities* aidl_caps); 80 bool convertLegacyGscanCapabilitiesToAidl(const legacy_hal::wifi_gscan_capabilities& legacy_caps, 81 StaBackgroundScanCapabilities* aidl_caps); 82 legacy_hal::wifi_band convertAidlWifiBandToLegacy(WifiBand band); 83 bool convertAidlGscanParamsToLegacy(const StaBackgroundScanParameters& aidl_scan_params, 84 legacy_hal::wifi_scan_cmd_params* legacy_scan_params); 85 // |has_ie_data| indicates whether or not the wifi_scan_result includes 802.11 86 // Information Elements (IEs) 87 bool convertLegacyGscanResultToAidl(const legacy_hal::wifi_scan_result& legacy_scan_result, 88 bool has_ie_data, StaScanResult* aidl_scan_result); 89 // |cached_results| is assumed to not include IEs. 90 bool convertLegacyVectorOfCachedGscanResultsToAidl( 91 const std::vector<legacy_hal::wifi_cached_scan_results>& legacy_cached_scan_results, 92 std::vector<StaScanData>* aidl_scan_datas); 93 bool convertLegacyLinkLayerMlStatsToAidl(const legacy_hal::LinkLayerMlStats& legacy_ml_stats, 94 StaLinkLayerStats* aidl_stats); 95 bool convertLegacyLinkLayerStatsToAidl(const legacy_hal::LinkLayerStats& legacy_stats, 96 StaLinkLayerStats* aidl_stats); 97 void logAidlLinkLayerStatsSize(StaLinkLayerStats& aidl_stats); 98 bool convertLegacyRoamingCapabilitiesToAidl( 99 const legacy_hal::wifi_roaming_capabilities& legacy_caps, 100 StaRoamingCapabilities* aidl_caps); 101 bool convertAidlRoamingConfigToLegacy(const StaRoamingConfig& aidl_config, 102 legacy_hal::wifi_roaming_config* legacy_config); 103 legacy_hal::fw_roaming_state_t convertAidlRoamingStateToLegacy(StaRoamingState state); 104 bool convertLegacyVectorOfDebugTxPacketFateToAidl( 105 const std::vector<legacy_hal::wifi_tx_report>& legacy_fates, 106 std::vector<WifiDebugTxPacketFateReport>* aidl_fates); 107 bool convertLegacyVectorOfDebugRxPacketFateToAidl( 108 const std::vector<legacy_hal::wifi_rx_report>& legacy_fates, 109 std::vector<WifiDebugRxPacketFateReport>* aidl_fates); 110 111 // NAN iface conversion methods. 112 void convertToNanStatus(legacy_hal::NanStatusType type, const char* str, size_t max_len, 113 NanStatus* nanStatus); 114 bool convertAidlNanEnableRequestToLegacy(const NanEnableRequest& aidl_request1, 115 const NanConfigRequestSupplemental& aidl_request2, 116 legacy_hal::NanEnableRequest* legacy_request); 117 bool convertAidlNanConfigRequestToLegacy(const NanConfigRequest& aidl_request1, 118 const NanConfigRequestSupplemental& aidl_request2, 119 legacy_hal::NanConfigRequest* legacy_request); 120 bool convertAidlNanPublishRequestToLegacy(const NanPublishRequest& aidl_request, 121 legacy_hal::NanPublishRequest* legacy_request); 122 bool convertAidlNanSubscribeRequestToLegacy(const NanSubscribeRequest& aidl_request, 123 legacy_hal::NanSubscribeRequest* legacy_request); 124 bool convertAidlNanTransmitFollowupRequestToLegacy( 125 const NanTransmitFollowupRequest& aidl_request, 126 legacy_hal::NanTransmitFollowupRequest* legacy_request); 127 bool convertAidlNanDataPathInitiatorRequestToLegacy( 128 const NanInitiateDataPathRequest& aidl_request, 129 legacy_hal::NanDataPathInitiatorRequest* legacy_request); 130 bool convertAidlNanDataPathIndicationResponseToLegacy( 131 const NanRespondToDataPathIndicationRequest& aidl_response, 132 legacy_hal::NanDataPathIndicationResponse* legacy_response); 133 bool convertLegacyNanResponseHeaderToAidl(const legacy_hal::NanResponseMsg& legacy_response, 134 NanStatus* nanStatus); 135 bool convertLegacyNanCapabilitiesResponseToAidl(const legacy_hal::NanCapabilities& legacy_response, 136 NanCapabilities* aidl_response); 137 bool convertLegacyNanMatchIndToAidl(const legacy_hal::NanMatchInd& legacy_ind, 138 NanMatchInd* aidl_ind); 139 bool convertLegacyNanFollowupIndToAidl(const legacy_hal::NanFollowupInd& legacy_ind, 140 NanFollowupReceivedInd* aidl_ind); 141 bool convertLegacyNanDataPathRequestIndToAidl(const legacy_hal::NanDataPathRequestInd& legacy_ind, 142 NanDataPathRequestInd* aidl_ind); 143 bool convertLegacyNanDataPathConfirmIndToAidl(const legacy_hal::NanDataPathConfirmInd& legacy_ind, 144 NanDataPathConfirmInd* aidl_ind); 145 bool convertLegacyNanDataPathScheduleUpdateIndToAidl( 146 const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind, 147 NanDataPathScheduleUpdateInd* aidl_ind); 148 149 // RTT controller conversion methods. 150 bool convertAidlVectorOfRttConfigToLegacy(const std::vector<RttConfig>& aidl_configs, 151 std::vector<legacy_hal::wifi_rtt_config>* legacy_configs); 152 bool convertAidlVectorOfRttConfigToLegacyV3( 153 const std::vector<RttConfig>& aidl_configs, 154 std::vector<legacy_hal::wifi_rtt_config_v3>* legacy_configs); 155 156 bool convertAidlRttLciInformationToLegacy(const RttLciInformation& aidl_info, 157 legacy_hal::wifi_lci_information* legacy_info); 158 bool convertAidlRttLcrInformationToLegacy(const RttLcrInformation& aidl_info, 159 legacy_hal::wifi_lcr_information* legacy_info); 160 bool convertAidlRttResponderToLegacy(const RttResponder& aidl_responder, 161 legacy_hal::wifi_rtt_responder* legacy_responder); 162 bool convertAidlWifiChannelInfoToLegacy(const WifiChannelInfo& aidl_info, 163 legacy_hal::wifi_channel_info* legacy_info); 164 bool convertLegacyRttResponderToAidl(const legacy_hal::wifi_rtt_responder& legacy_responder, 165 RttResponder* aidl_responder); 166 bool convertLegacyRttCapabilitiesToAidl( 167 const legacy_hal::wifi_rtt_capabilities& legacy_capabilities, 168 RttCapabilities* aidl_capabilities); 169 bool convertLegacyRttCapabilitiesV3ToAidl( 170 const legacy_hal::wifi_rtt_capabilities_v3& legacy_capabilities_v3, 171 RttCapabilities* aidl_capabilities); 172 173 bool convertLegacyVectorOfRttResultToAidl( 174 const std::vector<const legacy_hal::wifi_rtt_result*>& legacy_results, 175 std::vector<RttResult>* aidl_results); 176 bool convertLegacyVectorOfRttResultV2ToAidl( 177 const std::vector<const legacy_hal::wifi_rtt_result_v2*>& legacy_results, 178 std::vector<RttResult>* aidl_results); 179 bool convertLegacyVectorOfRttResultV3ToAidl( 180 const std::vector<const legacy_hal::wifi_rtt_result_v3*>& legacy_results, 181 std::vector<RttResult>* aidl_results); 182 uint32_t convertAidlWifiBandToLegacyMacBand(WifiBand band); 183 uint32_t convertAidlWifiIfaceModeToLegacy(uint32_t aidl_iface_mask); 184 uint32_t convertAidlUsableChannelFilterToLegacy(uint32_t aidl_filter_mask); 185 bool convertLegacyWifiUsableChannelsToAidl( 186 const std::vector<legacy_hal::wifi_usable_channel>& legacy_usable_channels, 187 std::vector<WifiUsableChannel>* aidl_usable_channels); 188 bool convertLegacyPeerInfoStatsToAidl(const legacy_hal::WifiPeerInfo& legacy_peer_info_stats, 189 StaPeerInfo* aidl_peer_info_stats); 190 bool convertLegacyWifiRateInfoToAidl(const legacy_hal::wifi_rate& legacy_rate, 191 WifiRateInfo* aidl_rate); 192 bool convertLegacyWifiChipCapabilitiesToAidl( 193 const legacy_hal::wifi_chip_capabilities& legacy_chip_capabilities, 194 WifiChipCapabilities& aidl_chip_capabilities); 195 bool convertAidlNanPairingInitiatorRequestToLegacy(const NanPairingRequest& aidl_request, 196 legacy_hal::NanPairingRequest* legacy_request); 197 bool convertAidlNanPairingIndicationResponseToLegacy( 198 const NanRespondToPairingIndicationRequest& aidl_response, 199 legacy_hal::NanPairingIndicationResponse* legacy_response); 200 bool convertAidlNanBootstrappingInitiatorRequestToLegacy( 201 const NanBootstrappingRequest& aidl_request, 202 legacy_hal::NanBootstrappingRequest* legacy_request); 203 bool convertAidlNanBootstrappingIndicationResponseToLegacy( 204 const NanBootstrappingResponse& aidl_response, 205 legacy_hal::NanBootstrappingIndicationResponse* legacy_response); 206 bool convertLegacyNanPairingRequestIndToAidl(const legacy_hal::NanPairingRequestInd& legacy_ind, 207 NanPairingRequestInd* aidl_ind); 208 bool convertLegacyNanPairingConfirmIndToAidl(const legacy_hal::NanPairingConfirmInd& legacy_ind, 209 NanPairingConfirmInd* aidl_ind); 210 bool convertLegacyNanBootstrappingRequestIndToAidl( 211 const legacy_hal::NanBootstrappingRequestInd& legacy_ind, 212 NanBootstrappingRequestInd* aidl_ind); 213 bool convertLegacyNanBootstrappingConfirmIndToAidl( 214 const legacy_hal::NanBootstrappingConfirmInd& legacy_ind, 215 NanBootstrappingConfirmInd* aidl_ind); 216 uint32_t convertAidlChannelCategoryToLegacy(uint32_t aidl_channel_category_mask); 217 bool convertCachedScanReportToAidl(const legacy_hal::WifiCachedScanReport& report, 218 CachedScanData* aidl_scan_data); 219 bool convertCachedScanResultToAidl(const legacy_hal::wifi_cached_scan_result& legacy_scan_result, 220 uint64_t ts_us, CachedScanResult* aidl_scan_result); 221 WifiRatePreamble convertScanResultFlagsToPreambleType(int flags); 222 bool convertTwtCapabilitiesToAidl(const legacy_hal::wifi_twt_capabilities legacy_twt_capabs, 223 TwtCapabilities* aidl_twt_capabs); 224 bool convertAidlTwtRequestToLegacy(const TwtRequest aidl_twt_request, 225 legacy_hal::wifi_twt_request* legacy_twt_request); 226 IWifiStaIfaceEventCallback::TwtErrorCode convertLegacyHalTwtErrorCodeToAidl( 227 legacy_hal::wifi_twt_error_code legacy_error_code); 228 IWifiStaIfaceEventCallback::TwtTeardownReasonCode convertLegacyHalTwtReasonCodeToAidl( 229 legacy_hal::wifi_twt_teardown_reason_code legacy_reason_code); 230 bool convertLegacyHalTwtSessionToAidl(legacy_hal::wifi_twt_session twt_session, 231 TwtSession* aidl_twt_session); 232 bool convertLegacyHalTwtSessionStatsToAidl(legacy_hal::wifi_twt_session_stats twt_stats, 233 TwtSessionStats* aidl_twt_stats); 234 } // namespace aidl_struct_util 235 } // namespace wifi 236 } // namespace hardware 237 } // namespace android 238 } // namespace aidl 239 240 #endif // AIDL_STRUCT_UTIL_H_ 241