2 * Copyright 2016 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package android.hardware.wifi@1.0;
19 import IWifiChipEventCallback;
25 import IWifiRttController;
28 * Interface that represents a chip that must be configured as a single unit.
29 * The HAL/driver/firmware will be responsible for determining which phy is used
30 * to perform operations like NAN, RTT, etc.
34 * Set of interface types with the maximum number of interfaces that can have
35 * one of the specified type for a given ChipIfaceCombination. See
36 * ChipIfaceCombination for examples.
38 struct ChipIfaceCombinationLimit {
39 vec<IfaceType> types; // Each IfaceType must occur at most once.
44 * Set of interfaces that can operate concurrently when in a given mode. See
49 * At most two STA interfaces are supported
50 * [], [STA], [STA+STA]
52 * [{STA} <= 1, {NAN} <= 1, {AP} <= 1]
53 * Any combination of STA, NAN, AP
54 * [], [STA], [NAN], [AP], [STA+NAN], [STA+AP], [NAN+AP], [STA+NAN+AP]
56 * [{STA} <= 1, {NAN,P2P} <= 1]
57 * Optionally a STA and either NAN or P2P
58 * [], [STA], [STA+NAN], [STA+P2P], [NAN], [P2P]
59 * Not included [NAN+P2P], [STA+NAN+P2P]
61 * [{STA} <= 1, {STA,NAN} <= 1]
62 * Optionally a STA and either a second STA or a NAN
63 * [], [STA], [STA+NAN], [STA+STA], [NAN]
64 * Not included [STA+STA+NAN]
66 struct ChipIfaceCombination {
67 vec<ChipIfaceCombinationLimit> limits;
71 * A mode that the chip can be put in. A mode defines a set of constraints on
72 * the interfaces that can exist while in that mode. Modes define a unit of
73 * configuration where all interfaces must be torn down to switch to a
74 * different mode. Some HALs may only have a single mode, but an example where
75 * multiple modes would be required is if a chip has different firmwares with
76 * different capabilities.
78 * When in a mode, it must be possible to perform any combination of creating
79 * and removing interfaces as long as at least one of the
80 * ChipIfaceCombinations is satisfied. This means that if a chip has two
81 * available combinations, [{STA} <= 1] and [{AP} <= 1] then it is expected
82 * that exactly one STA interface or one AP interface can be created, but it
83 * is not expected that both a STA and AP interface could be created. If it
84 * was then there would be a single available combination
85 * [{STA} <=1, {AP} <= 1].
87 * When switching between two available combinations it is expected that
88 * interfaces only supported by the initial combination must be removed until
89 * the target combination is also satisfied. At that point new interfaces
90 * satisfying only the target combination can be added (meaning the initial
91 * combination limits will no longer satisfied). The addition of these new
92 * interfaces must not impact the existence of interfaces that satisfy both
95 * For example, a chip with available combinations:
96 * [{STA} <= 2, {NAN} <=1] and [{STA} <=1, {NAN} <= 1, {AP} <= 1}]
97 * If the chip currently has 3 interfaces STA, STA and NAN and wants to add an
98 * AP interface in place of one of the STAs then first one of the STA
99 * interfaces must be removed and then the AP interface can be created after
100 * the STA had been torn down. During this process the remaining STA and NAN
101 * interfaces must not be removed/recreated.
103 * If a chip does not support this kind of reconfiguration in this mode then
104 * the combinations must be separated into two separate modes. Before
105 * switching modes all interfaces must be torn down, the mode switch must be
106 * enacted and when it completes the new interfaces must be brought up.
110 * Id that can be used to put the chip in this mode.
115 * A list of the possible interface combinations that the chip can have
116 * while in this mode.
118 vec<ChipIfaceCombination> availableCombinations;
122 * Information about the version of the driver and firmware running this chip.
124 * The information in these ASCII strings are vendor specific and does not
125 * need to follow any particular format. It may be dumped as part of the bug
128 struct ChipDebugInfo {
129 string driverDescription;
130 string firmwareDescription;
134 * Capabilities exposed by this chip.
136 enum ChipCapabilityMask : uint32_t {
138 * Memory dump of Firmware.
140 DEBUG_MEMORY_FIRMWARE_DUMP = 1 << 0,
142 * Memory dump of Driver.
144 DEBUG_MEMORY_DRIVER_DUMP = 1 << 1,
146 * Connectivity events reported via debug ring buffer.
148 DEBUG_RING_BUFFER_CONNECT_EVENT = 1 << 2,
150 * Power events reported via debug ring buffer.
152 DEBUG_RING_BUFFER_POWER_EVENT = 1 << 3,
154 * Wakelock events reported via debug ring buffer.
156 DEBUG_RING_BUFFER_WAKELOCK_EVENT = 1 << 4,
158 * Vendor data reported via debug ring buffer.
159 * This mostly contains firmware event logs.
161 DEBUG_RING_BUFFER_VENDOR_DATA = 1 << 5,
163 * Host wake reasons stats collection.
165 DEBUG_HOST_WAKE_REASON_STATS = 1 << 6,
169 DEBUG_ERROR_ALERTS = 1 << 7
173 * Get the id assigned to this chip.
175 * @return status WifiStatus of the operation.
176 * Possible status codes:
177 * |WifiStatusCode.SUCCESS|,
178 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
179 * @return id Assigned chip Id.
181 getId() generates (WifiStatus status, ChipId id);
184 * Requests notifications of significant events on this chip. Multiple calls
185 * to this must register multiple callbacks each of which must receive all
188 * @param callback An instance of the |IWifiChipEventCallback| HIDL interface
190 * @return status WifiStatus of the operation.
191 * Possible status codes:
192 * |WifiStatusCode.SUCCESS|,
193 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
195 registerEventCallback(IWifiChipEventCallback callback) generates (WifiStatus status);
198 * Get the capabilities supported by this chip.
200 * @return status WifiStatus of the operation.
201 * Possible status codes:
202 * |WifiStatusCode.SUCCESS|,
203 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
204 * |WifiStatusCode.ERROR_NOT_AVAILABLE|,
205 * |WifiStatusCode.ERROR_UNKNOWN|
206 * @return capabilities Bitset of |ChipCapabilityMask| values.
209 generates (WifiStatus status, bitfield<ChipCapabilityMask> capabilities);
212 * Get the set of operation modes that the chip supports.
214 * @return status WifiStatus of the operation.
215 * Possible status codes:
216 * |WifiStatusCode.SUCCESS|,
217 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
218 * @return modes List of modes supported by the device.
220 getAvailableModes() generates (WifiStatus status, vec<ChipMode> modes);
223 * Configure the Chip.
224 * This may NOT be called to reconfigure a chip due to an internal
225 * limitation. Calling this when chip is already configured in a different
226 * mode must trigger an ERROR_NOT_SUPPORTED failure.
227 * If you want to do reconfiguration, please call IWifi.stop() and IWifi.start()
228 * to restart Wifi HAL before calling this.
229 * Any existing |IWifiIface| objects must be marked invalid after this call.
230 * If this fails then the chips is now in an undefined state and
231 * configureChip must be called again.
232 * Must trigger |IWifiChipEventCallback.onChipReconfigured| on success.
233 * Must trigger |IWifiEventCallback.onFailure| on failure.
235 * @param modeId The mode that the chip must switch to, corresponding to the
236 * id property of the target ChipMode.
237 * @return status WifiStatus of the operation.
238 * Possible status codes:
239 * |WifiStatusCode.SUCCESS|,
240 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
241 * |WifiStatusCode.ERROR_NOT_AVAILABLE|,
242 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
243 * |WifiStatusCode.ERROR_UNKNOWN|
245 configureChip(ChipModeId modeId) generates (WifiStatus status);
248 * Get the current mode that the chip is in.
250 * @return modeId The mode that the chip is currently configured to,
251 * corresponding to the id property of the target ChipMode.
252 * @return status WifiStatus of the operation.
253 * Possible status codes:
254 * |WifiStatusCode.SUCCESS|,
255 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
257 getMode() generates (WifiStatus status, ChipModeId modeId);
260 * Request information about the chip.
262 * @return status WifiStatus of the operation.
263 * Possible status codes:
264 * |WifiStatusCode.SUCCESS|,
265 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
266 * |WifiStatusCode.ERROR_NOT_AVAILABLE|,
267 * |WifiStatusCode.ERROR_UNKNOWN|
268 * @return chipDebugInfo Instance of |ChipDebugInfo|.
270 requestChipDebugInfo() generates (WifiStatus status, ChipDebugInfo chipDebugInfo);
273 * Request vendor debug info from the driver.
275 * @return status WifiStatus of the operation.
276 * Possible status codes:
277 * |WifiStatusCode.SUCCESS|,
278 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
279 * |WifiStatusCode.ERROR_NOT_AVAILABLE|,
280 * |WifiStatusCode.ERROR_UNKNOWN|
281 * @param blob Vector of bytes retrieved from the driver.
283 requestDriverDebugDump() generates (WifiStatus status, vec<uint8_t> blob);
286 * Request vendor debug info from the firmware.
288 * @return status WifiStatus of the operation.
289 * Possible status codes:
290 * |WifiStatusCode.SUCCESS|,
291 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
292 * |WifiStatusCode.ERROR_NOT_AVAILABLE|,
293 * |WifiStatusCode.ERROR_UNKNOWN|
294 * @param blob Vector of bytes retrieved from the driver.
296 requestFirmwareDebugDump() generates (WifiStatus status, vec<uint8_t> blob);
299 * Create an AP iface on the chip.
301 * Depending on the mode the chip is configured in, the interface creation
302 * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
303 * allowed (specified in |ChipIfaceCombination|) number of ifaces of the AP
306 * @return status WifiStatus of the operation.
307 * Possible status codes:
308 * |WifiStatusCode.SUCCESS|,
309 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
310 * |WifiStatusCode.ERROR_NOT_SUPPORTED|
311 * @return iface HIDL interface object representing the iface if
312 * successful, null otherwise.
314 createApIface() generates (WifiStatus status, IWifiApIface iface);
317 * List all the AP iface names configured on the chip.
318 * The corresponding |IWifiApIface| object for any iface are
319 * retrieved using |getApIface| method.
321 * @return status WifiStatus of the operation.
322 * Possible status codes:
323 * |WifiStatusCode.SUCCESS|,
324 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
325 * @return ifnames List of all AP iface names on the chip.
327 getApIfaceNames() generates (WifiStatus status, vec<string> ifnames);
330 * Gets a HIDL interface object for the AP Iface corresponding
331 * to the provided ifname.
333 * @param ifname Name of the iface.
334 * @return status WifiStatus of the operation.
335 * Possible status codes:
336 * |WifiStatusCode.SUCCESS|,
337 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
338 * |WifiStatusCode.ERROR_INVALID_ARGS|
339 * @return iface HIDL interface object representing the iface if
340 * it exists, null otherwise.
342 getApIface(string ifname) generates (WifiStatus status, IWifiApIface iface);
345 * Removes the AP Iface with the provided ifname.
346 * Any further calls on the corresponding |IWifiApIface| HIDL interface
349 * @param ifname Name of the iface.
350 * @return status WifiStatus of the operation.
351 * Possible status codes:
352 * |WifiStatusCode.SUCCESS|,
353 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
354 * |WifiStatusCode.ERROR_INVALID_ARGS|
356 removeApIface(string ifname) generates (WifiStatus status);
359 * Create a NAN iface on the chip.
361 * Depending on the mode the chip is configured in, the interface creation
362 * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
363 * allowed (specified in |ChipIfaceCombination|) number of ifaces of the NAN
366 * @return status WifiStatus of the operation.
367 * Possible status codes:
368 * |WifiStatusCode.SUCCESS|,
369 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
370 * |WifiStatusCode.ERROR_NOT_SUPPORTED|
371 * @return iface HIDL interface object representing the iface if
372 * successful, null otherwise.
374 createNanIface() generates (WifiStatus status, IWifiNanIface iface);
377 * List all the NAN iface names configured on the chip.
378 * The corresponding |IWifiNanIface| object for any iface are
379 * retrieved using |getNanIface| method.
381 * @return status WifiStatus of the operation.
382 * Possible status codes:
383 * |WifiStatusCode.SUCCESS|,
384 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
385 * @return ifnames List of all NAN iface names on the chip.
387 getNanIfaceNames() generates (WifiStatus status, vec<string> ifnames);
390 * Gets a HIDL interface object for the NAN Iface corresponding
391 * to the provided ifname.
393 * @param ifname Name of the iface.
394 * @return status WifiStatus of the operation.
395 * Possible status codes:
396 * |WifiStatusCode.SUCCESS|,
397 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
398 * |WifiStatusCode.ERROR_INVALID_ARGS|
399 * @return iface HIDL interface object representing the iface if
400 * it exists, null otherwise.
402 getNanIface(string ifname) generates (WifiStatus status, IWifiNanIface iface);
405 * Removes the NAN Iface with the provided ifname.
406 * Any further calls on the corresponding |IWifiNanIface| HIDL interface
409 * @param ifname Name of the iface.
410 * @return status WifiStatus of the operation.
411 * Possible status codes:
412 * |WifiStatusCode.SUCCESS|,
413 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
414 * |WifiStatusCode.ERROR_INVALID_ARGS|
416 removeNanIface(string ifname) generates (WifiStatus status);
419 * Create a P2P iface on the chip.
421 * Depending on the mode the chip is configured in, the interface creation
422 * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
423 * allowed (specified in |ChipIfaceCombination|) number of ifaces of the P2P
426 * @return status WifiStatus of the operation.
427 * Possible status codes:
428 * |WifiStatusCode.SUCCESS|,
429 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
430 * |WifiStatusCode.ERROR_NOT_SUPPORTED|
431 * @return iface HIDL interface object representing the iface if
432 * successful, null otherwise.
434 createP2pIface() generates (WifiStatus status, IWifiP2pIface iface);
437 * List all the P2P iface names configured on the chip.
438 * The corresponding |IWifiP2pIface| object for any iface are
439 * retrieved using |getP2pIface| method.
441 * @return status WifiStatus of the operation.
442 * Possible status codes:
443 * |WifiStatusCode.SUCCESS|,
444 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
445 * @return ifnames List of all P2P iface names on the chip.
447 getP2pIfaceNames() generates (WifiStatus status, vec<string> ifnames);
450 * Gets a HIDL interface object for the P2P Iface corresponding
451 * to the provided ifname.
453 * @param ifname Name of the iface.
454 * @return status WifiStatus of the operation.
455 * Possible status codes:
456 * |WifiStatusCode.SUCCESS|,
457 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
458 * |WifiStatusCode.ERROR_INVALID_ARGS|
459 * @return iface HIDL interface object representing the iface if
460 * it exists, null otherwise.
462 getP2pIface(string ifname) generates (WifiStatus status, IWifiP2pIface iface);
465 * Removes the P2P Iface with the provided ifname.
466 * Any further calls on the corresponding |IWifiP2pIface| HIDL interface
469 * @param ifname Name of the iface.
470 * @return status WifiStatus of the operation.
471 * Possible status codes:
472 * |WifiStatusCode.SUCCESS|,
473 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
474 * |WifiStatusCode.ERROR_INVALID_ARGS|
476 removeP2pIface(string ifname) generates (WifiStatus status);
479 * Create an STA iface on the chip.
481 * Depending on the mode the chip is configured in, the interface creation
482 * may fail (code: |ERROR_NOT_AVAILABLE|) if we've already reached the maximum
483 * allowed (specified in |ChipIfaceCombination|) number of ifaces of the STA
486 * @return status WifiStatus of the operation.
487 * Possible status codes:
488 * |WifiStatusCode.SUCCESS|,
489 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
490 * |WifiStatusCode.ERROR_NOT_SUPPORTED|
491 * @return iface HIDL interface object representing the iface if
492 * successful, null otherwise.
494 createStaIface() generates (WifiStatus status, IWifiStaIface iface);
497 * List all the STA iface names configured on the chip.
498 * The corresponding |IWifiStaIface| object for any iface are
499 * retrieved using |getStaIface| method.
501 * @return status WifiStatus of the operation.
502 * Possible status codes:
503 * |WifiStatusCode.SUCCESS|,
504 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
505 * @return ifnames List of all STA iface names on the chip.
507 getStaIfaceNames() generates (WifiStatus status, vec<string> ifnames);
510 * Gets a HIDL interface object for the STA Iface corresponding
511 * to the provided ifname.
513 * @param ifname Name of the iface.
514 * @return status WifiStatus of the operation.
515 * Possible status codes:
516 * |WifiStatusCode.SUCCESS|,
517 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
518 * |WifiStatusCode.ERROR_INVALID_ARGS|
519 * @return iface HIDL interface object representing the iface if
520 * it exists, null otherwise.
522 getStaIface(string ifname) generates (WifiStatus status, IWifiStaIface iface);
525 * Removes the STA Iface with the provided ifname.
526 * Any further calls on the corresponding |IWifiStaIface| HIDL interface
529 * @param ifname Name of the iface.
530 * @return status WifiStatus of the operation.
531 * Possible status codes:
532 * |WifiStatusCode.SUCCESS|,
533 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
534 * |WifiStatusCode.ERROR_INVALID_ARGS|
536 removeStaIface(string ifname) generates (WifiStatus status);
539 * Create a RTTController instance.
541 * RTT controller can be either:
542 * a) Bound to a specific iface by passing in the corresponding |IWifiIface|
543 * object in |iface| param, OR
544 * b) Let the implementation decide the iface to use for RTT operations by
545 * passing null in |iface| param.
547 * @param boundIface HIDL interface object representing the iface if
548 * the responder must be bound to a specific iface, null otherwise.
549 * @return status WifiStatus of the operation.
550 * Possible status codes:
551 * |WifiStatusCode.SUCCESS|,
552 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|
554 createRttController(IWifiIface boundIface)
555 generates (WifiStatus status, IWifiRttController rtt);
558 * WiFi debug ring buffer life cycle is as follow:
559 * - At initialization time, framework must call |getDebugRingBuffersStatus|.
560 * to obtain the names and list of supported ring buffers.
561 * The driver may expose several different rings each holding a different
562 * type of data (connection events, power events, etc).
563 * - When WiFi operations start framework must call
564 * |startLoggingToDebugRingBuffer| to trigger log collection for a specific
565 * ring. The vebose level for each ring buffer can be specified in this API.
566 * - During wifi operations, driver must periodically report per ring data to
567 * framework by invoking the
568 * |IWifiChipEventCallback.onDebugRingBufferDataAvailable| callback.
569 * - When capturing a bug report, framework must indicate to driver that all
570 * the data has to be uploaded urgently by calling
571 * |forceDumpToDebugRingBuffer|.
573 * The data uploaded by driver must be stored by framework in separate files,
574 * with one stream of file per ring. Framework must store the files in pcapng
575 * format, allowing for easy merging and parsing with network analyzer tools.
576 * TODO: Since we're not longer dumping out the raw data, storing in separate
577 * pcapng files for parsing later must not work anymore.
580 * API to get the status of all ring buffers supported by driver.
582 * @return status WifiStatus of the operation.
583 * Possible status codes:
584 * |WifiStatusCode.SUCCESS|,
585 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
586 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
587 * |WifiStatusCode.NOT_AVAILABLE|,
588 * |WifiStatusCode.UNKNOWN|
589 * @return ringBuffers Vector of |WifiDebugRingBufferStatus| corresponding to the
590 * status of each ring bufffer on the device.
592 getDebugRingBuffersStatus() generates (WifiStatus status,
593 vec<WifiDebugRingBufferStatus> ringBuffers);
596 * API to trigger the debug data collection.
598 * @param ringName represent the name of the ring for which data collection
599 * shall start. This can be retrieved via the corresponding
600 * |WifiDebugRingBufferStatus|.
601 * @parm maxIntervalInSec Maximum interval in seconds for driver to invoke
602 * |onDebugRingBufferData|, ignore if zero.
603 * @parm minDataSizeInBytes: Minimum data size in buffer for driver to invoke
604 * |onDebugRingBufferData|, ignore if zero.
605 * @return status WifiStatus of the operation.
606 * Possible status codes:
607 * |WifiStatusCode.SUCCESS|,
608 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
609 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
610 * |WifiStatusCode.NOT_AVAILABLE|,
611 * |WifiStatusCode.UNKNOWN|
613 startLoggingToDebugRingBuffer(string ringName,
614 WifiDebugRingBufferVerboseLevel verboseLevel,
615 uint32_t maxIntervalInSec,
616 uint32_t minDataSizeInBytes)
617 generates (WifiStatus status);
620 * API to force dump data into the corresponding ring buffer.
621 * This is to be invoked during bugreport collection.
623 * @param ringName represent the name of the ring for which data collection
624 * shall be forced. This can be retrieved via the corresponding
625 * |WifiDebugRingBufferStatus|.
626 * @return status WifiStatus of the operation.
627 * Possible status codes:
628 * |WifiStatusCode.SUCCESS|,
629 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
630 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
631 * |WifiStatusCode.ERROR_NOT_STARTED|,
632 * |WifiStatusCode.NOT_AVAILABLE|,
633 * |WifiStatusCode.UNKNOWN|
635 forceDumpToDebugRingBuffer(string ringName) generates (WifiStatus status);
638 * API to stop the debug data collection for all ring buffers.
640 * @return status WifiStatus of the operation.
641 * Possible status codes:
642 * |WifiStatusCode.SUCCESS|,
643 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
644 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
645 * |WifiStatusCode.NOT_AVAILABLE|,
646 * |WifiStatusCode.UNKNOWN|
648 stopLoggingToDebugRingBuffer() generates (WifiStatus status);
651 * API to retrieve the wifi wake up reason stats for debugging.
652 * The driver is expected to start maintaining these stats once the chip
653 * is configured using |configureChip|. These stats must be reset whenever
654 * the chip is reconfigured or the HAL is stopped.
656 * @return status WifiStatus of the operation.
657 * Possible status codes:
658 * |WifiStatusCode.SUCCESS|,
659 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
660 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
661 * |WifiStatusCode.NOT_AVAILABLE|,
662 * |WifiStatusCode.UNKNOWN|
663 * @return stats Instance of |WifiDebugHostWakeReasonStats|.
665 getDebugHostWakeReasonStats()
666 generates (WifiStatus status, WifiDebugHostWakeReasonStats stats);
669 * API to enable/disable alert notifications from the chip.
670 * These alerts must be used to notify framework of any fatal error events
671 * that the chip encounters via |IWifiChipEventCallback.onDebugErrorAlert| method.
672 * Must fail if |ChipCapabilityMask.DEBUG_ERROR_ALERTS| is not set.
674 * @param enable true to enable, false to disable.
675 * @return status WifiStatus of the operation.
676 * Possible status codes:
677 * |WifiStatusCode.SUCCESS|,
678 * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
679 * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
680 * |WifiStatusCode.NOT_AVAILABLE|,
681 * |WifiStatusCode.UNKNOWN|
683 enableDebugErrorAlerts(bool enable) generates (WifiStatus status);