1/*
2 * Copyright 2016 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
17package android.hardware.wifi.supplicant@1.0;
18
19/**
20 * Callback Interface exposed by the supplicant service
21 * for each P2P mode interface (ISupplicantP2pIface).
22 *
23 * Clients need to host an instance of this HIDL interface object and
24 * pass a reference of the object to the supplicant via the
25 * corresponding |ISupplicantP2pIface.registerCallback| method.
26 */
27interface ISupplicantP2pIfaceCallback {
28  /**
29   * WPS Device Password ID
30   */
31  enum WpsDevPasswordId : uint16_t {
32    DEFAULT = 0x0000,
33    USER_SPECIFIED = 0x0001,
34    MACHINE_SPECIFIED = 0x0002,
35    REKEY = 0x0003,
36    PUSHBUTTON = 0x0004,
37    REGISTRAR_SPECIFIED = 0x0005,
38    NFC_CONNECTION_HANDOVER = 0x0007,
39    P2PS_DEFAULT = 0x0008
40  };
41
42  /**
43   * Status codes for P2P operations.
44   */
45  enum P2pStatusCode : uint32_t {
46    SUCCESS = 0,
47    FAIL_INFO_CURRENTLY_UNAVAILABLE = 1,
48    FAIL_INCOMPATIBLE_PARAMS = 2,
49    FAIL_LIMIT_REACHED = 3,
50    FAIL_INVALID_PARAMS = 4,
51    FAIL_UNABLE_TO_ACCOMMODATE = 5,
52    FAIL_PREV_PROTOCOL_ERROR = 6,
53    FAIL_NO_COMMON_CHANNELS = 7,
54    FAIL_UNKNOWN_GROUP = 8,
55    FAIL_BOTH_GO_INTENT_15 = 9,
56    FAIL_INCOMPATIBLE_PROV_METHOD = 10,
57    FAIL_REJECTED_BY_USER = 11,
58    SUCCESS_DEFERRED = 12,
59  };
60
61  /**
62   * Status codes for P2P discovery.
63   */
64  enum P2pProvDiscStatusCode : uint8_t {
65    SUCCESS = 0,
66    TIMEOUT = 1,
67    REJECTED = 2,
68    TIMEOUT_JOIN = 3,
69    INFO_UNAVAILABLE = 4
70  };
71
72  /**
73   * Used to indicate that a new network has been added.
74   *
75   * @param id Network ID allocated to the corresponding network.
76   */
77  oneway onNetworkAdded(SupplicantNetworkId id);
78
79  /**
80   * Used to indicate that a network has been removed.
81   *
82   * @param id Network ID allocated to the corresponding network.
83   */
84  oneway onNetworkRemoved(SupplicantNetworkId id);
85
86  /**
87   * Used to indicate that a P2P device has been found.
88   *
89   * @param srcAddress MAC address of the device found. This must either
90   *        be the P2P device address or the P2P interface address.
91   * @param p2pDeviceAddress P2P device address.
92   * @param primaryDeviceType Type of device. Refer to section B.1 of Wifi P2P
93   *        Technical specification v1.2.
94   * @param deviceName Name of the device.
95   * @param configMethods Mask of WPS configuration methods supported by the
96   *        device.
97   * @param deviceCapabilities Refer to section 4.1.4 of Wifi P2P Technical
98   *        specification v1.2.
99   * @param groupCapabilites Refer to section 4.1.4 of Wifi P2P Technical
100   *        specification v1.2.
101   * @param wfdDeviceInfo WFD device info as described in section 5.1.2 of WFD
102   *        technical specification v1.0.0.
103   */
104  oneway onDeviceFound(
105      MacAddress srcAddress, MacAddress p2pDeviceAddress,
106      uint8_t[8] primaryDeviceType, string deviceName,
107      bitfield<WpsConfigMethods> configMethods, uint8_t deviceCapabilities,
108      bitfield<P2pGroupCapabilityMask> groupCapabilities, uint8_t[6] wfdDeviceInfo);
109
110  /**
111   * Used to indicate that a P2P device has been lost.
112   *
113   * @param p2pDeviceAddress P2P device address.
114   */
115  oneway onDeviceLost(MacAddress p2pDeviceAddress);
116
117  /**
118   * Used to indicate the termination of P2P find operation.
119   */
120  oneway onFindStopped();
121
122  /**
123   * Used to indicate the reception of a P2P Group Owner negotiation request.
124   *
125   * @param srcAddress MAC address of the device that initiated the GO
126   *        negotiation request.
127   * @param passwordId Type of password.
128   */
129  oneway onGoNegotiationRequest(
130      MacAddress srcAddress, WpsDevPasswordId passwordId);
131
132  /**
133   * Used to indicate the completion of a P2P Group Owner negotiation request.
134   *
135   * @param status Status of the GO negotiation.
136   */
137  oneway onGoNegotiationCompleted(P2pStatusCode status);
138
139  /**
140   * Used to indicate a successful formation of a P2P group.
141   */
142  oneway onGroupFormationSuccess();
143
144  /**
145   * Used to indicate a failure to form a P2P group.
146   *
147   * @param failureReason Failure reason string for debug purposes.
148   */
149  oneway onGroupFormationFailure(string failureReason);
150
151  /**
152   * Used to indicate the start of a P2P group.
153   *
154   * @param groupIfName Interface name of the group. (For ex: p2p-p2p0-1)
155   * @param isGo Whether this device is owner of the group.
156   * @param ssid SSID of the group.
157   * @param frequency Frequency on which this group is created.
158   * @param psk PSK used to secure the group.
159   * @param passphrase PSK passphrase used to secure the group.
160   * @param goDeviceAddress MAC Address of the owner of this group.
161   * @param isPersistent Whether this group is persisted or not.
162   */
163  oneway onGroupStarted(
164      string groupIfname, bool isGo, Ssid ssid, uint32_t frequency,
165      uint8_t[32] psk, string passphrase, MacAddress goDeviceAddress,
166      bool isPersistent);
167
168  /**
169   * Used to indicate the removal of a P2P group.
170   *
171   * @param groupIfName Interface name of the group. (For ex: p2p-p2p0-1)
172   * @param isGo Whether this device is owner of the group.
173   */
174  oneway onGroupRemoved(string groupIfname, bool isGo);
175
176  /**
177   * Used to indicate the reception of a P2P invitation.
178   *
179   * @param srcAddress MAC address of the device that sent the invitation.
180   * @param goDeviceAddress MAC Address of the owner of this group.
181   * @param Bssid Bssid of the group.
182   * @param persistentNetworkId Persistent network Id of the group.
183   * @param operatingFrequency Frequency on which the invitation was received.
184   */
185  oneway onInvitationReceived(
186      MacAddress srcAddress, MacAddress goDeviceAddress, Bssid bssid,
187      SupplicantNetworkId persistentNetworkId, uint32_t operatingFrequency);
188
189  /**
190   * Used to indicate the result of the P2P invitation request.
191   *
192   * @param Bssid Bssid of the group.
193   * @param status Status of the invitation.
194   */
195  oneway onInvitationResult(Bssid bssid, P2pStatusCode status);
196
197  /**
198   * Used to indicate the completion of a P2P provision discovery request.
199   *
200   * @param p2pDeviceAddress P2P device address.
201   * @param isRequest Whether we received or sent the provision discovery.
202   * @param status Status of the provision discovery.
203   * @param configMethods Mask of WPS configuration methods supported.
204   * @param generatedPin 8 digit pin generated.
205   */
206  oneway onProvisionDiscoveryCompleted(
207      MacAddress p2pDeviceAddress, bool isRequest, P2pProvDiscStatusCode status,
208      bitfield<WpsConfigMethods> configMethods, string generatedPin);
209
210  /**
211   * Used to indicate the reception of a P2P service discovery response.
212   *
213   * @param srcAddress MAC address of the device that sent the service discovery.
214   * @param updateIndicator Service update indicator. Refer to section 3.1.3 of
215   *        Wifi P2P Technical specification v1.2.
216   * @parm tlvs Refer to section 3.1.3.1 of Wifi P2P Technical specification v1.2.
217   */
218  oneway onServiceDiscoveryResponse(
219      MacAddress srcAddress, uint16_t updateIndicator, vec<uint8_t> tlvs);
220
221  /**
222   * Used to indicate when a STA device is connected to this device.
223   *
224   * @param srcAddress MAC address of the device that was authorized.
225   * @param p2pDeviceAddress P2P device address.
226   */
227  oneway onStaAuthorized(MacAddress srcAddress, MacAddress p2pDeviceAddress);
228
229  /**
230   * Used to indicate when a STA device is disconnected from this device.
231   *
232   * @param srcAddress MAC address of the device that was deauthorized.
233   * @param p2pDeviceAddress P2P device address.
234   */
235  oneway onStaDeauthorized(MacAddress srcAddress, MacAddress p2pDeviceAddress);
236};
237