/*
 * 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;
/**
 * Enum values indicating the status of any supplicant operation.
 */
enum SupplicantStatusCode : uint32_t {
  /** No errors. */
  SUCCESS,
  /** Unknown failure occured. */
  FAILURE_UNKNOWN,
  /** One of the incoming args is invalid. */
  FAILURE_ARGS_INVALID,
  /** |ISupplicantIface| HIDL interface object is no longer valid. */
  FAILURE_IFACE_INVALID,
  /** Iface with the provided name does not exist. */
  FAILURE_IFACE_UNKNOWN,
  /** Iface with the provided name already exists. */
  FAILURE_IFACE_EXISTS,
  /** Iface is disabled and cannot be used. */
  FAILURE_IFACE_DISABLED,
  /** Iface is not currently disconnected, so cannot reconnect. */
  FAILURE_IFACE_NOT_DISCONNECTED,
  /** |ISupplicantNetwork| HIDL interface object is no longer valid. */
  FAILURE_NETWORK_INVALID,
  /** Network with the provided id does not exist. */
  FAILURE_NETWORK_UNKNOWN
};

/**
 * Generic structure to return the status of any supplicant operation.
 */
struct SupplicantStatus {
  SupplicantStatusCode code;
  /**
   * A vendor specific error message to provide more information beyond the
   * status code.
   * This will be used for debbuging purposes only.
   */
  string debugMessage;
};

/** SSID type. Max of 32 octets representing service identifier of a network. */
typedef vec<uint8_t> Ssid;

/** MAC Address type. 6 octets representing physical address of a device. */
typedef uint8_t[6] MacAddress;

/** BSSID type. 6 octets representing the physical address of an AP. */
typedef MacAddress Bssid;

/** Supplicant network ID type. */
typedef uint32_t SupplicantNetworkId;

/**
 * List of Iface types supported.
 */
enum IfaceType : uint32_t {
  STA,
  P2P
};

/**
 * P2P group capability.
 */
enum P2pGroupCapabilityMask : uint32_t {
  GROUP_OWNER = 1 << 0,
  PERSISTENT_GROUP = 1 << 1,
  GROUP_LIMIT = 1 << 2,
  INTRA_BSS_DIST = 1 << 3,
  CROSS_CONN = 1 << 4,
  PERSISTENT_RECONN = 1 << 5,
  GROUP_FORMATION = 1 << 6
};

/**
 * WPS config methods.
 * Refer to section 3 of IBSS with Wi-Fi Protected Setup
 * Technical Specification Version 1.0.0.
 */
enum WpsConfigMethods : uint16_t {
  USBA = 0x0001,
  ETHERNET = 0x0002,
  LABEL = 0x0004,
  DISPLAY = 0x0008,
  EXT_NFC_TOKEN = 0x0010,
  INT_NFC_TOKEN = 0x0020,
  NFC_INTERFACE = 0x0040,
  PUSHBUTTON = 0x0080,
  KEYPAD = 0x0100,
  VIRT_PUSHBUTTON = 0x0280,
  PHY_PUSHBUTTON = 0x0480,
  P2PS = 0x1000,
  VIRT_DISPLAY = 0x2008,
  PHY_DISPLAY = 0x4008
};
