Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01f08770 authored by Roshan Pius's avatar Roshan Pius
Browse files

wifi(implementation): WifiLegacyHal interface for radio mode change

Bug: 68349158
Test: Compiles
Change-Id: I46da8902021ad1e63511eabe25027ee47a52ee03
parent 1ce92cfb
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -148,6 +148,17 @@ void onAsyncErrorAlert(wifi_request_id id, char* buffer, int buffer_size,
    }
}

// Callback to be invoked for radio mode change indication.
std::function<void(wifi_request_id, uint32_t, wifi_mac_info*)>
    on_radio_mode_change_internal_callback;
void onAsyncRadioModeChange(wifi_request_id id, uint32_t num_macs,
                            wifi_mac_info* mac_infos) {
    const auto lock = hidl_sync_util::acquireGlobalLock();
    if (on_radio_mode_change_internal_callback) {
        on_radio_mode_change_internal_callback(id, num_macs, mac_infos);
    }
}

// Callback to be invoked for rtt results results.
std::function<void(wifi_request_id, unsigned num_results,
                   wifi_rtt_result* rtt_results[])>
@@ -937,6 +948,41 @@ wifi_error WifiLegacyHal::deregisterErrorAlertCallbackHandler(
        0, getIfaceHandle(iface_name));
}

wifi_error WifiLegacyHal::registerRadioModeChangeCallbackHandler(
    const std::string& iface_name,
    const on_radio_mode_change_callback& on_user_change_callback) {
    if (on_radio_mode_change_internal_callback) {
        return WIFI_ERROR_NOT_AVAILABLE;
    }
    on_radio_mode_change_internal_callback = [on_user_change_callback](
                                                 wifi_request_id /* id */,
                                                 uint32_t num_macs,
                                                 wifi_mac_info* mac_infos_arr) {
        if (num_macs > 0 && mac_infos_arr) {
            std::vector<WifiMacInfo> mac_infos_vec;
            for (uint32_t i = 0; i < num_macs; i++) {
                WifiMacInfo mac_info;
                mac_info.wlan_mac_id = mac_infos_arr[i].wlan_mac_id;
                mac_info.mac_band = mac_infos_arr[i].mac_band;
                for (int32_t j = 0; j < mac_infos_arr[i].num_iface; j++) {
                    WifiIfaceInfo iface_info;
                    iface_info.name = mac_infos_arr[i].iface_info[j].iface_name;
                    iface_info.channel = mac_infos_arr[i].iface_info[j].channel;
                    mac_info.iface_infos.push_back(iface_info);
                }
                mac_infos_vec.push_back(mac_info);
            }
            on_user_change_callback(mac_infos_vec);
        }
    };
    wifi_error status = global_func_table_.wifi_set_radio_mode_change_handler(
        0, getIfaceHandle(iface_name), {onAsyncRadioModeChange});
    if (status != WIFI_SUCCESS) {
        on_radio_mode_change_internal_callback = nullptr;
    }
    return status;
}

wifi_error WifiLegacyHal::startRttRangeRequest(
    const std::string& iface_name, wifi_request_id id,
    const std::vector<wifi_rtt_config>& rtt_configs,
@@ -1324,6 +1370,7 @@ void WifiLegacyHal::invalidate() {
    on_rssi_threshold_breached_internal_callback = nullptr;
    on_ring_buffer_data_internal_callback = nullptr;
    on_error_alert_internal_callback = nullptr;
    on_radio_mode_change_internal_callback = nullptr;
    on_rtt_results_internal_callback = nullptr;
    on_nan_notify_response_user_callback = nullptr;
    on_nan_event_publish_terminated_user_callback = nullptr;
+24 −0
Original line number Diff line number Diff line
@@ -132,6 +132,26 @@ using on_ring_buffer_data_callback =
// Callback for alerts.
using on_error_alert_callback =
    std::function<void(int32_t, const std::vector<uint8_t>&)>;

// Struct for the mac info from the legacy HAL. This is a cleaner version
// of the |wifi_mac_info| & |wifi_iface_info|.
typedef struct {
    std::string name;
    wifi_channel channel;
} WifiIfaceInfo;

typedef struct {
    uint32_t wlan_mac_id;
    /* BIT MASK of BIT(WLAN_MAC*) as represented by wlan_mac_band */
    uint32_t mac_band;
    /* Represents the connected Wi-Fi interfaces associated with each MAC */
    std::vector<WifiIfaceInfo> iface_infos;
} WifiMacInfo;

// Callback for radio mode change
using on_radio_mode_change_callback =
    std::function<void(const std::vector<WifiMacInfo>&)>;

/**
 * Class that encapsulates all legacy HAL interactions.
 * This class manages the lifetime of the event loop thread used by legacy HAL.
@@ -253,6 +273,10 @@ class WifiLegacyHal {
        const on_error_alert_callback& on_alert_callback);
    wifi_error deregisterErrorAlertCallbackHandler(
        const std::string& iface_name);
    // Radio mode functions.
    wifi_error registerRadioModeChangeCallbackHandler(
        const std::string& iface_name,
        const on_radio_mode_change_callback& on_user_change_callback);
    // RTT functions.
    wifi_error startRttRangeRequest(
        const std::string& iface_name, wifi_request_id id,
+1 −0
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ bool initHalFuncTableWithStubs(wifi_hal_fn* hal_fn) {
    populateStubFor(&hal_fn->wifi_configure_roaming);
    populateStubFor(&hal_fn->wifi_select_tx_power_scenario);
    populateStubFor(&hal_fn->wifi_reset_tx_power_scenario);
    populateStubFor(&hal_fn->wifi_set_radio_mode_change_handler);
    return true;
}
}  // namespace legacy_hal