[AWARE] Support a mix of 1.0 and 1.2 Callback registration

Allow clients to register both 1.0 and 1.2 callback objects. Only
execute the new callbacks for 1.2 callback objects.

Purpose: allow 1.0 VTS tests to run as-is.

Bug: 71581915
Test: atest VtsHalWifiNanV1_0TargetTest
Test: act.py -c <path>/wifi_aware.json -tc ThroughputTest:test_iperf_single_ndp_aware_only_ib
Change-Id: I1e049498a0eaa176a6074c552b1a3c6f23d18fd0
diff --git a/wifi/1.2/default/wifi_nan_iface.cpp b/wifi/1.2/default/wifi_nan_iface.cpp
index 535e3d3..566d36e 100644
--- a/wifi/1.2/default/wifi_nan_iface.cpp
+++ b/wifi/1.2/default/wifi_nan_iface.cpp
@@ -427,7 +427,8 @@
                 return;
             }
 
-            for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
+            for (const auto& callback :
+                 shared_ptr_this->getEventCallbacks_1_2()) {
                 if (!callback->eventDataPathConfirm_1_2(hidl_struct).isOk()) {
                     LOG(ERROR) << "Failed to invoke the callback";
                 }
@@ -483,7 +484,7 @@
             return;
         }
 
-        for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
+        for (const auto& callback : shared_ptr_this->getEventCallbacks_1_2()) {
             if (!callback->eventDataPathScheduleUpdate(hidl_struct).isOk()) {
                 LOG(ERROR) << "Failed to invoke the callback";
             }
@@ -507,6 +508,7 @@
 
     legacy_hal_.reset();
     event_cb_handler_.invalidate();
+    event_cb_handler_1_2_.invalidate();
     is_valid_ = false;
 }
 
@@ -514,10 +516,16 @@
 
 std::string WifiNanIface::getName() { return ifname_; }
 
-std::set<sp<IWifiNanIfaceEventCallback>> WifiNanIface::getEventCallbacks() {
+std::set<sp<V1_0::IWifiNanIfaceEventCallback>>
+WifiNanIface::getEventCallbacks() {
     return event_cb_handler_.getCallbacks();
 }
 
+std::set<sp<V1_2::IWifiNanIfaceEventCallback>>
+WifiNanIface::getEventCallbacks_1_2() {
+    return event_cb_handler_1_2_.getCallbacks();
+}
+
 Return<void> WifiNanIface::getName(getName_cb hidl_status_cb) {
     return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
                            &WifiNanIface::getNameInternal, hidl_status_cb);
@@ -681,8 +689,11 @@
 }
 
 WifiStatus WifiNanIface::registerEventCallbackInternal(
-    const sp<V1_0::IWifiNanIfaceEventCallback>& /*callback*/) {
-    return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED);
+    const sp<V1_0::IWifiNanIfaceEventCallback>& callback) {
+    if (!event_cb_handler_.addCallback(callback)) {
+        return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+    }
+    return createWifiStatus(WifiStatusCode::SUCCESS);
 }
 
 WifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t cmd_id) {
@@ -808,8 +819,12 @@
 }
 
 WifiStatus WifiNanIface::registerEventCallback_1_2Internal(
-    const sp<IWifiNanIfaceEventCallback>& callback) {
-    if (!event_cb_handler_.addCallback(callback)) {
+    const sp<V1_2::IWifiNanIfaceEventCallback>& callback) {
+    sp<V1_0::IWifiNanIfaceEventCallback> callback_1_0 = callback;
+    if (!event_cb_handler_.addCallback(callback_1_0)) {
+        return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
+    }
+    if (!event_cb_handler_1_2_.addCallback(callback)) {
         return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
     }
     return createWifiStatus(WifiStatusCode::SUCCESS);