1 /* 2 * Copyright (C) 2024 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 package com.android.server.wifi.usd; 18 19 import android.net.MacAddress; 20 import android.net.wifi.usd.PublishConfig; 21 import android.net.wifi.usd.PublishSessionCallback; 22 import android.net.wifi.usd.SessionCallback; 23 import android.net.wifi.usd.SubscribeConfig; 24 import android.net.wifi.usd.SubscribeSessionCallback; 25 26 import com.android.server.wifi.SupplicantStaIfaceHal; 27 import com.android.server.wifi.WifiNative; 28 29 import java.util.concurrent.Executor; 30 31 /** 32 * Manages the interface to the HAL. 33 */ 34 public class UsdNativeManager { 35 private final WifiNative mWifiNative; 36 37 /** 38 * USD Events from HAL. 39 */ 40 public interface UsdEventsCallback { 41 /** 42 * Called when publisher is started. 43 */ onUsdPublishStarted(int cmdId, int publishId)44 void onUsdPublishStarted(int cmdId, int publishId); 45 46 /** 47 * Called when subscribe is started. 48 */ onUsdSubscribeStarted(int cmdId, int subscribeId)49 void onUsdSubscribeStarted(int cmdId, int subscribeId); 50 51 /** 52 * Called when publisher is failed to start. 53 */ onUsdPublishConfigFailed(int cmdId, @SessionCallback.FailureCode int errorCode)54 void onUsdPublishConfigFailed(int cmdId, @SessionCallback.FailureCode int errorCode); 55 56 /** 57 * Called when subscriber is failed to start. 58 */ onUsdSubscribeConfigFailed(int cmdId, @SessionCallback.FailureCode int errorCode)59 void onUsdSubscribeConfigFailed(int cmdId, @SessionCallback.FailureCode int errorCode); 60 61 /** 62 * Called when publish session is terminated. 63 */ onUsdPublishTerminated(int publishId, @SessionCallback.TerminationReasonCode int reasonCode)64 void onUsdPublishTerminated(int publishId, 65 @SessionCallback.TerminationReasonCode int reasonCode); 66 67 /** 68 * Called when subscribe session is terminated. 69 */ onUsdSubscribeTerminated(int subscribeId, @SessionCallback.TerminationReasonCode int reasonCode)70 void onUsdSubscribeTerminated(int subscribeId, 71 @SessionCallback.TerminationReasonCode int reasonCode); 72 73 /** 74 * Called for each Publish replied event. 75 */ onUsdPublishReplied( UsdRequestManager.UsdHalDiscoveryInfo usdHalDiscoveryInfo)76 void onUsdPublishReplied( 77 UsdRequestManager.UsdHalDiscoveryInfo usdHalDiscoveryInfo); 78 79 /** 80 * Called when the subscriber discovers publisher. 81 */ onUsdServiceDiscovered( UsdRequestManager.UsdHalDiscoveryInfo usdHalDiscoveryInfo)82 void onUsdServiceDiscovered( 83 UsdRequestManager.UsdHalDiscoveryInfo usdHalDiscoveryInfo); 84 85 /** 86 * Called when a message is received. 87 */ onUsdMessageReceived(int ownId, int peerId, MacAddress peerMacAddress, byte[] message)88 void onUsdMessageReceived(int ownId, int peerId, MacAddress peerMacAddress, 89 byte[] message); 90 } 91 92 /** 93 * Constructor 94 */ UsdNativeManager(WifiNative wifiNative)95 public UsdNativeManager(WifiNative wifiNative) { 96 mWifiNative = wifiNative; 97 } 98 99 /** 100 * Register USD events. 101 */ registerUsdEventsCallback( UsdRequestManager.UsdNativeEventsCallback usdNativeEventsCallback)102 public void registerUsdEventsCallback( 103 UsdRequestManager.UsdNativeEventsCallback usdNativeEventsCallback) { 104 mWifiNative.registerUsdEventsCallback(usdNativeEventsCallback); 105 } 106 107 /** 108 * Gets USD capabilities. 109 */ getUsdCapabilities()110 public SupplicantStaIfaceHal.UsdCapabilitiesInternal getUsdCapabilities() { 111 return mWifiNative.getUsdCapabilities(); 112 } 113 114 /** 115 * See {@link android.net.wifi.usd.UsdManager#publish(PublishConfig, Executor, 116 * PublishSessionCallback)} 117 */ publish(String interfaceName, int cmdId, PublishConfig publishConfig)118 public boolean publish(String interfaceName, int cmdId, PublishConfig publishConfig) { 119 return mWifiNative.startUsdPublish(interfaceName, cmdId, publishConfig); 120 } 121 122 /** 123 * See {@link android.net.wifi.usd.UsdManager#subscribe(SubscribeConfig, Executor, 124 * SubscribeSessionCallback)} 125 */ subscribe(String interfaceName, int cmdId, SubscribeConfig subscribeConfig)126 public boolean subscribe(String interfaceName, int cmdId, SubscribeConfig subscribeConfig) { 127 return mWifiNative.startUsdSubscribe(interfaceName, cmdId, subscribeConfig); 128 } 129 130 /** 131 * Update publish. 132 */ updatePublish(String interfaceName, int publishId, byte[] ssi)133 public void updatePublish(String interfaceName, int publishId, byte[] ssi) { 134 mWifiNative.updateUsdPublish(interfaceName, publishId, ssi); 135 } 136 137 /** 138 * Cancels publish session identified by publishId. 139 */ cancelPublish(String interfaceName, int publishId)140 public void cancelPublish(String interfaceName, int publishId) { 141 mWifiNative.cancelUsdPublish(interfaceName, publishId); 142 } 143 144 /** 145 * Cancels subscribe identified by subscribeId 146 */ cancelSubscribe(String interfaceName, int subscribeId)147 public void cancelSubscribe(String interfaceName, int subscribeId) { 148 mWifiNative.cancelUsdSubscribe(interfaceName, subscribeId); 149 } 150 151 /** 152 * Send a message to the peer identified by the peerId and the peerMacAddress. 153 */ sendMessage(String interfaceName, int ownId, int peerId, MacAddress peerMacAddress, byte[] message)154 public boolean sendMessage(String interfaceName, int ownId, int peerId, 155 MacAddress peerMacAddress, byte[] message) { 156 return mWifiNative.sendUsdMessage(interfaceName, ownId, peerId, peerMacAddress, message); 157 } 158 } 159