blob: 9b6ec5b567af9bced46c1e6113356aa2be076d91 [file] [log] [blame]
/*
* 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 ISupplicantIface;
import ISupplicantP2pIfaceCallback;
/**
* Interface exposed by the supplicant for each P2P mode network
* interface (e.g p2p0) it controls.
*/
interface ISupplicantP2pIface extends ISupplicantIface {
enum WpsProvisionMethod : uint32_t {
/**
* Push button method.
*/
PBC,
/**
* Display pin method configuration - pin is generated and displayed on
* device.
*/
DISPLAY,
/**
* Keypad pin method configuration - pin is entered on device.
*/
KEYPAD
};
/**
* Use to specify a range of frequencies.
* For example: 2412-2432,2462,5000-6000, etc.
*/
struct FreqRange {
uint32_t min;
uint32_t max;
};
/**
* Enum describing the modes of Miracast supported
* via driver commands.
*/
enum MiracastMode : uint8_t {
DISABLED = 0,
/**
* Operating as source.
*/
SOURCE = 1,
/**
* Operating as sink.
*/
SINK = 2
};
/**
* Register for callbacks from this interface.
*
* These callbacks are invoked for events that are specific to this interface.
* Registration of multiple callback objects is supported. These objects must
* be automatically deleted when the corresponding client process is dead or
* if this interface is removed.
*
* @param callback An instance of the |ISupplicantP2pIfaceCallback| HIDL
* interface object.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
registerCallback(ISupplicantP2pIfaceCallback callback)
generates (SupplicantStatus status);
/**
* Gets the MAC address of the device.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return deviceAddress MAC address of the device.
*/
getDeviceAddress()
generates (SupplicantStatus status, MacAddress deviceAddress);
/**
* Set the postfix to be used for P2P SSID's.
*
* @param postfix String to be appended to SSID.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setSsidPostfix(vec<uint8_t> postfix) generates (SupplicantStatus status);
/**
* Set the Maximum idle time in seconds for P2P groups.
* This value controls how long a P2P group is maintained after there
* is no other members in the group. As a group owner, this means no
* associated stations in the group. As a P2P client, this means no
* group owner seen in scan results.
*
* @param groupIfName Group interface name to use.
* @param timeoutInSec Timeout value in seconds.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setGroupIdle(string groupIfName, uint32_t timeoutInSec)
generates (SupplicantStatus status);
/**
* Turn on/off power save mode for the interface.
*
* @param groupIfName Group interface name to use.
* @param enable Indicate if power save is to be turned on/off.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|,
* |SupplicantStatusCode.FAILURE_IFACE_DISABLED|
*/
setPowerSave(string groupIfName, bool enable)
generates (SupplicantStatus status);
/**
* Initiate a P2P service discovery with an optional timeout.
*
* @param timeoutInSec Max time to be spent is peforming discovery.
* Set to 0 to indefinely continue discovery untill and explicit
* |stopFind| is sent.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* |SupplicantStatusCode.FAILURE_IFACE_DISABLED|
*/
find(uint32_t timeoutInSec) generates (SupplicantStatus status);
/**
* Stop an ongoing P2P service discovery.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* |SupplicantStatusCode.FAILURE_IFACE_DISABLED|
*/
stopFind() generates (SupplicantStatus status);
/**
* Flush P2P peer table and state.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
flush() generates (SupplicantStatus status);
/**
* Start P2P group formation with a discovered P2P peer. This includes
* optional group owner negotiation, group interface setup, provisioning,
* and establishing data connection.
*
* @param peerAddress MAC address of the device to connect to.
* @method provisionMethod Provisioning method to use.
* @param preSelectedPin Pin to be used, if |provisionMethod| uses one of the
* preselected |PIN*| methods.
* @param joinExistingGroup Indicates that this is a command to join an
* existing group as a client. It skips the group owner negotiation
* part. This must send a Provision Discovery Request message to the
* target group owner before associating for WPS provisioning.
* @param persistent Used to request a persistent group to be formed.
* @param goIntent Used to override the default Intent for this group owner
* negotiation (Values from 1-15). Refer to section 4.1.6 in
* Wi-Fi Peer-to-Peer (P2P) Technical Specification Version 1.7.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return generatedPin Pin generated, if |provisionMethod| uses one of the
* generated |PIN*| methods.
*/
connect(MacAddress peerAddress,
WpsProvisionMethod provisionMethod,
string preSelectedPin,
bool joinExistingGroup,
bool persistent,
uint32_t goIntent)
generates (SupplicantStatus status, string generatedPin);
/**
* Cancel an ongoing P2P group formation and joining-a-group related
* operation. This operation unauthorizes the specific peer device (if any
* had been authorized to start group formation), stops P2P find (if in
* progress), stops pending operations for join-a-group, and removes the
* P2P group interface (if one was used) that is in the WPS provisioning
* step. If the WPS provisioning step has been completed, the group is not
* terminated.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_NOT_STARTED|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
cancelConnect() generates (SupplicantStatus status);
/**
* Send P2P provision discovery request to the specified peer. The
* parameters for this command are the P2P device address of the peer and the
* desired configuration method.
*
* @param peerAddress MAC address of the device to send discovery.
* @method provisionMethod Provisioning method to use.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
provisionDiscovery(MacAddress peerAddress,
WpsProvisionMethod provisionMethod)
generates (SupplicantStatus status);
/**
* Set up a P2P group owner manually (i.e., without group owner
* negotiation with a specific peer). This is also known as autonomous
* group owner. Optional |persistentNetworkId| may be used to specify
* restart of a persistent group.
*
* @param persistent Used to request a persistent group to be formed.
* @param persistentNetworkId Used to specify the restart of a persistent
* group. Set to UINT32_MAX for a non-persistent group.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
addGroup(bool persistent, SupplicantNetworkId persistentNetworkId)
generates (SupplicantStatus status);
/**
* Terminate a P2P group. If a new virtual network interface was used for
* the group, it must also be removed. The network interface name of the
* group interface is used as a parameter for this command.
*
* @param groupIfName Group interface name to use.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
removeGroup(string groupIfName) generates (SupplicantStatus status);
/**
* Reject connection attempt from a peer (specified with a device
* address). This is a mechanism to reject a pending group owner negotiation
* with a peer and request to automatically block any further connection or
* discovery of the peer.
*
* @param peerAddress MAC address of the device to reject.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* |SupplicantStatusCode.FAILURE_IFACE_DISABLED|
*/
reject(MacAddress peerAddress) generates (SupplicantStatus status);
/**
* Invite a device to a persistent group.
* If the peer device is the group owner of the persistent group, the peer
* parameter is not needed. Otherwise it is used to specify which
* device to invite. |goDeviceAddress| parameter may be used to override
* the group owner device address for Invitation Request should it not be
* known for some reason (this should not be needed in most cases).
*
* @param groupIfName Group interface name to use.
* @param goDeviceAddress MAC address of the group owner device.
* @param peerAddress MAC address of the device to invite.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
invite(string groupIfName, MacAddress goDeviceAddress, MacAddress peerAddress)
generates (SupplicantStatus status);
/**
* Reinvoke a device from a persistent group.
*
* @param persistentNetworkId Used to specify the persistent group.
* @param peerAddress MAC address of the device to reinvoke.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
reinvoke(SupplicantNetworkId persistentNetworkId, MacAddress peerAddress)
generates (SupplicantStatus status);
/**
* Configure Extended Listen Timing.
*
* If enabled, listen state must be entered every |intervalInMillis| for at
* least |periodInMillis|. Both values have acceptable range of 1-65535
* (with interval obviously having to be larger than or equal to duration).
* If the P2P module is not idle at the time the Extended Listen Timing
* timeout occurs, the Listen State operation must be skipped.
*
* @param periodInMillis Period in milliseconds.
* @param intervalInMillis Interval in milliseconds.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_ARGS_INVALID|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
configureExtListen(uint32_t periodInMillis,
uint32_t intervalInMillis)
generates (SupplicantStatus status);
/**
* Set P2P Listen channel.
*
* When specifying a social channel on the 2.4 GHz band (1/6/11) there is no
* need to specify the operating class since it defaults to 81. When
* specifying a social channel on the 60 GHz band (2), specify the 60 GHz
* operating class (180).
*
* @param channel Wifi channel. eg, 1, 6, 11.
* @param operatingClass Operating Class indicates the channel set of the AP
* indicated by this BSSID
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setListenChannel(uint32_t channel, uint32_t operatingClass)
generates (SupplicantStatus status);
/**
* Set P2P disallowed frequency ranges.
*
* Specify ranges of frequencies that are disallowed for any p2p operations.
* @param ranges List of ranges which needs to be disallowed.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setDisallowedFrequencies(vec<FreqRange> ranges)
generates (SupplicantStatus status);
/**
* Gets the operational SSID of the device.
*
* @param peerAddress MAC address of the peer.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return ssid SSID of the device
*/
getSsid(MacAddress peerAddress)
generates (SupplicantStatus status, Ssid ssid);
/**
* Gets the capability of the group which the device is a
* member of.
*
* @param peerAddress MAC address of the peer.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return capabilityMask Combination of |P2pGroupCapabilityMask| values.
*/
getGroupCapability(MacAddress peerAddress)
generates (SupplicantStatus status,
bitfield<P2pGroupCapabilityMask> capabilities);
/**
* This command can be used to add a bonjour service.
*
* @param query Hex dump of the query data.
* @param return Hex dump of the response data.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
addBonjourService(vec<uint8_t> query, vec<uint8_t> response)
generates (SupplicantStatus status);
/**
* This command can be used to remove a bonjour service.
*
* @param query Hex dump of the query data.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_NOT_STARTED|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
removeBonjourService(vec<uint8_t> query) generates (SupplicantStatus status);
/**
* This command can be used to add a UPNP service.
*
* @param version Version to be used.
* @package serviceName Service name to be used.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
addUpnpService(uint32_t version, string serviceName)
generates (SupplicantStatus status);
/**
* This command can be used to remove a UPNP service.
*
* @param version Version to be used.
* @package serviceName Service name to be used.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_NOT_STARTED|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
removeUpnpService(uint32_t version, string serviceName)
generates (SupplicantStatus status);
/**
* This command can be used to flush all services from the
* device.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
flushServices() generates (SupplicantStatus status);
/**
* Schedule a P2P service discovery request. The parameters for this command
* are the device address of the peer device (or 00:00:00:00:00:00 for
* wildcard query that is sent to every discovered P2P peer that supports
* service discovery) and P2P Service Query TLV(s) as hexdump.
*
* @param peerAddress MAC address of the device to discover.
* @param query Hex dump of the query data.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return identifier Identifier for the request. Can be used to cancel the
* request.
*/
requestServiceDiscovery(MacAddress peerAddress, vec<uint8_t> query)
generates (SupplicantStatus status, uint64_t identifier);
/**
* Cancel a previous service discovery request.
*
* @return identifier Identifier for the request to cancel.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_NOT_STARTED|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
cancelServiceDiscovery(uint64_t identifier)
generates (SupplicantStatus status);
/**
* Send driver command to set Miracast mode.
*
* @param mode Mode of Miracast.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setMiracastMode(MiracastMode mode)
generates (SupplicantStatus status);
/**
* Initiate WPS Push Button setup.
* The PBC operation requires that a button is also pressed at the
* AP/Registrar at about the same time (2 minute window).
*
* @param groupIfName Group interface name to use.
* @param bssid BSSID of the AP. Use zero'ed bssid to indicate wildcard.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
startWpsPbc(string groupIfName, Bssid bssid)
generates (SupplicantStatus status);
/**
* Initiate WPS Pin Keypad setup.
*
* @param groupIfName Group interface name to use.
* @param pin 8 digit pin to be used.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
startWpsPinKeypad(string groupIfName, string pin)
generates (SupplicantStatus status);
/**
* Initiate WPS Pin Display setup.
*
* @param groupIfName Group interface name to use.
* @param bssid BSSID of the AP. Use zero'ed bssid to indicate wildcard.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return generatedPin 8 digit pin generated.
*/
startWpsPinDisplay(string groupIfName, Bssid bssid)
generates (SupplicantStatus status, string generatedPin);
/**
* Cancel any ongoing WPS operations.
*
* @param groupIfName Group interface name to use.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
cancelWps(string groupIfName) generates (SupplicantStatus status);
/**
* Enable/Disable Wifi Display.
*
* @param enable true to enable, false to disable.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
enableWfd(bool enable) generates (SupplicantStatus status);
/**
* Set Wifi Display device info.
*
* @param info WFD device info as described in section 5.1.2 of WFD technical
* specification v1.0.0.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
setWfdDeviceInfo(uint8_t[6] info) generates (SupplicantStatus status);
/**
* Creates a NFC handover request message.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return request Bytes representing the handover request as specified in
* section 3.1.1 of NFC Connection Handover 1.2 Technical
* Specification.
*/
createNfcHandoverRequestMessage()
generates (SupplicantStatus status, vec<uint8_t> request);
/**
* Creates a NFC handover select message.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
* @return select Bytes representing the handover select as specified in
* section 3.1.2 of NFC Connection Handover 1.2 Technical
* Specification.
*/
createNfcHandoverSelectMessage()
generates (SupplicantStatus status, vec<uint8_t> select);
/**
* Report the response of the NFC handover request.
*
* @param request Bytes representing the handover request as specified in
* section 3.1.1 of NFC Connection Handover 1.2 Technical
* Specification.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
reportNfcHandoverResponse(vec<uint8_t> request)
generates (SupplicantStatus status);
/**
* Report the initiation of the NFC handover select.
*
* @param select Bytes representing the handover select as specified in
* section 3.1.2 of NFC Connection Handover 1.2 Technical
* Specification.
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
reportNfcHandoverInitiation(vec<uint8_t> select)
generates (SupplicantStatus status);
/**
* Persist the current configuration to disk.
*
* @return status Status of the operation.
* Possible status codes:
* |SupplicantStatusCode.SUCCESS|,
* |SupplicantStatusCode.FAILURE_UNKNOWN|,
* |SupplicantStatusCode.FAILURE_IFACE_INVALID|
*/
saveConfig() generates (SupplicantStatus status);
};