/*
 * Copyright 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.hardware.wifi.supplicant@1.0;

import ISupplicantNetwork;
import ISupplicantP2pNetworkCallback;

/**
 * Interface exposed by the supplicant for each P2P mode network
 * configuration it controls.
 */
interface ISupplicantP2pNetwork extends ISupplicantNetwork {
  /**
   * Register for callbacks from this network.
   *
   * These callbacks are invoked for events that are specific to this network.
   * Registration of multiple callback objects is supported. These objects must
   * be automatically deleted when the corresponding client process is dead or
   * if this network is removed.
   *
   * @param callback An instance of the |ISupplicantP2pNetworkCallback| HIDL
   *        interface object.
   * @return status P2ptus of the operation.
   *         Possible status codes:
   *         |SupplicantP2ptusCode.SUCCESS|,
   *         |SupplicantP2ptusCode.FAILURE_UNKNOWN|,
   *         |SupplicantP2ptusCode.FAILURE_NETWORK_INVALID|
   */
  registerCallback(ISupplicantP2pNetworkCallback callback)
      generates (SupplicantStatus status);

  /**
   * Getters for the various network params.
   */
  /**
   * Get SSID for this network.
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return ssid value set.
   */
  getSsid() generates (SupplicantStatus status, Ssid ssid);

  /**
   * Get the BSSID set for this network.
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return bssid value set.
   */
  getBssid() generates (SupplicantStatus status, Bssid bssid);

  /**
   * Check if the network is currently active one.
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return isCurrent true if current, false otherwise.
   */
  isCurrent() generates (SupplicantStatus status, bool isCurrent);

  /**
   * Check if the network is marked persistent.
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return isPersistent true if persistent, false otherwise.
   */
  isPersistent() generates (SupplicantStatus status, bool isPersistent);

  /**
   * Check if the device is the group owner of the network.
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return isGo true if group owner, false otherwise.
   */
  isGo() generates (SupplicantStatus status, bool isGo);

  /**
   * Set the list of P2P Clients in a persistent group (GO).
   * This is a list of P2P Clients (P2P Device Address) that have joined
   * the persistent group. This is maintained on the GO for persistent
   * group entries (disabled == 2).
   *
   * @param clients MAC address of the clients.
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantP2ptusCode.FAILURE_UNKNOWN|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   */
  setClientList(vec<MacAddress> clients) generates (SupplicantStatus status);

  /**
   * Get the list of P2P Clients in a persistent group (GO).
   * This is a list of P2P Clients (P2P Device Address) that have joined
   * the persistent group. This is maintained on the GO for persistent
   * group entries (disabled == 2).
   *
   * @return status Status of the operation.
   *         Possible status codes:
   *         |SupplicantStatusCode.SUCCESS|,
   *         |SupplicantP2ptusCode.FAILURE_UNKNOWN|,
   *         |SupplicantStatusCode.FAILURE_NETWORK_INVALID|
   * @return clients MAC address of the clients.
   */
  getClientList() generates (SupplicantStatus status, vec<MacAddress> clients);
};
