]> granicus.if.org Git - esp-idf/commitdiff
Merge branch 'feature/tcp_transport_pass_errors_stage1' into 'master'
authorAngus Gratton <angus@espressif.com>
Mon, 8 Jul 2019 00:51:29 +0000 (08:51 +0800)
committerAngus Gratton <angus@espressif.com>
Mon, 8 Jul 2019 00:51:29 +0000 (08:51 +0800)
esp-tls: capturing specific errors to be available in tcp_transport and then in application code

See merge request espressif/esp-idf!4782

188 files changed:
.gitmodules
README.md
components/bt/controller/lib
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_common_api.c
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_local_data_operation_api.c
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_low_power_api.c
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_networking_api.c
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_provisioning_api.c
components/bt/esp_ble_mesh/api/core/esp_ble_mesh_proxy_api.c
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_common_api.h
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_local_data_operation_api.h
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_low_power_api.h
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_networking_api.h
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_provisioning_api.h
components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_proxy_api.h
components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_config_model_api.c
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_generic_model_api.c
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_health_model_api.c
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_lighting_model_api.c
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_sensor_model_api.c
components/bt/esp_ble_mesh/api/models/esp_ble_mesh_time_scene_model_api.c
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_config_model_api.h
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_generic_model_api.h
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_health_model_api.h
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_lighting_model_api.h
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_sensor_model_api.h
components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_time_scene_model_api.h
components/bt/esp_ble_mesh/btc/btc_ble_mesh_config_model.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_generic_model.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_health_model.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_lighting_model.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_prov.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_sensor_model.c
components/bt/esp_ble_mesh/btc/btc_ble_mesh_time_scene_model.c
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_config_model.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_generic_model.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_health_model.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_lighting_model.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_prov.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_sensor_model.h
components/bt/esp_ble_mesh/btc/include/btc_ble_mesh_time_scene_model.h
components/bt/esp_ble_mesh/mesh_core/provisioner_beacon.c
components/bt/esp_ble_mesh/mesh_core/provisioner_beacon.h
components/bt/esp_ble_mesh/mesh_core/provisioner_main.c
components/bt/esp_ble_mesh/mesh_core/provisioner_main.h
components/bt/esp_ble_mesh/mesh_core/provisioner_prov.c
components/bt/esp_ble_mesh/mesh_core/provisioner_prov.h
components/bt/esp_ble_mesh/mesh_core/provisioner_proxy.c
components/bt/esp_ble_mesh/mesh_core/provisioner_proxy.h
components/bt/esp_ble_mesh/mesh_core/settings/settings_nvs.c
components/bt/esp_ble_mesh/mesh_core/settings/settings_nvs.h
components/bt/esp_ble_mesh/mesh_models/generic_client.c
components/bt/esp_ble_mesh/mesh_models/include/generic_client.h
components/bt/esp_ble_mesh/mesh_models/include/lighting_client.h
components/bt/esp_ble_mesh/mesh_models/include/mesh_common.h
components/bt/esp_ble_mesh/mesh_models/include/model_common.h
components/bt/esp_ble_mesh/mesh_models/include/model_opcode.h
components/bt/esp_ble_mesh/mesh_models/include/sensor_client.h
components/bt/esp_ble_mesh/mesh_models/include/time_scene_client.h
components/bt/esp_ble_mesh/mesh_models/lighting_client.c
components/bt/esp_ble_mesh/mesh_models/mesh_common.c
components/bt/esp_ble_mesh/mesh_models/model_common.c
components/bt/esp_ble_mesh/mesh_models/sensor_client.c
components/bt/esp_ble_mesh/mesh_models/time_scene_client.c
components/coap/port/coap_io.c
components/coap/port/include/coap_config_posix.h
components/efuse/CMakeLists.txt
components/esp32/CMakeLists.txt
components/esp32/Kconfig
components/esp32/cpu_start.c
components/esp32/gdbstub.c [deleted file]
components/esp_common/Kconfig
components/esp_event/event_send.c
components/esp_gdbstub/CMakeLists.txt [new file with mode: 0644]
components/esp_gdbstub/Kconfig [new file with mode: 0644]
components/esp_gdbstub/component.mk [new file with mode: 0644]
components/esp_gdbstub/esp32/gdbstub_esp32.c [new file with mode: 0644]
components/esp_gdbstub/esp32/gdbstub_target_config.h [new file with mode: 0644]
components/esp_gdbstub/include/esp_gdbstub.h [new file with mode: 0644]
components/esp_gdbstub/linker.lf [new file with mode: 0644]
components/esp_gdbstub/private_include/esp_gdbstub_common.h [new file with mode: 0644]
components/esp_gdbstub/src/gdbstub.c [new file with mode: 0644]
components/esp_gdbstub/src/packet.c [new file with mode: 0644]
components/esp_gdbstub/xtensa/esp_gdbstub_arch.h [new file with mode: 0644]
components/esp_gdbstub/xtensa/gdbstub_xtensa.c [new file with mode: 0644]
components/esp_http_server/src/httpd_txrx.c
components/esp_wifi/include/esp_mesh.h
components/esp_wifi/lib_esp32
components/esp_wifi/src/mesh_event.c
components/idf_test/include/idf_performance.h
components/lwip/CMakeLists.txt
components/lwip/linker.lf
components/lwip/lwip
components/lwip/port/esp32/debug/lwip_debug.c
components/lwip/port/esp32/freertos/sys_arch.c
components/lwip/port/esp32/include/arch/cc.h
components/lwip/port/esp32/include/arch/sys_arch.h
components/lwip/port/esp32/include/lwipopts.h
components/lwip/port/esp32/netif/wlanif.c
components/lwip/port/esp32/vfs_lwip.c
components/newlib/include/sys/syslimits.h
components/newlib/platform_include/net/if.h
components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py
components/nvs_flash/test_nvs_host/test_nvs.cpp
components/tcp_transport/test/CMakeLists.txt [new file with mode: 0644]
components/tcp_transport/test/component.mk [new file with mode: 0644]
components/tcp_transport/test/test_transport.c [new file with mode: 0644]
components/tcp_transport/transport.c
components/tcpip_adapter/tcpip_adapter_lwip.c
components/wifi_provisioning/include/wifi_provisioning/manager.h
components/wifi_provisioning/src/manager.c
components/wpa_supplicant/tags [deleted file]
docs/Doxyfile
docs/_static/mesh-events-delivery.png
docs/en/api-reference/network/esp_mesh.rst
docs/en/api-reference/provisioning/wifi_provisioning.rst
docs/en/api-reference/system/power_management.rst
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_adapter.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_adapter.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_cfg_srv_model.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_cfg_srv_model.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_console_lib.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_console_lib.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_console_main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_register_node_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/ble_mesh_register_server_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_node/main/register_bluetooth.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_adapter.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_adapter.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_cfg_srv_model.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_cfg_srv_model.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_console_lib.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_console_lib.h
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_console_main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_reg_cfg_client_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_reg_gen_onoff_client_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_reg_test_perf_client_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_register_node_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/ble_mesh_register_provisioner_cmd.c
examples/bluetooth/esp_ble_mesh/ble_mesh_console/ble_mesh_provisioner/main/register_bluetooth.c
examples/bluetooth/esp_ble_mesh/ble_mesh_fast_provision/ble_mesh_fast_prov_client/main/ble_mesh_demo_main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_fast_provision/ble_mesh_fast_prov_server/main/ble_mesh_demo_main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_fast_provision/ble_mesh_fast_prov_server/main/board.c
examples/bluetooth/esp_ble_mesh/ble_mesh_fast_provision/ble_mesh_fast_prov_server/main/board.h
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_client_model.c
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_client_model.h
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_common.h
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_operation.c
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_operation.h
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_server_model.c
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/components/esp_fast_prov_server_model.h
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_models/fast_prov_vendor_model/main/main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_wifi_coexist/components/iperf/iperf.c
examples/bluetooth/esp_ble_mesh/ble_mesh_wifi_coexist/main/ble_mesh_demo_main.c
examples/bluetooth/esp_ble_mesh/ble_mesh_wifi_coexist/main/board.c
examples/bluetooth/esp_ble_mesh/ble_mesh_wifi_coexist/main/board.h
examples/bluetooth/nimble/blecent/README.md
examples/bluetooth/nimble/blecent/blecent_test.py [new file with mode: 0644]
examples/bluetooth/nimble/blehr/README.md
examples/bluetooth/nimble/blehr/blehr_test.py [new file with mode: 0644]
examples/bluetooth/nimble/bleprph/README.md
examples/bluetooth/nimble/bleprph/bleprph_test.py [new file with mode: 0644]
examples/mesh/internal_communication/main/mesh_main.c
examples/mesh/manual_networking/main/mesh_main.c
examples/protocols/pppos_client/components/modem/src/esp_modem.c
examples/protocols/sockets/udp_multicast/main/udp_multicast_example_main.c
examples/provisioning/ble_prov/README.md
examples/provisioning/ble_prov/ble_prov_test.py
examples/provisioning/console_prov/README.md
examples/provisioning/custom_config/README.md
examples/provisioning/manager/README.md
examples/provisioning/manager/main/app_main.c
examples/provisioning/manager/wifi_prov_mgr_test.py
examples/provisioning/softap_prov/README.md
examples/provisioning/softap_prov/softap_prov_test.py
examples/wifi/iperf/components/iperf/iperf.c
tools/ble/lib_ble_client.py [new file with mode: 0644]
tools/ble/lib_gap.py [new file with mode: 0644]
tools/ble/lib_gatt.py [new file with mode: 0644]
tools/ble/requirements.txt [new file with mode: 0644]
tools/ci/executable-list.txt
tools/esp_prov/README.md
tools/esp_prov/esp_prov.py
tools/esp_prov/transport/transport_http.py
tools/mass_mfg/docs/README.rst
tools/mass_mfg/mfg_gen.py
tools/set-submodules-to-github.sh [new file with mode: 0755]

index 21a8c1df343df9046ac1b92afa8f7cb6923000a7..70bd0c478e386c42fe091d8ee99deab13b3db30c 100644 (file)
@@ -1,14 +1,15 @@
 #
 # All the relative URL paths are intended to be GitHub ones
+# For Espressif's public projects please use '../../espressif/proj', not a '../proj'
 #
 
 [submodule "components/esptool_py/esptool"]
        path = components/esptool_py/esptool
-       url = ../esptool.git
+       url = ../../espressif/esptool.git
 
 [submodule "components/bt/controller/lib"]
        path = components/bt/controller/lib
-       url = ../esp32-bt-lib.git
+       url = ../../espressif/esp32-bt-lib.git
 
 [submodule "components/bootloader/subproject/components/micro-ecc/micro-ecc"]
        path = components/bootloader/subproject/components/micro-ecc/micro-ecc
 
 [submodule "components/mbedtls/mbedtls"]
        path = components/mbedtls/mbedtls
-       url = ../mbedtls.git
+       url = ../../espressif/mbedtls.git
 
 [submodule "components/asio/asio"]
        path = components/asio/asio
-       url = ../asio.git
+       url = ../../espressif/asio.git
 
 [submodule "components/expat/expat"]
        path = components/expat/expat
 
 [submodule "components/lwip/lwip"]
        path = components/lwip/lwip
-       url = ../esp-lwip.git
+       url = ../../espressif/esp-lwip.git
 
 [submodule "components/mqtt/esp-mqtt"]
        path = components/mqtt/esp-mqtt
-       url = ../esp-mqtt.git
+       url = ../../espressif/esp-mqtt.git
 
 [submodule "components/protobuf-c/protobuf-c"]
        path = components/protobuf-c/protobuf-c
-       url = ../../protobuf-c/protobuf-c
+       url = ../../protobuf-c/protobuf-c.git
 
 [submodule "components/unity/unity"]
        path = components/unity/unity
-       url = ../../ThrowTheSwitch/Unity
+       url = ../../ThrowTheSwitch/Unity.git
 
 [submodule "examples/build_system/cmake/import_lib/main/lib/tinyxml2"]
        path = examples/build_system/cmake/import_lib/main/lib/tinyxml2
-       url = ../../leethomason/tinyxml2
+       url = ../../leethomason/tinyxml2.git
 
 [submodule "components/esp_wifi/lib_esp32"]
        path = components/esp_wifi/lib_esp32
-       url = ../esp32-wifi-lib.git
+       url = ../../espressif/esp32-wifi-lib.git
 
 [submodule "components/bt/host/nimble/nimble"]
        path = components/bt/host/nimble/nimble
-       url = ../esp-nimble.git
+       url = ../../espressif/esp-nimble.git
index 55487c9b2c5085c72d31539bd9f18b5089bd7e78..bbb8d3a54b782f8c1f7a2f228a8026c62614faac 100644 (file)
--- a/README.md
+++ b/README.md
@@ -13,6 +13,14 @@ See setup guides for detailed instructions to set up the ESP-IDF:
 * [Getting Started Guide for the stable ESP-IDF version](https://docs.espressif.com/projects/esp-idf/en/stable/get-started/)
 * [Getting Started Guide for the latest (master branch) ESP-IDF version](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/)
 
+### Non-GitHub forks
+
+ESP-IDF uses relative locations as its submodules URLs ([.gitmodules](.gitmodules)). So they link to GitHub.
+If ESP-IDF is forked to a Git repository which is not on GitHub, you will need to run the script
+[tools/set-submodules-to-github.sh](tools/set-submodules-to-github.sh) after git clone.
+The script sets absolute URLs for all submodules, allowing `git submodule update --init --recursive` to complete.
+If cloning ESP-IDF from GitHub, this step is not needed.
+
 ## Finding a Project
 
 As well as the [esp-idf-template](https://github.com/espressif/esp-idf-template) project mentioned in Getting Started, ESP-IDF comes with some example projects in the [examples](examples) directory.
index d915fc93499fd925ae301306a7539b5f13bf6e65..cc2fd1177d97f1a4b9e0d819035ddf52ba77079d 160000 (submodule)
@@ -1 +1 @@
-Subproject commit d915fc93499fd925ae301306a7539b5f13bf6e65
+Subproject commit cc2fd1177d97f1a4b9e0d819035ddf52ba77079d
index 4172ef0c7d1844b20661623629ab7593e19462cd..2a5253f9079deef4b61fe1ac8f4414d4850dafc3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6efeaf1765d08b2a8dfa77608babba2a36b89dd0..50e49b80abe94a146d6d85e93c70b8fbf6459f85 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6d3745ca6ec152704ca1688005bf3a696971c099..4d93f809ef58ef23df3b738c319163c7c6d7679f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9e920dd113a348444c6c6c33ecf5044a64af4d66..721999bb0efb7af2913757276cb5a540150edc98 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 855bcf188ffa2b83e5a4927ca8d43b6ca562e276..b8f12244ebe335635bbc4caafc9204f7cd161c40 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 0605e97a6b76013c2b95ecbc3a9afcbf1565dd8a..4d25a656f4fc8f1746dad9b0e961274b1cdb51c4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a550ad381f2090d14145f0399c6a33516aa38da3..7f48436685612b6a03ec1d816aa3758cbf85eed5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 0acb6d73f0f4ad1e0dee43b5723eb7a955f7b1cd..a1b0ff00def435edb0e27607bffee5800d8f9e24 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -30,8 +30,6 @@ int32_t esp_ble_mesh_get_model_publish_period(esp_ble_mesh_model_t *model);
 /**
  * @brief         Get the address of the primary element.
  *
- * @param         None.
- *
  * @return        Address of the primary element on success, or
  *                ESP_BLE_MESH_ADDR_UNASSIGNED on failure which means the device has not been provisioned.
  *
@@ -68,8 +66,6 @@ esp_ble_mesh_elem_t *esp_ble_mesh_find_element(uint16_t element_addr);
 /**
  * @brief         Get the number of elements that have been registered.
  *
- * @param         None.
- *
  * @return        Number of elements.
  *
  */
@@ -103,8 +99,6 @@ esp_ble_mesh_model_t *esp_ble_mesh_find_sig_model(const esp_ble_mesh_elem_t *ele
 /**
  * @brief        Get the Composition data which has been registered.
  *
- * @param        None.
- *
  * @return       Pointer to the Composition data on success, or NULL on failure which means the Composition data is not initialized.
  *
  */
index 7a203d50cc6345ec814381fa12924cf8203c9e6d..48238c5ebabac8f4c9d071f162deddd483ed77fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d3df66879d90d202cba76e5756d69d3663b428de..ae51b60818eeac751cc96c3b2898a990ca08ec50 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -141,8 +141,6 @@ esp_err_t esp_ble_mesh_model_publish(esp_ble_mesh_model_t *model, uint32_t opcod
  *                needs to be reprovisioned. The API function esp_ble_mesh_node_prov_enable()
  *                needs to be called to start a new provisioning procedure.
  *
- * @param         None.
- *
  * @return        ESP_OK on success or error code otherwise.
  *
  */
index e03c4d4ef16c1f61610612f45e6792b544cda61f..a5a4256f44d23d1c662cb98e95fa8d3b60cae979 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -34,8 +34,6 @@ esp_err_t esp_ble_mesh_register_prov_callback(esp_ble_mesh_prov_cb_t callback);
 /**
  * @brief         Check if a device has been provisioned.
  *
- * @param         None.
- *
  * @return        TRUE if the device is provisioned, FALSE if the device is unprovisioned.
  *
  */
index 67a785dda68ff9e92d40d0db9d68adfc0543fab7..cb67b96a0d0c1973fab433cc31fa9c8a8c75cbfd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -27,8 +27,6 @@
  *          Network ID advertising will be enabled automatically by BLE Mesh
  *          stack after the device is provisioned.
  *
- * @param   None.
- *
  * @return  ESP_OK on success or error code otherwise.
  *
  */
@@ -37,8 +35,6 @@ esp_err_t esp_ble_mesh_proxy_identity_enable(void);
 /**
  * @brief   Enable BLE Mesh GATT Proxy Service.
  *
- * @param   None.
- *
  * @return  ESP_OK on success or error code otherwise.
  *
  */
@@ -48,8 +44,6 @@ esp_err_t esp_ble_mesh_proxy_gatt_enable(void);
  * @brief   Disconnect the BLE Mesh GATT Proxy connection if there is any, and
  *          disable the BLE Mesh GATT Proxy Service.
  *
- * @param   None.
- *
  * @return  ESP_OK on success or error code otherwise.
  *
  */
index 6e751bd315ddeb98dfcdfdf859a5a52c9f40b904..e72faf95e7a47dcc89223731ed03ad695b20717d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@
 #include "model_opcode.h"
 #include "mesh_common.h"
 
+/*!< The maximum length of a BLE Mesh message, including Opcode, Payload and TransMIC */
 #define ESP_BLE_MESH_SDU_MAX_LEN            384
 
 /*!< The maximum length of a BLE Mesh provisioned node name */
@@ -392,7 +393,7 @@ typedef uint32_t esp_ble_mesh_generic_message_opcode_t;     /*!< esp_ble_mesh_ge
 
 typedef uint32_t esp_ble_mesh_sensor_message_opcode_t;      /*!< esp_ble_mesh_sensor_message_opcode_t belongs to esp_ble_mesh_opcode_t,
                                                               this typedef is only used to locate the opcodes used by functions
-                                                              esp_ble_mesh_sensor_client_get_state & esp_ble_mesh_sensor_client_set_state  */
+                                                              esp_ble_mesh_sensor_client_get_state & esp_ble_mesh_sensor_client_set_state */
 /*!< Sensor Message Opcode */
 #define ESP_BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_GET           BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_GET
 #define ESP_BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_STATUS        BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_STATUS
@@ -663,7 +664,7 @@ typedef uint8_t esp_ble_mesh_model_status_t;    /*!< This typedef is only used t
  */
 #define ESP_BLE_MESH_GET_PUBLISH_TRANSMIT_INTERVAL(transmit) BLE_MESH_PUB_TRANSMIT_INT(transmit)
 
-/* esp_ble_mesh_cb_t is not needed to be initialized by users (set with 0 and will be initialized internally) */
+/*!< Callbacks which are not needed to be initialized by users (set with 0 and will be initialized internally) */
 typedef uint32_t esp_ble_mesh_cb_t;
 
 typedef enum {
@@ -727,6 +728,7 @@ typedef enum {
     ESP_BLE_MESH_PROV_OOB_ON_DEV    = BIT(15),
 } esp_ble_mesh_prov_oob_info_t;
 
+/*!< Macros used to define message opcode */
 #define ESP_BLE_MESH_MODEL_OP_1(b0)            BLE_MESH_MODEL_OP_1(b0)
 #define ESP_BLE_MESH_MODEL_OP_2(b0, b1)        BLE_MESH_MODEL_OP_2(b0, b1)
 #define ESP_BLE_MESH_MODEL_OP_3(b0, cid)       BLE_MESH_MODEL_OP_3(b0, cid)
@@ -790,43 +792,43 @@ typedef enum {
 
 typedef struct esp_ble_mesh_model esp_ble_mesh_model_t;
 
-/*!< Abstraction that describes a BLE Mesh Element.
-    This structure is associated with bt_mesh_elem in mesh_access.h */
+/** Abstraction that describes a BLE Mesh Element.
+ *  This structure is associated with struct bt_mesh_elem in mesh_access.h
+ */
 typedef struct {
-    /* Element Address, assigned during provisioning. */
+    /** Element Address, assigned during provisioning. */
     uint16_t element_addr;
 
-    /* Location Descriptor (GATT Bluetooth Namespace Descriptors) */
+    /** Location Descriptor (GATT Bluetooth Namespace Descriptors) */
     const uint16_t location;
 
-    /* Model count */
-    const uint8_t sig_model_count;
-    const uint8_t vnd_model_count;
+    const uint8_t sig_model_count;      /*!< SIG Model count */
+    const uint8_t vnd_model_count;      /*!< Vendor Model count */
 
-    /* Models */
-    esp_ble_mesh_model_t *sig_models;
-    esp_ble_mesh_model_t *vnd_models;
+    esp_ble_mesh_model_t *sig_models;   /*!< SIG Models */
+    esp_ble_mesh_model_t *vnd_models;   /*!< Vendor Models */
 } esp_ble_mesh_elem_t;
 
-/*!< Model publication context.
-    This structure is associated with bt_mesh_model_pub in mesh_access.h */
+/** Abstraction that describes a model publication context.
+ *  This structure is associated with struct bt_mesh_model_pub in mesh_access.h
+ */
 typedef struct {
-    /** The model to which the context belongs. Initialized by the stack. */
+    /** Pointer to the model to which the context belongs. Initialized by the stack. */
     esp_ble_mesh_model_t *model;
 
-    uint16_t publish_addr; /**< Publish Address. */
-    uint16_t app_idx;      /**< Publish AppKey Index. */
+    uint16_t publish_addr; /*!< Publish Address. */
+    uint16_t app_idx;      /*!< Publish AppKey Index. */
 
-    uint8_t  ttl;          /**< Publish Time to Live. */
-    uint8_t  retransmit;   /**< Retransmit Count & Interval Steps. */
+    uint8_t  ttl;          /*!< Publish Time to Live. */
+    uint8_t  retransmit;   /*!< Retransmit Count & Interval Steps. */
 
     uint8_t  period;        /*!< Publish Period. */
     uint16_t period_div: 4, /*!< Divisor for the Period. */
              cred: 1,       /*!< Friendship Credentials Flag. */
-             fast_period: 1, /**< Use FastPeriodDivisor */
+             fast_period: 1, /*!< Use FastPeriodDivisor */
              count: 3;      /*!< Retransmissions left. */
 
-    uint32_t period_start; /**< Start of the current period. */
+    uint32_t period_start; /*!< Start of the current period. */
 
     /** @brief Publication buffer, containing the publication message.
      *
@@ -837,13 +839,13 @@ typedef struct {
      */
     struct net_buf_simple *msg;
 
-    /* The callback is only used for the BLE Mesh stack, not for the app layer. */
+    /** Callback used to update publish message. Initialized by the stack. */
     esp_ble_mesh_cb_t update;
 
-    /* Role of the device that is going to publish messages */
+    /** Role of the device that is going to publish messages */
     uint8_t dev_role;
 
-    /** Publish Period Timer. Only for stack-internal use. */
+    /** Publish Period Timer. Initialized by the stack. */
     struct k_delayed_work timer;
 } esp_ble_mesh_model_pub_t;
 
@@ -863,8 +865,13 @@ typedef struct {
         .dev_role = _role, \
     }
 
-/*!< Model operation context.
-    This structure is associated with bt_mesh_model_op in mesh_access.h */
+/** @def ESP_BLE_MESH_MODEL_OP
+ *
+ *  Define a model operation context.
+ *
+ *  @param _opcode  Message opcode.
+ *  @param _min_len Message minimum length.
+ */
 #define ESP_BLE_MESH_MODEL_OP(_opcode, _min_len) \
 { \
     .opcode = _opcode, \
@@ -872,23 +879,26 @@ typedef struct {
     .param_cb = (uint32_t)NULL, \
 }
 
+/** Abstraction that describes a model operation context.
+ *  This structure is associated with struct bt_mesh_model_op in mesh_access.h
+ */
 typedef struct {
-    const uint32_t    opcode;   /* Opcode encoded with the ESP_BLE_MESH_MODEL_OP_* macro */
-    const size_t      min_len;  /* Minimum required message length */
-    esp_ble_mesh_cb_t param_cb; /* The callback is only used for BLE Mesh stack, not for the app layer. */
+    const uint32_t    opcode;   /*!< Message opcode */
+    const size_t      min_len;  /*!< Message minimum length */
+    esp_ble_mesh_cb_t param_cb; /*!< Callback used to handle message. Initialized by the stack. */
 } esp_ble_mesh_model_op_t;
 
-/** Define the terminator for the model operation table, each
- *  model operation struct array must use this terminator as
+/** Define the terminator for the model operation table.
+ *  Each model operation struct array must use this terminator as
  *  the end tag of the operation unit.
  */
 #define ESP_BLE_MESH_MODEL_OP_END {0, 0, 0}
 
 /** Abstraction that describes a Mesh Model instance.
- *  This structure is associated with bt_mesh_model in mesh_access.h
+ *  This structure is associated with struct bt_mesh_model in mesh_access.h
  */
 struct esp_ble_mesh_model {
-    /* Model ID */
+    /** Model ID */
     union {
         const uint16_t model_id;
         struct {
@@ -897,27 +907,27 @@ struct esp_ble_mesh_model {
         } vnd;
     };
 
-    /* Internal information, mainly for persistent storage */
-    uint8_t  element_idx;   /* Belongs to Nth element */
-    uint8_t  model_idx;     /* Is the Nth model in the element */
-    uint16_t flags;         /* Information about what has changed */
+    /** Internal information, mainly for persistent storage */
+    uint8_t  element_idx;   /*!< Belongs to Nth element */
+    uint8_t  model_idx;     /*!< Is the Nth model in the element */
+    uint16_t flags;         /*!< Information about what has changed */
 
-    /* The Element to which this Model belongs */
+    /** The Element to which this Model belongs */
     esp_ble_mesh_elem_t *element;
 
-    /* Model Publication */
+    /** Model Publication */
     esp_ble_mesh_model_pub_t *const pub;
 
-    /* AppKey List */
+    /** AppKey List */
     uint16_t keys[CONFIG_BLE_MESH_MODEL_KEY_COUNT];
 
-    /* Subscription List (group or virtual addresses) */
+    /** Subscription List (group or virtual addresses) */
     uint16_t groups[CONFIG_BLE_MESH_MODEL_GROUP_COUNT];
 
-    /* Model operation context */
+    /** Model operation context */
     esp_ble_mesh_model_op_t *op;
 
-    /* Model-specific user data */
+    /** Model-specific user data */
     void *user_data;
 };
 
@@ -927,7 +937,7 @@ struct esp_ble_mesh_model {
 #define ESP_BLE_MESH_MODEL_NONE ((esp_ble_mesh_model_t []){})
 
 /** Message sending context.
- *  This structure is associated with bt_mesh_msg_ctx in mesh_access.h
+ *  This structure is associated with struct bt_mesh_msg_ctx in mesh_access.h
  */
 typedef struct {
     /** NetKey Index of the subnet through which to send the message. */
@@ -962,7 +972,7 @@ typedef struct {
 } esp_ble_mesh_msg_ctx_t;
 
 /** Provisioning properties & capabilities.
- *  This structure is associated with bt_mesh_prov in mesh_access.h
+ *  This structure is associated with struct bt_mesh_prov in mesh_access.h
  */
 typedef struct {
 #if CONFIG_BLE_MESH_NODE
@@ -982,7 +992,7 @@ typedef struct {
     /** Flag indicates whether unprovisioned devices support OOB public key */
     bool oob_pub_key;
 
-    /* This callback is only used for the BLE Mesh stack, not for the app layer */
+    /** Callback used to notify to set OOB Public Key. Initialized by the stack. */
     esp_ble_mesh_cb_t oob_pub_key_cb;
 
     /** Static OOB value */
@@ -1000,136 +1010,154 @@ typedef struct {
     /** Supported Input OOB Actions */
     uint16_t       input_actions;
 
-    /* These callbacks are only used for the BLE Mesh stack, not for the app layer */
+    /** Callback used to output the number. Initialized by the stack. */
     esp_ble_mesh_cb_t  output_num_cb;
+    /** Callback used to output the string. Initialized by the stack. */
     esp_ble_mesh_cb_t  output_str_cb;
+    /** Callback used to notify to input number/string. Initialized by the stack. */
     esp_ble_mesh_cb_t  input_cb;
+    /** Callback used to indicate that link is opened. Initialized by the stack. */
     esp_ble_mesh_cb_t  link_open_cb;
+    /** Callback used to indicate that link is closed. Initialized by the stack. */
     esp_ble_mesh_cb_t  link_close_cb;
+    /** Callback used to indicate that provisioning is completed. Initialized by the stack. */
     esp_ble_mesh_cb_t  complete_cb;
+    /** Callback used to indicate that node has been reset. Initialized by the stack. */
     esp_ble_mesh_cb_t  reset_cb;
 #endif /* CONFIG_BLE_MESH_NODE */
 
 #ifdef CONFIG_BLE_MESH_PROVISIONER
-    /* Provisioner device UUID */
+    /** Provisioner device UUID */
     const uint8_t *prov_uuid;
 
-    /* Primary element address of the provisioner */
+    /** Primary element address of the provisioner */
     const uint16_t prov_unicast_addr;
 
-    /* Pre-incremental unicast address value to be assigned to the first device */
+    /** Pre-incremental unicast address value to be assigned to the first device */
     uint16_t       prov_start_address;
 
-    /* Attention timer contained in Provisioning Invite PDU */
+    /** Attention timer contained in Provisioning Invite PDU */
     uint8_t        prov_attention;
 
-    /* Provisioning Algorithm for the Provisioner */
+    /** Provisioning Algorithm for the Provisioner */
     uint8_t        prov_algorithm;
 
-    /* Provisioner public key oob */
+    /** Provisioner public key oob */
     uint8_t        prov_pub_key_oob;
 
-    /* The callback is only used for BLE Mesh stack, not for the app layer */
+    /** Callback used to notify to set device OOB Public Key. Initialized by the stack. */
     esp_ble_mesh_cb_t provisioner_prov_read_oob_pub_key;
 
-    /* Provisioner static oob value */
+    /** Provisioner static oob value */
     uint8_t        *prov_static_oob_val;
-    /* Provisioner static oob value length */
+    /** Provisioner static oob value length */
     uint8_t         prov_static_oob_len;
 
-    /* These callbacks are only used for BLE Mesh stack, not for the app layer */
+    /** Callback used to notify to input number/string. Initialized by the stack. */
     esp_ble_mesh_cb_t provisioner_prov_input;
+    /** Callback used to output number/string. Initialized by the stack. */
     esp_ble_mesh_cb_t provisioner_prov_output;
 
-    /* Key refresh and IV update flag */
+    /** Key refresh and IV update flag */
     uint8_t        flags;
 
-    /* IV index */
+    /** IV index */
     uint32_t       iv_index;
 
-    /* These callbacks are only used for BLE Mesh stack, not for the app layer */
+    /** Callback used to indicate that link is opened. Initialized by the stack. */
     esp_ble_mesh_cb_t  provisioner_link_open;
+    /** Callback used to indicate that link is closed. Initialized by the stack. */
     esp_ble_mesh_cb_t  provisioner_link_close;
+    /** Callback used to indicate that a device is provisioned. Initialized by the stack. */
     esp_ble_mesh_cb_t  provisioner_prov_comp;
 #endif /* CONFIG_BLE_MESH_PROVISIONER */
 } esp_ble_mesh_prov_t;
 
-/** Node Composition
- *  This structure is associated with bt_mesh_comp in mesh_access.h
+/** Node Composition data context.
+ *  This structure is associated with struct bt_mesh_comp in mesh_access.h
  */
 typedef struct {
-    uint16_t cid;
-    uint16_t pid;
-    uint16_t vid;
+    uint16_t cid;   /*!< 16-bit SIG-assigned company identifier */
+    uint16_t pid;   /*!< 16-bit vendor-assigned product identifier */
+    uint16_t vid;   /*!< 16-bit vendor-assigned product version identifier */
 
-    size_t element_count;
-    esp_ble_mesh_elem_t *elements;
+    size_t element_count;           /*!< Element count */
+    esp_ble_mesh_elem_t *elements;  /*!< A sequence of elements */
 } esp_ble_mesh_comp_t;
 
+/*!< This enum value is the role of the device */
 typedef enum {
     ROLE_NODE = 0,
     ROLE_PROVISIONER,
     ROLE_FAST_PROV,
 } esp_ble_mesh_dev_role_t;
 
+/** Common parameters of the messages sent by Client Model. */
 typedef struct {
     esp_ble_mesh_opcode_t opcode;   /*!< Message opcode */
     esp_ble_mesh_model_t *model;    /*!< Pointer to the client model structure */
     esp_ble_mesh_msg_ctx_t ctx;     /*!< The context used to send message */
     int32_t msg_timeout;            /*!< Timeout value (ms) to get response to the sent message */
-    /*!< Note: if using default timeout value in menuconfig, make sure to set this value to 0 */
-    uint8_t msg_role;               /*!< Role of the device - Node/Provisioner, only used for tx */
+                                    /*!< Note: if using default timeout value in menuconfig, make sure to set this value to 0 */
+    uint8_t msg_role;               /*!< Role of the device - Node/Provisioner */
 } esp_ble_mesh_client_common_param_t;
 
+/*!< Flag which will be set when device is going to be added. */
 typedef uint8_t esp_ble_mesh_dev_add_flag_t;
-#define ADD_DEV_RM_AFTER_PROV_FLAG  BIT(0)
-#define ADD_DEV_START_PROV_NOW_FLAG BIT(1)
-#define ADD_DEV_FLUSHABLE_DEV_FLAG  BIT(2)
+#define ADD_DEV_RM_AFTER_PROV_FLAG  BIT(0)  /*!< Device will be removed from queue after provisioned successfully */
+#define ADD_DEV_START_PROV_NOW_FLAG BIT(1)  /*!< Start provisioning device immediately */
+#define ADD_DEV_FLUSHABLE_DEV_FLAG  BIT(2)  /*!< Device can be remove when queue is full and new device is going to added */
+
+/** Information of the device which is going to be added for provisioning. */
 typedef struct {
-    esp_bd_addr_t addr;
-    esp_ble_addr_type_t addr_type;
-    uint8_t  uuid[16];
-    uint16_t oob_info;
+    esp_bd_addr_t addr;                 /*!< Device address */
+    esp_ble_addr_type_t addr_type;      /*!< Device address type */
+    uint8_t  uuid[16];                  /*!< Device UUID */
+    uint16_t oob_info;                  /*!< Device OOB Info */
     /*!< ADD_DEV_START_PROV_NOW_FLAG shall not be set if the bearer has both PB-ADV and PB-GATT enabled */
-    esp_ble_mesh_prov_bearer_t bearer;
+    esp_ble_mesh_prov_bearer_t bearer;  /*!< Provisioning Bearer */
 } esp_ble_mesh_unprov_dev_add_t;
 
 #define DEL_DEV_ADDR_FLAG BIT(0)
 #define DEL_DEV_UUID_FLAG BIT(1)
+/** Information of the device which is going to be deleted. */
 typedef struct {
     union {
         struct {
-            esp_bd_addr_t addr;
-            esp_ble_addr_type_t addr_type;
+            esp_bd_addr_t addr;             /*!< Device address */
+            esp_ble_addr_type_t addr_type;  /*!< Device address type */
         };
-        uint8_t uuid[16];
+        uint8_t uuid[16];                   /*!< Device UUID */
     };
-    uint8_t flag;   /*!< BIT0: device address; BIT1: device UUID */
+    uint8_t flag;                           /*!< BIT0: device address; BIT1: device UUID */
 } esp_ble_mesh_device_delete_t;
 
 #define PROV_DATA_NET_IDX_FLAG  BIT(0)
 #define PROV_DATA_FLAGS_FLAG    BIT(1)
 #define PROV_DATA_IV_INDEX_FLAG BIT(2)
+/** Information of the provisioner which is going to be updated. */
 typedef struct {
     union {
-        uint16_t net_idx;
-        uint8_t  flags;
-        uint32_t iv_index;
+        uint16_t net_idx;   /*!< NetKey Index */
+        uint8_t  flags;     /*!< Flags */
+        uint32_t iv_index;  /*!< IV Index */
     };
-    uint8_t flag;   /*!< BIT0: net_idx; BIT1: flags; BIT2: iv_index */
+    uint8_t flag;           /*!< BIT0: net_idx; BIT1: flags; BIT2: iv_index */
 } esp_ble_mesh_prov_data_info_t;
 
+/** Context of fast provisioning which need to be set. */
 typedef struct {
-    uint16_t unicast_min;   /* Minimum unicast address used for fast provisioning */
-    uint16_t unicast_max;   /* Maximum unicast address used for fast provisioning */
-    uint16_t net_idx;       /* Netkey index used for fast provisioning */
-    uint8_t  flags;         /* Flags used for fast provisioning */
-    uint32_t iv_index;      /* IV Index used for fast provisioning */
-    uint8_t  offset;        /* Offset of the UUID to be compared */
-    uint8_t  match_len;     /* Length of the UUID to be compared */
-    uint8_t  match_val[16]; /* Value of UUID to be compared */
+    uint16_t unicast_min;   /*!< Minimum unicast address used for fast provisioning */
+    uint16_t unicast_max;   /*!< Maximum unicast address used for fast provisioning */
+    uint16_t net_idx;       /*!< Netkey index used for fast provisioning */
+    uint8_t  flags;         /*!< Flags used for fast provisioning */
+    uint32_t iv_index;      /*!< IV Index used for fast provisioning */
+    uint8_t  offset;        /*!< Offset of the UUID to be compared */
+    uint8_t  match_len;     /*!< Length of the UUID to be compared */
+    uint8_t  match_val[16]; /*!< Value of UUID to be compared */
 } esp_ble_mesh_fast_prov_info_t;
 
+/*!< This enum value is the action of fast provisioning */
 typedef enum {
     FAST_PROV_ACT_NONE,
     FAST_PROV_ACT_ENTER,
@@ -1138,6 +1166,7 @@ typedef enum {
     FAST_PROV_ACT_MAX,
 } esp_ble_mesh_fast_prov_action_t;
 
+/*!< This enum value is the event of node/provisioner/fast provisioning */
 typedef enum {
     ESP_BLE_MESH_PROV_REGISTER_COMP_EVT,                        /*!< Initialize BLE Mesh provisioning capabilities and internal data information completion event */
     ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT,             /*!< Set the unprovisioned device name completion event */
@@ -1177,11 +1206,12 @@ typedef enum {
     ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_APP_KEY_COMP_EVT,        /*!< Provisioner add local app key completion event */
     ESP_BLE_MESH_PROVISIONER_BIND_APP_KEY_TO_MODEL_COMP_EVT,    /*!< Provisioner bind local model with local app key completion event */
     ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_NET_KEY_COMP_EVT,        /*!< Provisioner add local network key completion event */
-    ESP_BLE_MESH_SET_FAST_PROV_INFO_COMP_EVT,                   /* !< Set fast provisioning information (e.g. unicast address range, net_idx, etc.) completion event */
-    ESP_BLE_MESH_SET_FAST_PROV_ACTION_COMP_EVT,                 /* !< Set fast provisioning action completion event */
+    ESP_BLE_MESH_SET_FAST_PROV_INFO_COMP_EVT,                   /*!< Set fast provisioning information (e.g. unicast address range, net_idx, etc.) completion event */
+    ESP_BLE_MESH_SET_FAST_PROV_ACTION_COMP_EVT,                 /*!< Set fast provisioning action completion event */
     ESP_BLE_MESH_PROV_EVT_MAX,
 } esp_ble_mesh_prov_cb_event_t;
 
+/*!< This enum value is the event of undefined SIG Models and Vendor Models */
 typedef enum {
     ESP_BLE_MESH_MODEL_OPERATION_EVT,               /*!< User-defined models receive messages from peer devices (e.g. get, set, status, etc) event */
     ESP_BLE_MESH_MODEL_SEND_COMP_EVT,               /*!< User-defined models send messages completion event */
@@ -1192,332 +1222,345 @@ typedef enum {
     ESP_BLE_MESH_MODEL_EVT_MAX,
 } esp_ble_mesh_model_cb_event_t;
 
+/**
+ * @brief BLE Mesh Node/Provisioner callback parameters union
+ */
 typedef union {
     /**
      * @brief ESP_BLE_MESH_PROV_REGISTER_COMP_EVT
      */
     struct ble_mesh_prov_register_comp_param {
-        int err_code;
-    } prov_register_comp;
+        int err_code;                           /*!< Indicate the result of BLE Mesh initialization */
+    } prov_register_comp;                       /*!< Event parameter of ESP_BLE_MESH_PROV_REGISTER_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT
      */
     struct ble_mesh_set_unprov_dev_name_comp_param {
-        int err_code;
-    } node_set_unprov_dev_name_comp;
+        int err_code;                           /*!< Indicate the result of setting BLE Mesh device name */
+    } node_set_unprov_dev_name_comp;            /*!< Event parameter of ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_ENABLE_COMP_EVT
      */
     struct ble_mesh_prov_enable_comp_param {
-        int err_code;
-    } node_prov_enable_comp;
+        int err_code;                           /*!< Indicate the result of enabling BLE Mesh device */
+    } node_prov_enable_comp;                    /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_ENABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_DISABLE_COMP_EVT
      */
     struct ble_mesh_prov_disable_comp_param {
-        int err_code;
-    } node_prov_disable_comp;
+        int err_code;                           /*!< Indicate the result of disabling BLE Mesh device */
+    } node_prov_disable_comp;                   /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_DISABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_LINK_OPEN_EVT
      */
     struct ble_mesh_link_open_evt_param {
-        esp_ble_mesh_prov_bearer_t bearer;
-    } node_prov_link_open;
+        esp_ble_mesh_prov_bearer_t bearer;      /*!< Type of the bearer used when device link is open */
+    } node_prov_link_open;                      /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_LINK_OPEN_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_LINK_CLOSE_EVT
      */
     struct ble_mesh_link_close_evt_param {
-        esp_ble_mesh_prov_bearer_t bearer;
-    } node_prov_link_close;
+        esp_ble_mesh_prov_bearer_t bearer;      /*!< Type of the bearer used when device link is closed */
+    } node_prov_link_close;                     /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_LINK_CLOSE_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_OUTPUT_NUMBER_EVT
      */
     struct ble_mesh_output_num_evt_param {
-        esp_ble_mesh_output_action_t action;
-        uint32_t number;
-    } node_prov_output_num;
+        esp_ble_mesh_output_action_t action;    /*!< Action of Output OOB Authentication */
+        uint32_t number;                        /*!< Number of Output OOB Authentication  */
+    } node_prov_output_num;                     /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_OUTPUT_NUMBER_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_OUTPUT_STRING_EVT
      */
     struct ble_mesh_output_str_evt_param {
-        char string[8];
-    } node_prov_output_str;
+        char string[8];                         /*!< String of Output OOB Authentication */
+    } node_prov_output_str;                     /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_OUTPUT_STRING_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_INPUT_EVT
      */
     struct ble_mesh_input_evt_param {
-        esp_ble_mesh_input_action_t action;
-        uint8_t size;
-    } node_prov_input;
+        esp_ble_mesh_input_action_t action;     /*!< Action of Input OOB Authentication */
+        uint8_t size;                           /*!< Size of Input OOB Authentication */
+    } node_prov_input;                          /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_INPUT_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT
      */
     struct ble_mesh_provision_complete_evt_param {
-        uint16_t net_idx;
-        uint16_t addr;
-        uint8_t  flags;
-        uint32_t iv_index;
-    } node_prov_complete;
+        uint16_t net_idx;                       /*!< NetKey Index */
+        uint16_t addr;                          /*!< Primary address */
+        uint8_t  flags;                         /*!< Flags */
+        uint32_t iv_index;                      /*!< IV Index */
+    } node_prov_complete;                       /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_RESET_EVT
      */
     struct ble_mesh_provision_reset_param {
 
-    } node_prov_reset;
+    } node_prov_reset;                          /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_RESET_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_SET_OOB_PUB_KEY_COMP_EVT
      */
     struct ble_mesh_set_oob_pub_key_comp_param {
-        int err_code;
-    } node_prov_set_oob_pub_key_comp;
+        int err_code;                           /*!< Indicate the result of setting OOB Public Key */
+    } node_prov_set_oob_pub_key_comp;           /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_SET_OOB_PUB_KEY_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_INPUT_NUM_COMP_EVT
      */
     struct ble_mesh_input_number_comp_param {
-        int err_code;
-    } node_prov_input_num_comp;
+        int err_code;                           /*!< Indicate the result of inputting number */
+    } node_prov_input_num_comp;                 /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_INPUT_NUM_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROV_INPUT_STR_COMP_EVT
      */
     struct ble_mesh_input_string_comp_param {
-        int err_code;
-    } node_prov_input_str_comp;
+        int err_code;                           /*!< Indicate the result of inputting string */
+    } node_prov_input_str_comp;                 /*!< Event parameter of ESP_BLE_MESH_NODE_PROV_INPUT_STR_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROXY_IDENTITY_ENABLE_COMP_EVT
      */
     struct ble_mesh_proxy_identity_enable_comp_param {
-        int err_code;
-    } node_proxy_identity_enable_comp;
+        int err_code;                           /*!< Indicate the result of enabling Mesh Proxy advertising */
+    } node_proxy_identity_enable_comp;          /*!< Event parameter of ESP_BLE_MESH_NODE_PROXY_IDENTITY_ENABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROXY_GATT_ENABLE_COMP_EVT
      */
     struct ble_mesh_proxy_gatt_enable_comp_param {
-        int err_code;
-    } node_proxy_gatt_enable_comp;
+        int err_code;                           /*!< Indicate the result of enabling Mesh Proxy Service */
+    } node_proxy_gatt_enable_comp;              /*!< Event parameter of ESP_BLE_MESH_NODE_PROXY_GATT_ENABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_NODE_PROXY_GATT_DISABLE_COMP_EVT
      */
     struct ble_mesh_proxy_gatt_disable_comp_param {
-        int err_code;
-    } node_proxy_gatt_disable_comp;
+        int err_code;                           /*!< Indicate the result of disabling Mesh Proxy Service */
+    } node_proxy_gatt_disable_comp;             /*!< Event parameter of ESP_BLE_MESH_NODE_PROXY_GATT_DISABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_RECV_UNPROV_ADV_PKT_EVT
      */
     struct ble_mesh_provisioner_recv_unprov_adv_pkt_param {
-        uint8_t  dev_uuid[16];
-        uint8_t  addr[6];
-        esp_ble_addr_type_t addr_type;
-        uint16_t oob_info;
-        uint8_t  adv_type;
-        esp_ble_mesh_prov_bearer_t bearer;
-    } provisioner_recv_unprov_adv_pkt;
+        uint8_t  dev_uuid[16];                  /*!< Device UUID of the unprovisoned device */
+        uint8_t  addr[6];                       /*!< Device address of the unprovisoned device */
+        esp_ble_addr_type_t addr_type;          /*!< Device address type */
+        uint16_t oob_info;                      /*!< OOB Info of the unprovisoned device */
+        uint8_t  adv_type;                      /*!< Avertising type of the unprovisoned device */
+        esp_ble_mesh_prov_bearer_t bearer;      /*!< Bearer of the unprovisoned device */
+    } provisioner_recv_unprov_adv_pkt;          /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_RECV_UNPROV_ADV_PKT_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_ENABLE_COMP_EVT
      */
     struct ble_mesh_provisioner_prov_enable_comp_param {
-        int err_code;
-    } provisioner_prov_enable_comp;
+        int err_code;                           /*!< Indicate the result of enabling BLE Mesh Provisioner */
+    } provisioner_prov_enable_comp;             /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_ENABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_DISABLE_COMP_EVT
      */
     struct ble_mesh_provisioner_prov_disable_comp_param {
-        int err_code;
-    } provisioner_prov_disable_comp;
+        int err_code;                           /*!< Indicate the result of disabling BLE Mesh Provisioner */
+    } provisioner_prov_disable_comp;            /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_DISABLE_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_LINK_OPEN_EVT
      */
     struct ble_mesh_provisioner_link_open_evt_param {
-        esp_ble_mesh_prov_bearer_t bearer;
-    } provisioner_prov_link_open;
+        esp_ble_mesh_prov_bearer_t bearer;      /*!< Type of the bearer used when Provisioner link is opened */
+    } provisioner_prov_link_open;               /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_LINK_OPEN_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_READ_OOB_PUB_KEY_EVT
      */
     struct ble_mesh_provisioner_prov_read_oob_pub_key_evt_param {
-        uint8_t link_idx;
-    } provisioner_prov_read_oob_pub_key;
+        uint8_t link_idx;                       /*!< Index of the provisioning link */
+    } provisioner_prov_read_oob_pub_key;        /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_READ_OOB_PUB_KEY_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_INPUT_EVT
      */
     struct ble_mesh_provisioner_prov_input_evt_param {
-        esp_ble_mesh_oob_method_t method;
-        esp_ble_mesh_output_action_t action;
-        uint8_t size;
-        uint8_t link_idx;
-    } provisioner_prov_input;
+        esp_ble_mesh_oob_method_t method;       /*!< Method of device Output OOB Authentication */
+        esp_ble_mesh_output_action_t action;    /*!< Action of device Output OOB Authentication */
+        uint8_t size;                           /*!< Size of device Output OOB Authentication */
+        uint8_t link_idx;                       /*!< Index of the provisioning link */
+    } provisioner_prov_input;                   /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_INPUT_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_OUTPUT_EVT
      */
     struct ble_mesh_provisioner_prov_output_evt_param {
-        esp_ble_mesh_oob_method_t method;
-        esp_ble_mesh_input_action_t action;
-        uint8_t size;
-        uint8_t link_idx;
+        esp_ble_mesh_oob_method_t method;       /*!< Method of device Input OOB Authentication */
+        esp_ble_mesh_input_action_t action;     /*!< Action of device Input OOB Authentication */
+        uint8_t size;                           /*!< Size of device Input OOB Authentication */
+        uint8_t link_idx;                       /*!< Index of the provisioning link */
         union {
-            char string[8];
-            uint32_t number;
+            char string[8];                     /*!< String output by the Provisioner */
+            uint32_t number;                    /*!< Number output by the Provisioner */
         };
-    } provisioner_prov_output;
+    } provisioner_prov_output;                  /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_OUTPUT_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_LINK_CLOSE_EVT
      */
     struct ble_mesh_provisioner_link_close_evt_param {
-        esp_ble_mesh_prov_bearer_t bearer;
-        uint8_t reason;
-    } provisioner_prov_link_close;
+        esp_ble_mesh_prov_bearer_t bearer;      /*!< Type of the bearer used when Provisioner link is closed */
+        uint8_t reason;                         /*!< Reason of the closed provisioning link */
+    } provisioner_prov_link_close;              /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_LINK_CLOSE_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_COMPLETE_EVT
      */
     struct ble_mesh_provisioner_prov_comp_param {
-        int node_idx;
-        esp_ble_mesh_octet16_t device_uuid;
-        uint16_t unicast_addr;
-        uint8_t element_num;
-        uint16_t netkey_idx;
-    } provisioner_prov_complete;
+        int node_idx;                           /*!< Index of the provisioned device */
+        esp_ble_mesh_octet16_t device_uuid;     /*!< Device UUID of the provisioned device */
+        uint16_t unicast_addr;                  /*!< Primary address of the provisioned device */
+        uint8_t element_num;                    /*!< Element count of the provisioned device */
+        uint16_t netkey_idx;                    /*!< NetKey Index of the provisioned device */
+    } provisioner_prov_complete;                /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_COMPLETE_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_ADD_UNPROV_DEV_COMP_EVT
      */
     struct ble_mesh_provisioner_add_unprov_dev_comp_param {
-        int err_code;
-    } provisioner_add_unprov_dev_comp;
+        int err_code;                           /*!< Indicate the result of adding device into queue by the Provisioner */
+    } provisioner_add_unprov_dev_comp;          /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_ADD_UNPROV_DEV_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_DELETE_DEV_COMP_EVT
      */
     struct ble_mesh_provisioner_delete_dev_comp_param {
-        int err_code;
-    } provisioner_delete_dev_comp;
+        int err_code;                           /*!< Indicate the result of deleting device by the Provisioner */
+    } provisioner_delete_dev_comp;              /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_DELETE_DEV_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_SET_DEV_UUID_MATCH_COMP_EVT
      */
     struct ble_mesh_provisioner_set_dev_uuid_match_comp_param {
-        int err_code;
-    } provisioner_set_dev_uuid_match_comp;
+        int err_code;                           /*!< Indicate the result of setting Device UUID match value by the Provisioner */
+    } provisioner_set_dev_uuid_match_comp;      /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_SET_DEV_UUID_MATCH_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_SET_PROV_DATA_INFO_COMP_EVT
      */
     struct ble_mesh_provisioner_set_prov_data_info_comp_param {
-        int err_code;
-    } provisioner_set_prov_data_info_comp;
+        int err_code;                           /*!< Indicate the result of setting provisioning info by the Provisioner */
+    } provisioner_set_prov_data_info_comp;      /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_SET_PROV_DATA_INFO_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_READ_OOB_PUB_KEY_COMP_EVT
      */
     struct ble_mesh_provisioner_prov_read_oob_pub_key_comp_param {
-        int err_code;
-    } provisioner_prov_read_oob_pub_key_comp;
+        int err_code;                           /*!< Indicate the result of setting OOB Public Key by the Provisioner */
+    } provisioner_prov_read_oob_pub_key_comp;   /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_READ_OOB_PUB_KEY_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_INPUT_NUMBER_COMP_EVT
      */
     struct ble_mesh_provisioner_prov_input_num_comp_param {
-        int err_code;
-    } provisioner_prov_input_num_comp;
+        int err_code;                           /*!< Indicate the result of inputting number by the Provisioner */
+    } provisioner_prov_input_num_comp;          /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_INPUT_NUMBER_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_PROV_INPUT_STRING_COMP_EVT
      */
     struct ble_mesh_provisioner_prov_input_str_comp_param {
-        int err_code;
-    } provisioner_prov_input_str_comp;
+        int err_code;                           /*!< Indicate the result of inputting string by the Provisioner */
+    } provisioner_prov_input_str_comp;          /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_PROV_INPUT_STRING_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_SET_NODE_NAME_COMP_EVT
      */
     struct ble_mesh_provisioner_set_node_name_comp_param {
-        int err_code;
-        int node_index;
-    } provisioner_set_node_name_comp;
+        int err_code;                           /*!< Indicate the result of setting provisioned device name by the Provisioner */
+        int node_index;                         /*!< Index of the provisioned device */
+    } provisioner_set_node_name_comp;           /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_SET_NODE_NAME_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_APP_KEY_COMP_EVT
      */
     struct ble_mesh_provisioner_add_local_app_key_comp_param {
-        int err_code;
-        uint16_t app_idx;
-    } provisioner_add_app_key_comp;
+        int err_code;                           /*!< Indicate the result of adding local AppKey by the Provisioner */
+        uint16_t app_idx;                       /*!< AppKey Index */
+    } provisioner_add_app_key_comp;             /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_APP_KEY_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_BIND_APP_KEY_TO_MODEL_COMP_EVT
      */
     struct ble_mesh_provisioner_bind_local_mod_app_comp_param {
-        int err_code;
-    } provisioner_bind_app_key_to_model_comp;
+        int err_code;                           /*!< Indicate the result of binding AppKey with model by the Provisioner */
+    } provisioner_bind_app_key_to_model_comp;   /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_BIND_APP_KEY_TO_MODEL_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_NET_KEY_COMP_EVT
      */
     struct ble_mesh_provisioner_add_local_net_key_comp_param {
-        int err_code;
-        uint16_t net_idx;
-    } provisioner_add_net_key_comp;
+        int err_code;                           /*!< Indicate the result of adding local NetKey by the Provisioner */
+        uint16_t net_idx;                       /*!< NetKey Index */
+    } provisioner_add_net_key_comp;             /*!< Event parameter of ESP_BLE_MESH_PROVISIONER_ADD_LOCAL_NET_KEY_COMP_EVT */
+    /**
+     * @brief ESP_BLE_MESH_SET_FAST_PROV_INFO_COMP_EVT
+     */
     struct ble_mesh_set_fast_prov_info_comp_param {
-        uint8_t status_unicast;
-        uint8_t status_net_idx;
-        uint8_t status_match;
-    } set_fast_prov_info_comp;
+        uint8_t status_unicast;                 /*!< Indicate the result of setting unicast address range of fast provisioning */
+        uint8_t status_net_idx;                 /*!< Indicate the result of setting NetKey Index of fast provisioning */
+        uint8_t status_match;                   /*!< Indicate the result of setting matching Device UUID of fast provisioning */
+    } set_fast_prov_info_comp;                  /*!< Event parameter of ESP_BLE_MESH_SET_FAST_PROV_INFO_COMP_EVT */
+    /**
+     * @brief ESP_BLE_MESH_SET_FAST_PROV_ACTION_COMP_EVT
+     */
     struct ble_mesh_set_fast_prov_action_comp_param {
-        uint8_t status_action;
-    } set_fast_prov_action_comp;
+        uint8_t status_action;                  /*!< Indicate the result of setting action of fast provisioning */
+    } set_fast_prov_action_comp;                /*!< Event parameter of ESP_BLE_MESH_SET_FAST_PROV_ACTION_COMP_EVT */
 } esp_ble_mesh_prov_cb_param_t;
 
+/**
+ * @brief BLE Mesh model callback parameters union
+ */
 typedef union {
     /**
      * @brief ESP_BLE_MESH_MODEL_OPERATION_EVT
      */
     struct ble_mesh_model_operation_evt_param {
-        uint32_t opcode;
-        esp_ble_mesh_model_t *model;
-        esp_ble_mesh_msg_ctx_t *ctx;
-        uint16_t length;
-        uint8_t *msg;
-    } model_operation;
+        uint32_t opcode;                /*!< Opcode of the recieved message */
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which receives the message */
+        esp_ble_mesh_msg_ctx_t *ctx;    /*!< Pointer to the context of the received message */
+        uint16_t length;                /*!< Length of the received message */
+        uint8_t *msg;                   /*!< Value of the received message */
+    } model_operation;                  /*!< Event parameter of ESP_BLE_MESH_MODEL_OPERATION_EVT */
     /**
      * @brief ESP_BLE_MESH_MODEL_SEND_COMP_EVT
      */
     struct ble_mesh_model_send_comp_param {
-        int err_code;
-        uint32_t opcode;
-        esp_ble_mesh_model_t *model;
-        esp_ble_mesh_msg_ctx_t *ctx;
-    } model_send_comp;
+        int err_code;                   /*!< Indicate the result of sending a message */
+        uint32_t opcode;                /*!< Opcode of the message */
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which sends the message */
+        esp_ble_mesh_msg_ctx_t *ctx;    /*!< Context of the message */
+    } model_send_comp;                  /*!< Event parameter of ESP_BLE_MESH_MODEL_SEND_COMP_EVT */
     /**
-    * @brief ESP_BLE_MESH_MODEL_PUBLISH_COMP_EVT
-    */
+     * @brief ESP_BLE_MESH_MODEL_PUBLISH_COMP_EVT
+     */
     struct ble_mesh_model_publish_comp_param {
-        int err_code;
-        esp_ble_mesh_model_t *model;
-    } model_publish_comp;
+        int err_code;                   /*!< Indicate the result of publishing a message */
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which publishes the message */
+    } model_publish_comp;               /*!< Event parameter of ESP_BLE_MESH_MODEL_PUBLISH_COMP_EVT */
     /**
      * @brief ESP_BLE_MESH_CLIENT_MODEL_RECV_PUBLISH_MSG_EVT
      */
     struct ble_mesh_mod_recv_publish_msg_param {
-        uint32_t opcode;
-        esp_ble_mesh_model_t *model;
-        esp_ble_mesh_msg_ctx_t *ctx;
-        uint16_t length;
-        uint8_t *msg;
-    } client_recv_publish_msg;
+        uint32_t opcode;                /*!< Opcode of the unsoliciated received message */
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which receives the message */
+        esp_ble_mesh_msg_ctx_t *ctx;    /*!< Pointer to the context of the message */
+        uint16_t length;                /*!< Length of the received message */
+        uint8_t *msg;                   /*!< Value of the received message */
+    } client_recv_publish_msg;          /*!< Event parameter of ESP_BLE_MESH_CLIENT_MODEL_RECV_PUBLISH_MSG_EVT */
     /**
      * @brief ESP_BLE_MESH_CLIENT_MODEL_SEND_TIMEOUT_EVT
      */
     struct ble_mesh_client_model_send_timeout_param {
-        uint32_t opcode;
-        esp_ble_mesh_model_t *model;
-        esp_ble_mesh_msg_ctx_t *ctx;
-    } client_send_timeout;
+        uint32_t opcode;                /*!< Opcode of the previously sent message */
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which sends the previous message */
+        esp_ble_mesh_msg_ctx_t *ctx;    /*!< Pointer to the context of the previous message */
+    } client_send_timeout;              /*!< Event parameter of ESP_BLE_MESH_CLIENT_MODEL_SEND_TIMEOUT_EVT */
     /**
-    * @brief ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT
-    */
+     * @brief ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT
+     */
     struct ble_mesh_model_publish_update_evt_param {
-        esp_ble_mesh_model_t *model;
-    } model_publish_update;
+        esp_ble_mesh_model_t *model;    /*!< Pointer to the model which is going to update its publish message */
+    } model_publish_update;             /*!< Event parameter of ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT */
 } esp_ble_mesh_model_cb_param_t;
 
+/** Client Model Get/Set message opcode and corresponding Status message opcode */
 typedef struct {
     uint32_t cli_op;        /*!< The client message opcode */
     uint32_t status_op;     /*!< The server status opcode corresponding to the client message opcode */
 } esp_ble_mesh_client_op_pair_t;
 
-/*!< Mesh Client Model Context */
+/** Client Model user data context. */
 typedef struct {
-    esp_ble_mesh_model_t *model;
+    esp_ble_mesh_model_t *model;                    /*!< Pointer to the client model. Initialized by the stack. */
     int op_pair_size;                               /*!< Size of the op_pair */
     const esp_ble_mesh_client_op_pair_t *op_pair;   /*!< Table containing get/set message opcode and corresponding status message opcode */
-    uint32_t publish_status;                        /*!< This variable is reserved for BLE Mesh Stack, does not require initializing on the application layer */
-    void *internal_data;                            /*!< Pointer to the structure of the client model internal data */
+    uint32_t publish_status;                        /*!< Callback used to handle the received unsoliciated message. Initialized by the stack. */
+    void *internal_data;                            /*!< Pointer to the internal data of client model */
     uint8_t msg_role;                               /*!< Role of the device (Node/Provisioner) that is going to send messages */
 } esp_ble_mesh_client_t;
 
index 67694eef4e7bfd0fe915d2ac1235e74223f2d778..593927ff2f9aff2f08d42dddfb9b08f8bb230d42 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 82f6ff5850b5a76cc86c84649e2c31b95bc9d969..fdf1f72d63010523f280044dd7591aba82df3554 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index e7df777dc0fd445fcdc49c5e71e271d92d08824a..cdbdb04ac4f14bafdcd3f757e11dd316f78d4ee0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index eea415d618475348a65185a7aa80d62bdbf03f3d..83f0c98b5b8b00d5d5973a1daf55761ed16c5804 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 41072d227fa31c0cca91072c1ccc4cf63082c5e3..20ae8bdd5e11d06bea8bd6519c1e4fe674e35efb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 13823b978790ac3985de625ab3c539717b2915d6..88c27cea98e7137b5724099569e93111eaf04e66 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 755e0671b26fb9e1b7c17b58739cc7ffa66ba71a..66f1d17d4a78980f47866fe218be934a4ab43d04 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
         ESP_BLE_MESH_SIG_MODEL(ESP_BLE_MESH_MODEL_ID_CONFIG_CLI,          \
                   NULL, NULL, cli_data)
 
+/** Configuration Server Model context */
 typedef struct esp_ble_mesh_cfg_srv {
-    esp_ble_mesh_model_t *model;
+    esp_ble_mesh_model_t *model;    /*!< Pointer to Configuration Server Model */
 
-    uint8_t net_transmit;         /*!< Network Transmit state */
-    uint8_t relay;                /*!< Relay Mode state */
-    uint8_t relay_retransmit;     /*!< Relay Retransmit state */
-    uint8_t beacon;               /*!< Secure Network Beacon state */
-    uint8_t gatt_proxy;           /*!< GATT Proxy state */
-    uint8_t friend_state;         /*!< Friend state */
-    uint8_t default_ttl;          /*!< Default TTL */
+    uint8_t net_transmit;           /*!< Network Transmit state */
+    uint8_t relay;                  /*!< Relay Mode state */
+    uint8_t relay_retransmit;       /*!< Relay Retransmit state */
+    uint8_t beacon;                 /*!< Secure Network Beacon state */
+    uint8_t gatt_proxy;             /*!< GATT Proxy state */
+    uint8_t friend_state;           /*!< Friend state */
+    uint8_t default_ttl;            /*!< Default TTL */
 
     /** Heartbeat Publication */
     struct {
-        struct k_delayed_work timer;
-
-        uint16_t dst;
-        uint16_t count;
-        uint8_t  period;
-        uint8_t  ttl;
-        uint16_t feature;
-        uint16_t net_idx;
+        struct k_delayed_work timer;    /*!< Heartbeat Publication timer */
+
+        uint16_t dst;                   /*!< Destination address for Heartbeat messages */
+        uint16_t count;                 /*!< Number of Heartbeat messages to be sent */
+        uint8_t  period;                /*!< Period for sending Heartbeat messages */
+        uint8_t  ttl;                   /*!< TTL to be used when sending Heartbeat messages */
+        uint16_t feature;               /*!< Bit field indicating features that trigger Heartbeat messages when changed */
+        uint16_t net_idx;               /*!< NetKey Index used by Heartbeat Publication */
     } heartbeat_pub;
 
     /** Heartbeat Subscription */
     struct {
-        int64_t  expiry;
+        int64_t  expiry;                /*!< Timestamp when Heartbeat subscription period is expired */
 
-        uint16_t src;
-        uint16_t dst;
-        uint16_t count;
-        uint8_t  min_hops;
-        uint8_t  max_hops;
+        uint16_t src;                   /*!< Source address for Heartbeat messages */
+        uint16_t dst;                   /*!< Destination address for Heartbeat messages */
+        uint16_t count;                 /*!< Number of Heartbeat messages received */
+        uint8_t  min_hops;              /*!< Minimum hops when receiving Heartbeat messages */
+        uint8_t  max_hops;              /*!< Maximum hops when receiving Heartbeat messages */
 
         /** Optional subscription tracking function */
         void (*func)(uint8_t hops, uint16_t feature);
     } heartbeat_sub;
 } esp_ble_mesh_cfg_srv_t;
 
-/** Parameters of Composition Data Get. */
+/** Parameters of Config Composition Data Get. */
 typedef struct {
     uint8_t page;                   /*!< Page number of the Composition Data. */
 } esp_ble_mesh_cfg_composition_data_get_t;
 
-/** Parameters of Model Publication Get. */
+/** Parameters of Config Model Publication Get. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_pub_get_t;
 
-/** Parameters of SIG Model Subscription Get. */
+/** Parameters of Config SIG Model Subscription Get. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
 } esp_ble_mesh_cfg_sig_model_sub_get_t;
 
-/** Parameters of Vendor Model Subscription Get. */
+/** Parameters of Config Vendor Model Subscription Get. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_vnd_model_sub_get_t;
 
-/** Parameters of Application Key Get. */
+/** Parameters of Config AppKey Get. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
 } esp_ble_mesh_cfg_app_key_get_t;
 
-/** Parameters of Node Identity Get. */
+/** Parameters of Config Node Identity Get. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
 } esp_ble_mesh_cfg_node_identity_get_t;
 
-/** Parameters of SIG Model App Get. */
+/** Parameters of Config SIG Model App Get. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
 } esp_ble_mesh_cfg_sig_model_app_get_t;
 
-/** Parameters of Vendor Model App Get. */
+/** Parameters of Config Vendor Model App Get. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_vnd_model_app_get_t;
 
-/** Parameters of Key Refresh Phase Get. */
+/** Parameters of Config Key Refresh Phase Get. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
 } esp_ble_mesh_cfg_kr_phase_get_t;
 
-/** Parameters of Low Power Node PollTimeout Get. */
+/** Parameters of Config Low Power Node PollTimeout Get. */
 typedef struct {
     uint16_t lpn_addr;              /*!< The unicast address of the Low Power node */
 } esp_ble_mesh_cfg_lpn_polltimeout_get_t;
 
-/** Parameters of Beacon Set. */
+/** Parameters of Config Beacon Set. */
 typedef struct {
-    uint8_t beacon;
+    uint8_t beacon;                 /*!< New Secure Network Beacon state */
 } esp_ble_mesh_cfg_beacon_set_t;
 
-/** Parameters of Default TTL Set. */
+/** Parameters of Config Default TTL Set. */
 typedef struct {
     uint8_t ttl;                    /*!< The default TTL state value */
 } esp_ble_mesh_cfg_default_ttl_set_t;
 
-/** Parameters of Friend Set. */
+/** Parameters of Config Friend Set. */
 typedef struct {
     uint8_t friend_state;           /*!< The friend state value */
 } esp_ble_mesh_cfg_friend_set_t;
 
-/** Parameters of GATT Proxy Set. */
+/** Parameters of Config GATT Proxy Set. */
 typedef struct {
     uint8_t gatt_proxy;             /*!< The GATT Proxy state value */
 } esp_ble_mesh_cfg_gatt_proxy_set_t;
 
-/** Parameters of Relay Set. */
+/** Parameters of Config Relay Set. */
 typedef struct {
     uint8_t relay;                  /*!< The relay value */
     uint8_t relay_retransmit;       /*!< The relay retransmit value */
 } esp_ble_mesh_cfg_relay_set_t;
 
-/** Parameters of Network Key Add. */
+/** Parameters of Config NetKey Add. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint8_t  net_key[16];           /*!< The network key value */
 } esp_ble_mesh_cfg_net_key_add_t;
 
-/** Parameters of Application Key Add. */
+/** Parameters of Config AppKey Add. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint16_t app_idx;               /*!< The app key index */
     uint8_t  app_key[16];           /*!< The app key value */
 } esp_ble_mesh_cfg_app_key_add_t;
 
-/** Parameters of Model Application Key Bind. */
+/** Parameters of Config Model App Bind. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_app_idx;         /*!< Index of the app key to bind with the model */
@@ -188,7 +189,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_app_bind_t;
 
-/** Parameters of Model Publication Set. */
+/** Parameters of Config Model Publication Set. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t publish_addr;          /*!< Value of the publish address */
@@ -201,7 +202,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_pub_set_t;
 
-/** Parameters of Model Subscription Add. */
+/** Parameters of Config Model Subscription Add. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t sub_addr;              /*!< The address to be added to the Subscription List */
@@ -209,7 +210,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_add_t;
 
-/** Parameters of Model Subscription Delete. */
+/** Parameters of Config Model Subscription Delete. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t sub_addr;              /*!< The address to be removed from the Subscription List */
@@ -217,7 +218,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_delete_t;
 
-/** Parameters of Model Subscription Overwrite. */
+/** Parameters of Config Model Subscription Overwrite. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t sub_addr;              /*!< The address to be added to the Subscription List */
@@ -225,7 +226,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_overwrite_t;
 
-/** Parameters of Model Subscription Virtual Address Add. */
+/** Parameters of Config Model Subscription Virtual Address Add. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint8_t  label_uuid[16];        /*!< The Label UUID of the virtual address to be added to the Subscription List */
@@ -233,7 +234,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_va_add_t;
 
-/** Parameters of Model Subscription Virtual Address Delete. */
+/** Parameters of Config Model Subscription Virtual Address Delete. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint8_t  label_uuid[16];        /*!< The Label UUID of the virtual address to be removed from the Subscription List */
@@ -241,7 +242,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_va_delete_t;
 
-/** Parameters of Model Subscription Virtual Address Overwrite. */
+/** Parameters of Config Model Subscription Virtual Address Overwrite. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint8_t  label_uuid[16];        /*!< The Label UUID of the virtual address to be added to the Subscription List */
@@ -249,7 +250,7 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_va_overwrite_t;
 
-/** Parameters of Model Publication Virtual Address Set. */
+/** Parameters of Config Model Publication Virtual Address Set. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint8_t  label_uuid[16];        /*!< Value of the Label UUID publish address */
@@ -262,44 +263,44 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_pub_va_set_t;
 
-/** Parameters of Model Subscription Delete All. */
+/** Parameters of Config Model Subscription Delete All. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_id;              /*!< The model id */
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_sub_delete_all_t;
 
-/** Parameters of Network Key Update. */
+/** Parameters of Config NetKey Update. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint8_t  net_key[16];           /*!< The network key value */
 } esp_ble_mesh_cfg_net_key_update_t;
 
-/** Parameters of Network Key Delete. */
+/** Parameters of Config NetKey Delete. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
 } esp_ble_mesh_cfg_net_key_delete_t;
 
-/** Parameters of Application Key Update. */
+/** Parameters of Config AppKey Update. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint16_t app_idx;               /*!< The app key index */
     uint8_t  app_key[16];           /*!< The app key value */
 } esp_ble_mesh_cfg_app_key_update_t;
 
-/** Parameters of Application Key Delete. */
+/** Parameters of Config AppKey Delete. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint16_t app_idx;               /*!< The app key index */
 } esp_ble_mesh_cfg_app_key_delete_t;
 
-/** Parameters of Node Identity Set. */
+/** Parameters of Config Node Identity Set. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint8_t  identity;              /*!< New Node Identity state */
 } esp_ble_mesh_cfg_node_identity_set_t;
 
-/** Parameters of Model Application Key Unbind. */
+/** Parameters of Config Model App Unbind. */
 typedef struct {
     uint16_t element_addr;          /*!< The element address */
     uint16_t model_app_idx;         /*!< Index of the app key to bind with the model */
@@ -307,32 +308,32 @@ typedef struct {
     uint16_t company_id;            /*!< The company id, if not a vendor model, shall set to 0xFFFF */
 } esp_ble_mesh_cfg_model_app_unbind_t;
 
-/** Parameters of Key Refresh Phase Set. */
+/** Parameters of Config Key Refresh Phase Set. */
 typedef struct {
     uint16_t net_idx;               /*!< The network key index */
     uint8_t  transition;            /*!< New Key Refresh Phase Transition */
 } esp_ble_mesh_cfg_kr_phase_set_t;
 
-/** Parameters of Network Transmit Set. */
+/** Parameters of Config Network Transmit Set. */
 typedef struct {
     uint8_t net_transmit;           /*!< Network Transmit State */
 } esp_ble_mesh_cfg_net_transmit_set_t;
 
-/** Parameters of Model Heartbeat Publication Set. */
+/** Parameters of Config Model Heartbeat Publication Set. */
 typedef struct  {
-    uint16_t dst;
-    uint8_t  count;
-    uint8_t  period;
-    uint8_t  ttl;
-    uint16_t feature;
-    uint16_t net_idx;
+    uint16_t dst;                   /*!< Destination address for Heartbeat messages */
+    uint8_t  count;                 /*!< Number of Heartbeat messages to be sent */
+    uint8_t  period;                /*!< Period for sending Heartbeat messages */
+    uint8_t  ttl;                   /*!< TTL to be used when sending Heartbeat messages */
+    uint16_t feature;               /*!< Bit field indicating features that trigger Heartbeat messages when changed */
+    uint16_t net_idx;               /*!< NetKey Index */
 } esp_ble_mesh_cfg_heartbeat_pub_set_t;
 
-/** Parameters of Model Heartbeat Subscription Set. */
+/** Parameters of Config Model Heartbeat Subscription Set. */
 typedef struct {
-    uint16_t src;
-    uint16_t dst;
-    uint8_t  period;
+    uint16_t src;                   /*!< Source address for Heartbeat messages */
+    uint16_t dst;                   /*!< Destination address for Heartbeat messages */
+    uint8_t  period;                /*!< Period for receiving Heartbeat messages */
 } esp_ble_mesh_cfg_heartbeat_sub_set_t;
 
 /**
@@ -411,28 +412,34 @@ typedef union {
     esp_ble_mesh_cfg_net_transmit_set_t       net_transmit_set;       /*!< For ESP_BLE_MESH_MODEL_OP_NETWORK_TRANSMIT_SET */
 } esp_ble_mesh_cfg_client_set_state_t;
 
+/** Parameter of Config Beacon Status */
 typedef struct {
     uint8_t beacon;                     /*!< Secure Network Beacon state value */
 } esp_ble_mesh_cfg_beacon_status_cb_t;
 
+/** Parameters of Config Composition Data Status */
 typedef struct {
     uint8_t page;                              /*!< Page number of the Composition Data */
     struct net_buf_simple *composition_data;   /*!< Pointer to Composition Data for the identified page */
 } esp_ble_mesh_cfg_comp_data_status_cb_t;
 
+/** Parameter of Config Default TTL Status */
 typedef struct {
     uint8_t default_ttl;                /*!< Default TTL state value */
 } esp_ble_mesh_cfg_default_ttl_status_cb_t;
 
+/** Parameter of Config GATT Proxy Status */
 typedef struct {
     uint8_t gatt_proxy;                 /*!< GATT Proxy state value */
 } esp_ble_mesh_cfg_gatt_proxy_status_cb_t;
 
+/** Parameters of Config Relay Status */
 typedef struct {
     uint8_t relay;                      /*!< Relay state value */
     uint8_t retransmit;                 /*!< Relay retransmit value(number of retransmissions and number of 10-millisecond steps between retransmissions) */
 } esp_ble_mesh_cfg_relay_status_cb_t;
 
+/** Parameters of Config Model Publication Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t element_addr;              /*!< Address of the element */
@@ -446,6 +453,7 @@ typedef struct {
     uint16_t model_id;                  /*!< Model ID */
 } esp_ble_mesh_cfg_model_pub_status_cb_t;
 
+/** Parameters of Config Model Subscription Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t element_addr;              /*!< Address of the element */
@@ -454,17 +462,20 @@ typedef struct {
     uint16_t model_id;                  /*!< Model ID */
 } esp_ble_mesh_cfg_model_sub_status_cb_t;
 
+/** Parameters of Config NetKey Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t net_idx;                   /*!< Index of the NetKey */
 } esp_ble_mesh_cfg_net_key_status_cb_t;
 
+/** Parameters of Config AppKey Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t net_idx;                   /*!< Index of the NetKey */
     uint16_t app_idx;                   /*!< Index of the application key */
 } esp_ble_mesh_cfg_app_key_status_cb_t;
 
+/** Parameters of Config Model App Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t element_addr;              /*!< Address of the element */
@@ -473,10 +484,12 @@ typedef struct {
     uint16_t model_id;                  /*!< Model ID */
 } esp_ble_mesh_cfg_mod_app_status_cb_t;
 
+/** Parameter of Config Friend Status */
 typedef struct {
     uint8_t friend_state;               /*!< Friend state value */
 } esp_ble_mesh_cfg_friend_status_cb_t;
 
+/** Parameters of Config Heartbeat Publication Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t dst;                       /*!< Destination address for Heartbeat messages */
@@ -487,6 +500,7 @@ typedef struct {
     uint16_t net_idx;                   /*!< Index of the NetKey */
 } esp_ble_mesh_cfg_hb_pub_status_cb_t;
 
+/** Parameters of Config Heartbeat Subscription Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t src;                       /*!< Source address for Heartbeat messages */
@@ -497,11 +511,13 @@ typedef struct {
     uint8_t  max_hops;                  /*!< Maximum hops when receiving Heartbeat messages */
 } esp_ble_mesh_cfg_hb_sub_status_cb_t;
 
+/** Parameters of Config Network Transmit Status */
 typedef struct {
     uint8_t net_trans_count:3;          /*!< Number of transmissions for each Network PDU originating from the node */
     uint8_t net_trans_step :5;          /*!< Maximum hops when receiving Heartbeat messages */
 } esp_ble_mesh_cfg_net_trans_status_cb_t;
 
+/** Parameters of Config SIG/Vendor Subscription List */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t element_addr;              /*!< Address of the element */
@@ -510,41 +526,50 @@ typedef struct {
     struct net_buf_simple *sub_addr;    /*!< A block of all addresses from the Subscription List */
 } esp_ble_mesh_cfg_model_sub_list_cb_t;
 
+/** Parameter of Config NetKey List */
 typedef struct {
     struct net_buf_simple *net_idx;     /*!< A list of NetKey Indexes known to the node */
 } esp_ble_mesh_cfg_net_key_list_cb_t;
 
+/** Parameters of Config AppKey List */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t net_idx;                   /*!< NetKey Index of the NetKey that the AppKeys are bound to */
     struct net_buf_simple *app_idx;     /*!< A list of AppKey indexes that are bound to the NetKey identified by NetKeyIndex */
 } esp_ble_mesh_cfg_app_key_list_cb_t;
 
+/** Parameters of Config Node Identity Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t net_idx;                   /*!< Index of the NetKey */
     uint8_t  identity;                  /*!< Node Identity state */
 } esp_ble_mesh_cfg_node_id_status_cb_t;
 
+/** Parameters of Config SIG/Vendor Model App List */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t element_addr;              /*!< Address of the element */
     uint16_t company_id;                /*!< Company ID */
     uint16_t model_id;                  /*!< Model ID */
-    struct net_buf_simple *app_idx;    /*!< All AppKey indexes bound to the Model */
+    struct net_buf_simple *app_idx;     /*!< All AppKey indexes bound to the Model */
 } esp_ble_mesh_cfg_model_app_list_cb_t;
 
+/** Parameters of Config Key Refresh Phase Status */
 typedef struct {
     uint8_t  status;                    /*!< Status Code for the request message */
     uint16_t net_idx;                   /*!< Index of the NetKey */
     uint8_t  phase;                     /*!< Key Refresh Phase state */
 } esp_ble_mesh_cfg_kr_phase_status_cb_t;
 
+/** Parameters of Config Low Power Node PollTimeout Status */
 typedef struct {
     uint16_t lpn_addr;                  /*!< The unicast address of the Low Power node */
     int32_t  poll_timeout;              /*!< The current value of the PollTimeout timer of the Low Power node */
 } esp_ble_mesh_cfg_lpn_pollto_status_cb_t;
 
+/**
+ * @brief Configuration Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_cfg_beacon_status_cb_t      beacon_status;         /*!< The beacon status value */
     esp_ble_mesh_cfg_comp_data_status_cb_t   comp_data_status;      /*!< The composition data status value */
@@ -569,12 +594,14 @@ typedef union {
     esp_ble_mesh_cfg_lpn_pollto_status_cb_t  lpn_timeout_status;    /*!< The low power node poll timeout status value */
 } esp_ble_mesh_cfg_client_common_cb_param_t;
 
+/** Configuration Client Model callback parameters */
 typedef struct {
     int error_code;                                         /*!< Appropriate error code */
     esp_ble_mesh_client_common_param_t       *params;       /*!< The client common parameters */
     esp_ble_mesh_cfg_client_common_cb_param_t status_cb;    /*!< The config status message callback values */
 } esp_ble_mesh_cfg_client_cb_param_t;
 
+/** This enum value is the event of Configuration Client Model */
 typedef enum {
     ESP_BLE_MESH_CFG_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_CFG_CLIENT_SET_STATE_EVT,
@@ -583,20 +610,26 @@ typedef enum {
     ESP_BLE_MESH_CFG_CLIENT_EVT_MAX,
 } esp_ble_mesh_cfg_client_cb_event_t;
 
+/** Parameter of Config AppKey Add */
 typedef struct {
-    uint16_t app_idx;   /* AppKey Index of the Config AppKey Add */
+    uint16_t app_idx;   /*!< AppKey Index of the Config AppKey Add */
 } esp_ble_mesh_cfg_srv_app_key_add_cb_t;
 
+/**
+ * @brief Configuration Server Model received message union
+ */
 typedef union {
-    esp_ble_mesh_cfg_srv_app_key_add_cb_t   app_key_add;    /* !< The Config AppKey Add event value */
+    esp_ble_mesh_cfg_srv_app_key_add_cb_t   app_key_add;    /*!< The Config AppKey Add event value */
 } esp_ble_mesh_cfg_server_common_cb_param_t;
 
+/** Configuration Server Model callback parameters */
 typedef struct {
     esp_ble_mesh_model_t *model;    /*!< Pointer to the server model structure */
     esp_ble_mesh_msg_ctx_t ctx;     /*!< The context of the received message */
     esp_ble_mesh_cfg_server_common_cb_param_t status_cb;    /*!< The received configuration message callback values */
 } esp_ble_mesh_cfg_server_cb_param_t;
 
+/** This enum value is the event of Configuration Server Model */
 typedef enum {
     ESP_BLE_MESH_CFG_SERVER_RECV_MSG_EVT,
     ESP_BLE_MESH_CFG_SERVER_EVT_MAX,
@@ -606,11 +639,19 @@ typedef enum {
  *  @brief Bluetooth Mesh Config Client and Server Model functions.
  */
 
-/** @brief: event, event code of Config Client Model events; param, parameters of Config Client Model events */
+/**
+ * @brief   Configuration Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_cfg_client_cb_t)(esp_ble_mesh_cfg_client_cb_event_t event,
         esp_ble_mesh_cfg_client_cb_param_t *param);
 
-/** @brief: event, event code of Config Client Model events; param, parameters of Config Client Model events */
+/**
+ * @brief   Configuration Server Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_cfg_server_cb_t)(esp_ble_mesh_cfg_server_cb_event_t event,
         esp_ble_mesh_cfg_server_cb_param_t *param);
 
@@ -638,7 +679,7 @@ esp_err_t esp_ble_mesh_register_config_server_callback(esp_ble_mesh_cfg_server_c
  * @brief         Get the value of Config Server Model states using the Config Client Model get messages.
  *
  * @note          If you want to find the opcodes and corresponding meanings accepted by this API,
- *                please refer to (@ref esp_ble_mesh_opcode_config_client_get_t).
+ *                please refer to esp_ble_mesh_opcode_config_client_get_t in esp_ble_mesh_defs.h
  *
  * @param[in]     params:    Pointer to BLE Mesh common client parameters.
  * @param[in]     get_state: Pointer to a union, each kind of opcode corresponds to one structure inside.
@@ -654,7 +695,7 @@ esp_err_t esp_ble_mesh_config_client_get_state(esp_ble_mesh_client_common_param_
  * @brief         Set the value of the Configuration Server Model states using the Config Client Model set messages.
  *
  * @note          If you want to find the opcodes and corresponding meanings accepted by this API,
- *                please refer to (@ref esp_ble_mesh_opcode_config_client_set_t).
+ *                please refer to esp_ble_mesh_opcode_config_client_set_t in esp_ble_mesh_defs.h
  *
  * @param[in]     params:    Pointer to BLE Mesh common client parameters.
  * @param[in]     set_state: Pointer to a union, each kind of opcode corresponds to one structure inside.
index a8db2852f700da4dddc21531aef1537eb953cc18..e34c706302661e9f01044e0ea47381f78f4eb601 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
  *  @brief Bluetooth Mesh Generic Client Model Get and Set parameters structure.
  */
 
+/** Parameters of Generic OnOff Set. */
 typedef struct {
-    bool    op_en;      /* Indicate if optional parameters are included  */
-    uint8_t onoff;      /* Target value of Generic OnOff state           */
-    uint8_t tid;        /* Transaction ID                                */
-    uint8_t trans_time; /* Time to complete state transition (optional)  */
-    uint8_t delay;      /* Indicate message execution delay (C.1)        */
+    bool    op_en;      /*!< Indicate if optional parameters are included */
+    uint8_t onoff;      /*!< Target value of Generic OnOff state */
+    uint8_t tid;        /*!< Transaction ID */
+    uint8_t trans_time; /*!< Time to complete state transition (optional) */
+    uint8_t delay;      /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_gen_onoff_set_t;
 
+/** Parameters of Generic Level Set. */
 typedef struct {
-    bool    op_en;      /* Indicate if optional parameters are included  */
-    int16_t level;      /* Target value of Generic Level state           */
-    uint8_t tid;        /* Transaction ID                                */
-    uint8_t trans_time; /* Time to complete state transition (optional)  */
-    uint8_t delay;      /* Indicate message execution delay (C.1)        */
+    bool    op_en;      /*!< Indicate if optional parameters are included */
+    int16_t level;      /*!< Target value of Generic Level state */
+    uint8_t tid;        /*!< Transaction ID */
+    uint8_t trans_time; /*!< Time to complete state transition (optional) */
+    uint8_t delay;      /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_gen_level_set_t;
 
+/** Parameters of Generic Delta Set. */
 typedef struct {
-    bool    op_en;      /* Indicate if optional parameters are included  */
-    int32_t level;      /* Delta change of Generic Level state           */
-    uint8_t tid;        /* Transaction ID                                */
-    uint8_t trans_time; /* Time to complete state transition (optional)  */
-    uint8_t delay;      /* Indicate message execution delay (C.1)        */
+    bool    op_en;      /*!< Indicate if optional parameters are included */
+    int32_t level;      /*!< Delta change of Generic Level state */
+    uint8_t tid;        /*!< Transaction ID */
+    uint8_t trans_time; /*!< Time to complete state transition (optional) */
+    uint8_t delay;      /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_gen_delta_set_t;
 
+/** Parameters of Generic Move Set. */
 typedef struct {
-    bool    op_en;      /* Indicate if optional parameters are included                     */
-    int16_t delta_level;/* Delta Level step to calculate Move speed for Generic Level state */
-    uint8_t tid;        /* Transaction ID                                                   */
-    uint8_t trans_time; /* Time to complete state transition (optional)                     */
-    uint8_t delay;      /* Indicate message execution delay (C.1)                           */
+    bool    op_en;          /*!< Indicate if optional parameters are included */
+    int16_t delta_level;    /*!< Delta Level step to calculate Move speed for Generic Level state */
+    uint8_t tid;            /*!< Transaction ID */
+    uint8_t trans_time;     /*!< Time to complete state transition (optional) */
+    uint8_t delay;          /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_gen_move_set_t;
 
+/** Parameter of Generic Default Transition Time Set. */
 typedef struct {
-    uint8_t trans_time; /* The value of the Generic Default Transition Time state */
+    uint8_t trans_time; /*!< The value of the Generic Default Transition Time state */
 } esp_ble_mesh_gen_def_trans_time_set_t;
 
+/** Parameter of Generic OnPowerUp Set. */
 typedef struct {
-    uint8_t onpowerup;    /* The value of the Generic OnPowerUp state */
+    uint8_t onpowerup;  /*!< The value of the Generic OnPowerUp state */
 } esp_ble_mesh_gen_onpowerup_set_t;
 
+/** Parameters of Generic Power Level Set. */
 typedef struct {
-    bool     op_en;      /* Indicate if optional parameters are included  */
-    uint16_t power;      /* Target value of Generic Power Actual state    */
-    uint8_t  tid;        /* Transaction ID                                */
-    uint8_t  trans_time; /* Time to complete state transition (optional)  */
-    uint8_t  delay;      /* Indicate message execution delay (C.1)        */
+    bool     op_en;         /*!< Indicate if optional parameters are included */
+    uint16_t power;         /*!< Target value of Generic Power Actual state */
+    uint8_t  tid;           /*!< Transaction ID */
+    uint8_t  trans_time;    /*!< Time to complete state transition (optional) */
+    uint8_t  delay;         /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_gen_power_level_set_t;
 
+/** Parameter of Generic Power Default Set. */
 typedef struct {
-    uint16_t power;      /* The value of the Generic Power Default state */
+    uint16_t power;         /*!< The value of the Generic Power Default state */
 } esp_ble_mesh_gen_power_default_set_t;
 
+/** Parameters of Generic Power Range Set. */
 typedef struct {
-    uint16_t range_min;  /* Value of Range Min field of Generic Power Range state */
-    uint16_t range_max;  /* Value of Range Max field of Generic Power Range state */
+    uint16_t range_min;     /*!< Value of Range Min field of Generic Power Range state */
+    uint16_t range_max;     /*!< Value of Range Max field of Generic Power Range state */
 } esp_ble_mesh_gen_power_range_set_t;
 
+/** Parameters of Generic Location Global Set. */
 typedef struct {
-    int32_t global_latitude;  /* Global Coordinates (Latitude)  */
-    int32_t global_longitude; /* Global Coordinates (Longitude) */
-    int16_t global_altitude;  /* Global Altitude                */
+    int32_t global_latitude;    /*!< Global Coordinates (Latitude) */
+    int32_t global_longitude;   /*!< Global Coordinates (Longitude) */
+    int16_t global_altitude;    /*!< Global Altitude */
 } esp_ble_mesh_gen_loc_global_set_t;
 
+/** Parameters of Generic Location Local Set. */
 typedef struct {
-    int16_t  local_north;     /* Local Coordinates (North) */
-    int16_t  local_east;      /* Local Coordinates (East)  */
-    int16_t  local_altitude;  /* Local Altitude            */
-    uint8_t  floor_number;    /* Floor Number              */
-    uint16_t uncertainty;     /* Uncertainty               */
+    int16_t  local_north;       /*!< Local Coordinates (North) */
+    int16_t  local_east;        /*!< Local Coordinates (East) */
+    int16_t  local_altitude;    /*!< Local Altitude */
+    uint8_t  floor_number;      /*!< Floor Number */
+    uint16_t uncertainty;       /*!< Uncertainty */
 } esp_ble_mesh_gen_loc_local_set_t;
 
+/** Parameter of Generic User Property Get. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic User Property */
+    uint16_t property_id;       /*!< Property ID identifying a Generic User Property */
 } esp_ble_mesh_gen_user_property_get_t;
 
+/** Parameters of Generic User Property Set. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic User Property */
-    struct net_buf_simple *property_value;  /* Raw value for the User Property    */
+    uint16_t property_id;   /*!< Property ID identifying a Generic User Property */
+    struct net_buf_simple *property_value;  /*!< Raw value for the User Property */
 } esp_ble_mesh_gen_user_property_set_t;
 
+/** Parameter of Generic Admin Property Get. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic Admin Property */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Admin Property */
 } esp_ble_mesh_gen_admin_property_get_t;
 
+/** Parameters of Generic Admin Property Set. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic Admin Property */
-    uint8_t  user_access;   /* Enumeration indicating user access               */
-    struct net_buf_simple *property_value;  /* Raw value for the Admin Property    */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Admin Property */
+    uint8_t  user_access;   /*!< Enumeration indicating user accessn */
+    struct net_buf_simple *property_value;  /*!< Raw value for the Admin Property */
 } esp_ble_mesh_gen_admin_property_set_t;
 
+/** Parameter of Generic Manufacturer Property Get. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic Manufacturer Property */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Manufacturer Property */
 } esp_ble_mesh_gen_manufacturer_property_get_t;
 
+/** Parameters of Generic Manufacturer Property Set. */
 typedef struct {
-    uint16_t property_id;   /* Property ID identifying a Generic Manufacturer Property */
-    uint8_t  user_access;   /* Enumeration indicating user access                      */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Manufacturer Property */
+    uint8_t  user_access;   /*!< Enumeration indicating user access */
 } esp_ble_mesh_gen_manufacturer_property_set_t;
 
+/** Parameter of Generic Client Properties Get. */
 typedef struct {
-    uint16_t property_id;   /* A starting Client Property ID present within an element */
+    uint16_t property_id;   /*!< A starting Client Property ID present within an element */
 } esp_ble_mesh_gen_client_properties_get_t;
 
+/**
+ * @brief Generic Client Model get message union
+ */
 typedef union {
     esp_ble_mesh_gen_user_property_get_t         user_property_get;         /*!< For ESP_BLE_MESH_MODEL_OP_GEN_USER_PROPERTY_GET */
     esp_ble_mesh_gen_admin_property_get_t        admin_property_get;        /*!< For ESP_BLE_MESH_MODEL_OP_GEN_ADMIN_PROPERTY_GET*/
@@ -266,6 +287,9 @@ typedef union {
     esp_ble_mesh_gen_client_properties_get_t     client_properties_get;     /*!< For ESP_BLE_MESH_MODEL_OP_GEN_CLIENT_PROPERTIES_GET */
 } esp_ble_mesh_generic_client_get_state_t;
 
+/**
+ * @brief Generic Client Model set message union
+ */
 typedef union {
     esp_ble_mesh_gen_onoff_set_t          onoff_set;            /*!< For ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET & ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET_UNACK */
     esp_ble_mesh_gen_level_set_t          level_set;            /*!< For ESP_BLE_MESH_MODEL_OP_GEN_LEVEL_SET & ESP_BLE_MESH_MODEL_OP_GEN_LEVEL_SET_UNACK */
@@ -287,107 +311,128 @@ typedef union {
  *  @brief Bluetooth Mesh Generic Client Model Get and Set callback parameters structure.
  */
 
+/** Parameters of Generic OnOff Status. */
 typedef struct {
-    bool    op_en;         /* Indicate if optional parameters are included   */
-    uint8_t present_onoff; /* Current value of Generic OnOff state           */
-    uint8_t target_onoff;  /* Target value of Generic OnOff state (optional) */
-    uint8_t remain_time;   /* Time to complete state transition (C.1)        */
+    bool    op_en;          /*!< Indicate if optional parameters are included */
+    uint8_t present_onoff;  /*!< Current value of Generic OnOff state */
+    uint8_t target_onoff;   /*!< Target value of Generic OnOff state (optional) */
+    uint8_t remain_time;    /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_gen_onoff_status_cb_t;
 
+/** Parameters of Generic Level Status. */
 typedef struct {
-    bool    op_en;          /* Indicate if optional parameters are included       */
-    int16_t present_level;  /* Current value of Generic Level state               */
-    int16_t target_level;   /* Target value of the Generic Level state (optional) */
-    uint8_t remain_time;    /* Time to complete state transition (C.1)            */
+    bool    op_en;          /*!< Indicate if optional parameters are included */
+    int16_t present_level;  /*!< Current value of Generic Level state */
+    int16_t target_level;   /*!< Target value of the Generic Level state (optional) */
+    uint8_t remain_time;    /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_gen_level_status_cb_t;
 
+/** Parameter of Generic Default Transition Time Status. */
 typedef struct {
-    uint8_t trans_time;     /* The value of the Generic Default Transition Time state */
+    uint8_t trans_time;     /*!< The value of the Generic Default Transition Time state */
 } esp_ble_mesh_gen_def_trans_time_status_cb_t;
 
+/** Parameter of Generic OnPowerUp Status. */
 typedef struct {
-    uint8_t onpowerup;      /* The value of the Generic OnPowerUp state */
+    uint8_t onpowerup;      /*!< The value of the Generic OnPowerUp state */
 } esp_ble_mesh_gen_onpowerup_status_cb_t;
 
+/** Parameters of Generic Power Level Status. */
 typedef struct {
-    bool     op_en;         /* Indicate if optional parameters are included          */
-    uint16_t present_power; /* Current value of Generic Power Actual state           */
-    uint16_t target_power;  /* Target value of Generic Power Actual state (optional) */
-    uint8_t  remain_time;   /* Time to complete state transition (C.1)               */
+    bool     op_en;         /*!< Indicate if optional parameters are included */
+    uint16_t present_power; /*!< Current value of Generic Power Actual state */
+    uint16_t target_power;  /*!< Target value of Generic Power Actual state (optional) */
+    uint8_t  remain_time;   /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_gen_power_level_status_cb_t;
 
+/** Parameter of Generic Power Last Status. */
 typedef struct {
-    uint16_t power;         /* The value of the Generic Power Last state */
+    uint16_t power;         /*!< The value of the Generic Power Last state */
 } esp_ble_mesh_gen_power_last_status_cb_t;
 
+/** Parameter of Generic Power Default Status. */
 typedef struct {
-    uint16_t power;         /* The value of the Generic Default Last state */
+    uint16_t power;         /*!< The value of the Generic Default Last state */
 } esp_ble_mesh_gen_power_default_status_cb_t;
 
+/** Parameters of Generic Power Range Status. */
 typedef struct {
-    uint8_t  status_code;   /* Status Code for the request message                   */
-    uint16_t range_min;     /* Value of Range Min field of Generic Power Range state */
-    uint16_t range_max;     /* Value of Range Max field of Generic Power Range state */
+    uint8_t  status_code;   /*!< Status Code for the request message */
+    uint16_t range_min;     /*!< Value of Range Min field of Generic Power Range state */
+    uint16_t range_max;     /*!< Value of Range Max field of Generic Power Range state */
 } esp_ble_mesh_gen_power_range_status_cb_t;
 
+/** Parameters of Generic Battery Status. */
 typedef struct {
-    u32_t battery_level     : 8;  /* Value of Generic Battery Level state             */
-    u32_t time_to_discharge : 24; /* Value of Generic Battery Time to Discharge state */
-    u32_t time_to_charge    : 24; /* Value of Generic Battery Time to Charge state    */
-    u32_t flags             : 8;  /* Value of Generic Battery Flags state             */
+    u32_t battery_level     : 8;  /*!< Value of Generic Battery Level state */
+    u32_t time_to_discharge : 24; /*!< Value of Generic Battery Time to Discharge state */
+    u32_t time_to_charge    : 24; /*!< Value of Generic Battery Time to Charge state */
+    u32_t flags             : 8;  /*!< Value of Generic Battery Flags state */
 } esp_ble_mesh_gen_battery_status_cb_t;
 
+/** Parameters of Generic Location Global Status. */
 typedef struct {
-    int32_t global_latitude;  /* Global Coordinates (Latitude)  */
-    int32_t global_longitude; /* Global Coordinates (Longitude) */
-    int16_t global_altitude;  /* Global Altitude                */
+    int32_t global_latitude;  /*!< Global Coordinates (Latitude) */
+    int32_t global_longitude; /*!< Global Coordinates (Longitude) */
+    int16_t global_altitude;  /*!< Global Altitude */
 } esp_ble_mesh_gen_loc_global_status_cb_t;
 
+/** Parameters of Generic Location Local Status. */
 typedef struct {
-    int16_t  local_north;     /* Local Coordinates (North) */
-    int16_t  local_east;      /* Local Coordinates (East)  */
-    int16_t  local_altitude;  /* Local Altitude            */
-    uint8_t  floor_number;    /* Floor Number              */
-    uint16_t uncertainty;     /* Uncertainty               */
+    int16_t  local_north;     /*!< Local Coordinates (North) */
+    int16_t  local_east;      /*!< Local Coordinates (East) */
+    int16_t  local_altitude;  /*!< Local Altitude */
+    uint8_t  floor_number;    /*!< Floor Number */
+    uint16_t uncertainty;     /*!< Uncertainty */
 } esp_ble_mesh_gen_loc_local_status_cb_t;
 
+/** Parameter of Generic User Properties Status. */
 typedef struct {
-    struct net_buf_simple *property_ids;    /* Buffer contains a sequence of N User Property IDs */
+    struct net_buf_simple *property_ids;    /*!< Buffer contains a sequence of N User Property IDs */
 } esp_ble_mesh_gen_user_properties_status_cb_t;
 
+/** Parameters of Generic User Property Status. */
 typedef struct {
-    bool     op_en;         /* Indicate if optional parameters are included       */
-    uint16_t property_id;   /* Property ID identifying a Generic User Property    */
-    uint8_t  user_access;   /* Enumeration indicating user access (optional)      */
-    struct net_buf_simple *property_value;  /* Raw value for the User Property (C.1) */
+    bool     op_en;         /*!< Indicate if optional parameters are included */
+    uint16_t property_id;   /*!< Property ID identifying a Generic User Property */
+    uint8_t  user_access;   /*!< Enumeration indicating user access (optional) */
+    struct net_buf_simple *property_value;  /*!< Raw value for the User Property (C.1) */
 } esp_ble_mesh_gen_user_property_status_cb_t;
 
+/** Parameter of Generic Admin Properties Status. */
 typedef struct {
-    struct net_buf_simple *property_ids; /* Buffer contains a sequence of N Admin Property IDs */
+    struct net_buf_simple *property_ids; /*!< Buffer contains a sequence of N Admin Property IDs */
 } esp_ble_mesh_gen_admin_properties_status_cb_t;
 
+/** Parameters of Generic Admin Property Status. */
 typedef struct {
-    bool     op_en;         /* Indicate if optional parameters are included        */
-    uint16_t property_id;   /* Property ID identifying a Generic Admin Property    */
-    uint8_t  user_access;   /* Enumeration indicating user access (optional)       */
-    struct net_buf_simple *property_value;  /* Raw value for the Admin Property (C.1) */
+    bool     op_en;         /*!< Indicate if optional parameters are included */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Admin Property */
+    uint8_t  user_access;   /*!< Enumeration indicating user access (optional) */
+    struct net_buf_simple *property_value;  /*!< Raw value for the Admin Property (C.1) */
 } esp_ble_mesh_gen_admin_property_status_cb_t;
 
+/** Parameter of Generic Manufacturer Properties Status. */
 typedef struct {
-    struct net_buf_simple *property_ids;    /* Buffer contains a sequence of N Manufacturer Property IDs */
+    struct net_buf_simple *property_ids;    /*!< Buffer contains a sequence of N Manufacturer Property IDs */
 } esp_ble_mesh_gen_manufacturer_properties_status_cb_t;
 
+/** Parameters of Generic Manufacturer Property Status. */
 typedef struct {
-    bool     op_en;         /* Indicate if optional parameters are included               */
-    uint16_t property_id;   /* Property ID identifying a Generic Manufacturer Property    */
-    uint8_t  user_access;   /* Enumeration indicating user access (optional)              */
-    struct net_buf_simple *property_value;  /* Raw value for the Manufacturer Property (C.1) */
+    bool     op_en;         /*!< Indicate if optional parameters are included */
+    uint16_t property_id;   /*!< Property ID identifying a Generic Manufacturer Property */
+    uint8_t  user_access;   /*!< Enumeration indicating user access (optional) */
+    struct net_buf_simple *property_value;  /*!< Raw value for the Manufacturer Property (C.1) */
 } esp_ble_mesh_gen_manufacturer_property_status_cb_t;
 
+/** Parameter of Generic Client Properties Status. */
 typedef struct {
-    struct net_buf_simple *property_ids;    /* Buffer contains a sequence of N Client Property IDs */
+    struct net_buf_simple *property_ids;    /*!< Buffer contains a sequence of N Client Property IDs */
 } esp_ble_mesh_gen_client_properties_status_cb_t;
 
+/**
+ * @brief Generic Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_gen_onoff_status_cb_t             onoff_status;            /*!< For ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_STATUS */
     esp_ble_mesh_gen_level_status_cb_t             level_status;            /*!< For ESP_BLE_MESH_MODEL_OP_GEN_LEVEL_STATUS */
@@ -409,12 +454,14 @@ typedef union {
     esp_ble_mesh_gen_client_properties_status_cb_t       client_properties_status;       /*!< ESP_BLE_MESH_MODEL_OP_GEN_CLIENT_PROPERTIES_STATUS */
 } esp_ble_mesh_gen_client_status_cb_t;
 
+/** Generic Client Model callback parameters */
 typedef struct {
     int error_code;                                 /*!< Appropriate error code */
     esp_ble_mesh_client_common_param_t *params;     /*!< The client common parameters. */
     esp_ble_mesh_gen_client_status_cb_t status_cb;  /*!< The generic status message callback values */
 } esp_ble_mesh_generic_client_cb_param_t;
 
+/** This enum value is the event of Generic Client Model */
 typedef enum {
     ESP_BLE_MESH_GENERIC_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_GENERIC_CLIENT_SET_STATE_EVT,
@@ -427,7 +474,11 @@ typedef enum {
  *  @brief Bluetooth Mesh Generic Client Model function.
  */
 
-/** @brief: event, event code of Generic Client Model events; param, parameters of Generic Client Model events */
+/**
+ * @brief   Generic Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_generic_client_cb_t)(esp_ble_mesh_generic_client_cb_event_t event,
         esp_ble_mesh_generic_client_cb_param_t *param);
 
@@ -445,7 +496,7 @@ esp_err_t esp_ble_mesh_register_generic_client_callback(esp_ble_mesh_generic_cli
  * @brief       Get the value of Generic Server Model states using the Generic Client Model get messages.
  *
  * @note        If you want to find the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_generic_message_opcode_t).
+ *              please refer to esp_ble_mesh_generic_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   get_state: Pointer to generic get message value.
@@ -461,7 +512,7 @@ esp_err_t esp_ble_mesh_generic_client_get_state(esp_ble_mesh_client_common_param
  * @brief       Set the value of Generic Server Model states using the Generic Client Model set messages.
  *
  * @note        If you want to find the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_generic_message_opcode_t).
+ *              please refer to esp_ble_mesh_generic_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   set_state: Pointer to generic set message value.
index 687bdc604eff8bcf110db6ecd1e62d6dcfe5c0a7..b35cb0e0b11eac26d6f8a14632d8bd7a5164e3d1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
         ESP_BLE_MESH_SIG_MODEL(ESP_BLE_MESH_MODEL_ID_HEALTH_CLI,          \
                            NULL, NULL, cli_data)
 
+/** Health Server Model callbacks */
 typedef struct {
-    /* Fetch current faults */
+    /** Fetch current faults */
     int (*fault_get_cur)(esp_ble_mesh_model_t *model, uint8_t *test_id,
                          uint16_t *company_id, uint8_t *faults, uint8_t *fault_count);
 
-    /* Fetch registered faults */
+    /** Fetch registered faults */
     int (*fault_get_reg)(esp_ble_mesh_model_t *model, uint16_t company_id,
                          uint8_t *test_id, uint8_t *faults, uint8_t *fault_count);
 
-    /* Clear registered faults */
+    /** Clear registered faults */
     int (*fault_clear)(esp_ble_mesh_model_t *model, uint16_t company_id);
 
-    /* Run a specific test */
+    /** Run a specific test */
     int (*fault_test)(esp_ble_mesh_model_t *model, uint8_t test_id, uint16_t company_id);
 
-    /* Attention on */
+    /** Attention on */
     void (*attn_on)(esp_ble_mesh_model_t *model);
 
-    /* Attention off */
+    /** Attention off */
     void (*attn_off)(esp_ble_mesh_model_t *model);
 } esp_ble_mesh_health_srv_cb_t;
 
-/** ESP BLE Mesh Health Server Model Context */
+/** Health Server Model Context */
 typedef struct {
+    /** Pointer to Health Server Model */
     esp_ble_mesh_model_t *model;
 
-    /* Optional callback struct */
+    /** Optional callback struct */
     const esp_ble_mesh_health_srv_cb_t *cb;
 
-    /* Attention Timer state */
+    /** Attention Timer state */
     struct k_delayed_work attn_timer;
 } esp_ble_mesh_health_srv_t;
 
-/** BLE Mesh Health Client Model fault get Context */
+/** Parameter of Health Fault Get */
 typedef struct {
-    uint16_t company_id;                    /*!< Bluetooth assigned 16-bit Company ID */
+    uint16_t company_id;    /*!< Bluetooth assigned 16-bit Company ID */
 } esp_ble_mesh_health_fault_get_t;
 
-/** Mesh Health Client Model attention set Context */
+/** Parameter of Health Attention Set */
 typedef struct {
-    uint8_t attention;                      /*!< Value of the Attention Timer state */
+    uint8_t attention;      /*!< Value of the Attention Timer state */
 } esp_ble_mesh_health_attention_set_t;
 
-/** Mesh Health client Model period set Context */
+/** Parameter of Health Period Set */
 typedef struct {
-    uint8_t fast_period_divisor;            /*!< Divider for the Publish Period */
+    uint8_t fast_period_divisor;    /*!< Divider for the Publish Period */
 } esp_ble_mesh_health_period_set_t;
 
-/** BLE Mesh Health Client Model fault test Context */
+/** Parameter of Health Fault Test */
 typedef struct {
-    uint16_t company_id;                    /*!< Bluetooth assigned 16-bit Company ID */
-    uint8_t  test_id;                       /*!< ID of a specific test to be performed */
+    uint16_t company_id;    /*!< Bluetooth assigned 16-bit Company ID */
+    uint8_t  test_id;       /*!< ID of a specific test to be performed */
 } esp_ble_mesh_health_fault_test_t;
 
-/** BLE Mesh Health Client Model fault clear Context */
+/** Parameter of Health Fault Clear */
 typedef struct {
-    uint16_t company_id;                    /*!< Bluetooth assigned 16-bit Company ID */
+    uint16_t company_id;    /*!< Bluetooth assigned 16-bit Company ID */
 } esp_ble_mesh_health_fault_clear_t;
 
 /**
@@ -134,26 +136,33 @@ typedef union {
     esp_ble_mesh_health_fault_clear_t   fault_clear;      /*!< For ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_CLEAR or ESP_BLE_MESH_MODEL_OP_HEALTH_FAULT_CLEAR_UNACK. */
 } esp_ble_mesh_health_client_set_state_t;
 
+/** Parameters of Health Current Status */
 typedef struct {
     uint8_t  test_id;                       /*!< ID of a most recently performed test */
     uint16_t company_id;                    /*!< Bluetooth assigned 16-bit Company ID */
     struct net_buf_simple *fault_array;     /*!< FaultArray field contains a sequence of 1-octet fault values */
 } esp_ble_mesh_health_current_status_cb_t;
 
+/** Parameters of Health Fault Status */
 typedef struct {
     uint8_t  test_id;                       /*!< ID of a most recently performed test */
     uint16_t company_id;                    /*!< Bluetooth assigned 16-bit Company ID */
     struct net_buf_simple *fault_array;     /*!< FaultArray field contains a sequence of 1-octet fault values */
 } esp_ble_mesh_health_fault_status_cb_t;
 
+/** Parameter of Health Period Status */
 typedef struct {
     uint8_t fast_period_divisor;            /*!< Divider for the Publish Period */
 } esp_ble_mesh_health_period_status_cb_t;
 
+/** Parameter of Health Attention Status */
 typedef struct {
     uint8_t attention;                      /*!< Value of the Attention Timer state */
 } esp_ble_mesh_health_attention_status_cb_t;
 
+/**
+ * @brief Health Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_health_current_status_cb_t   current_status;       /*!< The health current status value */
     esp_ble_mesh_health_fault_status_cb_t     fault_status;         /*!< The health fault status value */
@@ -161,12 +170,14 @@ typedef union {
     esp_ble_mesh_health_attention_status_cb_t attention_status;     /*!< The health attention status value */
 } esp_ble_mesh_health_client_common_cb_param_t;
 
+/** Health Client Model callback parameters */
 typedef struct {
     int error_code;                                         /*!< Appropriate error code */
     esp_ble_mesh_client_common_param_t          *params;    /*!< The client common parameters. */
     esp_ble_mesh_health_client_common_cb_param_t status_cb; /*!< The health message status callback values */
 } esp_ble_mesh_health_client_cb_param_t;
 
+/** This enum value is the event of Health Client Model */
 typedef enum {
     ESP_BLE_MESH_HEALTH_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_HEALTH_CLIENT_SET_STATE_EVT,
@@ -175,10 +186,12 @@ typedef enum {
     ESP_BLE_MESH_HEALTH_CLIENT_EVT_MAX,
 } esp_ble_mesh_health_client_cb_event_t;
 
+/** Health Server Model callback parameter */
 typedef struct {
     int error_code;                                       /*!< Appropriate error code */
 } esp_ble_mesh_health_server_cb_param_t;
 
+/** This enum value is the event of Health Server Model */
 typedef enum {
     ESP_BLE_MESH_HEALTH_SERVER_FAULT_UPDATE_COMPLETE_EVT,
     ESP_BLE_MESH_HEALTH_SERVER_EVT_MAX,
@@ -188,11 +201,19 @@ typedef enum {
  *  @brief Bluetooth Mesh Health Client and Server Model function.
  */
 
-/** @brief: event, event code of Health Client Model event; param, parameters of Health Client Model event) */
+/**
+ * @brief   Health Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_health_client_cb_t)(esp_ble_mesh_health_client_cb_event_t event,
         esp_ble_mesh_health_client_cb_param_t *param);
 
-/** @brief: event, event code of Health Server Model event; param, parameters of Health Server Model event) */
+/**
+ * @brief   Health Server Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_health_server_cb_t)(esp_ble_mesh_health_server_cb_event_t event,
         esp_ble_mesh_health_server_cb_param_t *param);
 
@@ -220,7 +241,7 @@ esp_err_t esp_ble_mesh_register_health_server_callback(esp_ble_mesh_health_serve
  * @brief         This function is called to get the Health Server states using the Health Client Model get messages.
  *
  * @note          If you want to find the opcodes and corresponding meanings accepted by this API,
- *                please refer to (@ref esp_ble_mesh_opcode_health_client_get_t).
+ *                please refer to esp_ble_mesh_opcode_health_client_get_t in esp_ble_mesh_defs.h
  *
  * @param[in]     params:    Pointer to BLE Mesh common client parameters.
  * @param[in]     get_state: Pointer to a union, each kind of opcode corresponds to one structure inside.
@@ -236,7 +257,7 @@ esp_err_t esp_ble_mesh_health_client_get_state(esp_ble_mesh_client_common_param_
  * @brief         This function is called to set the Health Server states using the Health Client Model set messages.
  *
  * @note          If you want to find the opcodes and corresponding meanings accepted by this API,
- *                please refer to (@ref esp_ble_mesh_opcode_health_client_set_t).
+ *                please refer to esp_ble_mesh_opcode_health_client_set_t in esp_ble_mesh_defs.h
  *
  * @param[in]     params:    Pointer to BLE Mesh common client parameters.
  * @param[in]     set_state: Pointer to a union, each kind of opcode corresponds to one structure inside.
index ab119a48bc181b8c680bac27ae872e368247dbaa..d40ead593b68ebf94bd69ad922d2668faebb6957 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
  *  @brief Bluetooth Mesh Light Lightness Client Model Get and Set parameters structure.
  */
 
+/** Parameters of Light Lightness Set */
 typedef struct {
-    bool  op_en;      /* Indicate if optional parameters are included  */
-    u16_t lightness;  /* Target value of light lightness actual state  */
-    u8_t  tid;        /* Transaction ID                                */
-    u8_t  trans_time; /* Time to complete state transition (optional)  */
-    u8_t  delay;      /* Indicate message execution delay (C.1)        */
+    bool  op_en;        /*!< Indicate if optional parameters are included */
+    u16_t lightness;    /*!< Target value of light lightness actual state */
+    u8_t  tid;          /*!< Transaction ID */
+    u8_t  trans_time;   /*!< Time to complete state transition (optional) */
+    u8_t  delay;        /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_lightness_set_t;
 
+/** Parameters of Light Lightness Linear Set */
 typedef struct {
-    bool  op_en;      /* Indicate if optional parameters are included  */
-    u16_t lightness;  /* Target value of light lightness linear state  */
-    u8_t  tid;        /* Transaction ID                                */
-    u8_t  trans_time; /* Time to complete state transition (optional)  */
-    u8_t  delay;      /* Indicate message execution delay (C.1)        */
+    bool  op_en;        /*!< Indicate if optional parameters are included */
+    u16_t lightness;    /*!< Target value of light lightness linear state */
+    u8_t  tid;          /*!< Transaction ID */
+    u8_t  trans_time;   /*!< Time to complete state transition (optional) */
+    u8_t  delay;        /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_lightness_linear_set_t;
 
+/** Parameter of Light Lightness Default Set */
 typedef struct {
-    u16_t lightness;  /* The value of the Light Lightness Default state */
+    u16_t lightness;    /*!< The value of the Light Lightness Default state */
 } esp_ble_mesh_light_lightness_default_set_t;
 
+/** Parameters of Light Lightness Range Set */
 typedef struct {
-    u16_t range_min; /* Value of range min field of light lightness range state */
-    u16_t range_max; /* Value of range max field of light lightness range state */
+    u16_t range_min;    /*!< Value of range min field of light lightness range state */
+    u16_t range_max;    /*!< Value of range max field of light lightness range state */
 } esp_ble_mesh_light_lightness_range_set_t;
 
+/** Parameters of Light CTL Set */
 typedef struct {
-    bool  op_en;           /* Indicate if optional parameters are included  */
-    u16_t ctl_lightness;   /* Target value of light ctl lightness state     */
-    u16_t ctl_temperatrue; /* Target value of light ctl temperature state   */
-    s16_t ctl_delta_uv;    /* Target value of light ctl delta UV state      */
-    u8_t  tid;             /* Transaction ID                                */
-    u8_t  trans_time;      /* Time to complete state transition (optional)  */
-    u8_t  delay;           /* Indicate message execution delay (C.1)        */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t ctl_lightness;    /*!< Target value of light ctl lightness state */
+    u16_t ctl_temperatrue;  /*!< Target value of light ctl temperature state */
+    s16_t ctl_delta_uv;     /*!< Target value of light ctl delta UV state */
+    u8_t  tid;              /*!< Transaction ID */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_ctl_set_t;
 
+/** Parameters of Light CTL Temperature Set */
 typedef struct {
-    bool  op_en;           /* Indicate if optional parameters are included  */
-    u16_t ctl_temperatrue; /* Target value of light ctl temperature state   */
-    s16_t ctl_delta_uv;    /* Target value of light ctl delta UV state      */
-    u8_t  tid;             /* Transaction ID                                */
-    u8_t  trans_time;      /* Time to complete state transition (optional)  */
-    u8_t  delay;           /* Indicate message execution delay (C.1)        */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t ctl_temperatrue;  /*!< Target value of light ctl temperature state */
+    s16_t ctl_delta_uv;     /*!< Target value of light ctl delta UV state */
+    u8_t  tid;              /*!< Transaction ID */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_ctl_temperature_set_t;
 
+/** Parameters of Light CTL Temperature Range Set */
 typedef struct {
-    u16_t range_min; /* Value of temperature range min field of light ctl temperature range state */
-    u16_t range_max; /* Value of temperature range max field of light ctl temperature range state */
+    u16_t range_min;        /*!< Value of temperature range min field of light ctl temperature range state */
+    u16_t range_max;        /*!< Value of temperature range max field of light ctl temperature range state */
 } esp_ble_mesh_light_ctl_temperature_range_set_t;
 
+/** Parameters of Light CTL Default Set */
 typedef struct {
-    u16_t lightness;   /* Value of light lightness default state   */
-    u16_t temperature; /* Value of light temperature default state */
-    s16_t delta_uv;    /* Value of light delta UV default state    */
+    u16_t lightness;        /*!< Value of light lightness default state */
+    u16_t temperature;      /*!< Value of light temperature default state */
+    s16_t delta_uv;         /*!< Value of light delta UV default state */
 } esp_ble_mesh_light_ctl_default_set_t;
 
+/** Parameters of Light HSL Set */
 typedef struct {
-    bool  op_en;          /* Indicate if optional parameters are included  */
-    u16_t hsl_lightness;  /* Target value of light hsl lightness state     */
-    u16_t hsl_hue;        /* Target value of light hsl hue state           */
-    u16_t hsl_saturation; /* Target value of light hsl saturation state    */
-    u8_t  tid;            /* Transaction ID                                */
-    u8_t  trans_time;     /* Time to complete state transition (optional)  */
-    u8_t  delay;          /* Indicate message execution delay (C.1)        */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t hsl_lightness;    /*!< Target value of light hsl lightness state */
+    u16_t hsl_hue;          /*!< Target value of light hsl hue state */
+    u16_t hsl_saturation;   /*!< Target value of light hsl saturation state */
+    u8_t  tid;              /*!< Transaction ID */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_hsl_set_t;
 
+/** Parameters of Light HSL Hue Set */
 typedef struct {
-    bool  op_en;      /* Indicate if optional parameters are included  */
-    u16_t hue;        /* Target value of light hsl hue state           */
-    u8_t  tid;        /* Transaction ID                                */
-    u8_t  trans_time; /* Time to complete state transition (optional)  */
-    u8_t  delay;      /* Indicate message execution delay (C.1)        */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t hue;              /*!< Target value of light hsl hue state */
+    u8_t  tid;              /*!< Transaction ID */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_hsl_hue_set_t;
 
+/** Parameters of Light HSL Saturation Set */
 typedef struct {
-    bool  op_en;      /* Indicate if optional parameters are included  */
-    u16_t saturation; /* Target value of light hsl hue state           */
-    u8_t  tid;        /* Transaction ID                                */
-    u8_t  trans_time; /* Time to complete state transition (optional)  */
-    u8_t  delay;      /* Indicate message execution delay (C.1)        */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t saturation;       /*!< Target value of light hsl hue state */
+    u8_t  tid;              /*!< Transaction ID */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_hsl_saturation_set_t;
 
+/** Parameters of Light HSL Default Set */
 typedef struct {
-    u16_t lightness;  /* Value of light lightness default state  */
-    u16_t hue;        /* Value of light hue default state        */
-    u16_t saturation; /* Value of light saturation default state */
+    u16_t lightness;        /*!< Value of light lightness default state */
+    u16_t hue;              /*!< Value of light hue default state */
+    u16_t saturation;       /*!< Value of light saturation default state */
 } esp_ble_mesh_light_hsl_default_set_t;
 
-typedef struct  {
-    u16_t hue_range_min;        /* Value of hue range min field of light hsl hue range state               */
-    u16_t hue_range_max;        /* Value of hue range max field of light hsl hue range state               */
-    u16_t saturation_range_min; /* Value of saturation range min field of light hsl saturation range state */
-    u16_t saturation_range_max; /* Value of saturation range max field of light hsl saturation range state */
+/** Parameters of Light HSL Range Set */
+typedef struct {
+    u16_t hue_range_min;        /*!< Value of hue range min field of light hsl hue range state */
+    u16_t hue_range_max;        /*!< Value of hue range max field of light hsl hue range state */
+    u16_t saturation_range_min; /*!< Value of saturation range min field of light hsl saturation range state */
+    u16_t saturation_range_max; /*!< Value of saturation range max field of light hsl saturation range state */
 } esp_ble_mesh_light_hsl_range_set_t;
 
-typedef struct  {
-    bool  op_en;         /* Indicate whether optional parameters included     */
-    u16_t xyl_lightness; /* The target value of the Light xyL Lightness state */
-    u16_t xyl_x;         /* The target value of the Light xyL x state         */
-    u16_t xyl_y;         /* The target value of the Light xyL y state         */
-    u8_t  tid;           /* Transaction Identifier                            */
-    u8_t  trans_time;    /* Time to complete state transition (optional)      */
-    u8_t  delay;         /* Indicate message execution delay (C.1)            */
+/** Parameters of Light xyL Set */
+typedef struct {
+    bool  op_en;            /*!< Indicate whether optional parameters included */
+    u16_t xyl_lightness;    /*!< The target value of the Light xyL Lightness state */
+    u16_t xyl_x;            /*!< The target value of the Light xyL x state */
+    u16_t xyl_y;            /*!< The target value of the Light xyL y state */
+    u8_t  tid;              /*!< Transaction Identifier */
+    u8_t  trans_time;       /*!< Time to complete state transition (optional) */
+    u8_t  delay;            /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_xyl_set_t;
 
-typedef struct  {
-    u16_t lightness; /* The value of the Light Lightness Default state */
-    u16_t xyl_x;     /* The value of the Light xyL x Default state     */
-    u16_t xyl_y;     /* The value of the Light xyL y Default state     */
+/** Parameters of Light xyL Default Set */
+typedef struct {
+    u16_t lightness;        /*!< The value of the Light Lightness Default state */
+    u16_t xyl_x;            /*!< The value of the Light xyL x Default state */
+    u16_t xyl_y;            /*!< The value of the Light xyL y Default state */
 } esp_ble_mesh_light_xyl_default_set_t;
 
-typedef struct  {
-    u16_t xyl_x_range_min; /* The value of the xyL x Range Min field of the Light xyL x Range state */
-    u16_t xyl_x_range_max; /* The value of the xyL x Range Max field of the Light xyL x Range state */
-    u16_t xyl_y_range_min; /* The value of the xyL y Range Min field of the Light xyL y Range state */
-    u16_t xyl_y_range_max; /* The value of the xyL y Range Max field of the Light xyL y Range state */
+/** Parameters of Light xyL Range Set */
+typedef struct {
+    u16_t xyl_x_range_min;  /*!< The value of the xyL x Range Min field of the Light xyL x Range state */
+    u16_t xyl_x_range_max;  /*!< The value of the xyL x Range Max field of the Light xyL x Range state */
+    u16_t xyl_y_range_min;  /*!< The value of the xyL y Range Min field of the Light xyL y Range state */
+    u16_t xyl_y_range_max;  /*!< The value of the xyL y Range Max field of the Light xyL y Range state */
 } esp_ble_mesh_light_xyl_range_set_t;
 
-typedef struct  {
-    u8_t mode; /* The target value of the Light LC Mode state */
+/** Parameter of Light LC Mode Set */
+typedef struct {
+    u8_t mode;              /*!< The target value of the Light LC Mode state */
 } esp_ble_mesh_light_lc_mode_set_t;
 
-typedef struct  {
-    u8_t mode; /* The target value of the Light LC Occupancy Mode state */
+/** Parameter of Light LC OM Set */
+typedef struct {
+    u8_t mode;              /*!< The target value of the Light LC Occupancy Mode state */
 } esp_ble_mesh_light_lc_om_set_t;
 
-typedef struct  {
-    bool op_en;       /* Indicate whether optional parameters included      */
-    u8_t light_onoff; /* The target value of the Light LC Light OnOff state */
-    u8_t tid;         /* Transaction Identifier                             */
-    u8_t trans_time;  /* Time to complete state transition (optional)       */
-    u8_t delay;       /* Indicate message execution delay (C.1)             */
+/** Parameters of Light LC Light OnOff Set */
+typedef struct {
+    bool op_en;             /*!< Indicate whether optional parameters included */
+    u8_t light_onoff;       /*!< The target value of the Light LC Light OnOff state */
+    u8_t tid;               /*!< Transaction Identifier */
+    u8_t trans_time;        /*!< Time to complete state transition (optional) */
+    u8_t delay;             /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_light_lc_light_onoff_set_t;
 
-typedef struct  {
-    u16_t property_id;  /* Property ID identifying a Light LC Property */
+/** Parameter of Light LC Property Get */
+typedef struct {
+    u16_t property_id;      /*!< Property ID identifying a Light LC Property */
 } esp_ble_mesh_light_lc_property_get_t;
 
-typedef struct  {
-    u16_t property_id;  /* Property ID identifying a Light LC Property */
-    struct net_buf_simple *property_value; /* Raw value for the Light LC Property */
+/** Parameters of Light LC Property Set */
+typedef struct {
+    u16_t property_id;      /*!< Property ID identifying a Light LC Property */
+    struct net_buf_simple *property_value;  /*!< Raw value for the Light LC Property */
 } esp_ble_mesh_light_lc_property_set_t;
 
+/**
+ * @brief Lighting Client Model get message union
+ */
 typedef union {
     esp_ble_mesh_light_lc_property_get_t           lc_property_get;             /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LC_PROPERTY_GET */
 } esp_ble_mesh_light_client_get_state_t;
 
+/**
+ * @brief Lighting Client Model set message union
+ */
 typedef union {
     esp_ble_mesh_light_lightness_set_t             lightness_set;               /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_SET & ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_SET_UNACK */
     esp_ble_mesh_light_lightness_linear_set_t      lightness_linear_set;        /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_SET & ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_SET_UNACK */
@@ -279,158 +306,184 @@ typedef union {
  *  @brief Bluetooth Mesh Light Lightness Client Model Get and Set callback parameters structure.
  */
 
+/** Parameters of Light Lightness Status */
 typedef struct {
-    bool  op_en;             /* Indicate if optional parameters are included            */
-    u16_t present_lightness; /* Current value of light lightness actual state           */
-    u16_t target_lightness;  /* Target value of light lightness actual state (optional) */
-    u8_t  remain_time;       /* Time to complete state transition (C.1)                 */
+    bool  op_en;                /*!< Indicate if optional parameters are included */
+    u16_t present_lightness;    /*!< Current value of light lightness actual state */
+    u16_t target_lightness;     /*!< Target value of light lightness actual state (optional) */
+    u8_t  remain_time;          /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_lightness_status_cb_t;
 
+/** Parameters of Light Lightness Linear Status */
 typedef struct {
-    bool  op_en;             /* Indicate if optional parameters are included            */
-    u16_t present_lightness; /* Current value of light lightness linear state           */
-    u16_t target_lightness;  /* Target value of light lightness linear state (optional) */
-    u8_t  remain_time;       /* Time to complete state transition (C.1)                 */
+    bool  op_en;                /*!< Indicate if optional parameters are included */
+    u16_t present_lightness;    /*!< Current value of light lightness linear state */
+    u16_t target_lightness;     /*!< Target value of light lightness linear state (optional) */
+    u8_t  remain_time;          /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_lightness_linear_status_cb_t;
 
+/** Parameter of Light Lightness Last Status */
 typedef struct {
-    u16_t lightness; /* The value of the Light Lightness Last state */
+    u16_t lightness;            /*!< The value of the Light Lightness Last state */
 } esp_ble_mesh_light_lightness_last_status_cb_t;
 
+/** Parameter of Light Lightness Default Status */
 typedef struct {
-    u16_t lightness; /* The value of the Light Lightness default State */
+    u16_t lightness;            /*!< The value of the Light Lightness default State */
 } esp_ble_mesh_light_lightness_default_status_cb_t;
 
+/** Parameters of Light Lightness Range Status */
 typedef struct {
-    u8_t  status_code; /* Status Code for the request message                     */
-    u16_t range_min;   /* Value of range min field of light lightness range state */
-    u16_t range_max;   /* Value of range max field of light lightness range state */
+    u8_t  status_code;          /*!< Status Code for the request message */
+    u16_t range_min;            /*!< Value of range min field of light lightness range state */
+    u16_t range_max;            /*!< Value of range max field of light lightness range state */
 } esp_ble_mesh_light_lightness_range_status_cb_t;
 
+/** Parameters of Light CTL Status */
 typedef struct {
-    bool  op_en;                   /* Indicate if optional parameters are included         */
-    u16_t present_ctl_lightness;   /* Current value of light ctl lightness state           */
-    u16_t present_ctl_temperature; /* Current value of light ctl temperature state         */
-    u16_t target_ctl_lightness;    /* Target value of light ctl lightness state (optional) */
-    u16_t target_ctl_temperature;  /* Target value of light ctl temperature state (C.1)    */
-    u8_t  remain_time;             /* Time to complete state transition (C.1)              */
+    bool  op_en;                    /*!< Indicate if optional parameters are included */
+    u16_t present_ctl_lightness;    /*!< Current value of light ctl lightness state */
+    u16_t present_ctl_temperature;  /*!< Current value of light ctl temperature state */
+    u16_t target_ctl_lightness;     /*!< Target value of light ctl lightness state (optional) */
+    u16_t target_ctl_temperature;   /*!< Target value of light ctl temperature state (C.1) */
+    u8_t  remain_time;              /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_ctl_status_cb_t;
 
+/** Parameters of Light CTL Temperature Status */
 typedef struct {
-    bool  op_en;                   /* Indicate if optional parameters are included           */
-    u16_t present_ctl_temperature; /* Current value of light ctl temperature state           */
-    u16_t present_ctl_delta_uv;    /* Current value of light ctl delta UV state              */
-    u16_t target_ctl_temperature;  /* Target value of light ctl temperature state (optional) */
-    u16_t target_ctl_delta_uv;     /* Target value of light ctl delta UV state (C.1)         */
-    u8_t  remain_time;             /* Time to complete state transition (C.1)                */
+    bool  op_en;                    /*!< Indicate if optional parameters are included */
+    u16_t present_ctl_temperature;  /*!< Current value of light ctl temperature state */
+    u16_t present_ctl_delta_uv;     /*!< Current value of light ctl delta UV state */
+    u16_t target_ctl_temperature;   /*!< Target value of light ctl temperature state (optional) */
+    u16_t target_ctl_delta_uv;      /*!< Target value of light ctl delta UV state (C.1) */
+    u8_t  remain_time;              /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_ctl_temperature_status_cb_t;
 
+/** Parameters of Light CTL Temperature Range Status */
 typedef struct {
-    u8_t  status_code; /* Status code for the request message                                       */
-    u16_t range_min;   /* Value of temperature range min field of light ctl temperature range state */
-    u16_t range_max;   /* Value of temperature range max field of light ctl temperature range state */
+    u8_t  status_code;      /*!< Status code for the request message */
+    u16_t range_min;        /*!< Value of temperature range min field of light ctl temperature range state */
+    u16_t range_max;        /*!< Value of temperature range max field of light ctl temperature range state */
 } esp_ble_mesh_light_ctl_temperature_range_status_cb_t;
 
+/** Parameters of Light CTL Default Status */
 typedef struct {
-    u16_t lightness;   /* Value of light lightness default state   */
-    u16_t temperature; /* Value of light temperature default state */
-    s16_t delta_uv;    /* Value of light delta UV default state    */
+    u16_t lightness;        /*!< Value of light lightness default state */
+    u16_t temperature;      /*!< Value of light temperature default state */
+    s16_t delta_uv;         /*!< Value of light delta UV default state */
 } esp_ble_mesh_light_ctl_default_status_cb_t;
 
+/** Parameters of Light HSL Status */
 typedef struct {
-    bool  op_en;          /* Indicate if optional parameters are included  */
-    u16_t hsl_lightness;  /* Current value of light hsl lightness state    */
-    u16_t hsl_hue;        /* Current value of light hsl hue state          */
-    u16_t hsl_saturation; /* Current value of light hsl saturation state   */
-    u8_t  remain_time;    /* Time to complete state transition (optional)  */
+    bool  op_en;            /*!< Indicate if optional parameters are included */
+    u16_t hsl_lightness;    /*!< Current value of light hsl lightness state */
+    u16_t hsl_hue;          /*!< Current value of light hsl hue state */
+    u16_t hsl_saturation;   /*!< Current value of light hsl saturation state */
+    u8_t  remain_time;      /*!< Time to complete state transition (optional) */
 } esp_ble_mesh_light_hsl_status_cb_t;
 
+/** Parameters of Light HSL Target Status */
 typedef struct {
-    bool  op_en;                 /* Indicate if optional parameters are included  */
-    u16_t hsl_lightness_target;  /* Target value of light hsl lightness state     */
-    u16_t hsl_hue_target;        /* Target value of light hsl hue state           */
-    u16_t hsl_saturation_target; /* Target value of light hsl saturation state    */
-    u8_t  remain_time;           /* Time to complete state transition (optional)  */
+    bool  op_en;                    /*!< Indicate if optional parameters are included */
+    u16_t hsl_lightness_target;     /*!< Target value of light hsl lightness state */
+    u16_t hsl_hue_target;           /*!< Target value of light hsl hue state */
+    u16_t hsl_saturation_target;    /*!< Target value of light hsl saturation state */
+    u8_t  remain_time;              /*!< Time to complete state transition (optional) */
 } esp_ble_mesh_light_hsl_target_status_cb_t;
 
+/** Parameters of Light HSL Hue Status */
 typedef struct {
-    bool  op_en;       /* Indicate if optional parameters are included   */
-    u16_t present_hue; /* Current value of light hsl hue state           */
-    u16_t target_hue;  /* Target value of light hsl hue state (optional) */
-    u8_t  remain_time; /* Time to complete state transition (C.1)   */
+    bool  op_en;        /*!< Indicate if optional parameters are included */
+    u16_t present_hue;  /*!< Current value of light hsl hue state */
+    u16_t target_hue;   /*!< Target value of light hsl hue state (optional) */
+    u8_t  remain_time;  /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_hsl_hue_status_cb_t;
 
+/** Parameters of Light HSL Saturation Status */
 typedef struct {
-    bool  op_en;              /* Indicate if optional parameters are included          */
-    u16_t present_saturation; /* Current value of light hsl saturation state           */
-    u16_t target_saturation;  /* Target value of light hsl saturation state (optional) */
-    u8_t  remain_time;        /* Time to complete state transition (C.1)               */
+    bool  op_en;                /*!< Indicate if optional parameters are included */
+    u16_t present_saturation;   /*!< Current value of light hsl saturation state */
+    u16_t target_saturation;    /*!< Target value of light hsl saturation state (optional) */
+    u8_t  remain_time;          /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_hsl_saturation_status_cb_t;
 
+/** Parameters of Light HSL Default Status */
 typedef struct {
-    u16_t lightness;  /* Value of light lightness default state  */
-    u16_t hue;        /* Value of light hue default state        */
-    u16_t saturation; /* Value of light saturation default state */
+    u16_t lightness;    /*!< Value of light lightness default state */
+    u16_t hue;          /*!< Value of light hue default state */
+    u16_t saturation;   /*!< Value of light saturation default state */
 } esp_ble_mesh_light_hsl_default_status_cb_t;
 
+/** Parameters of Light HSL Range Status */
 typedef struct {
-    u8_t  status_code;          /* Status code for the request message                                     */
-    u16_t hue_range_min;        /* Value of hue range min field of light hsl hue range state               */
-    u16_t hue_range_max;        /* Value of hue range max field of light hsl hue range state               */
-    u16_t saturation_range_min; /* Value of saturation range min field of light hsl saturation range state */
-    u16_t saturation_range_max; /* Value of saturation range max field of light hsl saturation range state */
+    u8_t  status_code;          /*!< Status code for the request message */
+    u16_t hue_range_min;        /*!< Value of hue range min field of light hsl hue range state */
+    u16_t hue_range_max;        /*!< Value of hue range max field of light hsl hue range state */
+    u16_t saturation_range_min; /*!< Value of saturation range min field of light hsl saturation range state */
+    u16_t saturation_range_max; /*!< Value of saturation range max field of light hsl saturation range state */
 } esp_ble_mesh_light_hsl_range_status_cb_t;
 
+/** Parameters of Light xyL Status */
 typedef struct {
-    bool  op_en;         /* Indicate whether optional parameters included      */
-    u16_t xyl_lightness; /* The present value of the Light xyL Lightness state */
-    u16_t xyl_x;         /* The present value of the Light xyL x state         */
-    u16_t xyl_y;         /* The present value of the Light xyL y state         */
-    u8_t  remain_time;   /* Time to complete state transition (optional)       */
+    bool  op_en;                /*!< Indicate whether optional parameters included */
+    u16_t xyl_lightness;        /*!< The present value of the Light xyL Lightness state */
+    u16_t xyl_x;                /*!< The present value of the Light xyL x state */
+    u16_t xyl_y;                /*!< The present value of the Light xyL y state */
+    u8_t  remain_time;          /*!< Time to complete state transition (optional) */
 } esp_ble_mesh_light_xyl_status_cb_t;
 
+/** Parameters of Light xyL Target Status */
 typedef struct {
-    bool  op_en;                /* Indicate whether optional parameters included     */
-    u16_t target_xyl_lightness; /* The target value of the Light xyL Lightness state */
-    u16_t target_xyl_x;         /* The target value of the Light xyL x state         */
-    u16_t target_xyl_y;         /* The target value of the Light xyL y state         */
-    u8_t  remain_time;          /* Time to complete state transition (optional)      */
+    bool  op_en;                /*!< Indicate whether optional parameters included */
+    u16_t target_xyl_lightness; /*!< The target value of the Light xyL Lightness state */
+    u16_t target_xyl_x;         /*!< The target value of the Light xyL x state */
+    u16_t target_xyl_y;         /*!< The target value of the Light xyL y state */
+    u8_t  remain_time;          /*!< Time to complete state transition (optional) */
 } esp_ble_mesh_light_xyl_target_status_cb_t;
 
+/** Parameters of Light xyL Default Status */
 typedef struct {
-    u16_t lightness; /* The value of the Light Lightness Default state */
-    u16_t xyl_x;     /* The value of the Light xyL x Default state     */
-    u16_t xyl_y;     /* The value of the Light xyL y Default state     */
+    u16_t lightness;        /*!< The value of the Light Lightness Default state */
+    u16_t xyl_x;            /*!< The value of the Light xyL x Default state */
+    u16_t xyl_y;            /*!< The value of the Light xyL y Default state */
 } esp_ble_mesh_light_xyl_default_status_cb_t;
 
+/** Parameters of Light xyL Range Status */
 typedef struct {
-    u8_t  status_code;     /* Status Code for the requesting message */
-    u16_t xyl_x_range_min; /* The value of the xyL x Range Min field of the Light xyL x Range state */
-    u16_t xyl_x_range_max; /* The value of the xyL x Range Max field of the Light xyL x Range state */
-    u16_t xyl_y_range_min; /* The value of the xyL y Range Min field of the Light xyL y Range state */
-    u16_t xyl_y_range_max; /* The value of the xyL y Range Max field of the Light xyL y Range state */
+    u8_t  status_code;      /*!< Status Code for the requesting message */
+    u16_t xyl_x_range_min;  /*!< The value of the xyL x Range Min field of the Light xyL x Range state */
+    u16_t xyl_x_range_max;  /*!< The value of the xyL x Range Max field of the Light xyL x Range state */
+    u16_t xyl_y_range_min;  /*!< The value of the xyL y Range Min field of the Light xyL y Range state */
+    u16_t xyl_y_range_max;  /*!< The value of the xyL y Range Max field of the Light xyL y Range state */
 } esp_ble_mesh_light_xyl_range_status_cb_t;
 
+/** Parameter of Light LC Mode Status */
 typedef struct {
-    u8_t mode; /* The present value of the Light LC Mode state */
+    u8_t mode;              /*!< The present value of the Light LC Mode state */
 } esp_ble_mesh_light_lc_mode_status_cb_t;
 
+/** Parameter of Light LC OM Status */
 typedef struct {
-    u8_t mode; /* The present value of the Light LC Occupancy Mode state */
+    u8_t mode;              /*!< The present value of the Light LC Occupancy Mode state */
 } esp_ble_mesh_light_lc_om_status_cb_t;
 
+/** Parameters of Light LC Light OnOff Status */
 typedef struct {
-    bool op_en;               /* Indicate whether optional parameters included                 */
-    u8_t present_light_onoff; /* The present value of the Light LC Light OnOff state           */
-    u8_t target_light_onoff;  /* The target value of the Light LC Light OnOff state (Optional) */
-    u8_t remain_time;         /* Time to complete state transition (C.1)                       */
+    bool op_en;                 /*!< Indicate whether optional parameters included */
+    u8_t present_light_onoff;   /*!< The present value of the Light LC Light OnOff state */
+    u8_t target_light_onoff;    /*!< The target value of the Light LC Light OnOff state (Optional) */
+    u8_t remain_time;           /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_light_lc_light_onoff_status_cb_t;
 
+/** Parameters of Light LC Property Status */
 typedef struct {
-    u16_t property_id;  /* Property ID identifying a Light LC Property */
-    struct net_buf_simple *property_value; /* Raw value for the Light LC Property */
+    u16_t property_id;      /*!< Property ID identifying a Light LC Property */
+    struct net_buf_simple *property_value;  /*!< Raw value for the Light LC Property */
 } esp_ble_mesh_light_lc_property_status_cb_t;
 
+/**
+ * @brief Lighting Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_light_lightness_status_cb_t             lightness_status;             /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_STATUS */
     esp_ble_mesh_light_lightness_linear_status_cb_t      lightness_linear_status;      /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_STATUS */
@@ -457,12 +510,14 @@ typedef union {
     esp_ble_mesh_light_lc_property_status_cb_t           lc_property_status;           /*!< For ESP_BLE_MESH_MODEL_OP_LIGHT_LC_PROPERTY_STATUS */
 } esp_ble_mesh_light_client_status_cb_t;
 
+/** Lighting Client Model callback parameters */
 typedef struct {
     int error_code;                                     /*!< Appropriate error code */
     esp_ble_mesh_client_common_param_t   *params;       /*!< The client common parameters. */
     esp_ble_mesh_light_client_status_cb_t status_cb;    /*!< The light status message callback values */
 } esp_ble_mesh_light_client_cb_param_t;
 
+/** This enum value is the event of Lighting Client Model */
 typedef enum {
     ESP_BLE_MESH_LIGHT_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_LIGHT_CLIENT_SET_STATE_EVT,
@@ -475,7 +530,11 @@ typedef enum {
  *  @brief Bluetooth Mesh Light Client Model function.
  */
 
-/** @brief: event, event code of Light Client Model events; param, parameters of Light Client Model events */
+/**
+ * @brief   Lighting Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_light_client_cb_t)(esp_ble_mesh_light_client_cb_event_t event,
         esp_ble_mesh_light_client_cb_param_t *param);
 
@@ -493,7 +552,7 @@ esp_err_t esp_ble_mesh_register_light_client_callback(esp_ble_mesh_light_client_
  * @brief       Get the value of Light Server Model states using the Light Client Model get messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_light_message_opcode_t).
+ *              please refer to esp_ble_mesh_light_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   get_state: Pointer of light get message value.
@@ -509,7 +568,7 @@ esp_err_t esp_ble_mesh_light_client_get_state(esp_ble_mesh_client_common_param_t
  * @brief       Set the value of Light Server Model states using the Light Client Model set messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_light_message_opcode_t).
+ *              please refer to esp_ble_mesh_light_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   set_state: Pointer of generic set message value.
index 553845cad88ecc59f76088fd7209d9b8f1803cc6..d303e63a14e2893a906d40dc736dc593def3b5ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 /**
  *  @brief Bluetooth Mesh Sensor Client Model Get and Set parameters structure.
  */
+
+/** Parameters of Sensor Descriptor Get */
 typedef struct {
-    bool  op_en;       /* Indicate if optional parameters are included */
-    u16_t property_id; /* Property ID of a sensor (optional)           */
+    bool  op_en;        /*!< Indicate if optional parameters are included */
+    u16_t property_id;  /*!< Property ID of a sensor (optional) */
 } esp_ble_mesh_sensor_descriptor_get_t;
 
+/** Parameter of Sensor Cadence Get */
 typedef struct {
-    u16_t property_id; /* Property ID of a sensor */
+    u16_t property_id;  /*!< Property ID of a sensor */
 } esp_ble_mesh_sensor_cadence_get_t;
 
+/** Parameters of Sensor Cadence Set */
 typedef struct {
-    u16_t property_id;                                /* Property ID for the sensor */
-    u8_t  fast_cadence_period_divisor : 7,            /* Divisor for the publish period */
-          status_trigger_type : 1;                    /* The unit and format of the Status Trigger Delta fields */
-    struct net_buf_simple *status_trigger_delta_down; /* Delta down value that triggers a status message */
-    struct net_buf_simple *status_trigger_delta_up;   /* Delta up value that triggers a status message */
-    u8_t  status_min_interval;                        /* Minimum interval between two consecutive Status messages */
-    struct net_buf_simple *fast_cadence_low;          /* Low value for the fast cadence range */
-    struct net_buf_simple *fast_cadence_high;         /* Fast value for the fast cadence range */
+    u16_t property_id;                                  /*!< Property ID for the sensor */
+    u8_t  fast_cadence_period_divisor : 7,              /*!< Divisor for the publish period */
+          status_trigger_type : 1;                      /*!< The unit and format of the Status Trigger Delta fields */
+    struct net_buf_simple *status_trigger_delta_down;   /*!< Delta down value that triggers a status message */
+    struct net_buf_simple *status_trigger_delta_up;     /*!< Delta up value that triggers a status message */
+    u8_t  status_min_interval;                          /*!< Minimum interval between two consecutive Status messages */
+    struct net_buf_simple *fast_cadence_low;            /*!< Low value for the fast cadence range */
+    struct net_buf_simple *fast_cadence_high;           /*!< Fast value for the fast cadence range */
 } esp_ble_mesh_sensor_cadence_set_t;
 
+/** Parameter of Sensor Settings Get */
 typedef struct {
-    u16_t sensor_property_id; /* Property ID of a sensor */
+    u16_t sensor_property_id;   /*!< Property ID of a sensor */
 } esp_ble_mesh_sensor_settings_get_t;
 
+/** Parameters of Sensor Setting Get */
 typedef struct {
-    u16_t sensor_property_id;         /* Property ID of a sensor                          */
-    u16_t sensor_setting_property_id; /* Setting ID identifying a setting within a sensor */
+    u16_t sensor_property_id;           /*!< Property ID of a sensor */
+    u16_t sensor_setting_property_id;   /*!< Setting ID identifying a setting within a sensor */
 } esp_ble_mesh_sensor_setting_get_t;
 
+/** Parameters of Sensor Setting Set */
 typedef struct {
-    u16_t sensor_property_id;         /* Property ID identifying a sensor                 */
-    u16_t sensor_setting_property_id; /* Setting ID identifying a setting within a sensor */
-    struct net_buf_simple *sensor_setting_raw; /* Raw value for the setting */
+    u16_t sensor_property_id;           /*!< Property ID identifying a sensor */
+    u16_t sensor_setting_property_id;   /*!< Setting ID identifying a setting within a sensor */
+    struct net_buf_simple *sensor_setting_raw;  /*!< Raw value for the setting */
 } esp_ble_mesh_sensor_setting_set_t;
 
+/** Parameters of Sensor Get */
 typedef struct {
-    bool  op_en;       /* Indicate if optional parameters are included  */
-    u16_t property_id; /* Property ID for the sensor (optional)         */
+    bool  op_en;        /*!< Indicate if optional parameters are included  */
+    u16_t property_id;  /*!< Property ID for the sensor (optional) */
 } esp_ble_mesh_sensor_get_t;
 
+/** Parameters of Sensor Column Get */
 typedef struct {
-    u16_t property_id;     /* Property identifying a sensor                */
-    struct net_buf_simple *raw_value_x; /* Raw value identifying a column */
+    u16_t property_id;  /*!< Property identifying a sensor */
+    struct net_buf_simple *raw_value_x; /*!< Raw value identifying a column */
 } esp_ble_mesh_sensor_column_get_t;
 
+/** Parameters of Sensor Series Get */
 typedef struct {
-    bool  op_en;            /* Indicate if optional parameters are included          */
-    u16_t property_id;      /* Property identifying a sensor                         */
-    struct net_buf_simple *raw_value_x1; /* Raw value identifying a starting column (optional) */
-    struct net_buf_simple *raw_value_x2; /* Raw value identifying an ending column (C.1) */
+    bool  op_en;        /*!< Indicate if optional parameters are included */
+    u16_t property_id;  /*!< Property identifying a sensor */
+    struct net_buf_simple *raw_value_x1;    /*!< Raw value identifying a starting column (optional) */
+    struct net_buf_simple *raw_value_x2;    /*!< Raw value identifying an ending column (C.1) */
 } esp_ble_mesh_sensor_series_get_t;
 
+/**
+ * @brief Sensor Client Model get message union
+ */
 typedef union {
     esp_ble_mesh_sensor_descriptor_get_t descriptor_get;    /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_GET */
     esp_ble_mesh_sensor_cadence_get_t    cadence_get;       /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_CADENCE_GET */
@@ -103,6 +116,9 @@ typedef union {
     esp_ble_mesh_sensor_series_get_t     series_get;        /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_SERIES_GET */
 } esp_ble_mesh_sensor_client_get_state_t;
 
+/**
+ * @brief Sensor Client Model set message union
+ */
 typedef union {
     esp_ble_mesh_sensor_cadence_set_t cadence_set;          /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_CADENCE_SET & ESP_BLE_MESH_MODEL_OP_SENSOR_CADENCE_SET_UNACK */
     esp_ble_mesh_sensor_setting_set_t setting_set;          /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_SETTING_SET & ESP_BLE_MESH_MODEL_OP_SENSOR_SETTING_SET_UNACK */
@@ -112,43 +128,52 @@ typedef union {
  *  @brief Bluetooth Mesh Sensor Client Model Get and Set callback parameters structure.
  */
 
+/** Parameter of Sensor Descriptor Status */
 typedef struct {
-    struct net_buf_simple *descriptor; /* Sequence of 8-octet sensor descriptors (optional) */
+    struct net_buf_simple *descriptor;  /*!< Sequence of 8-octet sensor descriptors (optional) */
 } esp_ble_mesh_sensor_descriptor_status_cb_t;
 
+/** Parameters of Sensor Cadence Status */
 typedef struct {
-    u16_t property_id;              /* Property for the sensor                       */
-    struct net_buf_simple *sensor_cadence_value; /* Value of sensor cadence state */
+    u16_t property_id;  /*!< Property for the sensor */
+    struct net_buf_simple *sensor_cadence_value;    /*!< Value of sensor cadence state */
 } esp_ble_mesh_sensor_cadence_status_cb_t;
 
+/** Parameters of Sensor Settings Status */
 typedef struct {
-    u16_t sensor_property_id;              /* Property ID identifying a sensor                        */
-    struct net_buf_simple *sensor_setting_property_ids; /* A sequence of N sensor setting property IDs (optional) */
+    u16_t sensor_property_id;   /*!< Property ID identifying a sensor */
+    struct net_buf_simple *sensor_setting_property_ids; /*!< A sequence of N sensor setting property IDs (optional) */
 } esp_ble_mesh_sensor_settings_status_cb_t;
 
+/** Parameters of Sensor Setting Status */
 typedef struct  {
-    bool  op_en;                      /* Indicate id optional parameters are included        */
-    u16_t sensor_property_id;         /* Property ID identifying a sensor                    */
-    u16_t sensor_setting_property_id; /* Setting ID identifying a setting within a sensor    */
-    u8_t  sensor_setting_access;      /* Read/Write access rights for the setting (optional) */
-    struct net_buf_simple *sensor_setting_raw; /* Raw value for the setting */
+    bool  op_en;                        /*!< Indicate id optional parameters are included */
+    u16_t sensor_property_id;           /*!< Property ID identifying a sensor */
+    u16_t sensor_setting_property_id;   /*!< Setting ID identifying a setting within a sensor */
+    u8_t  sensor_setting_access;        /*!< Read/Write access rights for the setting (optional) */
+    struct net_buf_simple *sensor_setting_raw;  /*!< Raw value for the setting */
 } esp_ble_mesh_sensor_setting_status_cb_t;
 
+/** Parameter of Sensor Status */
 typedef struct {
-    struct net_buf_simple *marshalled_sensor_data; /* Value of sensor data state (optional) */
+    struct net_buf_simple *marshalled_sensor_data;  /*!< Value of sensor data state (optional) */
 } esp_ble_mesh_sensor_status_cb_t;
 
+/** Parameters of Sensor Column Status */
 typedef struct {
-    u16_t property_id;             /* Property identifying a sensor and the Y axis  */
-    struct net_buf_simple *sensor_column_value; /* Left values of sensor column status */
+    u16_t property_id;  /*!< Property identifying a sensor and the Y axis  */
+    struct net_buf_simple *sensor_column_value; /*!< Left values of sensor column status */
 } esp_ble_mesh_sensor_column_status_cb_t;
 
+/** Parameters of Sensor Series Status */
 typedef struct {
-    u16_t property_id;             /* Property identifying a sensor and the Y axis  */
-    struct net_buf_simple *sensor_series_value; /* Left values of sensor series status */
+    u16_t property_id;  /*!< Property identifying a sensor and the Y axis  */
+    struct net_buf_simple *sensor_series_value; /*!< Left values of sensor series status */
 } esp_ble_mesh_sensor_series_status_cb_t;
 
-
+/**
+ * @brief Sensor Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_sensor_descriptor_status_cb_t descriptor_status;   /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_DESCRIPTOR_STATUS */
     esp_ble_mesh_sensor_cadence_status_cb_t    cadence_status;      /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_CADENCE_STATUS */
@@ -159,6 +184,7 @@ typedef union {
     esp_ble_mesh_sensor_series_status_cb_t     series_status;       /*!< For ESP_BLE_MESH_MODEL_OP_SENSOR_SERIES_STATUS */
 } esp_ble_mesh_sensor_client_status_cb_t;
 
+/** Sensor Client Model callback parameters */
 typedef struct {
     int error_code;     /*!< 0: success,
                          *   otherwise failure. For the error code values please refer to errno.h file.
@@ -167,6 +193,7 @@ typedef struct {
     esp_ble_mesh_sensor_client_status_cb_t status_cb;   /*!< The sensor status message callback values */
 } esp_ble_mesh_sensor_client_cb_param_t;
 
+/** This enum value is the event of Sensor Client Model */
 typedef enum {
     ESP_BLE_MESH_SENSOR_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_SENSOR_CLIENT_SET_STATE_EVT,
@@ -179,7 +206,11 @@ typedef enum {
  *  @brief Bluetooth Mesh Sensor Client Model function.
  */
 
-/** @brief: event, event code of Sensor Client Model events; param, parameters of Sensor Client Model events */
+/**
+ * @brief   Sensor Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_sensor_client_cb_t)(esp_ble_mesh_sensor_client_cb_event_t event,
         esp_ble_mesh_sensor_client_cb_param_t *param);
 
@@ -197,7 +228,7 @@ esp_err_t esp_ble_mesh_register_sensor_client_callback(esp_ble_mesh_sensor_clien
  * @brief       Get the value of Sensor Server Model states using the Sensor Client Model get messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_sensor_message_opcode_t).
+ *              please refer to esp_ble_mesh_sensor_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   get_state: Pointer to sensor get message value.
@@ -213,7 +244,7 @@ esp_err_t esp_ble_mesh_sensor_client_get_state(esp_ble_mesh_client_common_param_
  * @brief       Set the value of Sensor Server Model states using the Sensor Client Model set messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_sensor_message_opcode_t).
+ *              please refer to esp_ble_mesh_sensor_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   set_state: Pointer to sensor set message value.
index cdf55ef170a0d70690a41f6adbc5c2eaaf23f68a..da45b4051749ff5c084c83198e773a493a4479a5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
  *  @brief Bluetooth Mesh Time Scene Client Model Get and Set parameters structure.
  */
 
+/** Parameters of Time Set */
 typedef struct {
-    u8_t  tai_seconds[5];     /* The current TAI time in seconds */
-    u8_t  sub_second;         /* The sub-second time in units of 1/256 second */
-    u8_t  uncertainty;        /* The estimated uncertainty in 10-millisecond steps */
-    u16_t time_authority : 1; /* 0 = No Time Authority, 1 = Time Authority */
-    u16_t tai_utc_delta : 15; /* Current difference between TAI and UTC in seconds */
-    u8_t  time_zone_offset;   /* The local time zone offset in 15-minute increments */
+    u8_t  tai_seconds[5];           /*!< The current TAI time in seconds */
+    u8_t  sub_second;               /*!< The sub-second time in units of 1/256 second */
+    u8_t  uncertainty;              /*!< The estimated uncertainty in 10-millisecond steps */
+    u16_t time_authority : 1;       /*!< 0 = No Time Authority, 1 = Time Authority */
+    u16_t tai_utc_delta : 15;       /*!< Current difference between TAI and UTC in seconds */
+    u8_t  time_zone_offset;         /*!< The local time zone offset in 15-minute increments */
 } esp_ble_mesh_time_set_t;
 
+/** Parameters of Time Zone Set */
 typedef struct {
-    u8_t time_zone_offset_new; /* Upcoming local time zone offset */
-    u8_t tai_zone_change[5];   /* TAI Seconds time of the upcoming Time Zone Offset change */
+    u8_t time_zone_offset_new;      /*!< Upcoming local time zone offset */
+    u8_t tai_zone_change[5];        /*!< TAI Seconds time of the upcoming Time Zone Offset change */
 } esp_ble_mesh_time_zone_set_t;
 
+/** Parameters of TAI-UTC Delta Set */
 typedef struct {
-    u16_t tai_utc_delta_new : 15; /* Upcoming difference between TAI and UTC in seconds */
-    u16_t padding : 1;            /* Always 0b0. Other values are Prohibited. */
-    u8_t tai_delta_change[5];     /* TAI Seconds time of the upcoming TAI-UTC Delta change */
+    u16_t tai_utc_delta_new : 15;   /*!< Upcoming difference between TAI and UTC in seconds */
+    u16_t padding : 1;              /*!< Always 0b0. Other values are Prohibited. */
+    u8_t tai_delta_change[5];       /*!< TAI Seconds time of the upcoming TAI-UTC Delta change */
 } esp_ble_mesh_tai_utc_delta_set_t;
 
+/** Parameter of Time Role Set */
 typedef struct {
-    u8_t time_role; /* The Time Role for the element */
+    u8_t time_role;                 /*!< The Time Role for the element */
 } esp_ble_mesh_time_role_set_t;
 
+/** Parameter of Scene Store */
 typedef struct {
-    u16_t scene_number; /* The number of scenes to be stored */
+    u16_t scene_number;             /*!< The number of scenes to be stored */
 } esp_ble_mesh_scene_store_t;
 
+/** Parameters of Scene Recall */
 typedef struct {
-    bool  op_en;        /* Indicate if optional parameters are included  */
-    u16_t scene_number; /* The number of scenes to be recalled           */
-    u8_t  tid;          /* Transaction ID                                */
-    u8_t  trans_time;   /* Time to complete state transition (optional)  */
-    u8_t  delay;        /* Indicate message execution delay (C.1)        */
+    bool  op_en;                    /*!< Indicate if optional parameters are included */
+    u16_t scene_number;             /*!< The number of scenes to be recalled */
+    u8_t  tid;                      /*!< Transaction ID */
+    u8_t  trans_time;               /*!< Time to complete state transition (optional) */
+    u8_t  delay;                    /*!< Indicate message execution delay (C.1) */
 } esp_ble_mesh_scene_recall_t;
 
+/** Parameter of Scene Delete */
 typedef struct {
-    u16_t scene_number; /* The number of scenes to be deleted */
+    u16_t scene_number;             /*!< The number of scenes to be deleted */
 } esp_ble_mesh_scene_delete_t;
 
+/** Parameter of Scheduler Action Get */
 typedef struct {
-    u8_t index; /* Index of the Schedule Register entry to get */
+    u8_t index;                     /*!< Index of the Schedule Register entry to get */
 } esp_ble_mesh_scheduler_act_get_t;
 
+/** Parameters of Scheduler Action Set */
 typedef struct {
-    u64_t index : 4;        /* Index of the Schedule Register entry to set */
-    u64_t year : 7;         /* Scheduled year for the action */
-    u64_t month : 12;       /* Scheduled month for the action */
-    u64_t day : 5;          /* Scheduled day of the month for the action */
-    u64_t hour : 5;         /* Scheduled hour for the action */
-    u64_t minute : 6;       /* Scheduled minute for the action */
-    u64_t second : 6;       /* Scheduled second for the action */
-    u64_t day_of_week : 7;  /* Schedule days of the week for the action */
-    u64_t action : 4;       /* Action to be performed at the scheduled time */
-    u64_t trans_time : 8;   /* Transition time for this action */
-    u16_t scene_number;     /* Transition time for this action */
+    u64_t index : 4;                /*!< Index of the Schedule Register entry to set */
+    u64_t year : 7;                 /*!< Scheduled year for the action */
+    u64_t month : 12;               /*!< Scheduled month for the action */
+    u64_t day : 5;                  /*!< Scheduled day of the month for the action */
+    u64_t hour : 5;                 /*!< Scheduled hour for the action */
+    u64_t minute : 6;               /*!< Scheduled minute for the action */
+    u64_t second : 6;               /*!< Scheduled second for the action */
+    u64_t day_of_week : 7;          /*!< Schedule days of the week for the action */
+    u64_t action : 4;               /*!< Action to be performed at the scheduled time */
+    u64_t trans_time : 8;           /*!< Transition time for this action */
+    u16_t scene_number;             /*!< Transition time for this action */
 } esp_ble_mesh_scheduler_act_set_t;
 
 /**
- * @brief For
- *
- * the get_state parameter in the esp_ble_mesh_time_scene_client_get_state function should be set to NULL.
+ * @brief Time Scene Client Model get message union
  */
 typedef union {
     esp_ble_mesh_scheduler_act_get_t scheduler_act_get; /*!< For ESP_BLE_MESH_MODEL_OP_SCHEDULER_ACT_GET */
 } esp_ble_mesh_time_scene_client_get_state_t;
 
+/**
+ * @brief Time Scene Client Model set message union
+ */
 typedef union {
     esp_ble_mesh_time_set_t          time_set;          /*!< For ESP_BLE_MESH_MODEL_OP_TIME_SET */
     esp_ble_mesh_time_zone_set_t     time_zone_set;     /*!< For ESP_BLE_MESH_MODEL_OP_TIME_ZONE_SET */
@@ -156,65 +166,76 @@ typedef union {
  *  @brief Bluetooth Mesh Time Scene Client Model Get and Set callback parameters structure.
  */
 
+/** Parameters of Time Status */
 typedef struct {
-    u8_t  tai_seconds[5];     /* The current TAI time in seconds */
-    u8_t  sub_second;         /* The sub-second time in units of 1/256 second */
-    u8_t  uncertainty;        /* The estimated uncertainty in 10-millisecond steps */
-    u16_t time_authority : 1; /* 0 = No Time Authority, 1 = Time Authority */
-    u16_t tai_utc_delta : 15; /* Current difference between TAI and UTC in seconds */
-    u8_t  time_zone_offset;   /* The local time zone offset in 15-minute increments */
+    u8_t  tai_seconds[5];           /*!< The current TAI time in seconds */
+    u8_t  sub_second;               /*!< The sub-second time in units of 1/256 second */
+    u8_t  uncertainty;              /*!< The estimated uncertainty in 10-millisecond steps */
+    u16_t time_authority : 1;       /*!< 0 = No Time Authority, 1 = Time Authority */
+    u16_t tai_utc_delta : 15;       /*!< Current difference between TAI and UTC in seconds */
+    u8_t  time_zone_offset;         /*!< The local time zone offset in 15-minute increments */
 } esp_ble_mesh_time_status_cb_t;
 
+/** Parameters of Time Zone Status */
 typedef struct {
-    u8_t time_zone_offset_curr; /* Current local time zone offset */
-    u8_t time_zone_offset_new;  /* Upcoming local time zone offset */
-    u8_t tai_zone_change[5];    /* TAI Seconds time of the upcoming Time Zone Offset change */
+    u8_t time_zone_offset_curr;     /*!< Current local time zone offset */
+    u8_t time_zone_offset_new;      /*!< Upcoming local time zone offset */
+    u8_t tai_zone_change[5];        /*!< TAI Seconds time of the upcoming Time Zone Offset change */
 } esp_ble_mesh_time_zone_status_cb_t;
 
+/** Parameters of TAI-UTC Delta Status */
 typedef struct {
-    u16_t tai_utc_delta_curr : 15; /* Current difference between TAI and UTC in seconds */
-    u16_t padding_1 : 1;           /* Always 0b0. Other values are Prohibited. */
-    u16_t tai_utc_delta_new : 15;  /* Upcoming difference between TAI and UTC in seconds */
-    u16_t padding_2 : 1;           /* Always 0b0. Other values are Prohibited. */
-    u8_t tai_delta_change[5];      /* TAI Seconds time of the upcoming TAI-UTC Delta change */
+    u16_t tai_utc_delta_curr : 15;  /*!< Current difference between TAI and UTC in seconds */
+    u16_t padding_1 : 1;            /*!< Always 0b0. Other values are Prohibited. */
+    u16_t tai_utc_delta_new : 15;   /*!< Upcoming difference between TAI and UTC in seconds */
+    u16_t padding_2 : 1;            /*!< Always 0b0. Other values are Prohibited. */
+    u8_t tai_delta_change[5];       /*!< TAI Seconds time of the upcoming TAI-UTC Delta change */
 } esp_ble_mesh_tai_utc_delta_status_cb_t;
 
+/** Parameter of Time Role Status */
 typedef struct {
-    u8_t time_role; /* The Time Role for the element */
+    u8_t time_role;                 /*!< The Time Role for the element */
 } esp_ble_mesh_time_role_status_cb_t;
 
+/** Parameters of Scene Status */
 typedef struct {
-    bool  op_en;         /* Indicate if optional parameters are included  */
-    u8_t  status_code;   /* Status code of the last operation             */
-    u16_t current_scene; /* Scene Number of the current scene             */
-    u16_t target_scene;  /* Scene Number of the target scene (optional)   */
-    u8_t  remain_time;   /* Time to complete state transition (C.1)       */
+    bool  op_en;                    /*!< Indicate if optional parameters are included */
+    u8_t  status_code;              /*!< Status code of the last operation */
+    u16_t current_scene;            /*!< Scene Number of the current scene */
+    u16_t target_scene;             /*!< Scene Number of the target scene (optional) */
+    u8_t  remain_time;              /*!< Time to complete state transition (C.1) */
 } esp_ble_mesh_scene_status_cb_t;
 
+/** Parameters of Scene Register Status */
 typedef struct {
-    u8_t  status_code;              /* Status code for the previous operation    */
-    u16_t current_scene;            /* Scene Number of the current scene         */
-    struct net_buf_simple *scenes;  /* A list of scenes stored within an element */
+    u8_t  status_code;              /*!< Status code for the previous operation */
+    u16_t current_scene;            /*!< Scene Number of the current scene */
+    struct net_buf_simple *scenes;  /*!< A list of scenes stored within an element */
 } esp_ble_mesh_scene_register_status_cb_t;
 
+/** Parameter of Scheduler Status */
 typedef struct {
-    u16_t schedules; /* Bit field indicating defined Actions in the Schedule Register */
+    u16_t schedules;                /*!< Bit field indicating defined Actions in the Schedule Register */
 } esp_ble_mesh_scheduler_status_cb_t;
 
+/** Parameters of Scheduler Action Status */
 typedef struct {
-    u64_t index : 4;        /* Enumerates (selects) a Schedule Register entry */
-    u64_t year : 7;         /* Scheduled year for the action */
-    u64_t month : 12;       /* Scheduled month for the action */
-    u64_t day : 5;          /* Scheduled day of the month for the action */
-    u64_t hour : 5;         /* Scheduled hour for the action */
-    u64_t minute : 6;       /* Scheduled minute for the action */
-    u64_t second : 6;       /* Scheduled second for the action */
-    u64_t day_of_week : 7;  /* Schedule days of the week for the action */
-    u64_t action : 4;       /* Action to be performed at the scheduled time */
-    u64_t trans_time : 8;   /* Transition time for this action */
-    u16_t scene_number;     /* Transition time for this action */
+    u64_t index : 4;                /*!< Enumerates (selects) a Schedule Register entry */
+    u64_t year : 7;                 /*!< Scheduled year for the action */
+    u64_t month : 12;               /*!< Scheduled month for the action */
+    u64_t day : 5;                  /*!< Scheduled day of the month for the action */
+    u64_t hour : 5;                 /*!< Scheduled hour for the action */
+    u64_t minute : 6;               /*!< Scheduled minute for the action */
+    u64_t second : 6;               /*!< Scheduled second for the action */
+    u64_t day_of_week : 7;          /*!< Schedule days of the week for the action */
+    u64_t action : 4;               /*!< Action to be performed at the scheduled time */
+    u64_t trans_time : 8;           /*!< Transition time for this action */
+    u16_t scene_number;             /*!< Transition time for this action */
 } esp_ble_mesh_scheduler_act_status_cb_t;
 
+/**
+ * @brief Time Scene Client Model received message union
+ */
 typedef union {
     esp_ble_mesh_time_status_cb_t           time_status;            /*!< For ESP_BLE_MESH_MODEL_OP_TIME_STATUS */
     esp_ble_mesh_time_zone_status_cb_t      time_zone_status;       /*!< For ESP_BLE_MESH_MODEL_OP_TIME_ZONE_STATUS */
@@ -226,12 +247,14 @@ typedef union {
     esp_ble_mesh_scheduler_act_status_cb_t  scheduler_act_status;   /*!< For ESP_BLE_MESH_MODEL_OP_SCHEDULER_ACT_STATUS */
 } esp_ble_mesh_time_scene_client_status_cb_t;
 
+/** Time Scene Client Model callback parameters */
 typedef struct {
     int error_code;                                         /*!< Appropriate error code */
     esp_ble_mesh_client_common_param_t        *params;      /*!< The client common parameters. */
     esp_ble_mesh_time_scene_client_status_cb_t status_cb;   /*!< The scene status message callback values */
 } esp_ble_mesh_time_scene_client_cb_param_t;
 
+/** This enum value is the event of Time Scene Client Model */
 typedef enum {
     ESP_BLE_MESH_TIME_SCENE_CLIENT_GET_STATE_EVT,
     ESP_BLE_MESH_TIME_SCENE_CLIENT_SET_STATE_EVT,
@@ -244,7 +267,11 @@ typedef enum {
  *  @brief Bluetooth Mesh Time Scene Client Model function.
  */
 
-/** @brief: event, event code of Time Scene Client Model events; param, parameters of Time Scene Client Model events */
+/**
+ * @brief   Time Scene Client Model callback function type
+ * @param   event: Event type
+ * @param   param: Pointer to callback parameter
+ */
 typedef void (* esp_ble_mesh_time_scene_client_cb_t)(esp_ble_mesh_time_scene_client_cb_event_t event,
         esp_ble_mesh_time_scene_client_cb_param_t *param);
 
@@ -262,7 +289,7 @@ esp_err_t esp_ble_mesh_register_time_scene_client_callback(esp_ble_mesh_time_sce
  * @brief       Get the value of Time Scene Server Model states using the Time Scene Client Model get messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_time_scene_message_opcode_t).
+ *              please refer to esp_ble_mesh_time_scene_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   get_state: Pointer to time scene get message value.
@@ -277,7 +304,7 @@ esp_err_t esp_ble_mesh_time_scene_client_get_state(esp_ble_mesh_client_common_pa
  * @brief       Set the value of Time Scene Server Model states using the Time Scene Client Model set messages.
  *
  * @note        If you want to know the opcodes and corresponding meanings accepted by this API,
- *              please refer to (@ref esp_ble_mesh_time_scene_message_opcode_t).
+ *              please refer to esp_ble_mesh_time_scene_message_opcode_t in esp_ble_mesh_defs.h
  *
  * @param[in]   params:    Pointer to BLE Mesh common client parameters.
  * @param[in]   set_state: Pointer to time scene set message value.
index 7fe0e0595d974a9b4cd6ca4f571dd4c2423d055d..0937721bb296eb6b7a594e9037db3597031d04c6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index b8fc338169341905c38ad31bcd075fe48eaff27c..761fbeebe52abb7b645b3ba4f40f91f1ff8eb276 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6651f599367f48bdd7b5edb3dd564c09d66599a8..1f6d88340b2d338fd597b0d9a9400f14121356d8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 1b89c51713fe72477621d39ae4576ac50ee3ca33..d07dba47a01dcf8104375caa2aedcb044d397511 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d53b0d8cb49a6cd015a3eb79e3c43657e1f9427d..c825e93907ce2d6adfa8582a8a17e03cdaf5ce95 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 53d773842ff9f8b0c5dd52f0119ee1063c0085af..b9f3de6bdeb9fa547c20e700dde32a3281367946 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 4c1a36905ef70ea92b2a5acf64d3fe0b3982783a..4f03567dc933743ed23bb8e13807ed0424fb1c8f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6744b9612062edf1022faded8da0541cca8ef091..87889923cc0149b97e0af80ac5a765c1737201f2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 480003141d830219f9c975ab719a1aafa430f61c..21a159f20a9c618e890d9e7351b0a60b3798d58d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 859624dba2e2e82fc73871b4a119242f85441d14..a00efb0c1eef71ac1fbb263628576ce348a8fbce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 8a3088f32df1154ba1d5a35fb014134e65cc668e..98353c6acd6c31d88466d591bce4ea62533f5186 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9ce21e486545e5b881e648f466a8bac07ef2c3ac..ff0f4154fd017efa3e8bd781827aa0062cd8460e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6bd97355e8bc161ce6972dcc2066afc937cdfa65..e94ccdc4b05061b8ee2bc11134411f4cb0fb1de0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 1778fa23470239dafd49dbf56c11656a24dd6c4d..0ee1d244c8fabfb3e1f44224fff71c54c81669de 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index dfe4e39fa0f94510740d0b0764c2910089224328..0790b538dea94afed991c114883df8d8533be2e8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 0b3cfae6e61b1df4b0ef59d14b3f211f027820a4..a58de225fe95c82f8edd682c9df02b5172b4f0f0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d78cc1484a3f502c125dc8a009fa99b9525f62e3..586fd3384269f170bf179858525bd70252c4a2c0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a4585d400904be3a0b3918abedb36f633ec7ad40..50bb656b2c35997d7915bd2d25b21260ddd8d56e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a07c8cec8716902d0b48b9bd561ac0d2d4a8dc14..dbaae8ebb64b6651c109822f2fe441e3f584aae3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 30a2f94d76409d9bcdebb0d0092c0fc678dc4d80..103a223f21d040bdc73099547b534dee99ba5c6d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 2961af3c42bd509a9b565beb3caff84f1eb10b05..022994f382a2e688019a3c856a01778821330a1a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 5da92f433bae38ff7ecebb722b2ac7c0e4005575..6a64167b39e256dacdc103593a984a7ca6e28a9b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 1a19bee2970b7535cf2b4cb5f815084cd87a57a6..59e9ac114260380463371a4503aa2dc173285698 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index b1e929adf8147339aaf61ac8e0c659eb130e196b..a4216fadca956ddf5b40005c1be027ff8bea2c20 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 7aeb5d00d34b74e255daffbe14a78c6098589a2d..9e963095dd1758b8197756d3e180f5b8a2127962 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3f272cb9525a97545944642f0faa0c00f0455421..e82587d7664dfd89b7c5b27520a9084d011ed569 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 5b6b92a5ae908eb4840cd259bdcecab0fc899bff..9e9789a821fe02f1e17fa8f7965041f46f00d35f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 2a116be01e51808579ecddf997316d885418fc95..468cf65afc4b46eeeb5547394e36c8b9d8a2a30e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index fd9cc6dfda577767c5d3549d497aec7f9d4a33a7..486cdb769d24339e303966ab6c92c2110847eed2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 01929d5cfeb166f7af1f83d76322f316610bb345..d9a49e71de5661fafd7d0fda7db353f04d802f64 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 2b259a8953a46ea1a32b2b37c11871b52572d8d0..095499ef5d84c0a7bee9772e46fcc4dcaff7e84e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index baa0d4abc039b8e1bb87dc1c539d285df4c616fb..a37cf878f4bed2aefc666d7bb3afe3e87dee4935 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3aea99a8a489022f9924071526a8f341aa58dae1..8f0481b86d2888c1ddcbca860e36cb13e5c4d3e2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 801644ace12f3375d3d3b555f7a49b285fe0cabe..bb4aa6f934ab097caadd46944ea38ca558bf10f7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index c904543de5bb0b36c5d94e7450d9c53984eca8f5..cc694082cd9fd9440c43a34ecbd6c6f3af038d84 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 1933d1027a2161b879a4511ba2abb2b6dab4dae4..26ea1f8d7e7a833258b8b7efc1cca1f60871df15 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3296edf92537eddf9111bfd4155928d8d150a717..921c504ae34b7e200b8df3708a071787b4cd64d7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 58391add6bb9f0f81928f214cf1120a542fb6bfa..a8f35c180f3fd706396ce8e0aa04224970a761c8 100644 (file)
@@ -714,11 +714,6 @@ struct in6_pktinfo {
   unsigned int ipi6_ifindex;        /* send/recv interface index */
 };
 
-struct in_pktinfo {
-  int ipi_ifindex;
-  struct in_addr ipi_spec_dst;
-  struct in_addr ipi_addr;
-};
 #endif
 
 #if !defined(WITH_CONTIKI) && !defined(SOL_IP)
index d675b7a5839900770fc1c29f4b2becd8fed52a2d..8f5a5cfb10117ce2ddd57c5874a159720184f3ab 100644 (file)
@@ -27,7 +27,6 @@
 #define HAVE_ARPA_INET_H
 #define HAVE_TIME_H
 
-#define IP_PKTINFO   IP_MULTICAST_IF
 #define IPV6_PKTINFO IPV6_V6ONLY
 
 #define PACKAGE_NAME "libcoap-posix"
index 9a05e7cc14918aa16ee1b002453feb340c88fa6a..5fe2cde1479ec2a5406beea717d6c63e7518f78b 100644 (file)
@@ -13,7 +13,7 @@ list(APPEND srcs
     "src/esp_efuse_utility.c")
 
 idf_component_register(SRCS "${srcs}"
-                    PRIV_REQUIRES bootloader_support soc
+                    PRIV_REQUIRES bootloader_support soc spi_flash
                     INCLUDE_DIRS "${include_dirs}")
 
 set(GEN_EFUSE_TABLE_ARG --max_blk_len ${CONFIG_EFUSE_MAX_BLK_LEN})
index 0a314e2ec1853385e7d85421648eef44616bf6e3..c8a8166eaad3a054cd852487dd477fd93635f9bc 100644 (file)
@@ -16,7 +16,6 @@ else()
         "esp_adapter.c"
         "esp_timer_esp32.c"
         "esp_himem.c"
-        "gdbstub.c"
         "hw_random.c"
         "int_wdt.c"
         "intr_alloc.c"
index ad7f228d9a91b2bc9d892d401150ce4d59825b67..6fdfcc3e2a3235db12fa813cb583b880f299e1a2 100644 (file)
@@ -425,6 +425,7 @@ menu "ESP32-specific"
 
         config ESP32_PANIC_GDBSTUB
             bool "Invoke GDBStub"
+            select ESP_GDBSTUB_ENABLED
             help
                 Invoke gdbstub on the serial port, allowing for gdb to attach to it to do a postmortem
                 of the crash.
index b7b35e16f09a9b295d2fe360989303dd97e0299b..4b8c2d5c4b415edd3caf353a390549f0b2e8ee69 100644 (file)
@@ -70,6 +70,7 @@
 #include "esp_private/pm_impl.h"
 #include "trax.h"
 #include "esp_ota_ops.h"
+#include "esp_efuse.h"
 
 #define STRINGIFY(s) STRINGIFY2(s)
 #define STRINGIFY2(s) #s
diff --git a/components/esp32/gdbstub.c b/components/esp32/gdbstub.c
deleted file mode 100644 (file)
index c690e42..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// 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.
-
-/******************************************************************************
- * Description: A stub to make the ESP32 debuggable by GDB over the serial
- * port, at least enough to do a backtrace on panic. This gdbstub is read-only:
- * it allows inspecting the ESP32 state
- *******************************************************************************/
-
-#include <string.h>
-#include "esp32/rom/ets_sys.h"
-#include "soc/uart_periph.h"
-#include "soc/gpio_periph.h"
-#include "soc/soc_memory_layout.h"
-#include "esp_private/gdbstub.h"
-#include "driver/gpio.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "sdkconfig.h"
-
-//Length of buffer used to reserve GDB commands. Has to be at least able to fit the G command, which
-//implies a minimum size of about 320 bytes.
-#define PBUFLEN 512
-
-static unsigned char cmd[PBUFLEN];             //GDB command input buffer
-static char chsum;                                             //Running checksum of the output packet
-
-#define ATTR_GDBFN
-
-//Receive a char from the uart. Uses polling and feeds the watchdog.
-static int ATTR_GDBFN gdbRecvChar() {
-       int i;
-       while (((READ_PERI_REG(UART_STATUS_REG(0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT)==0) ;
-       i=READ_PERI_REG(UART_FIFO_REG(0));
-       return i;
-}
-
-//Send a char to the uart.
-static void ATTR_GDBFN gdbSendChar(char c) {
-       while (((READ_PERI_REG(UART_STATUS_REG(0))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT)>=126) ;
-       WRITE_PERI_REG(UART_FIFO_REG(0), c);
-}
-
-//Send the start of a packet; reset checksum calculation.
-static void ATTR_GDBFN gdbPacketStart() {
-       chsum=0;
-       gdbSendChar('$');
-}
-
-//Send a char as part of a packet
-static void ATTR_GDBFN gdbPacketChar(char c) {
-       if (c=='#' || c=='$' || c=='}' || c=='*') {
-               gdbSendChar('}');
-               gdbSendChar(c^0x20);
-               chsum+=(c^0x20)+'}';
-       } else {
-               gdbSendChar(c);
-               chsum+=c;
-       }
-}
-
-//Send a string as part of a packet
-static void ATTR_GDBFN gdbPacketStr(const char *c) {
-       while (*c!=0) {
-               gdbPacketChar(*c);
-               c++;
-       }
-}
-
-//Send a hex val as part of a packet. 'bits'/4 dictates the number of hex chars sent.
-static void ATTR_GDBFN gdbPacketHex(int val, int bits) {
-       char hexChars[]="0123456789abcdef";
-       int i;
-       for (i=bits; i>0; i-=4) {
-               gdbPacketChar(hexChars[(val>>(i-4))&0xf]);
-       }
-}
-
-//Finish sending a packet.
-static void ATTR_GDBFN gdbPacketEnd() {
-       gdbSendChar('#');
-       gdbPacketHex(chsum, 8);
-}
-
-//Error states used by the routines that grab stuff from the incoming gdb packet
-#define ST_ENDPACKET -1
-#define ST_ERR -2
-#define ST_OK -3
-#define ST_CONT -4
-
-//Grab a hex value from the gdb packet. Ptr will get positioned on the end
-//of the hex string, as far as the routine has read into it. Bits/4 indicates
-//the max amount of hex chars it gobbles up. Bits can be -1 to eat up as much
-//hex chars as possible.
-static long ATTR_GDBFN gdbGetHexVal(unsigned char **ptr, int bits) {
-       int i;
-       int no;
-       unsigned int v=0;
-       char c;
-       no=bits/4;
-       if (bits==-1) no=64;
-       for (i=0; i<no; i++) {
-               c=**ptr;
-               (*ptr)++;
-               if (c>='0' && c<='9') {
-                       v<<=4;
-                       v|=(c-'0');
-               } else if (c>='A' && c<='F') {
-                       v<<=4;
-                       v|=(c-'A')+10;
-               } else if (c>='a' && c<='f') {
-                       v<<=4;
-                       v|=(c-'a')+10;
-               } else if (c=='#') {
-                       if (bits==-1) {
-                               (*ptr)--;
-                               return v;
-                       }
-                       return ST_ENDPACKET;
-               } else {
-                       if (bits==-1) {
-                               (*ptr)--;
-                               return v;
-                       }
-                       return ST_ERR;
-               }
-       }
-       return v;
-}
-
-//Swap an int into the form gdb wants it
-static int ATTR_GDBFN iswap(int i) {
-       int r;
-       r=((i>>24)&0xff);
-       r|=((i>>16)&0xff)<<8;
-       r|=((i>>8)&0xff)<<16;
-       r|=((i>>0)&0xff)<<24;
-       return r;
-}
-
-//Read a byte from ESP32 memory.
-static unsigned char ATTR_GDBFN readbyte(unsigned int p) {
-       int *i=(int*)(p&(~3));
-       if (p<0x20000000 || p>=0x80000000) return -1;
-       return *i>>((p&3)*8);
-}
-
-
-//Register file in the format exp108 gdb port expects it.
-//Inspired by gdb/regformats/reg-xtensa.dat
-typedef struct {
-       uint32_t pc;
-       uint32_t a[64];
-       uint32_t lbeg;
-       uint32_t lend;
-       uint32_t lcount;
-       uint32_t sar;
-       uint32_t windowbase;
-       uint32_t windowstart;
-       uint32_t configid0;
-       uint32_t configid1;
-       uint32_t ps;
-       uint32_t threadptr;
-       uint32_t br;
-       uint32_t scompare1;
-       uint32_t acclo;
-       uint32_t acchi;
-       uint32_t m0;
-       uint32_t m1;
-       uint32_t m2;
-       uint32_t m3;
-       uint32_t expstate;  //I'm going to assume this is exccause...
-       uint32_t f64r_lo;
-       uint32_t f64r_hi;
-       uint32_t f64s;
-       uint32_t f[16];
-       uint32_t fcr;
-       uint32_t fsr;
-} GdbRegFile;
-
-
-GdbRegFile gdbRegFile;
-
-/*
-//Register format as the Xtensa HAL has it:
-STRUCT_FIELD (long, 4, XT_STK_EXIT,     exit)
-STRUCT_FIELD (long, 4, XT_STK_PC,       pc)
-STRUCT_FIELD (long, 4, XT_STK_PS,       ps)
-STRUCT_FIELD (long, 4, XT_STK_A0,       a0)
-[..]
-STRUCT_FIELD (long, 4, XT_STK_A15,      a15)
-STRUCT_FIELD (long, 4, XT_STK_SAR,      sar)
-STRUCT_FIELD (long, 4, XT_STK_EXCCAUSE, exccause)
-STRUCT_FIELD (long, 4, XT_STK_EXCVADDR, excvaddr)
-STRUCT_FIELD (long, 4, XT_STK_LBEG,   lbeg)
-STRUCT_FIELD (long, 4, XT_STK_LEND,   lend)
-STRUCT_FIELD (long, 4, XT_STK_LCOUNT, lcount)
-// Temporary space for saving stuff during window spill
-STRUCT_FIELD (long, 4, XT_STK_TMP0,   tmp0)
-STRUCT_FIELD (long, 4, XT_STK_TMP1,   tmp1)
-STRUCT_FIELD (long, 4, XT_STK_TMP2,   tmp2)
-STRUCT_FIELD (long, 4, XT_STK_VPRI,   vpri)
-STRUCT_FIELD (long, 4, XT_STK_OVLY,   ovly)
-#endif
-STRUCT_END(XtExcFrame)
-*/
-
-static void commonRegfile() {
-       if (gdbRegFile.a[0] & 0x8000000U) gdbRegFile.a[0] = (gdbRegFile.a[0] & 0x3fffffffU) | 0x40000000U;
-       if (!esp_stack_ptr_is_sane(gdbRegFile.a[1])) gdbRegFile.a[1] = 0xDEADBEEF;
-       gdbRegFile.windowbase=0; //0
-       gdbRegFile.windowstart=0x1; //1
-       gdbRegFile.configid0=0xdeadbeef; //ToDo
-       gdbRegFile.configid1=0xdeadbeef; //ToDo
-       gdbRegFile.threadptr=0xdeadbeef; //ToDo
-       gdbRegFile.br=0xdeadbeef; //ToDo
-       gdbRegFile.scompare1=0xdeadbeef; //ToDo
-       gdbRegFile.acclo=0xdeadbeef; //ToDo
-       gdbRegFile.acchi=0xdeadbeef; //ToDo
-       gdbRegFile.m0=0xdeadbeef; //ToDo
-       gdbRegFile.m1=0xdeadbeef; //ToDo
-       gdbRegFile.m2=0xdeadbeef; //ToDo
-       gdbRegFile.m3=0xdeadbeef; //ToDo
-}
-
-static void dumpHwToRegfile(XtExcFrame *frame) {
-       int i;
-       long *frameAregs=&frame->a0;
-       gdbRegFile.pc=(frame->pc & 0x3fffffffU)|0x40000000U;
-       for (i=0; i<16; i++) gdbRegFile.a[i]=frameAregs[i];
-       for (i=16; i<64; i++) gdbRegFile.a[i]=0xDEADBEEF;
-       gdbRegFile.lbeg=frame->lbeg;
-       gdbRegFile.lend=frame->lend;
-       gdbRegFile.lcount=frame->lcount;
-       gdbRegFile.ps=(frame->ps & PS_UM) ? (frame->ps & ~PS_EXCM) : frame->ps;
-       //All windows have been spilled to the stack by the ISR routines. The following values should indicate that.
-       gdbRegFile.sar=frame->sar;
-       commonRegfile();
-       gdbRegFile.expstate=frame->exccause; //ToDo
-}
-
-//Send the reason execution is stopped to GDB.
-static void sendReason() {
-       //exception-to-signal mapping
-       char exceptionSignal[]={4,31,11,11,2,6,8,0,6,7,0,0,7,7,7,7};
-       int i=0;
-       gdbPacketStart();
-       gdbPacketChar('T');
-       i=gdbRegFile.expstate&0x7f;
-       if (i<sizeof(exceptionSignal)) {
-               gdbPacketHex(exceptionSignal[i], 8);
-       } else {
-               gdbPacketHex(11, 8);
-       }
-       gdbPacketEnd();
-}
-
-static int sendPacket(const char * text) {
-       gdbPacketStart();
-       if (text != NULL) gdbPacketStr(text);
-       gdbPacketEnd();
-       return ST_OK;
-}
-
-#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-
-#define STUB_TASKS_NUM  CONFIG_ESP_GDBSTUB_MAX_TASKS
-
-//Remember the exception frame that caused panic since it's not saved in TCB
-static XtExcFrame paniced_frame;
-
-//Allows GDBStub to disable task support after a crash
-//(e.g. if GDBStub crashes while trying to get task list, e.g. due to corrupted list structures)
-static enum {
-       HANDLER_NOT_STARTED,
-       HANDLER_STARTED,
-       HANDLER_TASK_SUPPORT_DISABLED
-} handlerState;
-
-static void dumpTaskToRegfile(XtSolFrame *frame) {
-       int i;
-       long *frameAregs=&frame->a0;
-       gdbRegFile.pc=(frame->pc & 0x3fffffffU)|0x40000000U;
-       for (i=0; i<4; i++) gdbRegFile.a[i]=frameAregs[i];
-       for (i=4; i<64; i++) gdbRegFile.a[i]=0xDEADBEEF;
-       gdbRegFile.lbeg=0;
-       gdbRegFile.lend=0;
-       gdbRegFile.lcount=0;
-       gdbRegFile.ps=(frame->ps & PS_UM) ? (frame->ps & ~PS_EXCM) : frame->ps;
-       //All windows have been spilled to the stack by the ISR routines. The following values should indicate that.
-       gdbRegFile.sar=0;
-       commonRegfile();
-       gdbRegFile.expstate=0; //ToDo
-}
-
-// Fetch the task status. Returns the total number of tasks.
-static unsigned getTaskInfo(unsigned index, unsigned * handle, const char ** name, unsigned * coreId) {
-       static unsigned taskCount = 0;
-       static TaskSnapshot_t tasks[STUB_TASKS_NUM];
-
-       if (!taskCount) {
-               unsigned tcbSize = 0;
-               taskCount = uxTaskGetSnapshotAll(tasks, STUB_TASKS_NUM, &tcbSize);
-       }
-       if (index < taskCount) {
-               TaskHandle_t h = (TaskHandle_t)tasks[index].pxTCB;
-               if (handle) *handle = (unsigned)h;
-               if (name) *name = pcTaskGetTaskName(h);
-               if (coreId) *coreId = xTaskGetAffinity(h);
-       }
-       return taskCount;
-}
-
-typedef struct
-{
-       uint8_t * topOfStack;
-} DumpTCB;
-
-
-static void dumpTCBToRegFile(unsigned handle) {
-       // A task handle is a pointer to a TCB in FreeRTOS
-       DumpTCB * tcb = (DumpTCB*)handle;
-       uint8_t * pxTopOfStack = tcb->topOfStack;
-
-       //Deduced from coredump code
-       XtExcFrame * frame = (XtExcFrame*)pxTopOfStack;
-       if (frame->exit) {
-               // It's an exception frame
-               dumpHwToRegfile(frame);
-       } else {
-               XtSolFrame * taskFrame = (XtSolFrame*)pxTopOfStack;
-               dumpTaskToRegfile(taskFrame);
-       }
-}
-
-#define CUR_TASK_INDEX_NOT_SET -2
-#define CUR_TASK_INDEX_UNKNOWN -1
-
-// Get the index of the task currently running on the current CPU, and cache the result
-static int findCurrentTaskIndex() {
-       static int curTaskIndex = CUR_TASK_INDEX_NOT_SET;
-       if (curTaskIndex == CUR_TASK_INDEX_NOT_SET) {
-               unsigned curHandle = (unsigned)xTaskGetCurrentTaskHandleForCPU(xPortGetCoreID());
-               unsigned handle;
-               unsigned count = getTaskInfo(0, 0, 0, 0);
-               for(int k=0; k<(int)count; k++) {
-                       if (getTaskInfo(k, &handle, 0, 0) && curHandle == handle) {
-                               curTaskIndex = k;
-                               return curTaskIndex;
-                       }
-               }
-               curTaskIndex = CUR_TASK_INDEX_UNKNOWN;
-       }
-       return curTaskIndex;
-}
-
-#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-
-//Handle a command as received from GDB.
-static int gdbHandleCommand(unsigned char *cmd, int len) {
-       //Handle a command
-       int i, j, k;
-       unsigned char *data=cmd+1;
-       if (cmd[0]=='g') {              //send all registers to gdb
-               int *p=(int*)&gdbRegFile;
-               gdbPacketStart();
-               for (i=0; i<sizeof(GdbRegFile)/4; i++) gdbPacketHex(iswap(*p++), 32);
-               gdbPacketEnd();
-       } else if (cmd[0]=='G') {       //receive content for all registers from gdb
-               int *p=(int*)&gdbRegFile;
-               for (i=0; i<sizeof(GdbRegFile)/4; i++) *p++=iswap(gdbGetHexVal(&data, 32));
-               sendPacket("OK");
-       } else if (cmd[0]=='m') {       //read memory to gdb
-               i=gdbGetHexVal(&data, -1);
-               data++;
-               j=gdbGetHexVal(&data, -1);
-               gdbPacketStart();
-               for (k=0; k<j; k++) {
-                       gdbPacketHex(readbyte(i++), 8);
-               }
-               gdbPacketEnd();
-       } else if (cmd[0]=='?') {       //Reply with stop reason
-               sendReason();
-#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-       } else if (handlerState != HANDLER_TASK_SUPPORT_DISABLED) {
-               if (cmd[0]=='H') { //Continue with task
-                       if (cmd[1]=='g' || cmd[1]=='c') {
-                               const char * ret = "OK";
-                               data++;
-                               i=gdbGetHexVal(&data, -1);
-                               handlerState = HANDLER_STARTED; //Hg0 is the first packet received after connect
-                               j = findCurrentTaskIndex();
-                               if (i == j || (j == CUR_TASK_INDEX_UNKNOWN && i == 0)) {
-                                       //GDB has asked us for the current task on this CPU.
-                                       //This task either was executing when we have entered the panic handler,
-                                       //or was already switched out and we have paniced during the context switch.
-                                       //Either way we are interested in the stack frame where panic has happened,
-                                       //so obtain the state from the exception frame rather than the TCB.
-                                       dumpHwToRegfile(&paniced_frame);
-                               } else {
-                                       unsigned handle, count;
-                                       //Get the handle for that task
-                                       count = getTaskInfo(i, &handle, 0, 0);
-                                       //Then extract TCB and gdbRegFile from it
-                                       if (i < count) dumpTCBToRegFile(handle);
-                                       else ret = "E00";
-                               }
-                               return sendPacket(ret);
-                       }
-                       return sendPacket(NULL);
-               } else if (cmd[0]=='T') {       //Task alive check
-                       unsigned count;
-                       data++;
-                       i=gdbGetHexVal(&data, -1);
-                       count = getTaskInfo(i, 0, 0, 0);
-                       return sendPacket(i < count ? "OK": "E00");
-               } else if (cmd[0]=='q') {       //Extended query
-                       // React to qThreadExtraInfo or qfThreadInfo or qsThreadInfo or qC, without using strcmp
-                       if (len > 16 && cmd[1] == 'T' && cmd[2] == 'h' && cmd[3] == 'r' && cmd[7] == 'E' && cmd[12] == 'I' && cmd[16] == ',') {
-                               data=&cmd[17];
-                               i=gdbGetHexVal(&data, -1);
-
-                               unsigned handle = 0, coreId = 3;
-                               const char * name = 0;
-                               // Extract the task name and CPU from freeRTOS
-                               unsigned tCount = getTaskInfo(i, &handle, &name, &coreId);
-                               if (i < tCount) {
-                                       gdbPacketStart();
-                                       for(k=0; name[k]; k++)  gdbPacketHex(name[k], 8);
-                                       gdbPacketStr("20435055"); // CPU
-                                       gdbPacketStr(coreId == 0 ? "30": coreId == 1 ? "31" : "78"); // 0 or 1 or x
-                                       gdbPacketEnd();
-                                       return ST_OK;
-                               }
-                       } else if (len >= 12 && (cmd[1] == 'f' || cmd[1] == 's') && (cmd[2] == 'T' && cmd[3] == 'h' && cmd[4] == 'r' && cmd[5] == 'e' && cmd[6] == 'a' && cmd[7] == 'd' && cmd[8] == 'I')) {
-                               // Only react to qfThreadInfo and qsThreadInfo, not using strcmp here since it can be in ROM
-                               // Extract the number of task from freeRTOS
-                               static int taskIndex = 0;
-                               unsigned tCount = 0;
-                               if (cmd[1] == 'f') {
-                                       taskIndex = 0;
-                                       handlerState = HANDLER_STARTED; //It seems it's the first request GDB is sending
-                               }
-                               tCount = getTaskInfo(0, 0, 0, 0);
-                               if (taskIndex < tCount) {
-                                       gdbPacketStart();
-                                       gdbPacketStr("m");
-                                       gdbPacketHex(taskIndex, 32);
-                                       gdbPacketEnd();
-                                       taskIndex++;
-                               } else return sendPacket("l");
-                       } else if (len >= 2 && cmd[1] == 'C') {
-                               // Get current task id
-                               gdbPacketStart();
-                               k = findCurrentTaskIndex();
-                               if (k != CUR_TASK_INDEX_UNKNOWN) {
-                                       gdbPacketStr("QC");
-                                       gdbPacketHex(k, 32);
-                               } else gdbPacketStr("bad");
-                               gdbPacketEnd();
-                               return ST_OK;
-                       }
-                       return sendPacket(NULL);
-               }
-#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-       } else {
-               //We don't recognize or support whatever GDB just sent us.
-               return sendPacket(NULL);
-       }
-       return ST_OK;
-}
-
-
-//Lower layer: grab a command packet and check the checksum
-//Calls gdbHandleCommand on the packet if the checksum is OK
-//Returns ST_OK on success, ST_ERR when checksum fails, a
-//character if it is received instead of the GDB packet
-//start char.
-static int gdbReadCommand() {
-       unsigned char c;
-       unsigned char chsum=0, rchsum;
-       unsigned char sentchs[2];
-       int p=0;
-       unsigned char *ptr;
-       c=gdbRecvChar();
-       if (c!='$') return c;
-       while(1) {
-               c=gdbRecvChar();
-               if (c=='#') {   //end of packet, checksum follows
-                       cmd[p]=0;
-                       break;
-               }
-               chsum+=c;
-               if (c=='$') {
-                       //Wut, restart packet?
-                       chsum=0;
-                       p=0;
-                       continue;
-               }
-               if (c=='}') {           //escape the next char
-                       c=gdbRecvChar();
-                       chsum+=c;
-                       c^=0x20;
-               }
-               cmd[p++]=c;
-               if (p>=PBUFLEN) return ST_ERR;
-       }
-       //A # has been received. Get and check the received chsum.
-       sentchs[0]=gdbRecvChar();
-       sentchs[1]=gdbRecvChar();
-       ptr=&sentchs[0];
-       rchsum=gdbGetHexVal(&ptr, 8);
-       if (rchsum!=chsum) {
-               gdbSendChar('-');
-               return ST_ERR;
-       } else {
-               gdbSendChar('+');
-               return gdbHandleCommand(cmd, p);
-       }
-}
-
-
-void esp_gdbstub_panic_handler(XtExcFrame *frame) {
-#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-       if (handlerState == HANDLER_STARTED) {
-               //We have re-entered GDB Stub. Try disabling task support.
-               handlerState = HANDLER_TASK_SUPPORT_DISABLED;
-               gdbPacketEnd(); // Ends up any pending GDB packet (this creates a garbage value)
-       } else if (handlerState == HANDLER_NOT_STARTED) {
-               //Need to remember the frame that panic'd since gdb will ask for all threads before ours
-               memcpy(&paniced_frame, frame, sizeof(paniced_frame));
-               dumpHwToRegfile(&paniced_frame);
-       }
-#else // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-       dumpHwToRegfile(frame);
-#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
-
-       //Make sure txd/rxd are enabled
-       gpio_pullup_dis(1);
-       PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD_U0RXD);
-       PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD_U0TXD);
-
-       sendReason();
-       while(gdbReadCommand()!=ST_CONT);
-       while(1);
-}
index 80f20e606948c8533d63e3ed84a850f704f9404f..ca5608b8e4ae73042b55362c2947ff94db9153aa 100644 (file)
@@ -127,24 +127,6 @@ menu "Common ESP-related"
         range 1200 4000000
 
 
-    config ESP_GDBSTUB_SUPPORT_TASKS
-        bool "GDBStub: enable listing FreeRTOS tasks"
-        default y
-        depends on ESP32_PANIC_GDBSTUB
-        help
-            If enabled, GDBStub can supply the list of FreeRTOS tasks to GDB.
-            Thread list can be queried from GDB using 'info threads' command.
-            Note that if GDB task lists were corrupted, this feature may not work.
-            If GDBStub fails, try disabling this feature.
-
-    config ESP_GDBSTUB_MAX_TASKS
-        int "GDBStub: maximum number of tasks supported"
-        default 32
-        depends on ESP_GDBSTUB_SUPPORT_TASKS
-        help
-            Set the number of tasks which GDB Stub will support.
-
-
     config ESP_INT_WDT
         bool "Interrupt watchdog"
         default y
index 4472bb474396bef0ce4022afecd42dba226d47d8..2c31ee0f6cb7a2e2a529240dabde64aa5dc84dd0 100644 (file)
@@ -20,7 +20,6 @@ esp_err_t esp_event_send_noop(system_event_t *event);
 
 extern esp_err_t esp_event_send_legacy(system_event_t *event) __attribute__((weak, alias("esp_event_send_noop")));
 extern esp_err_t esp_event_send_to_default_loop(system_event_t *event) __attribute((weak, alias("esp_event_send_noop")));
-extern esp_err_t esp_event_mesh_hook(system_event_t* event) __attribute__((weak, alias("esp_event_send_noop")));
 
 
 esp_err_t esp_event_send_noop(system_event_t *event)
@@ -42,11 +41,5 @@ esp_err_t esp_event_send(system_event_t *event)
         return err;
     }
 
-    // send the event to mesh hook
-    err = esp_event_mesh_hook(event);
-    if (err != ESP_OK) {
-        return err;
-    }
-
     return ESP_OK;
 }
diff --git a/components/esp_gdbstub/CMakeLists.txt b/components/esp_gdbstub/CMakeLists.txt
new file mode 100644 (file)
index 0000000..14528a4
--- /dev/null
@@ -0,0 +1,13 @@
+idf_build_get_property(target IDF_TARGET)
+
+set(esp_gdbstub_srcs "src/gdbstub.c"
+                     "src/packet.c"
+                     "${target}/gdbstub_${target}.c"
+                     "xtensa/gdbstub_xtensa.c")
+
+idf_component_register(SRCS "${esp_gdbstub_srcs}"
+                       INCLUDE_DIRS "include"
+                       PRIV_INCLUDE_DIRS "private_include" "${target}" "xtensa"
+                       LDFRAGMENTS "linker.lf"
+                       REQUIRES "freertos"
+                       PRIV_REQUIRES "soc" "xtensa" "esp_rom")
diff --git a/components/esp_gdbstub/Kconfig b/components/esp_gdbstub/Kconfig
new file mode 100644 (file)
index 0000000..14e7d85
--- /dev/null
@@ -0,0 +1,25 @@
+menu "GDB Stub"
+
+    # Hidden option which is selected from the "Panic handler behavior"
+    # menu in the target component.
+    config ESP_GDBSTUB_ENABLED
+        bool
+
+    config ESP_GDBSTUB_SUPPORT_TASKS
+        bool "Enable listing FreeRTOS tasks through GDB Stub"
+        depends on ESP_GDBSTUB_ENABLED
+        default y
+        help
+            If enabled, GDBStub can supply the list of FreeRTOS tasks to GDB.
+            Thread list can be queried from GDB using 'info threads' command.
+            Note that if GDB task lists were corrupted, this feature may not work.
+            If GDBStub fails, try disabling this feature.
+
+    config ESP_GDBSTUB_MAX_TASKS
+        int "Maximum number of tasks supported by GDB Stub"
+        default 32
+        depends on ESP_GDBSTUB_SUPPORT_TASKS
+        help
+            Set the number of tasks which GDB Stub will support.
+
+endmenu
diff --git a/components/esp_gdbstub/component.mk b/components/esp_gdbstub/component.mk
new file mode 100644 (file)
index 0000000..97dfce2
--- /dev/null
@@ -0,0 +1,4 @@
+COMPONENT_ADD_INCLUDEDIRS := include
+COMPONENT_PRIV_INCLUDEDIRS := private_include esp32 xtensa
+COMPONENT_SRCDIRS := src esp32 xtensa
+COMPONENT_ADD_LDFRAGMENTS += linker.lf
diff --git a/components/esp_gdbstub/esp32/gdbstub_esp32.c b/components/esp_gdbstub/esp32/gdbstub_esp32.c
new file mode 100644 (file)
index 0000000..3fe393a
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "soc/uart_periph.h"
+#include "soc/gpio_periph.h"
+#include "esp_gdbstub_common.h"
+#include "sdkconfig.h"
+
+#define UART_NUM CONFIG_CONSOLE_UART_NUM
+
+void esp_gdbstub_target_init()
+{
+}
+
+int esp_gdbstub_getchar()
+{
+    while (REG_GET_FIELD(UART_STATUS_REG(UART_NUM), UART_RXFIFO_CNT) == 0) {
+        ;
+    }
+    return REG_READ(UART_FIFO_REG(UART_NUM));
+}
+
+void esp_gdbstub_putchar(int c)
+{
+    while (REG_GET_FIELD(UART_STATUS_REG(UART_NUM), UART_TXFIFO_CNT) >= 126) {
+        ;
+    }
+    REG_WRITE(UART_FIFO_REG(UART_NUM), c);
+}
+
+int esp_gdbstub_readmem(intptr_t addr)
+{
+    if (addr < 0x20000000 || addr >= 0x80000000) {
+        /* see cpu_configure_region_protection */
+        return -1;
+    }
+    uint32_t val_aligned = *(uint32_t *)(addr & (~3));
+    uint32_t shift = (addr & 3) * 8;
+    return (val_aligned >> shift) & 0xff;
+}
diff --git a/components/esp_gdbstub/esp32/gdbstub_target_config.h b/components/esp_gdbstub/esp32/gdbstub_target_config.h
new file mode 100644 (file)
index 0000000..ae31ae9
--- /dev/null
@@ -0,0 +1,18 @@
+// Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+/* Number of extra TIE defined registers, not listed in the XCHAL */
+#define GDBSTUB_EXTRA_TIE_SIZE    0
diff --git a/components/esp_gdbstub/include/esp_gdbstub.h b/components/esp_gdbstub/include/esp_gdbstub.h
new file mode 100644 (file)
index 0000000..02fda63
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+#include "esp_gdbstub_arch.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void esp_gdbstub_panic_handler(esp_gdbstub_frame_t *frame) __attribute__((noreturn));
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/components/esp_gdbstub/linker.lf b/components/esp_gdbstub/linker.lf
new file mode 100644 (file)
index 0000000..b5d88a2
--- /dev/null
@@ -0,0 +1,4 @@
+[mapping:esp_gdbstub]
+archive: libesp_gdbstub.a
+entries:
+    * (noflash)
diff --git a/components/esp_gdbstub/private_include/esp_gdbstub_common.h b/components/esp_gdbstub/private_include/esp_gdbstub_common.h
new file mode 100644 (file)
index 0000000..75674ff
--- /dev/null
@@ -0,0 +1,151 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+#include "esp_gdbstub.h"
+#include "sdkconfig.h"
+
+#ifdef CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+/* Internal error codes used by the routines that parse the incoming gdb packet */
+#define GDBSTUB_ST_ENDPACKET -1
+#define GDBSTUB_ST_ERR -2
+#define GDBSTUB_ST_OK -3
+
+/* Special task index values */
+#define GDBSTUB_CUR_TASK_INDEX_UNKNOWN -1
+
+/* Cab be set to a lower value in gdbstub_target_config.h */
+#ifndef GDBSTUB_CMD_BUFLEN
+#define GDBSTUB_CMD_BUFLEN 512
+#endif
+
+#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+typedef enum {
+    GDBSTUB_NOT_STARTED,
+    GDBSTUB_STARTED,
+    GDBSTUB_TASK_SUPPORT_DISABLED
+} esp_gdbstub_state_t;
+
+#define GDBSTUB_TASKS_NUM  CONFIG_ESP_GDBSTUB_MAX_TASKS
+
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+/* gdbstub temporary run-time data, stored in .bss to reduce stack usage */
+typedef struct {
+    esp_gdbstub_gdb_regfile_t regfile;
+    int signal;
+#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+    esp_gdbstub_state_t state;
+    int task_count;
+    int paniced_task_index;
+    int current_task_index;
+    int thread_info_index;                             //!< index of the last task passed to qsThreadInfo
+    esp_gdbstub_frame_t paniced_frame;
+    TaskSnapshot_t tasks[GDBSTUB_TASKS_NUM];           // TODO: add an API to get snapshots one by one
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+} esp_gdbstub_scratch_t;
+
+
+/**** Functions provided by the architecture specific part ****/
+
+/**
+ * @param frame exception frame pointer
+ * @return the appropriate "signal" number for the given exception cause
+ */
+int esp_gdbstub_get_signal(const esp_gdbstub_frame_t *frame);
+
+/**
+ * Write registers from the exception frame to the GDB register file
+ * @param frame  exception frame to parse
+ * @param dst  pointer to the GDB register file
+ */
+void esp_gdbstub_frame_to_regfile(const esp_gdbstub_frame_t *frame, esp_gdbstub_gdb_regfile_t *dst);
+
+#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+/**
+ * Write registers from the saved frame of a given task to the GDB register file
+ * @param tcb  pointer to the TCB of the task
+ * @param dst  pointer to the GDB register file
+ */
+void esp_gdbstub_tcb_to_regfile(TaskHandle_t tcb, esp_gdbstub_gdb_regfile_t *dst);
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+
+
+/**** Functions provided by the target specific part ****/
+
+/**
+ * Do target-specific initialization before gdbstub can start communicating.
+ * This may involve, for example, configuring the UART.
+ */
+void esp_gdbstub_target_init();
+
+/**
+ * Receive a byte from the GDB client. Blocks until a byte is available.
+ * @return received byte
+ */
+int esp_gdbstub_getchar();
+
+/**
+ * Send a byte to the GDB client
+ * @param c  byte to send
+ */
+void esp_gdbstub_putchar(int c);
+
+/**
+ * Read a byte from target memory
+ * @param ptr  address
+ * @return  byte value, or GDBSTUB_ST_ERR if the address is not readable
+ */
+int esp_gdbstub_readmem(intptr_t addr);
+
+
+/**** GDB packet related functions ****/
+
+/** Begin a packet */
+void esp_gdbstub_send_start();
+
+/** Send a character as part of the packet */
+void esp_gdbstub_send_char(char c);
+
+/** Send a string as part of the packet */
+void esp_gdbstub_send_str(const char *s);
+
+/** Send a hex value as part of the packet */
+void esp_gdbstub_send_hex(int val, int bits);
+
+/** Finish sending the packet */
+void esp_gdbstub_send_end();
+
+/** Send a packet with a string as content */
+void esp_gdbstub_send_str_packet(const char* str);
+
+/** Get a hex value from the gdb packet */
+uint32_t esp_gdbstub_gethex(const unsigned char **ptr, int bits);
+
+/** Read, unescape, and validate the incoming GDB command */
+int esp_gdbstub_read_command(unsigned char **out_cmd, size_t *out_size);
+
+/** Handle a command received from gdb */
+int esp_gdbstub_handle_command(unsigned char *cmd, int len);
+
diff --git a/components/esp_gdbstub/src/gdbstub.c b/components/esp_gdbstub/src/gdbstub.c
new file mode 100644 (file)
index 0000000..4d1f4cf
--- /dev/null
@@ -0,0 +1,343 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include <string.h>
+#include "esp_gdbstub.h"
+#include "esp_gdbstub_common.h"
+#include "sdkconfig.h"
+
+
+#ifdef CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+static void init_task_info();
+static void find_paniced_task_index();
+static int handle_task_commands(unsigned char *cmd, int len);
+#endif
+
+static void send_reason();
+
+
+static esp_gdbstub_scratch_t s_scratch;
+
+
+void esp_gdbstub_panic_handler(esp_gdbstub_frame_t *frame)
+{
+#ifndef CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+    esp_gdbstub_frame_to_regfile(frame, &s_scratch.regfile);
+#else
+    if (s_scratch.state == GDBSTUB_STARTED) {
+        /* We have re-entered GDB Stub. Try disabling task support. */
+        s_scratch.state = GDBSTUB_TASK_SUPPORT_DISABLED;
+        /* Flush any pending GDB packet (this creates a garbage value) */
+        esp_gdbstub_send_end();
+    } else if (s_scratch.state == GDBSTUB_NOT_STARTED) {
+        s_scratch.state = GDBSTUB_STARTED;
+        /* Save the paniced frame and get the list of tasks */
+        memcpy(&s_scratch.paniced_frame, frame, sizeof(*frame));
+        esp_gdbstub_frame_to_regfile(frame, &s_scratch.regfile);
+        init_task_info();
+        find_paniced_task_index();
+        /* Current task is the paniced task */
+        if (s_scratch.paniced_task_index == GDBSTUB_CUR_TASK_INDEX_UNKNOWN) {
+            s_scratch.current_task_index = 0;
+        }
+    }
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+    esp_gdbstub_target_init();
+    s_scratch.signal = esp_gdbstub_get_signal(frame);
+    send_reason();
+    while (true) {
+        unsigned char *cmd;
+        size_t size;
+        int res = esp_gdbstub_read_command(&cmd, &size);
+        if (res > 0) {
+            /* character received instead of a command */
+            continue;
+        }
+        if (res == GDBSTUB_ST_ERR) {
+            esp_gdbstub_send_str_packet("E01");
+            continue;
+        }
+        res = esp_gdbstub_handle_command(cmd, size);
+        if (res == GDBSTUB_ST_ERR) {
+            esp_gdbstub_send_str_packet(NULL);
+        }
+    }
+}
+
+
+static void send_reason()
+{
+    esp_gdbstub_send_start();
+    esp_gdbstub_send_char('T');
+    esp_gdbstub_send_hex(s_scratch.signal, 8);
+    esp_gdbstub_send_end();
+}
+
+static uint32_t gdbstub_hton(uint32_t i)
+{
+    return __builtin_bswap32(i);
+}
+
+/** Send all registers to gdb */
+static void handle_g_command(const unsigned char* cmd, int len)
+{
+    uint32_t *p = (uint32_t *) &s_scratch.regfile;
+    esp_gdbstub_send_start();
+    for (int i = 0; i < sizeof(s_scratch.regfile) / sizeof(*p); ++i) {
+        esp_gdbstub_send_hex(gdbstub_hton(*p++), 32);
+    }
+    esp_gdbstub_send_end();
+}
+
+/** Receive register values from gdb */
+static void handle_G_command(const unsigned char* cmd, int len)
+{
+    uint32_t *p = (uint32_t *) &s_scratch.regfile;
+    for (int i = 0; i < sizeof(s_scratch.regfile) / sizeof(*p); ++i) {
+        *p++ = gdbstub_hton(esp_gdbstub_gethex(&cmd, 32));
+    }
+    esp_gdbstub_send_str_packet("OK");
+}
+
+/** Read memory to gdb */
+static void handle_m_command(const unsigned char* cmd, int len)
+{
+    intptr_t addr = (intptr_t) esp_gdbstub_gethex(&cmd, -1);
+    cmd++;
+    uint32_t size = esp_gdbstub_gethex(&cmd, -1);
+
+    if (esp_gdbstub_readmem(addr) < 0 || esp_gdbstub_readmem(addr + size - 1) < 0) {
+        esp_gdbstub_send_str_packet("E01");
+        return;
+    }
+
+    esp_gdbstub_send_start();
+    for (int i = 0; i < size; ++i) {
+        int b = esp_gdbstub_readmem(addr++);
+        esp_gdbstub_send_hex(b, 8);
+    }
+    esp_gdbstub_send_end();
+}
+
+/** Handle a command received from gdb */
+int esp_gdbstub_handle_command(unsigned char *cmd, int len)
+{
+    unsigned char *data = cmd + 1;
+    if (cmd[0] == 'g') 
+    {
+        handle_g_command(data, len - 1);
+    } else if (cmd[0] == 'G') {
+        /* receive content for all registers from gdb */
+        handle_G_command(data, len - 1);
+    } else if (cmd[0] == 'm') {
+        /* read memory to gdb */
+        handle_m_command(data, len - 1);
+    } else if (cmd[0] == '?') {
+        /* Reply with stop reason */
+        send_reason();
+#if CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+    } else if (s_scratch.state != GDBSTUB_TASK_SUPPORT_DISABLED) {
+        return handle_task_commands(cmd, len);
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+    } else {
+        /* Unrecognized command */
+        return GDBSTUB_ST_ERR;
+    }
+    return GDBSTUB_ST_OK;
+}
+
+/* Everything below is related to the support for listing FreeRTOS tasks as threads in GDB */
+
+#ifdef CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+static void init_task_info()
+{
+    unsigned tcb_size;
+    s_scratch.task_count = uxTaskGetSnapshotAll(s_scratch.tasks, GDBSTUB_TASKS_NUM, &tcb_size);
+}
+
+static bool get_task_handle(size_t index, TaskHandle_t *handle)
+{
+    if (index >= s_scratch.task_count) {
+        return false;
+    }
+    *handle = (TaskHandle_t) s_scratch.tasks[index].pxTCB;
+    return true;
+}
+
+/** Get the index of the task running on the current CPU, and save the result */
+static void find_paniced_task_index()
+{
+    TaskHandle_t cur_handle = xTaskGetCurrentTaskHandleForCPU(xPortGetCoreID());
+    TaskHandle_t handle;
+    for (int i = 0; i < s_scratch.task_count; i++) {
+        if (get_task_handle(i, &handle) && cur_handle == handle) {
+            s_scratch.paniced_task_index = i;
+            return;
+        }
+    }
+    s_scratch.paniced_task_index = GDBSTUB_CUR_TASK_INDEX_UNKNOWN;
+}
+
+/** H command sets the "current task" for the purpose of further commands */
+static void handle_H_command(const unsigned char* cmd, int len)
+{
+    if (cmd[1] == 'g' || cmd[1] == 'c') {
+        const char *ret = "OK";
+        cmd += 2;
+        int requested_task_index = esp_gdbstub_gethex(&cmd, -1);
+        if (requested_task_index == s_scratch.paniced_task_index ||
+                (requested_task_index == 0 && s_scratch.current_task_index == GDBSTUB_CUR_TASK_INDEX_UNKNOWN)) {
+            /* Get the registers of the paniced task */
+            esp_gdbstub_frame_to_regfile(&s_scratch.paniced_frame, &s_scratch.regfile);
+        } else if (requested_task_index > s_scratch.task_count) {
+            ret = "E00";
+        } else {
+            TaskHandle_t handle;
+            get_task_handle(requested_task_index, &handle);
+            /* FIXME: for the task currently running on the other CPU, extracting the registers from TCB
+             * isn't valid. Need to use some IPC mechanism to obtain the registers of the other CPU
+             */
+            esp_gdbstub_tcb_to_regfile(handle, &s_scratch.regfile);
+        }
+        esp_gdbstub_send_str_packet(ret);
+    } else {
+        esp_gdbstub_send_str_packet(NULL);
+    }
+}
+
+/** qC returns the current thread ID */
+static void handle_qC_command(const unsigned char* cmd, int len)
+{
+    esp_gdbstub_send_start();
+    esp_gdbstub_send_str("QC");
+    esp_gdbstub_send_hex(s_scratch.current_task_index, 32);
+    esp_gdbstub_send_end();
+}
+
+/** T command checks if the task is alive.
+ *  Since GDB isn't going to ask about the tasks which haven't been listed by q*ThreadInfo,
+ *  and the state of tasks can not change (no stepping allowed), simply return "OK" here.
+ */
+static void handle_T_command(const unsigned char* cmd, int len)
+{
+    esp_gdbstub_send_str_packet("OK");
+}
+
+/** qfThreadInfo requests the start of the thread list, qsThreadInfo (below) is repeated to
+ *  get the subsequent threads.
+ */
+static void handle_qfThreadInfo_command(const unsigned char* cmd, int len)
+{
+    /* The first task in qfThreadInfo reply is going to be the one which GDB will request to stop.
+     * Therefore it has to be the paniced task.
+     * Reply with the paniced task index, and later skip over this index while handling qsThreadInfo
+     */
+    esp_gdbstub_send_start();
+    esp_gdbstub_send_str("m");
+    esp_gdbstub_send_hex(s_scratch.paniced_task_index, 32);
+    esp_gdbstub_send_end();
+
+    s_scratch.thread_info_index = 0;
+}
+
+static void handle_qsThreadInfo_command(const unsigned char* cmd, int len)
+{
+    int next_task_index = ++s_scratch.thread_info_index;
+
+    if (next_task_index == s_scratch.task_count) {
+        /* No more tasks */
+        esp_gdbstub_send_str_packet("l");
+        return;
+    }
+
+    if (next_task_index == s_scratch.paniced_task_index) {
+        /* Have already sent this one in the reply to qfThreadInfo, skip over it */
+        handle_qsThreadInfo_command(cmd, len);
+        return;
+    }
+
+    esp_gdbstub_send_start();
+    esp_gdbstub_send_str("m");
+    esp_gdbstub_send_hex(next_task_index, 32);
+    esp_gdbstub_send_end();
+}
+
+/** qThreadExtraInfo requests the thread name */
+static void handle_qThreadExtraInfo_command(const unsigned char* cmd, int len)
+{
+    cmd += sizeof("qThreadExtraInfo,") - 1;
+    int task_index = esp_gdbstub_gethex(&cmd, -1);
+    TaskHandle_t handle;
+    if (!get_task_handle(task_index, &handle)) {
+        esp_gdbstub_send_str_packet("E01");
+        return;
+    }
+    esp_gdbstub_send_start();
+    const char* task_name = pcTaskGetTaskName(handle);
+    while (*task_name) {
+        esp_gdbstub_send_hex(*task_name, 8);
+        task_name++;
+    }
+    /** TODO: add "Running" or "Suspended" and "CPU0" or "CPU1" */
+    esp_gdbstub_send_end();
+}
+
+bool command_name_matches(const char* pattern, const unsigned char* ucmd, int len)
+{
+    const char* cmd = (const char*) ucmd;
+    const char* end = cmd + len;
+    for (; *pattern && cmd < end; ++cmd, ++pattern) {
+        if (*pattern == '?') {
+            continue;
+        }
+        if (*pattern != *cmd) {
+            return false;
+        }
+    }
+    return *pattern == 0 && (cmd == end || *cmd == ',');
+}
+
+/** Handle all the thread-related commands */
+static int handle_task_commands(unsigned char *cmd, int len)
+{
+    if (cmd[0] == 'H') {
+        /* Continue with task */
+        handle_H_command(cmd, len);
+    } else if (cmd[0] == 'T') {
+        /* Task alive check */
+        handle_T_command(cmd, len);
+    } else if (cmd[0] == 'q') {
+        if (command_name_matches("qfThreadInfo", cmd, len)) {
+            handle_qfThreadInfo_command(cmd, len);
+        } else if (command_name_matches("qsThreadInfo", cmd, len)) {
+            handle_qsThreadInfo_command(cmd, len);
+        } else if (command_name_matches("qC", cmd, len)) {
+            handle_qC_command(cmd, len);
+        } else if (command_name_matches("qThreadExtraInfo", cmd, len)) {
+            handle_qThreadExtraInfo_command(cmd, len);
+        } else {
+            /* Unrecognized command */
+            return GDBSTUB_ST_ERR;
+        }
+    } else {
+        /* Unrecognized command */
+        return GDBSTUB_ST_ERR;
+    }
+    return GDBSTUB_ST_OK;
+}
+
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
diff --git a/components/esp_gdbstub/src/packet.c b/components/esp_gdbstub/src/packet.c
new file mode 100644 (file)
index 0000000..9bf0c5d
--- /dev/null
@@ -0,0 +1,177 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include "esp_gdbstub_common.h"
+
+// GDB command input buffer
+static unsigned char s_cmd[GDBSTUB_CMD_BUFLEN];
+
+// Running checksum of the output packet
+static char s_chsum;
+
+// Send the start of a packet; reset checksum calculation.
+void esp_gdbstub_send_start()
+{
+    s_chsum = 0;
+    esp_gdbstub_putchar('$');
+}
+
+// Send a char as part of a packet
+void esp_gdbstub_send_char(char c)
+{
+    if (c == '#' || c == '$' || c == '}' || c == '*') {
+        esp_gdbstub_putchar('}');
+        esp_gdbstub_putchar(c ^ 0x20);
+        s_chsum += (c ^ 0x20) + '}';
+    } else {
+        esp_gdbstub_putchar(c);
+        s_chsum += c;
+    }
+}
+
+// Send a string as part of a packet
+void esp_gdbstub_send_str(const char *c)
+{
+    while (*c != 0) {
+        esp_gdbstub_send_char(*c);
+        c++;
+    }
+}
+
+// Send a hex val as part of a packet.
+// 'bits'/4 dictates the number of hex chars sent.
+void esp_gdbstub_send_hex(int val, int bits)
+{
+    const char* hex_chars = "0123456789abcdef";
+    for (int i = bits; i > 0; i -= 4) {
+        esp_gdbstub_send_char(hex_chars[(val >> (i - 4)) & 0xf]);
+    }
+}
+
+// Finish sending a packet.
+void esp_gdbstub_send_end()
+{
+    esp_gdbstub_putchar('#');
+    esp_gdbstub_send_hex(s_chsum, 8);
+}
+
+// Send a packet with a string as content
+void esp_gdbstub_send_str_packet(const char* str)
+{
+    esp_gdbstub_send_start();
+    if (str != NULL) {
+        esp_gdbstub_send_str(str);
+    }
+    esp_gdbstub_send_end();
+}
+
+// Grab a hex value from the gdb packet. Ptr will get positioned on the end
+// of the hex string, as far as the routine has read into it. Bits/4 indicates
+// the max amount of hex chars it gobbles up. Bits can be -1 to eat up as much
+// hex chars as possible.
+uint32_t esp_gdbstub_gethex(const unsigned char **ptr, int bits)
+{
+    int i;
+    int no;
+    uint32_t v = 0;
+    char c;
+    no = bits / 4;
+    if (bits == -1) {
+        no = 64;
+    }
+    for (i = 0; i < no; i++) {
+        c = **ptr;
+        (*ptr)++;
+        if (c >= '0' && c <= '9') {
+            v <<= 4;
+            v |= (c - '0');
+        } else if (c >= 'A' && c <= 'F') {
+            v <<= 4;
+            v |= (c - 'A') + 10;
+        } else if (c >= 'a' && c <= 'f') {
+            v <<= 4;
+            v |= (c - 'a') + 10;
+        } else if (c == '#') {
+            if (bits == -1) {
+                (*ptr)--;
+                return v;
+            }
+            return GDBSTUB_ST_ENDPACKET;
+        } else {
+            if (bits == -1) {
+                (*ptr)--;
+                return v;
+            }
+            return GDBSTUB_ST_ERR;
+        }
+    }
+    return v;
+}
+
+
+// Lower layer: grab a command packet and check the checksum
+// Calls gdbHandleCommand on the packet if the checksum is OK
+// Returns GDBSTUB_ST_OK on success, GDBSTUB_ST_ERR when checksum fails, a
+// character if it is received instead of the GDB packet
+// start char.
+int esp_gdbstub_read_command(unsigned char **out_cmd, size_t *out_size)
+{
+    unsigned char c;
+    unsigned char chsum = 0;
+    unsigned char sentchs[2];
+    int p = 0;
+    c = esp_gdbstub_getchar();
+    if (c != '$') {
+        return c;
+    }
+    while (1) {
+        c = esp_gdbstub_getchar();
+        if (c == '#') {
+            // end of packet, checksum follows
+            s_cmd[p] = 0;
+            break;
+        }
+        chsum += c;
+        if (c == '$') {
+            // restart packet?
+            chsum = 0;
+            p = 0;
+            continue;
+        }
+        if (c == '}') {
+            //escape the next char
+            c = esp_gdbstub_getchar();
+            chsum += c;
+            c ^= 0x20;
+        }
+        s_cmd[p++] = c;
+        if (p >= GDBSTUB_CMD_BUFLEN) {
+            return GDBSTUB_ST_ERR;
+        }
+    }
+    // A # has been received. Get and check the received chsum.
+    sentchs[0] = esp_gdbstub_getchar();
+    sentchs[1] = esp_gdbstub_getchar();
+    const unsigned char* c_ptr = &sentchs[0];
+    unsigned char rchsum = esp_gdbstub_gethex(&c_ptr, 8);
+    if (rchsum != chsum) {
+        esp_gdbstub_putchar('-');
+        return GDBSTUB_ST_ERR;
+    } else {
+        esp_gdbstub_putchar('+');
+        *out_cmd = s_cmd;
+        *out_size = p;
+        return GDBSTUB_ST_OK;
+    }
+}
diff --git a/components/esp_gdbstub/xtensa/esp_gdbstub_arch.h b/components/esp_gdbstub/xtensa/esp_gdbstub_arch.h
new file mode 100644 (file)
index 0000000..18b119c
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#pragma once
+#include <stdint.h>
+#include "freertos/xtensa_context.h"
+#include "gdbstub_target_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef XtExcFrame esp_gdbstub_frame_t;
+
+/* GDB regfile structure, configuration dependent */
+typedef struct {
+    uint32_t pc;
+    uint32_t a[XCHAL_NUM_AREGS];
+
+#if XCHAL_HAVE_LOOPS
+    uint32_t lbeg;
+    uint32_t lend;
+    uint32_t lcount;
+#endif
+
+    uint32_t sar;
+
+#if XCHAL_HAVE_WINDOWED
+    uint32_t windowbase;
+    uint32_t windowstart;
+#endif
+
+    uint32_t configid0;
+    uint32_t configid1;
+    uint32_t ps;
+
+#if XCHAL_HAVE_THREADPTR
+    uint32_t threadptr;
+#endif
+
+#if XCHAL_HAVE_BOOLEANS
+    uint32_t br;
+#endif
+
+#if XCHAL_HAVE_S32C1I
+    uint32_t scompare1;
+#endif
+
+#if XCHAL_HAVE_MAC16
+    uint32_t acclo;
+    uint32_t acchi;
+    uint32_t m0;
+    uint32_t m1;
+    uint32_t m2;
+    uint32_t m3;
+#endif
+
+#if XCHAL_HAVE_DFP_ACCEL
+    uint32_t expstate;
+    uint32_t f64r_lo;
+    uint32_t f64r_hi;
+    uint32_t f64s;
+#endif
+
+#if XCHAL_HAVE_FP
+    uint32_t f[16];
+    uint32_t fcr;
+    uint32_t fsr;
+#endif
+
+#if GDBSTUB_EXTRA_TIE_SIZE > 0
+    uint32_t tie[GDBSTUB_EXTRA_TIE_SIZE];
+#endif
+
+} esp_gdbstub_gdb_regfile_t;
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/components/esp_gdbstub/xtensa/gdbstub_xtensa.c b/components/esp_gdbstub/xtensa/gdbstub_xtensa.c
new file mode 100644 (file)
index 0000000..853b1ba
--- /dev/null
@@ -0,0 +1,118 @@
+// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
+//
+// 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.
+
+#include <string.h>
+#include "esp_gdbstub.h"
+#include "esp_gdbstub_common.h"
+#include "soc/cpu.h"
+#include "soc/soc_memory_layout.h"
+#include "sdkconfig.h"
+
+#if !XCHAL_HAVE_WINDOWED
+#warning "gdbstub_xtensa: revisit the implementation for Call0 ABI"
+#endif
+
+static void init_regfile(esp_gdbstub_gdb_regfile_t *dst)
+{
+    memset(dst, 0, sizeof(*dst));
+}
+
+static void update_regfile_common(esp_gdbstub_gdb_regfile_t *dst)
+{
+    if (dst->a[0] & 0x8000000U) {
+        dst->a[0] = (dst->a[0] & 0x3fffffffU) | 0x40000000U;
+    }
+    if (!esp_stack_ptr_is_sane(dst->a[1])) {
+        dst->a[1] = 0xDEADBEEF;
+    }
+    dst->windowbase = 0;
+    dst->windowstart = 0x1;
+    RSR(CONFIGID0, dst->configid0);
+    RSR(CONFIGID1, dst->configid1);
+}
+
+void esp_gdbstub_frame_to_regfile(const esp_gdbstub_frame_t *frame, esp_gdbstub_gdb_regfile_t *dst)
+{
+    init_regfile(dst);
+    const uint32_t *a_regs = (const uint32_t *) &frame->a0;
+    dst->pc = (frame->pc & 0x3fffffffU) | 0x40000000U;
+
+    for (int i = 0; i < 16; i++) {
+        dst->a[i] = a_regs[i];
+    }
+    for (int i = 16; i < 64; i++) {
+        dst->a[i] = 0xDEADBEEF;
+    }
+
+#if XCHAL_HAVE_LOOPS
+    dst->lbeg = frame->lbeg;
+    dst->lend = frame->lend;
+    dst->lcount = frame->lcount;
+#endif
+
+    dst->ps = (frame->ps & PS_UM) ? (frame->ps & ~PS_EXCM) : frame->ps;
+    dst->sar = frame->sar;
+    update_regfile_common(dst);
+}
+
+#ifdef CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+static void solicited_frame_to_regfile(const XtSolFrame *frame, esp_gdbstub_gdb_regfile_t *dst)
+{
+    init_regfile(dst);
+    const uint32_t *a_regs = (const uint32_t *) &frame->a0;
+    dst->pc = (frame->pc & 0x3fffffffU) | 0x40000000U;
+
+    /* only 4 registers saved in the solicited frame */
+    for (int i = 0; i < 4; i++) {
+        dst->a[i] = a_regs[i];
+    }
+    for (int i = 4; i < 64; i++) {
+        dst->a[i] = 0xDEADBEEF;
+    }
+
+    dst->ps = (frame->ps & PS_UM) ? (frame->ps & ~PS_EXCM) : frame->ps;
+    update_regfile_common(dst);
+}
+
+/* Represents FreeRTOS TCB structure */
+typedef struct {
+    uint8_t *top_of_stack;
+    /* Other members aren't needed */
+} dummy_tcb_t;
+
+
+void esp_gdbstub_tcb_to_regfile(TaskHandle_t tcb, esp_gdbstub_gdb_regfile_t *dst)
+{
+    const dummy_tcb_t *dummy_tcb = (const dummy_tcb_t *) tcb;
+
+    const XtExcFrame *frame = (XtExcFrame *) dummy_tcb->top_of_stack;
+    if (frame->exit != 0) {
+        esp_gdbstub_frame_to_regfile(frame, dst);
+    } else {
+        const XtSolFrame *taskFrame = (const XtSolFrame *) dummy_tcb->top_of_stack;
+        solicited_frame_to_regfile(taskFrame, dst);
+    }
+}
+
+#endif // CONFIG_ESP_GDBSTUB_SUPPORT_TASKS
+
+int esp_gdbstub_get_signal(const esp_gdbstub_frame_t *frame)
+{
+    const char exccause_to_signal[] = {4, 31, 11, 11, 2, 6, 8, 0, 6, 7, 0, 0, 7, 7, 7, 7};
+    if (frame->exccause > sizeof(exccause_to_signal)) {
+        return 11;
+    }
+    return (int) exccause_to_signal[frame->exccause];
+}
index ab96550c815e80badebae4f1ddbfb3b096d3a1d0..8f81ae2b1e9148e6b496d34f026acf2a38980720 100644 (file)
@@ -553,16 +553,9 @@ int httpd_req_to_sockfd(httpd_req_t *r)
 static int httpd_sock_err(const char *ctx, int sockfd)
 {
     int errval;
-    int sock_err;
-    size_t sock_err_len = sizeof(sock_err);
+    ESP_LOGW(TAG, LOG_FMT("error in %s : %d"), ctx, errno);
 
-    if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &sock_err, &sock_err_len) < 0) {
-        ESP_LOGE(TAG, LOG_FMT("error calling getsockopt : %d"), errno);
-        return HTTPD_SOCK_ERR_FAIL;
-    }
-    ESP_LOGW(TAG, LOG_FMT("error in %s : %d"), ctx, sock_err);
-
-    switch(sock_err) {
+    switch(errno) {
     case EAGAIN:
     case EINTR:
         errval = HTTPD_SOCK_ERR_TIMEOUT;
index a532117567ea72cd5460780c52e7cbcdbd21b3b0..0666b182e01e78c20f7338b64abd8c9089ca34d4 100644 (file)
@@ -174,8 +174,6 @@ typedef enum {
     MESH_EVENT_ROOT_ADDRESS,            /**< the root address is obtained. It is posted by mesh stack automatically. */
     MESH_EVENT_ROOT_SWITCH_REQ,         /**< root switch request sent from a new voted root candidate */
     MESH_EVENT_ROOT_SWITCH_ACK,         /**< root switch acknowledgment responds the above request sent from current root */
-    MESH_EVENT_ROOT_GOT_IP,             /**< the root obtains the IP address. It is posted by LwIP stack automatically */
-    MESH_EVENT_ROOT_LOST_IP,            /**< the root loses the IP address. It is posted by LwIP stack automatically */
     MESH_EVENT_ROOT_ASKED_YIELD,        /**< the root is asked yield by a more powerful existing root. If self organized is disabled
                                              and this device is specified to be a root by users, users should set a new parent
                                              for this device. if self organized is enabled, this device will find a new parent
@@ -195,6 +193,9 @@ typedef enum {
     MESH_EVENT_MAX,
 } mesh_event_id_t;
 
+/** @brief ESP-MESH event base declaration */
+ESP_EVENT_DECLARE_BASE(MESH_EVENT);
+
 /**
  * @brief Device type
  */
@@ -427,21 +428,6 @@ typedef union {
     mesh_event_router_switch_t router_switch;              /**< new router information */
 } mesh_event_info_t;
 
-/**
- * @brief Mesh event
- */
-typedef struct {
-    mesh_event_id_t id;        /**< mesh event id */
-    mesh_event_info_t info;    /**< mesh event info */
-} mesh_event_t;
-
-/**
- * @brief  Mesh event callback handler prototype definition
- *
- * @param  event  mesh_event_t
- */
-typedef void (*mesh_event_cb_t)(mesh_event_t event);
-
 /**
  * @brief Mesh option
  */
@@ -492,7 +478,6 @@ typedef struct {
     uint8_t channel;                            /**< channel, the mesh network on */
     bool allow_channel_switch;                  /**< if this value is set, when "fail" (mesh_attempts_t) times is reached, device will change to
                                                      a full channel scan for a network that could join. The default value is false. */
-    mesh_event_cb_t event_cb;                   /**< mesh event callback */
     mesh_addr_t mesh_id;                        /**< mesh network identification */
     mesh_router_t router;                       /**< router configuration */
     mesh_ap_cfg_t mesh_ap;                      /**< mesh softAP configuration */
@@ -543,9 +528,6 @@ typedef struct {
 /* mesh IE crypto callback function */
 extern const mesh_crypto_funcs_t g_wifi_default_mesh_crypto_funcs;
 
-/* mesh event callback handler */
-extern mesh_event_cb_t g_mesh_event_cb;
-
 #define MESH_INIT_CONFIG_DEFAULT() { \
     .crypto_funcs = &g_wifi_default_mesh_crypto_funcs, \
 }
@@ -1303,16 +1285,6 @@ esp_err_t esp_mesh_set_root_healing_delay(int delay_ms);
  */
 int esp_mesh_get_root_healing_delay(void);
 
-/**
- * @brief      Set mesh event callback
- *
- * @param[in]  event_cb  mesh event call back
- *
- * @return
- *    - ESP_OK
- */
-esp_err_t esp_mesh_set_event_cb(const mesh_event_cb_t event_cb);
-
 /**
  * @brief      Enable network Fixed Root Setting
  *             - Enabling fixed root disables automatic election of the root node via voting.
@@ -1479,6 +1451,13 @@ esp_err_t esp_mesh_switch_channel(const uint8_t *new_bssid, int csa_newchan, int
  */
 esp_err_t esp_mesh_get_router_bssid(uint8_t *router_bssid);
 
+/**
+ * @brief      Get the TSF time
+ *
+ * @return     the TSF time
+ */
+int64_t esp_mesh_get_tsf_time(void);
+
 #ifdef __cplusplus
 }
 #endif
index 7657dd453d4349d03458b77c082acbfe6b6736c4..414f9b279e772196e8f6cf343d19f2882a2e8741 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 7657dd453d4349d03458b77c082acbfe6b6736c4
+Subproject commit 414f9b279e772196e8f6cf343d19f2882a2e8741
index f0b90ae4228b0a81c72a653b8871d68ee5733676..52c6cf56f6f86a4c69c2a0b6eab07dc944ffca3a 100644 (file)
 
 #include <string.h>
 #include "esp_event.h"
-#include "esp_mesh.h"
 
-/* mesh event callback handler */
-mesh_event_cb_t g_mesh_event_cb = NULL;
+ESP_EVENT_DEFINE_BASE(MESH_EVENT);
 
-esp_err_t esp_event_mesh_hook(system_event_t *event)
+esp_err_t esp_mesh_send_event_internal(int32_t event_id, void* event_data, size_t event_data_size)
 {
-    if (event->event_id == SYSTEM_EVENT_STA_GOT_IP || event->event_id == SYSTEM_EVENT_STA_LOST_IP) {
-        if (g_mesh_event_cb) {
-            mesh_event_t mevent;
-            if (event->event_id == SYSTEM_EVENT_STA_GOT_IP) {
-                mevent.id = MESH_EVENT_ROOT_GOT_IP;
-                memcpy(&mevent.info.got_ip, &event->event_info.got_ip, sizeof(system_event_sta_got_ip_t));
-            } else {
-                mevent.id = MESH_EVENT_ROOT_LOST_IP;
-            }
-            g_mesh_event_cb(mevent);
-        }
-    }
-    return ESP_OK;
+    return esp_event_post(MESH_EVENT, event_id, event_data, event_data_size, 0);
 }
index 6cdb288236a0debdc73ff7f2f32cfd3b1aab6ddc..137c1b74b36acee701cfc4f22d1326f3805cff8e 100644 (file)
@@ -15,9 +15,9 @@
 #define IDF_PERFORMANCE_MAX_VFS_OPEN_WRITE_CLOSE_TIME                           20000
 #define IDF_PERFORMANCE_MAX_VFS_OPEN_WRITE_CLOSE_TIME_PSRAM                     25000
 // throughput performance by iperf
-#define IDF_PERFORMANCE_MIN_TCP_RX_THROUGHPUT                                   50
+#define IDF_PERFORMANCE_MIN_TCP_RX_THROUGHPUT                                   45
 #define IDF_PERFORMANCE_MIN_TCP_TX_THROUGHPUT                                   40
-#define IDF_PERFORMANCE_MIN_UDP_RX_THROUGHPUT                                   80
+#define IDF_PERFORMANCE_MIN_UDP_RX_THROUGHPUT                                   64
 #define IDF_PERFORMANCE_MIN_UDP_TX_THROUGHPUT                                   50
 // events dispatched per second by event loop library
 #define IDF_PERFORMANCE_MIN_EVENT_DISPATCH                                      25000
index 3e1419e68184deede4f96d95849151ae0f8a207f..81e8f15055938f650d357c2c39ffcbfb27a3d248 100644 (file)
@@ -55,7 +55,6 @@ set(srcs
     "lwip/src/core/ipv6/mld6.c"
     "lwip/src/core/ipv6/nd6.c"
     "lwip/src/netif/ethernet.c"
-    "lwip/src/netif/ethernetif.c"
     "lwip/src/netif/lowpan6.c"
     "lwip/src/netif/slipif.c"
     "lwip/src/netif/ppp/auth.c"
index b4d47cb546931e75cdc6914e26b66afe98148484..157e4b88bc42c73f2badf26283fc6bbadc4e9237 100644 (file)
@@ -2,58 +2,83 @@
 archive: liblwip.a
 entries:
   if LWIP_IRAM_OPTIMIZATION = y:
-    ethernetif:ethernet_low_level_output (noflash_text)
-    ethernetif:ethernetif_input (noflash_text)
-    wlanif:low_level_output (noflash_text)
-    wlanif:wlanif_input (noflash_text)
-    sys_arch:sys_mutex_lock (noflash_text)
-    sys_arch:sys_mutex_unlock (noflash_text)
-    sys_arch:sys_sem_signal (noflash_text)
-    sys_arch:sys_arch_sem_wait (noflash_text)
-    sys_arch:sys_mbox_post (noflash_text)
-    sys_arch:sys_mbox_trypost (noflash_text)
-    sys_arch:sys_arch_mbox_fetch (noflash_text)
     sockets:get_socket (noflash_text)
+    sockets:tryget_socket (noflash_text)
+    sockets:tryget_socket_unconn (noflash_text)
+    sockets:sock_inc_used (noflash_text)
+    sockets:tryget_socket_unconn_nouse (noflash_text)
+    sockets:done_socket (noflash_text)
     sockets:lwip_recvfrom (noflash_text)
+    sockets:lwip_recv_tcp (noflash_text)
+    sockets:lwip_recv_tcp_from (noflash_text)
+    sockets:lwip_recvfrom_udp_raw (noflash_text)
+    sockets:lwip_send (noflash_text)
     sockets:lwip_sendto (noflash_text)
     sockets:event_callback (noflash_text)
-    sockets:lwip_sendto_r (noflash_text)
-    sockets:lwip_recvfrom_r (noflash_text)
-    sockets:lwip_recv_r (noflash_text)
     api_lib:netconn_apimsg (noflash_text)
     api_lib:netconn_recv_data (noflash_text)
-    api_lib:netconn_recv_tcp_pbuf (noflash_text)
+    api_lib:netconn_tcp_recvd_msg (noflash_text)
+    api_lib:netconn_tcp_recvd (noflash_text)
+    api_lib:netconn_recv_data_tcp (noflash_text)
+    api_lib:netconn_recv_tcp_pbuf_flags (noflash_text)
+    api_lib:netconn_recv_udp_raw_netbuf_flags (noflash_text)
     api_lib:netconn_recv (noflash_text)
+    api_lib:netconn_sendto (noflash_text)
     api_lib:netconn_send (noflash_text)
     api_lib:netconn_write_partly (noflash_text)
+    api_lib:netconn_write_vectors_partly (noflash_text)
+    api_msg:lwip_netconn_do_send (noflash_text)
+    api_msg:lwip_netconn_do_write (noflash_text)
+    netbuf:netbuf_alloc (noflash_text)
+    netbuf:netbuf_free (noflash_text)
     tcpip:tcpip_thread (noflash_text)
+    tcpip:tcpip_thread_handle_msg (noflash_text)
     tcpip:tcpip_inpkt (noflash_text)
     tcpip:tcpip_input (noflash_text)
+    tcpip:tcpip_callback (noflash_text)
+    tcpip:tcpip_try_callback (noflash_text)
     tcpip:tcpip_send_msg_wait_sem (noflash_text)
-    netbuf:netbuf_alloc (noflash_text)
-    netbuf:netbuf_free (noflash_text)
-    timeouts:sys_timeouts_mbox_fetch (noflash_text)
     inet_chksum:inet_cksum_pseudo_base (noflash_text)
     inet_chksum:inet_chksum_pseudo (noflash_text)
-    inet_chksum:ip_chksum_pseudo (noflash_text)
     etharp:etharp_output_to_arp_index (noflash_text)
     etharp:etharp_output (noflash_text)
     ip4_addr:ip4_addr_isbroadcast_u32 (noflash_text)
-    ip4:ip4_route_src (noflash_text)
     ip4:ip4_route_src_hook (noflash_text)
+    ip4:ip4_route_src (noflash_text)
     ip4:ip4_route (noflash_text)
     ip4:ip4_input (noflash_text)
+    ip4:ip4_output_if (noflash_text)
+    ip4:ip4_output_if_opt (noflash_text)
     ip4:ip4_output_if_src (noflash_text)
     ip4:ip4_output_if_opt_src (noflash_text)
+    ip4:ip4_output (noflash_text)
+    pbuf:pbuf_alloc (noflash_text)
+    pbuf:pbuf_add_header_impl (noflash_text)
+    pbuf:pbuf_add_header (noflash_text)
+    pbuf:pbuf_remove_header (noflash_text)
+    pbuf:pbuf_header_impl (noflash_text)
+    pbuf:pbuf_header (noflash_text)
+    pbuf:pbuf_free (noflash_text)
+    timeouts:sys_timeouts_mbox_fetch (noflash_text)
     udp:udp_input_local_match (noflash_text)
     udp:udp_input (noflash_text)
     udp:udp_send (noflash_text)
     udp:udp_sendto (noflash_text)
     udp:udp_sendto_if (noflash_text)
     udp:udp_sendto_if_src (noflash_text)
-    pbuf:pbuf_alloc (noflash_text)
-    pbuf:pbuf_header_impl (noflash_text)
-    pbuf:pbuf_header (noflash_text)
     ethernet:ethernet_input (noflash_text)
+    ethernet:ethernet_output (noflash_text)
+    sys_arch:sys_mutex_lock (noflash_text)
+    sys_arch:sys_mutex_unlock (noflash_text)
+    sys_arch:sys_sem_signal (noflash_text)
+    sys_arch:sys_arch_sem_wait (noflash_text)
+    sys_arch:sys_mbox_post (noflash_text)
+    sys_arch:sys_mbox_trypost (noflash_text)
+    sys_arch:sys_arch_mbox_fetch (noflash_text)
+    ethernetif:ethernet_low_level_output (noflash_text)
+    ethernetif:ethernetif_input (noflash_text)
+    wlanif:low_level_output (noflash_text)
+    wlanif:wlanif_input (noflash_text)
   else:
+    
     * (default)
index 5d9fce09e352a7b11949b79f386c907ce8d09fa8..bafc54f69b671f368d7b996d1668b7bd4be55193 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 5d9fce09e352a7b11949b79f386c907ce8d09fa8
+Subproject commit bafc54f69b671f368d7b996d1668b7bd4be55193
index 8e1574548c0b3f44a2181a563fe59cdbf467fc81..c6c71b5f83b7bb55eaa6ba2717d0d85846107f03 100644 (file)
@@ -191,7 +191,6 @@ void dbg_lwip_stats_show(void)
     IP6_FRAG_STATS_DISPLAY();
     MLD6_STATS_DISPLAY();
     ND6_STATS_DISPLAY();
-    ESP_STATS_DROP_DISPLAY();
 }
 
 #if (ESP_STATS_MEM == 1)
index fec80d1b9da142a439d355a01ef8a706c2a786f9..a3776d59d7f2984b68bd541de4277dfa72b6013e 100644 (file)
@@ -320,7 +320,6 @@ sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
   if (msg == NULL) {
     msg = &pvDummy;
   }
-
   if (pdTRUE == xQueueReceive((*mbox)->os_mbox, &(*msg), 0)) {
     ulReturn = ERR_OK;
   } else {
@@ -349,53 +348,13 @@ sys_mbox_set_owner(sys_mbox_t *mbox, void* owner)
 void
 sys_mbox_free(sys_mbox_t *mbox)
 {
-  uint32_t mbox_message_num = 0;
-
   if ( (NULL == mbox) || (NULL == *mbox) ) {
       return;
   }
-
-  mbox_message_num = uxQueueMessagesWaiting((*mbox)->os_mbox);
-
-  LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("mbox free: mbox=%p os_mbox=%p owner=%p msg_num=%d\n", 
-              *mbox, (*mbox)->os_mbox, (*mbox)->owner, mbox_message_num));
-
-#if ESP_THREAD_SAFE
-  if ((*mbox)->owner) {
-    if (0 == mbox_message_num) {
-      /*
-       * If mbox->owner is not NULL, it indicates the mbox is recvmbox or acceptmbox,
-       * we need to post a NULL message to mbox in case some application tasks are blocked
-       * on this mbox
-       */
-      if (sys_mbox_trypost(mbox, NULL) != ERR_OK) {
-        /* Should never be here because post a message to empty mbox should always be successful */
-        ESP_LOGW(TAG, "WARNING: failed to post NULL msg to mbox\n");
-      } else {
-        LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("mbox free: post null successfully\n"));
-      }
-    }
-    (*mbox)->owner = NULL;
-  } else {
-    if (mbox_message_num > 1) {
-      ESP_LOGW(TAG, "WARNING: mbox has %d message, potential memory leaking\n", mbox_message_num);
-    }
-
-    if (mbox_message_num > 0) {
-      LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("mbox free: reset mbox queue\n"));
-      xQueueReset((*mbox)->os_mbox); 
-    }
-
-    /* For recvmbox or acceptmbox, free them in netconn_free() when all sockets' API are returned */
-    vQueueDelete((*mbox)->os_mbox);
-    free(*mbox);
-    *mbox = NULL;
-  }
-#else
   vQueueDelete((*mbox)->os_mbox);
   free(*mbox);
   *mbox = NULL;
-#endif
+
 }
 
 /*-----------------------------------------------------------------------------------*/
index 1841e3f45af4a4c996282ed59041ff320f43c650..300291f3bf58bef6acb52734b2d97753995db3d2 100644 (file)
@@ -52,7 +52,7 @@ typedef int16_t  s16_t;
 typedef uint32_t u32_t;
 typedef int32_t  s32_t;
 
-typedef unsigned long   mem_ptr_t;
+
 typedef int sys_prot_t;
 
 #define S16_F "d"
index 9638fdfd621e7384c42cc891bca57ba7b5054656..5fea8eb5527d7cae9e7de3ca1cb4a21efab1de1c 100644 (file)
@@ -80,7 +80,7 @@ typedef struct sys_mbox_s {
  * However, if the sys_mbox_set_invalid() is not called after sys_mbox_free(), e.g. in netconn_alloc(),
  * we need to initialize the mbox to invalid explicitly since sys_mbox_set_invalid() now is empty.
  */
-#define sys_mbox_set_invalid( x ) 
+#define sys_mbox_set_invalid( x )  *x = NULL
 
 #define sys_sem_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE )
 #define sys_sem_set_invalid( x ) ( ( *x ) = NULL )
index 713d3ff09777fe14d5fe7fece91cd70496bf389f..e37d272ccca63db8a1de209dfb5113e4d45b4604 100644 (file)
 #define ESP_STATS_MEM                   CONFIG_LWIP_STATS
 #define ESP_STATS_DROP                  CONFIG_LWIP_STATS
 #define ESP_STATS_TCP                   0
-#define ESP_DHCP_TIMER                  1
 #define ESP_DHCPS_TIMER                 1
 #define ESP_LWIP_LOGI(...)              ESP_LOGI("lwip", __VA_ARGS__)
 #define ESP_PING                        1
 #define ESP_HAS_SELECT                  1
 #define ESP_AUTO_RECV                   1
 #define ESP_GRATUITOUS_ARP              CONFIG_LWIP_ESP_GRATUITOUS_ARP
+#define ESP_IP4_ROUTE                   1
+#define ESP_AUTO_IP                     1
+#define ESP_PBUF                        1
+#define ESP_PPP                         1
+#define ESP_IPV6                        1
+#define ESP_SOCKET                      1
 
 #ifdef ESP_IRAM_ATTR
 #undef ESP_IRAM_ATTR
 #define ESP_LWIP_MLD6_TIMERS_ONDEMAND            0
 #endif
 
-#if ESP_PERF
-#define DBG_PERF_PATH_SET(dir, point)
-#define DBG_PERF_FILTER_LEN             1000
-
-enum {
-  DBG_PERF_DIR_RX = 0,
-  DBG_PERF_DIR_TX,
-};
-
-enum {
-  DBG_PERF_POINT_INT       = 0,
-  DBG_PERF_POINT_WIFI_IN   = 1,
-  DBG_PERF_POINT_WIFI_OUT  = 2,
-  DBG_PERF_POINT_LWIP_IN   = 3,
-  DBG_PERF_POINT_LWIP_OUT  = 4,
-  DBG_PERF_POINT_SOC_IN    = 5,
-  DBG_PERF_POINT_SOC_OUT   = 6,
-};
-
-#else
-#define DBG_PERF_PATH_SET(dir, point)
-#define DBG_PERF_FILTER_LEN             1000
-#endif
-
 #define TCP_SND_BUF                     CONFIG_LWIP_TCP_SND_BUF_DEFAULT
 #define TCP_WND                         CONFIG_LWIP_TCP_WND_DEFAULT
 
-#if ESP_PER_SOC_TCP_WND
-#define TCP_WND_DEFAULT                 CONFIG_LWIP_TCP_WND_DEFAULT
-#define TCP_SND_BUF_DEFAULT             CONFIG_LWIP_TCP_SND_BUF_DEFAULT
-#define TCP_WND(pcb)                    (pcb->per_soc_tcp_wnd)
-#define TCP_SND_BUF(pcb)                (pcb->per_soc_tcp_snd_buf)
-#define TCP_SND_QUEUELEN(pcb)           ((4 * (TCP_SND_BUF((pcb))) + (TCP_MSS - 1))/(TCP_MSS))
-#define TCP_SNDLOWAT(pcb)               LWIP_MIN(LWIP_MAX(((TCP_SND_BUF((pcb)))/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF((pcb))) - 1)
-#define TCP_SNDQUEUELOWAT(pcb)          LWIP_MAX(((TCP_SND_QUEUELEN((pcb)))/2), 5)
-#define TCP_WND_UPDATE_THRESHOLD(pcb)   LWIP_MIN((TCP_WND((pcb)) / 4), (TCP_MSS * 4))
-#endif
-
 /**
  * DHCP_DEBUG: Enable debugging in dhcp.c.
  */
@@ -849,6 +819,12 @@ enum {
 /*
  * SNTP update delay - in milliseconds
  */
+/** Set this to 1 to support DNS names (or IP address strings) to set sntp servers
+ * One server address/name can be defined as default if SNTP_SERVER_DNS == 1:
+ * \#define SNTP_SERVER_ADDRESS "pool.ntp.org"
+ */
+#define SNTP_SERVER_DNS            1
+
 #define SNTP_UPDATE_DELAY              CONFIG_LWIP_SNTP_UPDATE_DELAY
 
 #define SNTP_SET_SYSTEM_TIME_US(sec, us)  \
index cd2bdac8d77607769a2c3f5d0921d6b1c19e3e6e..11e1fc857f6b8841145751128146b306a56ddd72 100644 (file)
@@ -154,7 +154,6 @@ wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb)
 #if (ESP_L2_TO_L3_COPY == 1)
   p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM);
   if (p == NULL) {
-    ESP_STATS_DROP_INC(esp.wlanif_input_pbuf_fail);
     esp_wifi_internal_free_rx_buffer(eb);
     return;
   }
@@ -164,7 +163,6 @@ wlanif_input(struct netif *netif, void *buffer, u16_t len, void* eb)
 #else
   p = pbuf_alloc(PBUF_RAW, len, PBUF_REF);
   if (p == NULL){
-    ESP_STATS_DROP_INC(esp.wlanif_input_pbuf_fail);
     esp_wifi_internal_free_rx_buffer(eb);
     return;
   }
index 6b687a196c1fc226d1f0ba9f7fe0b2348a0df7e7..ffd3e79e1f4063ad2a1cc4021ea4d2865b17f6d8 100644 (file)
@@ -49,23 +49,23 @@ static void *lwip_get_socket_select_semaphore()
 
 static int lwip_fcntl_r_wrapper(int fd, int cmd, int arg)
 {
-    return lwip_fcntl_r(fd, cmd, arg);
+    return lwip_fcntl(fd, cmd, arg);
 }
 
 static int lwip_ioctl_r_wrapper(int fd, int cmd, va_list args)
 {
-    return lwip_ioctl_r(fd, cmd, va_arg(args, void *));
+    return lwip_ioctl(fd, cmd, va_arg(args, void *));
 }
 
 void esp_vfs_lwip_sockets_register()
 {
     esp_vfs_t vfs = {
         .flags = ESP_VFS_FLAG_DEFAULT,
-        .write = &lwip_write_r,
+        .write = &lwip_write,
         .open = NULL,
         .fstat = NULL,
-        .close = &lwip_close_r,
-        .read = &lwip_read_r,
+        .close = &lwip_close,
+        .read = &lwip_read,
         .fcntl = &lwip_fcntl_r_wrapper,
         .ioctl = &lwip_ioctl_r_wrapper,
         .socket_select = &lwip_select,
index c0bb3a2ce0917ce8b58d1a978b2e7d63609aab77..c778f0faf31cae2fe507369e1aabe6d00e110d9b 100644 (file)
@@ -51,7 +51,7 @@
 #endif
 #define        PATH_MAX                 1024   /* max bytes in pathname */
 #define        PIPE_BUF                  512   /* max bytes for atomic pipe writes */
-#define        IOV_MAX                  1024   /* max elements in i/o vector */
+
 
 #define        BC_BASE_MAX                99   /* max ibase/obase values in bc(1) */
 #define        BC_DIM_MAX               2048   /* max array elements in bc(1) */
index 8760bb156ee9df4f9478e737c623da6b4010197d..e3d0a601a09ec77522835e728e0e63d7d45d9b70 100644 (file)
@@ -14,6 +14,8 @@
 #ifndef _ESP_PLATFORM_NET_IF_H_
 #define _ESP_PLATFORM_NET_IF_H_
 
+#include "lwip/sockets.h"
+
 #define        MSG_DONTROUTE   0x4     /* send without using routing tables */
 #define        SOCK_SEQPACKET  5       /* sequenced packet stream */
 #define        MSG_EOR         0x8     /* data completes record */
 #define        NI_NUMERICSERV  0x00000008
 #define        NI_DGRAM        0x00000010
 
-
-struct ipv6_mreq {
-    struct in6_addr ipv6mr_multiaddr;
-    unsigned int    ipv6mr_interface;
-};
-
 typedef u32_t socklen_t;
 
 
index 68bf657e37e12321e2ee82529746e6b9ab194d52..3bc10e8c3fce8c61cd6b02adac50a4f392187874 100755 (executable)
@@ -903,6 +903,9 @@ def generate(args, is_encr_enabled=False, encr_key=None):
         print("\nCreating NVS binary with version:", version_set)
         for row in reader:
             try:
+                # Check key length
+                if len(row["key"]) > 15:
+                    raise InputError("Length of key `%s` should be <= 15 characters." % row["key"])
                 write_entry(nvs_obj, row["key"], row["type"], row["encoding"], row["value"])
             except InputError as e:
                 print(e)
index 8326235ab40e58d5890bc94cc6ca1e02e988692e..f78440a0deb48ec2f372fd3bc625fe1d77912c86 100644 (file)
@@ -2462,7 +2462,6 @@ TEST_CASE("check and read data from partition generated via partition generation
     }
 }
 
-#if false
 TEST_CASE("check and read data from partition generated via manufacturing utility with multipage blob support disabled", "[mfg_gen]")
 {
     int childpid = fork();
@@ -2484,18 +2483,15 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
         if (childpid == 0) {
             exit(execlp("python", "python",
                         "../../../tools/mass_mfg/mfg_gen.py",
-                        "--conf",
+                        "generate",
                         "../../../tools/mass_mfg/samples/sample_config.csv",
-                        "--values",
                         "../../../tools/mass_mfg/samples/sample_values_singlepage_blob.csv",
-                        "--prefix",
                         "Test",
-                        "--size",
                         "0x3000",
                         "--outdir",
                         "../../../tools/mass_mfg/host_test",
                         "--version",
-                        "v1",NULL));
+                        "1",NULL));
 
         } else {
             CHECK(childpid > 0);
@@ -2506,14 +2502,12 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
             if (childpid == 0) {
                 exit(execlp("python", "python",
                             "../nvs_partition_generator/nvs_partition_gen.py",
-                            "--input",
+                            "generate",
                             "../../../tools/mass_mfg/host_test/csv/Test-1.csv",
-                            "--output",
                             "../nvs_partition_generator/Test-1-partition.bin",
-                            "--size",
                             "0x3000",
                             "--version",
-                            "v1",NULL));
+                            "1",NULL));
 
             } else {
                 CHECK(childpid > 0);
@@ -2570,18 +2564,15 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
         if (childpid == 0) {
             exit(execlp("python", "python",
                         "../../../tools/mass_mfg/mfg_gen.py",
-                        "--conf",
+                        "generate",
                         "../../../tools/mass_mfg/samples/sample_config.csv",
-                        "--values",
                         "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv",
-                        "--prefix",
                         "Test",
-                        "--size",
                         "0x4000",
                         "--outdir",
                         "../../../tools/mass_mfg/host_test",
                         "--version",
-                        "v2",NULL));
+                        "2",NULL));
 
         } else {
             CHECK(childpid > 0);
@@ -2592,14 +2583,12 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
             if (childpid == 0) {
                 exit(execlp("python", "python",
                             "../nvs_partition_generator/nvs_partition_gen.py",
-                            "--input",
+                            "generate",
                             "../../../tools/mass_mfg/host_test/csv/Test-1.csv",
-                            "--output",
                             "../nvs_partition_generator/Test-1-partition.bin",
-                            "--size",
                             "0x4000",
                             "--version",
-                            "v2",NULL));
+                            "2",NULL));
 
             } else {
                 CHECK(childpid > 0);
@@ -2633,7 +2622,6 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
     }
 
 }
-#endif
 
 #if CONFIG_NVS_ENCRYPTION
 TEST_CASE("check underlying xts code for 32-byte size sector encryption", "[nvs]")
@@ -3015,8 +3003,7 @@ TEST_CASE("test nvs apis for nvs partition generator utility with encryption ena
 
 }
 
-#if false
-TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using sample keyfile", "[mfg_gen]")
+TEST_CASE("check and read data from partition generated via manufacturing utility with encryption enabled using sample inputkey", "[mfg_gen]")
 {
     int childpid = fork();
     int status;
@@ -3037,21 +3024,16 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
         if (childpid == 0) {
             exit(execlp("python", "python",
                         "../../../tools/mass_mfg/mfg_gen.py",
-                        "--conf",
+                        "generate",
                         "../../../tools/mass_mfg/samples/sample_config.csv",
-                        "--values",
                         "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv",
-                        "--prefix",
                         "Test",
-                        "--size",
                         "0x4000",
                         "--outdir",
                         "../../../tools/mass_mfg/host_test",
                         "--version",
-                        "v2",
-                        "--encrypt",
-                        "true",
-                        "--keyfile",
+                        "2",
+                        "--inputkey",
                         "mfg_testdata/sample_encryption_keys.bin",NULL));
 
         } else {
@@ -3063,17 +3045,13 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
             if (childpid == 0) {
                 exit(execlp("python", "python",
                             "../nvs_partition_generator/nvs_partition_gen.py",
-                            "--input",
+                            "encrypt",
                             "../../../tools/mass_mfg/host_test/csv/Test-1.csv",
-                            "--output",
                             "../nvs_partition_generator/Test-1-partition-encrypted.bin",
-                            "--size",
                             "0x4000",
                             "--version",
-                            "v2",
-                            "--encrypt",
-                            "true",
-                            "--keyfile",
+                            "2",
+                            "--inputkey",
                             "testdata/sample_encryption_keys.bin",NULL));
 
             } else {
@@ -3143,8 +3121,7 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
         if (childpid == 0) {
             exit(execlp("python", "python",
                         "../../../tools/mass_mfg/mfg_gen.py",
-                        "--keygen",
-                        "true",
+                        "generate-key",
                         "--outdir",
                         "../../../tools/mass_mfg/host_test",
                         "--keyfile",
@@ -3159,21 +3136,16 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
             if (childpid == 0) {
                 exit(execlp("python", "python",
                             "../../../tools/mass_mfg/mfg_gen.py",
-                            "--conf",
+                            "generate",
                             "../../../tools/mass_mfg/samples/sample_config.csv",
-                            "--values",
                             "../../../tools/mass_mfg/samples/sample_values_multipage_blob.csv",
-                            "--prefix",
                             "Test",
-                            "--size",
                             "0x4000",
                             "--outdir",
                             "../../../tools/mass_mfg/host_test",
                             "--version",
-                            "v2",
-                            "--encrypt",
-                            "true",
-                            "--keyfile",
+                            "2",
+                            "--inputkey",
                             "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin",NULL));
 
             } else {
@@ -3185,17 +3157,13 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
                 if (childpid == 0) {
                     exit(execlp("python", "python",
                                 "../nvs_partition_generator/nvs_partition_gen.py",
-                                "--input",
+                                "encrypt",
                                 "../../../tools/mass_mfg/host_test/csv/Test-1.csv",
-                                "--output",
                                 "../nvs_partition_generator/Test-1-partition-encrypted.bin",
-                                "--size",
                                 "0x4000",
                                 "--version",
-                                "v2",
-                                "--encrypt",
-                                "true",
-                                "--keyfile",
+                                "2",
+                                "--inputkey",
                                 "../../../tools/mass_mfg/host_test/keys/encr_keys_host_test.bin",NULL));
 
                 } else {
@@ -3256,7 +3224,6 @@ TEST_CASE("check and read data from partition generated via manufacturing utilit
 
 }
 #endif
-#endif
 
 /* Add new tests above */
 /* This test has to be the final one */
diff --git a/components/tcp_transport/test/CMakeLists.txt b/components/tcp_transport/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..88504a2
--- /dev/null
@@ -0,0 +1,5 @@
+set(COMPONENT_SRCDIRS ".")
+set(COMPONENT_PRIV_INCLUDEDIRS "../private_include" ".")
+set(COMPONENT_PRIV_REQUIRES unity test_utils tcp_transport)
+
+register_component()
\ No newline at end of file
diff --git a/components/tcp_transport/test/component.mk b/components/tcp_transport/test/component.mk
new file mode 100644 (file)
index 0000000..22e49ed
--- /dev/null
@@ -0,0 +1,5 @@
+#
+#Component Makefile
+#
+COMPONENT_PRIV_INCLUDEDIRS := ../private_include .
+COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive
\ No newline at end of file
diff --git a/components/tcp_transport/test/test_transport.c b/components/tcp_transport/test/test_transport.c
new file mode 100644 (file)
index 0000000..28702fb
--- /dev/null
@@ -0,0 +1,28 @@
+#include "unity.h"
+
+#include "esp_transport.h"
+#include "esp_transport_tcp.h"
+#include "esp_transport_ssl.h"
+#include "esp_transport_ws.h"
+
+TEST_CASE("tcp_transport: init and deinit transport list", "[tcp_transport][leaks=0]")
+{
+    esp_transport_list_handle_t transport_list = esp_transport_list_init();
+    esp_transport_handle_t tcp = esp_transport_tcp_init();
+    esp_transport_list_add(transport_list, tcp, "tcp");
+    TEST_ASSERT_EQUAL(ESP_OK, esp_transport_list_destroy(transport_list));
+}
+
+TEST_CASE("tcp_transport: using ssl transport separately", "[tcp_transport][leaks=0]")
+{
+    esp_transport_handle_t h = esp_transport_ssl_init();
+    TEST_ASSERT_EQUAL(ESP_OK, esp_transport_destroy(h));
+}
+
+TEST_CASE("tcp_transport: using ws transport separately", "[tcp_transport][leaks=0]")
+{
+    esp_transport_handle_t tcp = esp_transport_tcp_init();
+    esp_transport_handle_t ws = esp_transport_ws_init(tcp);
+    TEST_ASSERT_EQUAL(ESP_OK, esp_transport_destroy(ws));
+    TEST_ASSERT_EQUAL(ESP_OK, esp_transport_destroy(tcp));
+}
index ddceba93c99569b8a6f02c3357ca780d0926810e..b48acf908d9b3c744bb9427c61e67b64dfdb9649 100644 (file)
@@ -124,9 +124,6 @@ esp_err_t esp_transport_list_clean(esp_transport_list_handle_t h)
     esp_transport_handle_t tmp;
     while (item != NULL) {
         tmp = STAILQ_NEXT(item, next);
-        if (item->_destroy) {
-            item->_destroy(item);
-        }
         esp_transport_destroy(item);
         item = tmp;
     }
@@ -151,6 +148,9 @@ esp_transport_handle_t esp_transport_get_payload_transport_handle(esp_transport_
 
 esp_err_t esp_transport_destroy(esp_transport_handle_t t)
 {
+    if (t->_destroy) {
+        t->_destroy(t);
+    }
     if (t->scheme) {
         free(t->scheme);
     }
index 8bc384e4caad510189a483235766098d50d1a797..88413d3a95826cc377d12ff1153ef5e2ffeaea62 100644 (file)
@@ -157,13 +157,13 @@ static int tcpip_adapter_ipc_check(tcpip_adapter_api_msg_t *msg)
 
 static esp_err_t tcpip_adapter_update_default_netif(void)
 {
-    if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
+    if (esp_netif[TCPIP_ADAPTER_IF_STA] != NULL && netif_is_up(esp_netif[TCPIP_ADAPTER_IF_STA])) {
         netif_set_default(esp_netif[TCPIP_ADAPTER_IF_STA]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
+    } else if (esp_netif[TCPIP_ADAPTER_IF_ETH] != NULL && netif_is_up(esp_netif[TCPIP_ADAPTER_IF_ETH])) {
         netif_set_default(esp_netif[TCPIP_ADAPTER_IF_ETH]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_AP])) {
+    } else if (esp_netif[TCPIP_ADAPTER_IF_AP] != NULL && netif_is_up(esp_netif[TCPIP_ADAPTER_IF_AP])) {
         netif_set_default(esp_netif[TCPIP_ADAPTER_IF_AP]);
-    } else if (netif_is_up(esp_netif[TCPIP_ADAPTER_IF_TEST])) {
+    } else if(esp_netif[TCPIP_ADAPTER_IF_TEST] != NULL && netif_is_up(esp_netif[TCPIP_ADAPTER_IF_TEST])) {
         netif_set_default(esp_netif[TCPIP_ADAPTER_IF_TEST]);
     }
 
@@ -193,6 +193,7 @@ static esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac,
         netif_init = tcpip_if_to_netif_init_fn(tcpip_if);
         assert(netif_init != NULL);
         netif_add(esp_netif[tcpip_if], &ip_info->ip, &ip_info->netmask, &ip_info->gw, args, netif_init, tcpip_input);
+       
 #if ESP_GRATUITOUS_ARP
         if (tcpip_if == TCPIP_ADAPTER_IF_STA || tcpip_if == TCPIP_ADAPTER_IF_ETH) {
             netif_set_garp_flag(esp_netif[tcpip_if]);
@@ -767,6 +768,8 @@ esp_err_t tcpip_adapter_get_dns_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_
 
     dns_param.dns_type =  type;
     dns_param.dns_info =  dns;
+    const ip_addr_t*  dns_ip = NULL;
+    
 
     TCPIP_ADAPTER_IPC_CALL(tcpip_if, type,  0, &dns_param, tcpip_adapter_get_dns_info_api);
     if (!dns) {
@@ -785,7 +788,10 @@ esp_err_t tcpip_adapter_get_dns_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_
     }
 
     if (tcpip_if == TCPIP_ADAPTER_IF_STA || tcpip_if == TCPIP_ADAPTER_IF_ETH) {
-        dns->ip = dns_getserver(type);
+        dns_ip = dns_getserver(type);
+        if(dns_ip != NULL){
+            dns->ip = *dns_ip;
+        }
     } else {
         dns->ip.u_addr.ip4 = dhcps_dns_getserver();
     }
index 6b535604d4c4b356bca6bfa3abac44f10152e4ae..8f31aedba506bf9ac037df80a71697f872dd4096 100644 (file)
@@ -23,6 +23,8 @@
 extern "C" {
 #endif
 
+ESP_EVENT_DECLARE_BASE(WIFI_PROV_EVENT);
+
 /**
  * @brief   Events generated by manager
  *
@@ -489,14 +491,17 @@ void wifi_prov_mgr_endpoint_unregister(const char *ep_name);
  * provisioning manager's internal state machine depending on
  * incoming Wi-Fi events
  *
+ * @note : This function is DEPRECATED, because events are now
+ * handled internally using the event loop library, esp_event.
+ * Calling this will do nothing and simply return ESP_OK.
+ *
  * @param[in] ctx   Event context data
  * @param[in] event Event info
  *
  * @return
- *  - ESP_OK       : Event handled successfully
- *  - ESP_ERR_FAIL : This event cannot be handled
+ *  - ESP_OK : Event handled successfully
  */
-esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event);
+esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event) __attribute__ ((deprecated));
 
 /**
  * @brief   Get state of Wi-Fi Station during provisioning
index af7991fa769b8f52b5797ab31c1fe01a2128ba9a..3d7a8355cbf34741eb7e6b5011310c688a6ee7aa 100644 (file)
@@ -40,6 +40,8 @@
 
 static const char *TAG = "wifi_prov_mgr";
 
+ESP_EVENT_DEFINE_BASE(WIFI_PROV_EVENT);
+
 typedef enum {
     WIFI_PROV_STATE_IDLE,
     WIFI_PROV_STATE_STARTING,
@@ -155,7 +157,7 @@ static struct wifi_prov_mgr_ctx *prov_ctx;
  *
  * NOTE: This function should be called only after ensuring that the
  * context is valid and the control mutex is locked. */
-static void execute_event_cb(wifi_prov_cb_event_t event_id, void *event_data)
+static void execute_event_cb(wifi_prov_cb_event_t event_id, void *event_data, size_t event_data_size)
 {
     ESP_LOGD(TAG, "execute_event_cb : %d", event_id);
 
@@ -180,6 +182,12 @@ static void execute_event_cb(wifi_prov_cb_event_t event_id, void *event_data)
             app_cb(app_data, event_id, event_data);
         }
 
+        if (esp_event_post(WIFI_PROV_EVENT, event_id,
+                           event_data, event_data_size,
+                           portMAX_DELAY) != ESP_OK) {
+            ESP_LOGE(TAG, "Failed to post event %d to default event loop", event_id);
+        }
+
         ACQUIRE_LOCK(prov_ctx_lock);
     }
 }
@@ -255,6 +263,10 @@ static cJSON* wifi_prov_get_info_json(void)
     return full_info_json;
 }
 
+/* Declare the internal event handler */
+static void wifi_prov_mgr_event_handler_internal(void* arg, esp_event_base_t event_base,
+                                                 int event_id, void* event_data);
+
 static esp_err_t wifi_prov_mgr_start_service(const char *service_name, const char *service_key)
 {
     const wifi_prov_scheme_t *scheme = &prov_ctx->mgr_config.scheme;
@@ -284,7 +296,9 @@ static esp_err_t wifi_prov_mgr_start_service(const char *service_name, const cha
 
     /* Set version information / capabilities of provisioning service and application */
     cJSON *version_json = wifi_prov_get_info_json();
-    ret = protocomm_set_version(prov_ctx->pc, "proto-ver", cJSON_Print(version_json));
+    char *version_str = cJSON_Print(version_json);
+    ret = protocomm_set_version(prov_ctx->pc, "proto-ver", version_str);
+    free(version_str);
     cJSON_Delete(version_json);
     if (ret != ESP_OK) {
         ESP_LOGE(TAG, "Failed to set version endpoint");
@@ -355,6 +369,31 @@ static esp_err_t wifi_prov_mgr_start_service(const char *service_name, const cha
         return ret;
     }
 
+    /* Register global event handler */
+    ret = esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID,
+                                     wifi_prov_mgr_event_handler_internal, NULL);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to register WiFi event handler");
+        free(prov_ctx->wifi_scan_handlers);
+        free(prov_ctx->wifi_prov_handlers);
+        scheme->prov_stop(prov_ctx->pc);
+        protocomm_delete(prov_ctx->pc);
+        return ret;
+    }
+
+    ret = esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP,
+                                     wifi_prov_mgr_event_handler_internal, NULL);
+    if (ret != ESP_OK) {
+        ESP_LOGE(TAG, "Failed to register IP event handler");
+        esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID,
+                                     wifi_prov_mgr_event_handler_internal);
+        free(prov_ctx->wifi_scan_handlers);
+        free(prov_ctx->wifi_prov_handlers);
+        scheme->prov_stop(prov_ctx->pc);
+        protocomm_delete(prov_ctx->pc);
+        return ret;
+    }
+
     ESP_LOGI(TAG, "Provisioning started with service name : %s ",
              service_name ? service_name : "<NULL>");
     return ESP_OK;
@@ -549,6 +588,12 @@ static bool wifi_prov_mgr_stop_service(bool blocking)
         prov_ctx->ap_list_sorted[i] = NULL;
     }
 
+    /* Remove event handler */
+    esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID,
+                                 wifi_prov_mgr_event_handler_internal);
+    esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP,
+                                 wifi_prov_mgr_event_handler_internal);
+
     if (blocking) {
         /* Run the cleanup without launching a separate task. Also the
          * WIFI_PROV_END event is not emitted in this case */
@@ -734,17 +779,20 @@ static esp_err_t update_wifi_scan_results(void)
     return ret;
 }
 
-/* Event handler for starting/stopping provisioning.
+/* DEPRECATED : Event handler for starting/stopping provisioning.
  * To be called from within the context of the main
  * event handler */
 esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event)
 {
-    /* For accessing reason codes in case of disconnection */
-    system_event_info_t *info = &event->event_info;
+    return ESP_OK;
+}
 
+static void wifi_prov_mgr_event_handler_internal(
+    void* arg, esp_event_base_t event_base, int event_id, void* event_data)
+{
     if (!prov_ctx_lock) {
         ESP_LOGE(TAG, "Provisioning manager not initialized");
-        return ESP_ERR_INVALID_STATE;
+        return;
     }
     ACQUIRE_LOCK(prov_ctx_lock);
 
@@ -753,12 +801,13 @@ esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event)
      * return with error to allow the global handler to act */
     if (!prov_ctx) {
         RELEASE_LOCK(prov_ctx_lock);
-        return ESP_ERR_INVALID_STATE;
+        return;
     }
 
     /* If scan completed then update scan result */
     if (prov_ctx->prov_state == WIFI_PROV_STATE_STARTED &&
-        event->event_id == SYSTEM_EVENT_SCAN_DONE) {
+        event_base == WIFI_EVENT &&
+        event_id == WIFI_EVENT_SCAN_DONE) {
         update_wifi_scan_results();
     }
 
@@ -766,22 +815,18 @@ esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event)
      * Wi-Fi STA is yet to complete trying the connection */
     if (prov_ctx->prov_state != WIFI_PROV_STATE_CRED_RECV) {
         RELEASE_LOCK(prov_ctx_lock);
-        return ESP_OK;
+        return;
     }
 
-    esp_err_t ret = ESP_OK;
-    switch (event->event_id) {
-    case SYSTEM_EVENT_STA_START:
-        ESP_LOGD(TAG, "STA Start");
+    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
+        ESP_LOGI(TAG, "STA Start");
         /* Once configuration is received through protocomm,
          * device is started as station. Once station starts,
          * wait for connection to establish with configured
          * host SSID and password */
         prov_ctx->wifi_state = WIFI_PROV_STA_CONNECTING;
-        break;
-
-    case SYSTEM_EVENT_STA_GOT_IP:
-        ESP_LOGD(TAG, "STA Got IP");
+    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
+        ESP_LOGI(TAG, "STA Got IP");
         /* Station got IP. That means configuration is successful. */
         prov_ctx->wifi_state = WIFI_PROV_STA_CONNECTED;
         prov_ctx->prov_state = WIFI_PROV_STATE_SUCCESS;
@@ -794,28 +839,27 @@ esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event)
         }
 
         /* Execute user registered callback handler */
-        execute_event_cb(WIFI_PROV_CRED_SUCCESS, NULL);
-        break;
-
-    case SYSTEM_EVENT_STA_DISCONNECTED:
-        ESP_LOGD(TAG, "STA Disconnected");
+        execute_event_cb(WIFI_PROV_CRED_SUCCESS, NULL, 0);
+    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
+        ESP_LOGE(TAG, "STA Disconnected");
         /* Station couldn't connect to configured host SSID */
         prov_ctx->wifi_state = WIFI_PROV_STA_DISCONNECTED;
-        ESP_LOGD(TAG, "Disconnect reason : %d", info->disconnected.reason);
+
+        wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
+        ESP_LOGE(TAG, "Disconnect reason : %d", disconnected->reason);
 
         /* Set code corresponding to the reason for disconnection */
-        switch (info->disconnected.reason) {
+        switch (disconnected->reason) {
         case WIFI_REASON_AUTH_EXPIRE:
         case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT:
-        case WIFI_REASON_BEACON_TIMEOUT:
         case WIFI_REASON_AUTH_FAIL:
-        case WIFI_REASON_ASSOC_FAIL:
+        case WIFI_REASON_ASSOC_EXPIRE:
         case WIFI_REASON_HANDSHAKE_TIMEOUT:
-            ESP_LOGD(TAG, "STA Auth Error");
+            ESP_LOGE(TAG, "STA Auth Error");
             prov_ctx->wifi_disconnect_reason = WIFI_PROV_STA_AUTH_ERROR;
             break;
         case WIFI_REASON_NO_AP_FOUND:
-            ESP_LOGD(TAG, "STA AP Not found");
+            ESP_LOGE(TAG, "STA AP Not found");
             prov_ctx->wifi_disconnect_reason = WIFI_PROV_STA_AP_NOT_FOUND;
             break;
         default:
@@ -831,20 +875,11 @@ esp_err_t wifi_prov_mgr_event_handler(void *ctx, system_event_t *event)
             prov_ctx->prov_state = WIFI_PROV_STATE_FAIL;
             wifi_prov_sta_fail_reason_t reason = prov_ctx->wifi_disconnect_reason;
             /* Execute user registered callback handler */
-            execute_event_cb(WIFI_PROV_CRED_FAIL, (void *)&reason);
+            execute_event_cb(WIFI_PROV_CRED_FAIL, (void *)&reason, sizeof(reason));
         }
-        break;
-
-    default:
-        /* This event is not intended to be handled by this handler.
-         * Return ESP_FAIL to signal global event handler to take
-         * control */
-        ret = ESP_FAIL;
-        break;
     }
 
     RELEASE_LOCK(prov_ctx_lock);
-    return ret;
 }
 
 esp_err_t wifi_prov_mgr_wifi_scan_start(bool blocking, bool passive,
@@ -1125,7 +1160,7 @@ esp_err_t wifi_prov_mgr_configure_sta(wifi_config_t *wifi_cfg)
     prov_ctx->wifi_state = WIFI_PROV_STA_CONNECTING;
     prov_ctx->prov_state = WIFI_PROV_STATE_CRED_RECV;
     /* Execute user registered callback handler */
-    execute_event_cb(WIFI_PROV_CRED_RECV, (void *)&wifi_cfg->sta);
+    execute_event_cb(WIFI_PROV_CRED_RECV, (void *)&wifi_cfg->sta, sizeof(wifi_cfg->sta));
     RELEASE_LOCK(prov_ctx_lock);
 
     return ESP_OK;
@@ -1230,7 +1265,7 @@ exit:
         }
         free(prov_ctx);
     } else {
-        execute_event_cb(WIFI_PROV_INIT, NULL);
+        execute_event_cb(WIFI_PROV_INIT, NULL, 0);
     }
     RELEASE_LOCK(prov_ctx_lock);
     return ret;
@@ -1322,6 +1357,7 @@ void wifi_prov_mgr_deinit(void)
     if (app_cb) {
         app_cb(app_data, WIFI_PROV_DEINIT, NULL);
     }
+    esp_event_post(WIFI_PROV_EVENT, WIFI_PROV_DEINIT, NULL, 0, portMAX_DELAY);
 }
 
 esp_err_t wifi_prov_mgr_start_provisioning(wifi_prov_security_t security, const char *pop,
@@ -1442,7 +1478,7 @@ esp_err_t wifi_prov_mgr_start_provisioning(wifi_prov_security_t security, const
     if (ret == ESP_OK) {
         prov_ctx->prov_state = WIFI_PROV_STATE_STARTED;
         /* Execute user registered callback handler */
-        execute_event_cb(WIFI_PROV_START, NULL);
+        execute_event_cb(WIFI_PROV_START, NULL, 0);
         goto exit;
     }
 
diff --git a/components/wpa_supplicant/tags b/components/wpa_supplicant/tags
deleted file mode 100644 (file)
index 781b954..0000000
+++ /dev/null
@@ -1,5454 +0,0 @@
-!_TAG_FILE_FORMAT      2       /extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED      1       /0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR   Darren Hiebert  /dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME     Exuberant Ctags //
-!_TAG_PROGRAM_URL      http://ctags.sourceforge.net    /official site/
-!_TAG_PROGRAM_VERSION  5.9~svn20110310 //
-ACCEPT_UNLESS_DENIED   src/ap/ap_config.h      /^              ACCEPT_UNLESS_DENIED = 0,$/;"   e       enum:hostapd_bss_config::__anon17
-ACK_FINISHED   src/tls/tlsv1_client_i.h        /^              SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED, ACK_FINISHED,$/;"   e       enum:tlsv1_client::__anon43
-AES_BLOCK_SIZE include/crypto/aes.h    18;"    d
-AES_H  include/crypto/aes.h    16;"    d
-AES_I_H        src/crypto/aes_i.h      16;"    d
-AES_PRIV_NR_POS        src/crypto/aes_i.h      127;"   d
-AES_PRIV_SIZE  src/crypto/aes_i.h      126;"   d
-AES_SMALL_TABLES       src/crypto/aes-internal.c       57;"    d       file:
-AES_SMALL_TABLES       src/crypto/aes_i.h      21;"    d
-AES_WRAP_H     include/crypto/aes_wrap.h       23;"    d
-ALG_AES_CMAC   src/common/defs.h       /^      ALG_AES_CMAC,$/;"       e       enum:wifi_key_alg
-ALG_CCMP       src/common/defs.h       /^      ALG_CCMP,$/;"   e       enum:wifi_key_alg
-ALG_TKIP       src/common/defs.h       /^      ALG_TKIP,$/;"   e       enum:wifi_key_alg
-ALG_WEP        src/common/defs.h       /^      ALG_WEP,$/;"    e       enum:wifi_key_alg
-ANONYMOUS_ID_LEN_MAX   src/esp_supplicant/esp_wpa_enterprise.c 937;"   d       file:
-ANS1_TAG_RELATIVE_OID  src/tls/asn1.h  24;"    d
-ANonce src/ap/wpa_auth_i.h     /^      u8 ANonce[WPA_NONCE_LEN];$/;"   m       struct:wpa_state_machine
-API_MUTEX_GIVE src/esp_supplicant/esp_wps.c    45;"    d       file:
-API_MUTEX_TAKE src/esp_supplicant/esp_wps.c    34;"    d       file:
-AP_DEAUTH_DELAY        src/ap/sta_info.h       144;"   d
-AP_DISASSOC_DELAY      src/ap/sta_info.h       143;"   d
-AP_MAX_INACTIVITY      src/ap/sta_info.h       142;"   d
-AP_MAX_INACTIVITY_AFTER_DEAUTH src/ap/sta_info.h       149;"   d
-AP_MAX_INACTIVITY_AFTER_DISASSOC       src/ap/sta_info.h       147;"   d
-AP_REJECTED_BLOCKED_STA        src/common/wpa_ctrl.h   167;"   d
-AP_REJECTED_MAX_STA    src/common/wpa_ctrl.h   166;"   d
-AP_STA_CONNECTED       src/common/wpa_ctrl.h   163;"   d
-AP_STA_DISCONNECTED    src/common/wpa_ctrl.h   164;"   d
-ASEL_CAPABILITY_ANT_INDICES_FEEDBACK_BASED_TX_AS_CAP   src/common/ieee802_11_defs.h    442;"   d
-ASEL_CAPABILITY_ANT_INDICES_FEEDBACK_CAP       src/common/ieee802_11_defs.h    444;"   d
-ASEL_CAPABILITY_ASEL_CAPABLE   src/common/ieee802_11_defs.h    440;"   d
-ASEL_CAPABILITY_EXPLICIT_CSI_FEEDBACK_BASED_TX_AS_CAP  src/common/ieee802_11_defs.h    441;"   d
-ASEL_CAPABILITY_EXPLICIT_CSI_FEEDBACK_CAP      src/common/ieee802_11_defs.h    443;"   d
-ASEL_CAPABILITY_RX_AS_CAP      src/common/ieee802_11_defs.h    445;"   d
-ASEL_CAPABILITY_TX_SOUND_PPDUS_CAP     src/common/ieee802_11_defs.h    446;"   d
-ASN1_CLASS_APPLICATION src/tls/asn1.h  41;"    d
-ASN1_CLASS_CONTEXT_SPECIFIC    src/tls/asn1.h  42;"    d
-ASN1_CLASS_PRIVATE     src/tls/asn1.h  43;"    d
-ASN1_CLASS_UNIVERSAL   src/tls/asn1.h  40;"    d
-ASN1_H src/tls/asn1.h  10;"    d
-ASN1_MAX_OID_LEN       src/tls/asn1.h  52;"    d
-ASN1_TAG_BITSTRING     src/tls/asn1.h  15;"    d
-ASN1_TAG_BMPSTRING     src/tls/asn1.h  38;"    d
-ASN1_TAG_BOOLEAN       src/tls/asn1.h  13;"    d
-ASN1_TAG_ENUMERATED    src/tls/asn1.h  22;"    d
-ASN1_TAG_EOC   src/tls/asn1.h  12;"    d
-ASN1_TAG_EXTERNAL      src/tls/asn1.h  20;"    d
-ASN1_TAG_GENERALIZEDTIME       src/tls/asn1.h  33;"    d
-ASN1_TAG_GENERALSTRING src/tls/asn1.h  36;"    d
-ASN1_TAG_GRAPHICSTRING src/tls/asn1.h  34;"    d
-ASN1_TAG_IA5STRING     src/tls/asn1.h  31;"    d
-ASN1_TAG_INTEGER       src/tls/asn1.h  14;"    d
-ASN1_TAG_NULL  src/tls/asn1.h  17;"    d
-ASN1_TAG_NUMERICSTRING src/tls/asn1.h  27;"    d
-ASN1_TAG_OBJECT_DESCRIPTOR     src/tls/asn1.h  19;"    d
-ASN1_TAG_OCTETSTRING   src/tls/asn1.h  16;"    d
-ASN1_TAG_OID   src/tls/asn1.h  18;"    d
-ASN1_TAG_PRINTABLESTRING       src/tls/asn1.h  28;"    d
-ASN1_TAG_REAL  src/tls/asn1.h  21;"    d
-ASN1_TAG_SEQUENCE      src/tls/asn1.h  25;"    d
-ASN1_TAG_SET   src/tls/asn1.h  26;"    d
-ASN1_TAG_TG1STRING     src/tls/asn1.h  29;"    d
-ASN1_TAG_UNIVERSALSTRING       src/tls/asn1.h  37;"    d
-ASN1_TAG_UTCTIME       src/tls/asn1.h  32;"    d
-ASN1_TAG_UTF8STRING    src/tls/asn1.h  23;"    d
-ASN1_TAG_VIDEOTEXSTRING        src/tls/asn1.h  30;"    d
-ASN1_TAG_VISIBLESTRING src/tls/asn1.h  35;"    d
-ASSOC_IE_LEN   src/rsn_supp/wpa.c      50;"    d       file:
-ATTR_802_1X_ENABLED    src/wps/wps_defs.h      /^      ATTR_802_1X_ENABLED = 0x1062,$/;"       e       enum:wps_attribute
-ATTR_APPLICATION_EXT   src/wps/wps_defs.h      /^      ATTR_APPLICATION_EXT = 0x1058,$/;"      e       enum:wps_attribute
-ATTR_APPSESSIONKEY     src/wps/wps_defs.h      /^      ATTR_APPSESSIONKEY = 0x1063,$/;"        e       enum:wps_attribute
-ATTR_AP_CHANNEL        src/wps/wps_defs.h      /^      ATTR_AP_CHANNEL = 0x1001,$/;"   e       enum:wps_attribute
-ATTR_AP_SETUP_LOCKED   src/wps/wps_defs.h      /^      ATTR_AP_SETUP_LOCKED = 0x1057,$/;"      e       enum:wps_attribute
-ATTR_ASSOC_STATE       src/wps/wps_defs.h      /^      ATTR_ASSOC_STATE = 0x1002,$/;"  e       enum:wps_attribute
-ATTR_AUTHENTICATOR     src/wps/wps_defs.h      /^      ATTR_AUTHENTICATOR = 0x1005,$/;"        e       enum:wps_attribute
-ATTR_AUTH_TYPE src/wps/wps_defs.h      /^      ATTR_AUTH_TYPE = 0x1003,$/;"    e       enum:wps_attribute
-ATTR_AUTH_TYPE_FLAGS   src/wps/wps_defs.h      /^      ATTR_AUTH_TYPE_FLAGS = 0x1004,$/;"      e       enum:wps_attribute
-ATTR_CONFIG_ERROR      src/wps/wps_defs.h      /^      ATTR_CONFIG_ERROR = 0x1009,$/;" e       enum:wps_attribute
-ATTR_CONFIG_METHODS    src/wps/wps_defs.h      /^      ATTR_CONFIG_METHODS = 0x1008,$/;"       e       enum:wps_attribute
-ATTR_CONFIRM_URL4      src/wps/wps_defs.h      /^      ATTR_CONFIRM_URL4 = 0x100a,$/;" e       enum:wps_attribute
-ATTR_CONFIRM_URL6      src/wps/wps_defs.h      /^      ATTR_CONFIRM_URL6 = 0x100b,$/;" e       enum:wps_attribute
-ATTR_CONN_TYPE src/wps/wps_defs.h      /^      ATTR_CONN_TYPE = 0x100c,$/;"    e       enum:wps_attribute
-ATTR_CONN_TYPE_FLAGS   src/wps/wps_defs.h      /^      ATTR_CONN_TYPE_FLAGS = 0x100d,$/;"      e       enum:wps_attribute
-ATTR_CRED      src/wps/wps_defs.h      /^      ATTR_CRED = 0x100e,$/;" e       enum:wps_attribute
-ATTR_DEV_NAME  src/wps/wps_defs.h      /^      ATTR_DEV_NAME = 0x1011,$/;"     e       enum:wps_attribute
-ATTR_DEV_PASSWORD_ID   src/wps/wps_defs.h      /^      ATTR_DEV_PASSWORD_ID = 0x1012,$/;"      e       enum:wps_attribute
-ATTR_EAP_IDENTITY      src/wps/wps_defs.h      /^      ATTR_EAP_IDENTITY = 0x104d,$/;" e       enum:wps_attribute
-ATTR_EAP_TYPE  src/wps/wps_defs.h      /^      ATTR_EAP_TYPE = 0x1059,$/;"     e       enum:wps_attribute
-ATTR_ENCR_SETTINGS     src/wps/wps_defs.h      /^      ATTR_ENCR_SETTINGS = 0x1018,$/;"        e       enum:wps_attribute
-ATTR_ENCR_TYPE src/wps/wps_defs.h      /^      ATTR_ENCR_TYPE = 0x100f,$/;"    e       enum:wps_attribute
-ATTR_ENCR_TYPE_FLAGS   src/wps/wps_defs.h      /^      ATTR_ENCR_TYPE_FLAGS = 0x1010,$/;"      e       enum:wps_attribute
-ATTR_ENROLLEE_NONCE    src/wps/wps_defs.h      /^      ATTR_ENROLLEE_NONCE = 0x101a,$/;"       e       enum:wps_attribute
-ATTR_EXTENSIBILITY_TEST        src/wps/wps_defs.h      /^      ATTR_EXTENSIBILITY_TEST = 0x10fa \/* _NOT_ defined in the spec *\/$/;"  e       enum:wps_attribute
-ATTR_E_HASH1   src/wps/wps_defs.h      /^      ATTR_E_HASH1 = 0x1014,$/;"      e       enum:wps_attribute
-ATTR_E_HASH2   src/wps/wps_defs.h      /^      ATTR_E_HASH2 = 0x1015,$/;"      e       enum:wps_attribute
-ATTR_E_SNONCE1 src/wps/wps_defs.h      /^      ATTR_E_SNONCE1 = 0x1016,$/;"    e       enum:wps_attribute
-ATTR_E_SNONCE2 src/wps/wps_defs.h      /^      ATTR_E_SNONCE2 = 0x1017,$/;"    e       enum:wps_attribute
-ATTR_FEATURE_ID        src/wps/wps_defs.h      /^      ATTR_FEATURE_ID = 0x101b,$/;"   e       enum:wps_attribute
-ATTR_IDENTITY  src/wps/wps_defs.h      /^      ATTR_IDENTITY = 0x101c,$/;"     e       enum:wps_attribute
-ATTR_IDENTITY_PROOF    src/wps/wps_defs.h      /^      ATTR_IDENTITY_PROOF = 0x101d,$/;"       e       enum:wps_attribute
-ATTR_IV        src/wps/wps_defs.h      /^      ATTR_IV = 0x1060,$/;"   e       enum:wps_attribute
-ATTR_KEY_ID    src/wps/wps_defs.h      /^      ATTR_KEY_ID = 0x101f,$/;"       e       enum:wps_attribute
-ATTR_KEY_LIFETIME      src/wps/wps_defs.h      /^      ATTR_KEY_LIFETIME = 0x1051,$/;" e       enum:wps_attribute
-ATTR_KEY_PROVIDED_AUTO src/wps/wps_defs.h      /^      ATTR_KEY_PROVIDED_AUTO = 0x1061,$/;"    e       enum:wps_attribute
-ATTR_KEY_WRAP_AUTH     src/wps/wps_defs.h      /^      ATTR_KEY_WRAP_AUTH = 0x101e,$/;"        e       enum:wps_attribute
-ATTR_MAC_ADDR  src/wps/wps_defs.h      /^      ATTR_MAC_ADDR = 0x1020,$/;"     e       enum:wps_attribute
-ATTR_MANUFACTURER      src/wps/wps_defs.h      /^      ATTR_MANUFACTURER = 0x1021,$/;" e       enum:wps_attribute
-ATTR_MODEL_NAME        src/wps/wps_defs.h      /^      ATTR_MODEL_NAME = 0x1023,$/;"   e       enum:wps_attribute
-ATTR_MODEL_NUMBER      src/wps/wps_defs.h      /^      ATTR_MODEL_NUMBER = 0x1024,$/;" e       enum:wps_attribute
-ATTR_MSG_COUNTER       src/wps/wps_defs.h      /^      ATTR_MSG_COUNTER = 0x104e,$/;"  e       enum:wps_attribute
-ATTR_MSG_TYPE  src/wps/wps_defs.h      /^      ATTR_MSG_TYPE = 0x1022,$/;"     e       enum:wps_attribute
-ATTR_NETWORK_INDEX     src/wps/wps_defs.h      /^      ATTR_NETWORK_INDEX = 0x1026,$/;"        e       enum:wps_attribute
-ATTR_NETWORK_KEY       src/wps/wps_defs.h      /^      ATTR_NETWORK_KEY = 0x1027,$/;"  e       enum:wps_attribute
-ATTR_NETWORK_KEY_INDEX src/wps/wps_defs.h      /^      ATTR_NETWORK_KEY_INDEX = 0x1028,$/;"    e       enum:wps_attribute
-ATTR_NEW_DEVICE_NAME   src/wps/wps_defs.h      /^      ATTR_NEW_DEVICE_NAME = 0x1029,$/;"      e       enum:wps_attribute
-ATTR_NEW_PASSWORD      src/wps/wps_defs.h      /^      ATTR_NEW_PASSWORD = 0x102a,$/;" e       enum:wps_attribute
-ATTR_OOB_DEVICE_PASSWORD       src/wps/wps_defs.h      /^      ATTR_OOB_DEVICE_PASSWORD = 0x102c,$/;"  e       enum:wps_attribute
-ATTR_OS_VERSION        src/wps/wps_defs.h      /^      ATTR_OS_VERSION = 0x102d,$/;"   e       enum:wps_attribute
-ATTR_PERMITTED_CFG_METHODS     src/wps/wps_defs.h      /^      ATTR_PERMITTED_CFG_METHODS = 0x1052,$/;"        e       enum:wps_attribute
-ATTR_PORTABLE_DEV      src/wps/wps_defs.h      /^      ATTR_PORTABLE_DEV = 0x1056,$/;" e       enum:wps_attribute
-ATTR_POWER_LEVEL       src/wps/wps_defs.h      /^      ATTR_POWER_LEVEL = 0x102f,$/;"  e       enum:wps_attribute
-ATTR_PRIMARY_DEV_TYPE  src/wps/wps_defs.h      /^      ATTR_PRIMARY_DEV_TYPE = 0x1054,$/;"     e       enum:wps_attribute
-ATTR_PSK_CURRENT       src/wps/wps_defs.h      /^      ATTR_PSK_CURRENT = 0x1030,$/;"  e       enum:wps_attribute
-ATTR_PSK_MAX   src/wps/wps_defs.h      /^      ATTR_PSK_MAX = 0x1031,$/;"      e       enum:wps_attribute
-ATTR_PUBKEY_HASH       src/wps/wps_defs.h      /^      ATTR_PUBKEY_HASH = 0x104f,$/;"  e       enum:wps_attribute
-ATTR_PUBLIC_KEY        src/wps/wps_defs.h      /^      ATTR_PUBLIC_KEY = 0x1032,$/;"   e       enum:wps_attribute
-ATTR_RADIO_ENABLE      src/wps/wps_defs.h      /^      ATTR_RADIO_ENABLE = 0x1033,$/;" e       enum:wps_attribute
-ATTR_REBOOT    src/wps/wps_defs.h      /^      ATTR_REBOOT = 0x1034,$/;"       e       enum:wps_attribute
-ATTR_REGISTRAR_CURRENT src/wps/wps_defs.h      /^      ATTR_REGISTRAR_CURRENT = 0x1035,$/;"    e       enum:wps_attribute
-ATTR_REGISTRAR_ESTABLISHED     src/wps/wps_defs.h      /^      ATTR_REGISTRAR_ESTABLISHED = 0x1036,$/;"        e       enum:wps_attribute
-ATTR_REGISTRAR_LIST    src/wps/wps_defs.h      /^      ATTR_REGISTRAR_LIST = 0x1037,$/;"       e       enum:wps_attribute
-ATTR_REGISTRAR_MAX     src/wps/wps_defs.h      /^      ATTR_REGISTRAR_MAX = 0x1038,$/;"        e       enum:wps_attribute
-ATTR_REGISTRAR_NONCE   src/wps/wps_defs.h      /^      ATTR_REGISTRAR_NONCE = 0x1039,$/;"      e       enum:wps_attribute
-ATTR_REKEY_KEY src/wps/wps_defs.h      /^      ATTR_REKEY_KEY = 0x1050,$/;"    e       enum:wps_attribute
-ATTR_REQUESTED_DEV_TYPE        src/wps/wps_defs.h      /^      ATTR_REQUESTED_DEV_TYPE = 0x106a,$/;"   e       enum:wps_attribute
-ATTR_REQUEST_TYPE      src/wps/wps_defs.h      /^      ATTR_REQUEST_TYPE = 0x103a,$/;" e       enum:wps_attribute
-ATTR_RESPONSE_TYPE     src/wps/wps_defs.h      /^      ATTR_RESPONSE_TYPE = 0x103b,$/;"        e       enum:wps_attribute
-ATTR_RF_BANDS  src/wps/wps_defs.h      /^      ATTR_RF_BANDS = 0x103c,$/;"     e       enum:wps_attribute
-ATTR_R_HASH1   src/wps/wps_defs.h      /^      ATTR_R_HASH1 = 0x103d,$/;"      e       enum:wps_attribute
-ATTR_R_HASH2   src/wps/wps_defs.h      /^      ATTR_R_HASH2 = 0x103e,$/;"      e       enum:wps_attribute
-ATTR_R_SNONCE1 src/wps/wps_defs.h      /^      ATTR_R_SNONCE1 = 0x103f,$/;"    e       enum:wps_attribute
-ATTR_R_SNONCE2 src/wps/wps_defs.h      /^      ATTR_R_SNONCE2 = 0x1040,$/;"    e       enum:wps_attribute
-ATTR_SECONDARY_DEV_TYPE_LIST   src/wps/wps_defs.h      /^      ATTR_SECONDARY_DEV_TYPE_LIST = 0x1055,$/;"      e       enum:wps_attribute
-ATTR_SELECTED_REGISTRAR        src/wps/wps_defs.h      /^      ATTR_SELECTED_REGISTRAR = 0x1041,$/;"   e       enum:wps_attribute
-ATTR_SELECTED_REGISTRAR_CONFIG_METHODS src/wps/wps_defs.h      /^      ATTR_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053,$/;"    e       enum:wps_attribute
-ATTR_SERIAL_NUMBER     src/wps/wps_defs.h      /^      ATTR_SERIAL_NUMBER = 0x1042,$/;"        e       enum:wps_attribute
-ATTR_SSID      src/wps/wps_defs.h      /^      ATTR_SSID = 0x1045,$/;" e       enum:wps_attribute
-ATTR_TOTAL_NETWORKS    src/wps/wps_defs.h      /^      ATTR_TOTAL_NETWORKS = 0x1046,$/;"       e       enum:wps_attribute
-ATTR_UUID_E    src/wps/wps_defs.h      /^      ATTR_UUID_E = 0x1047,$/;"       e       enum:wps_attribute
-ATTR_UUID_R    src/wps/wps_defs.h      /^      ATTR_UUID_R = 0x1048,$/;"       e       enum:wps_attribute
-ATTR_VENDOR_EXT        src/wps/wps_defs.h      /^      ATTR_VENDOR_EXT = 0x1049,$/;"   e       enum:wps_attribute
-ATTR_VERSION   src/wps/wps_defs.h      /^      ATTR_VERSION = 0x104a,$/;"      e       enum:wps_attribute
-ATTR_WEPTRANSMITKEY    src/wps/wps_defs.h      /^      ATTR_WEPTRANSMITKEY = 0x1064,$/;"       e       enum:wps_attribute
-ATTR_WPS_STATE src/wps/wps_defs.h      /^      ATTR_WPS_STATE = 0x1044,$/;"    e       enum:wps_attribute
-ATTR_X509_CERT src/wps/wps_defs.h      /^      ATTR_X509_CERT = 0x104c,$/;"    e       enum:wps_attribute
-ATTR_X509_CERT_REQ     src/wps/wps_defs.h      /^      ATTR_X509_CERT_REQ = 0x104b,$/;"        e       enum:wps_attribute
-AVP_FLAGS_MANDATORY    src/eap_peer/eap_ttls.h 29;"    d
-AVP_FLAGS_VENDOR       src/eap_peer/eap_ttls.h 28;"    d
-AVP_PAD        src/eap_peer/eap_ttls.h 31;"    d
-AuthenticationRequest  src/ap/wpa_auth_i.h     /^      Boolean AuthenticationRequest;$/;"      m       struct:wpa_state_machine
-BASE64_H       src/utils/base64.h      16;"    d
-BIGNUM_H       src/crypto/bignum.h     16;"    d
-BIGNUM_H       src/tls/bignum.h        16;"    d
-BIG_ENDIAN     port/include/endian.h   37;"    d
-BIT    include/utils/common.h  264;"   d
-BLOB_NAME_LEN  src/eap_peer/eap_i.h    98;"    d
-BLOB_NUM       src/eap_peer/eap_i.h    99;"    d
-BN_FAST_MP_MONTGOMERY_REDUCE_C src/crypto/libtommath.h 42;"    d
-BN_FAST_MP_MONTGOMERY_REDUCE_C src/tls/libtommath.h    44;"    d
-BN_FAST_S_MP_SQR_C     src/crypto/libtommath.h 47;"    d
-BN_FAST_S_MP_SQR_C     src/tls/libtommath.h    49;"    d
-BN_MP_ABS_C    src/crypto/libtommath.h 54;"    d
-BN_MP_ABS_C    src/tls/libtommath.h    56;"    d
-BN_MP_CLEAR_MULTI_C    src/crypto/libtommath.h 53;"    d
-BN_MP_CLEAR_MULTI_C    src/tls/libtommath.h    55;"    d
-BN_MP_DIV_SMALL        src/crypto/libtommath.h 51;"    d
-BN_MP_DIV_SMALL        src/tls/libtommath.h    53;"    d
-BN_MP_EXPTMOD_FAST_C   src/crypto/libtommath.h 40;"    d
-BN_MP_EXPTMOD_FAST_C   src/tls/libtommath.h    42;"    d
-BN_MP_INIT_MULTI_C     src/crypto/libtommath.h 52;"    d
-BN_MP_INIT_MULTI_C     src/tls/libtommath.h    54;"    d
-BN_MP_INVMOD_C src/crypto/libtommath.h 25;"    d
-BN_MP_INVMOD_C src/tls/libtommath.h    27;"    d
-BN_MP_INVMOD_SLOW_C    src/crypto/libtommath.h 29;"    d
-BN_MP_INVMOD_SLOW_C    src/tls/libtommath.h    31;"    d
-BN_MP_MONTGOMERY_CALC_NORMALIZATION_C  src/crypto/libtommath.h 43;"    d
-BN_MP_MONTGOMERY_CALC_NORMALIZATION_C  src/tls/libtommath.h    45;"    d
-BN_MP_MONTGOMERY_SETUP_C       src/crypto/libtommath.h 41;"    d
-BN_MP_MONTGOMERY_SETUP_C       src/tls/libtommath.h    43;"    d
-BN_MP_MUL_2_C  src/crypto/libtommath.h 44;"    d
-BN_MP_MUL_2_C  src/tls/libtommath.h    46;"    d
-BN_MP_MUL_D_C  src/crypto/libtommath.h 37;"    d
-BN_MP_MUL_D_C  src/tls/libtommath.h    39;"    d
-BN_S_MP_EXPTMOD_C      src/crypto/libtommath.h 26;"    d
-BN_S_MP_EXPTMOD_C      src/tls/libtommath.h    28;"    d
-BN_S_MP_MUL_DIGS_C     src/crypto/libtommath.h 28;"    d
-BN_S_MP_MUL_DIGS_C     src/tls/libtommath.h    30;"    d
-BN_S_MP_MUL_HIGH_DIGS_C        src/crypto/libtommath.h 31;"    d
-BN_S_MP_MUL_HIGH_DIGS_C        src/tls/libtommath.h    33;"    d
-BN_S_MP_SQR_C  src/crypto/libtommath.h 30;"    d
-BN_S_MP_SQR_C  src/tls/libtommath.h    32;"    d
-BYTESWAP_H     port/include/byteswap.h 6;"     d
-BYTES_TO_T_UINT_2      test/test_crypto.c      295;"   d       file:
-BYTES_TO_T_UINT_2      test/test_crypto.c      317;"   d       file:
-BYTES_TO_T_UINT_4      test/test_crypto.c      289;"   d       file:
-BYTES_TO_T_UINT_4      test/test_crypto.c      314;"   d       file:
-BYTES_TO_T_UINT_8      test/test_crypto.c      298;"   d       file:
-BYTES_TO_T_UINT_8      test/test_crypto.c      304;"   d       file:
-BYTE_ORDER     port/include/endian.h   45;"    d
-BYTE_ORDER     port/include/endian.h   47;"    d
-Boolean        src/common/defs.h       /^typedef enum { FALSE = 0, TRUE = 1 } Boolean;$/;"     t       typeref:enum:__anon87
-CA_CERT_NAME   src/eap_peer/eap_i.h    96;"    d
-CERTIFICATE_VERIFY     src/tls/tlsv1_server_i.h        /^              CERTIFICATE_VERIFY, CHANGE_CIPHER_SPEC, CLIENT_FINISHED,$/;"    e       enum:tlsv1_server::__anon39
-CHANGE_CIPHER_SPEC     src/tls/tlsv1_client_i.h        /^              SERVER_HELLO_DONE, CLIENT_KEY_EXCHANGE, CHANGE_CIPHER_SPEC,$/;" e       enum:tlsv1_client::__anon43
-CHANGE_CIPHER_SPEC     src/tls/tlsv1_server_i.h        /^              CERTIFICATE_VERIFY, CHANGE_CIPHER_SPEC, CLIENT_FINISHED,$/;"    e       enum:tlsv1_server::__anon39
-CHAR_BIT       src/crypto/libtommath.h 22;"    d
-CHAR_BIT       src/tls/libtommath.h    24;"    d
-CIPHER_CCMP    src/common/defs.h       /^      CIPHER_CCMP,$/;"        e       enum:wpa_cipher
-CIPHER_NONE    src/common/defs.h       /^      CIPHER_NONE,$/;"        e       enum:wpa_cipher
-CIPHER_TKIP    src/common/defs.h       /^      CIPHER_TKIP,$/;"        e       enum:wpa_cipher
-CIPHER_WEP104  src/common/defs.h       /^      CIPHER_WEP104$/;"       e       enum:wpa_cipher
-CIPHER_WEP40   src/common/defs.h       /^      CIPHER_WEP40,$/;"       e       enum:wpa_cipher
-CLIENT_CERTIFICATE     src/tls/tlsv1_server_i.h        /^              SERVER_HELLO_DONE, CLIENT_CERTIFICATE, CLIENT_KEY_EXCHANGE,$/;" e       enum:tlsv1_server::__anon39
-CLIENT_CERT_NAME       src/eap_peer/eap_i.h    95;"    d
-CLIENT_FINISHED        src/tls/tlsv1_server_i.h        /^              CERTIFICATE_VERIFY, CHANGE_CIPHER_SPEC, CLIENT_FINISHED,$/;"    e       enum:tlsv1_server::__anon39
-CLIENT_HELLO   src/tls/tlsv1_client_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_client::__anon43
-CLIENT_HELLO   src/tls/tlsv1_server_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_server::__anon39
-CLIENT_KEY_EXCHANGE    src/tls/tlsv1_client_i.h        /^              SERVER_HELLO_DONE, CLIENT_KEY_EXCHANGE, CHANGE_CIPHER_SPEC,$/;" e       enum:tlsv1_client::__anon43
-CLIENT_KEY_EXCHANGE    src/tls/tlsv1_server_i.h        /^              SERVER_HELLO_DONE, CLIENT_CERTIFICATE, CLIENT_KEY_EXCHANGE,$/;" e       enum:tlsv1_server::__anon39
-COMMON_H       include/utils/common.h  16;"    d
-COMPONENT_ADD_INCLUDEDIRS      component.mk    /^COMPONENT_ADD_INCLUDEDIRS := include port\/include include\/esp_supplicant$/;"        m
-COMPONENT_ADD_LDFLAGS  test/component.mk       /^COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive$/;"    m
-COMPONENT_PRIV_INCLUDEDIRS     component.mk    /^COMPONENT_PRIV_INCLUDEDIRS := src$/;" m
-COMPONENT_SRCDIRS      component.mk    /^COMPONENT_SRCDIRS := port src\/ap src\/common src\/crypto src\/eap_peer src\/fast_crypto src\/rsn_supp src\/tls src\/utils src\/esp_supplicant src\/wps$/;"   m
-CONFIG_INTERNAL_LIBTOMMATH     src/crypto/bignum.c     21;"    d       file:
-CONFIG_INTERNAL_LIBTOMMATH     src/tls/bignum.c        21;"    d       file:
-CONFIG_NO_RANDOM_POOL  include/crypto/random.h 18;"    d
-CONFIG_TLS_INTERNAL_CLIENT     src/tls/tls_internal.c  22;"    d       file:
-CONFIG_WPS_STRICT      src/wps/wps_defs.h      28;"    d
-CRYPTO_CIPHER_ALG_3DES include/crypto/crypto.h /^      CRYPTO_CIPHER_NULL = 0, CRYPTO_CIPHER_ALG_AES, CRYPTO_CIPHER_ALG_3DES,$/;"      e       enum:crypto_cipher_alg
-CRYPTO_CIPHER_ALG_AES  include/crypto/crypto.h /^      CRYPTO_CIPHER_NULL = 0, CRYPTO_CIPHER_ALG_AES, CRYPTO_CIPHER_ALG_3DES,$/;"      e       enum:crypto_cipher_alg
-CRYPTO_CIPHER_ALG_DES  include/crypto/crypto.h /^      CRYPTO_CIPHER_ALG_DES, CRYPTO_CIPHER_ALG_RC2, CRYPTO_CIPHER_ALG_RC4$/;" e       enum:crypto_cipher_alg
-CRYPTO_CIPHER_ALG_RC2  include/crypto/crypto.h /^      CRYPTO_CIPHER_ALG_DES, CRYPTO_CIPHER_ALG_RC2, CRYPTO_CIPHER_ALG_RC4$/;" e       enum:crypto_cipher_alg
-CRYPTO_CIPHER_ALG_RC4  include/crypto/crypto.h /^      CRYPTO_CIPHER_ALG_DES, CRYPTO_CIPHER_ALG_RC2, CRYPTO_CIPHER_ALG_RC4$/;" e       enum:crypto_cipher_alg
-CRYPTO_CIPHER_NULL     include/crypto/crypto.h /^      CRYPTO_CIPHER_NULL = 0, CRYPTO_CIPHER_ALG_AES, CRYPTO_CIPHER_ALG_3DES,$/;"      e       enum:crypto_cipher_alg
-CRYPTO_H       include/crypto/crypto.h 28;"    d
-CRYPTO_HASH_ALG_HMAC_MD5       include/crypto/crypto.h /^        CRYPTO_HASH_ALG_HMAC_MD5, CRYPTO_HASH_ALG_HMAC_SHA1,$/;"      e       enum:crypto_hash_alg
-CRYPTO_HASH_ALG_HMAC_SHA1      include/crypto/crypto.h /^        CRYPTO_HASH_ALG_HMAC_MD5, CRYPTO_HASH_ALG_HMAC_SHA1,$/;"      e       enum:crypto_hash_alg
-CRYPTO_HASH_ALG_HMAC_SHA256    include/crypto/crypto.h /^        CRYPTO_HASH_ALG_SHA256, CRYPTO_HASH_ALG_HMAC_SHA256$/;"       e       enum:crypto_hash_alg
-CRYPTO_HASH_ALG_MD5    include/crypto/crypto.h /^        CRYPTO_HASH_ALG_MD5, CRYPTO_HASH_ALG_SHA1,$/;"        e       enum:crypto_hash_alg
-CRYPTO_HASH_ALG_SHA1   include/crypto/crypto.h /^        CRYPTO_HASH_ALG_MD5, CRYPTO_HASH_ALG_SHA1,$/;"        e       enum:crypto_hash_alg
-CRYPTO_HASH_ALG_SHA256 include/crypto/crypto.h /^        CRYPTO_HASH_ALG_SHA256, CRYPTO_HASH_ALG_HMAC_SHA256$/;"       e       enum:crypto_hash_alg
-Ch     src/crypto/sha256-internal.c    87;"    d       file:
-Counter        src/ap/wpa_auth_i.h     /^      u8 Counter[WPA_NONCE_LEN];$/;"  m       struct:wpa_group
-DATA_MUTEX_GIVE        src/esp_supplicant/esp_wps.c    47;"    d       file:
-DATA_MUTEX_TAKE        src/esp_supplicant/esp_wps.c    46;"    d       file:
-DEBUG_PRINT    include/utils/wpa_debug.h       61;"    d
-DECISION_COND_SUCC     src/eap_peer/eap_i.h    /^      DECISION_FAIL, DECISION_COND_SUCC, DECISION_UNCOND_SUCC$/;"     e       enum:__anon1
-DECISION_FAIL  src/eap_peer/eap_i.h    /^      DECISION_FAIL, DECISION_COND_SUCC, DECISION_UNCOND_SUCC$/;"     e       enum:__anon1
-DECISION_UNCOND_SUCC   src/eap_peer/eap_i.h    /^      DECISION_FAIL, DECISION_COND_SUCC, DECISION_UNCOND_SUCC$/;"     e       enum:__anon1
-DEFINE_DL_LIST src/utils/list.h        100;"   d
-DEFS_H src/common/defs.h       16;"    d
-DENY_UNLESS_ACCEPTED   src/ap/ap_config.h      /^              DENY_UNLESS_ACCEPTED = 1,$/;"   e       enum:hostapd_bss_config::__anon17
-DES_I_H        src/crypto/des_i.h      10;"    d
-DEV_PW_DEFAULT src/wps/wps_defs.h      /^      DEV_PW_DEFAULT = 0x0000,$/;"    e       enum:wps_dev_password_id
-DEV_PW_MACHINE_SPECIFIED       src/wps/wps_defs.h      /^      DEV_PW_MACHINE_SPECIFIED = 0x0002,$/;"  e       enum:wps_dev_password_id
-DEV_PW_PUSHBUTTON      src/wps/wps_defs.h      /^      DEV_PW_PUSHBUTTON = 0x0004,$/;" e       enum:wps_dev_password_id
-DEV_PW_REGISTRAR_SPECIFIED     src/wps/wps_defs.h      /^      DEV_PW_REGISTRAR_SPECIFIED = 0x0005$/;" e       enum:wps_dev_password_id
-DEV_PW_REKEY   src/wps/wps_defs.h      /^      DEV_PW_REKEY = 0x0003,$/;"      e       enum:wps_dev_password_id
-DEV_PW_USER_SPECIFIED  src/wps/wps_defs.h      /^      DEV_PW_USER_SPECIFIED = 0x0001,$/;"     e       enum:wps_dev_password_id
-DH_GROUP       src/crypto/dh_groups.c  518;"   d       file:
-DH_GROUP5_H    include/crypto/dh_group5.h      16;"    d
-DH_GROUPS_H    include/crypto/dh_groups.h      16;"    d
-DIGIT_BIT      src/crypto/libtommath.h 76;"    d
-DIGIT_BIT      src/tls/libtommath.h    78;"    d
-DeauthenticationRequest        src/ap/wpa_auth_i.h     /^      Boolean DeauthenticationRequest;$/;"    m       struct:wpa_state_machine
-Disconnect     src/ap/wpa_auth_i.h     /^      Boolean Disconnect;$/;" m       struct:wpa_state_machine
-EAPOLKeyPairwise       src/ap/wpa_auth_i.h     /^      Boolean EAPOLKeyPairwise;$/;"   m       struct:wpa_state_machine
-EAPOLKeyReceived       src/ap/wpa_auth_i.h     /^      Boolean EAPOLKeyReceived;$/;"   m       struct:wpa_state_machine
-EAPOLKeyRequest        src/ap/wpa_auth_i.h     /^      Boolean EAPOLKeyRequest;$/;"    m       struct:wpa_state_machine
-EAPOL_COMMON_H src/common/eapol_common.h       16;"    d
-EAPOL_KEY_TYPE_RC4     src/common/eapol_common.h       /^enum { EAPOL_KEY_TYPE_RC4 = 1, EAPOL_KEY_TYPE_RSN = 2,$/;"    e       enum:__anon86
-EAPOL_KEY_TYPE_RSN     src/common/eapol_common.h       /^enum { EAPOL_KEY_TYPE_RC4 = 1, EAPOL_KEY_TYPE_RSN = 2,$/;"    e       enum:__anon86
-EAPOL_KEY_TYPE_WPA     src/common/eapol_common.h       /^       EAPOL_KEY_TYPE_WPA = 254 };$/;"        e       enum:__anon86
-EAPOL_VERSION  src/common/eapol_common.h       28;"    d
-EAP_CODE_FAILURE       src/eap_peer/eap_defs.h /^       EAP_CODE_FAILURE = 4 };$/;"    e       enum:__anon4
-EAP_CODE_REQUEST       src/eap_peer/eap_defs.h /^enum { EAP_CODE_REQUEST = 1, EAP_CODE_RESPONSE = 2, EAP_CODE_SUCCESS = 3,$/;" e       enum:__anon4
-EAP_CODE_RESPONSE      src/eap_peer/eap_defs.h /^enum { EAP_CODE_REQUEST = 1, EAP_CODE_RESPONSE = 2, EAP_CODE_SUCCESS = 3,$/;" e       enum:__anon4
-EAP_CODE_SUCCESS       src/eap_peer/eap_defs.h /^enum { EAP_CODE_REQUEST = 1, EAP_CODE_RESPONSE = 2, EAP_CODE_SUCCESS = 3,$/;" e       enum:__anon4
-EAP_COMMON_H   src/eap_peer/eap_common.h       10;"    d
-EAP_CONFIG_FLAGS_EXT_PASSWORD  src/eap_peer/eap_config.h       196;"   d
-EAP_CONFIG_FLAGS_PASSWORD_NTHASH       src/eap_peer/eap_config.h       195;"   d
-EAP_CONFIG_H   src/eap_peer/eap_config.h       10;"    d
-EAP_DEFS_H     src/eap_peer/eap_defs.h 10;"    d
-EAP_EMSK_LEN   src/eap_peer/eap_defs.h 90;"    d
-EAP_H  src/eap_peer/eap.h      10;"    d
-EAP_I_H        src/eap_peer/eap_i.h    10;"    d
-EAP_METHODS_H  src/eap_peer/eap_methods.h      10;"    d
-EAP_MSK_LEN    src/eap_peer/eap_defs.h 89;"    d
-EAP_PEAP_COMMON_H      src/eap_peer/eap_peap_common.h  10;"    d
-EAP_PEAP_VERSION       src/eap_peer/eap_peap.c 28;"    d       file:
-EAP_TLS_COMMON_H       src/eap_peer/eap_tls_common.h   10;"    d
-EAP_TLS_FLAGS_LENGTH_INCLUDED  src/eap_peer/eap_tls_common.h   80;"    d
-EAP_TLS_FLAGS_MORE_FRAGMENTS   src/eap_peer/eap_tls_common.h   81;"    d
-EAP_TLS_FLAGS_START    src/eap_peer/eap_tls_common.h   82;"    d
-EAP_TLS_H      src/eap_peer/eap_tls.h  10;"    d
-EAP_TLS_KEY_LEN        src/eap_peer/eap_tls_common.h   86;"    d
-EAP_TLS_VERSION_MASK   src/eap_peer/eap_tls_common.h   83;"    d
-EAP_TLV_ACTION_NEGOTIATE_EAP   src/eap_peer/eap_tlv_common.h   110;"   d
-EAP_TLV_ACTION_PROCESS_TLV     src/eap_peer/eap_tlv_common.h   109;"   d
-EAP_TLV_CALLED_STATION_ID_TLV  src/eap_peer/eap_tlv_common.h   24;"    d
-EAP_TLV_CALLING_STATION_ID_TLV src/eap_peer/eap_tlv_common.h   23;"    d
-EAP_TLV_COMMON_H       src/eap_peer/eap_tlv_common.h   10;"    d
-EAP_TLV_CONNECTION_BINDING_TLV src/eap_peer/eap_tlv_common.h   16;"    d
-EAP_TLV_CRYPTO_BINDING_SUBTYPE_REQUEST src/eap_peer/eap_tlv_common.h   106;"   d
-EAP_TLV_CRYPTO_BINDING_SUBTYPE_RESPONSE        src/eap_peer/eap_tlv_common.h   107;"   d
-EAP_TLV_CRYPTO_BINDING_TLV     src/eap_peer/eap_tlv_common.h   22;"    d
-EAP_TLV_EAP_PAYLOAD_TLV        src/eap_peer/eap_tlv_common.h   19;"    d
-EAP_TLV_ERROR_CODE_TLV src/eap_peer/eap_tlv_common.h   15;"    d
-EAP_TLV_IDENTITY_TYPE_TLV      src/eap_peer/eap_tlv_common.h   27;"    d
-EAP_TLV_INTERMEDIATE_RESULT_TLV        src/eap_peer/eap_tlv_common.h   20;"    d
-EAP_TLV_NAK_TLV        src/eap_peer/eap_tlv_common.h   14;"    d
-EAP_TLV_NAS_PORT_TYPE_TLV      src/eap_peer/eap_tlv_common.h   25;"    d
-EAP_TLV_PAC_TLV        src/eap_peer/eap_tlv_common.h   21;"    d
-EAP_TLV_PKCS7_TLV      src/eap_peer/eap_tlv_common.h   30;"    d
-EAP_TLV_REQUEST_ACTION_TLV     src/eap_peer/eap_tlv_common.h   29;"    d
-EAP_TLV_RESULT_FAILURE src/eap_peer/eap_tlv_common.h   33;"    d
-EAP_TLV_RESULT_SUCCESS src/eap_peer/eap_tlv_common.h   32;"    d
-EAP_TLV_RESULT_TLV     src/eap_peer/eap_tlv_common.h   13;"    d
-EAP_TLV_SERVER_IDENTIFIER_TLV  src/eap_peer/eap_tlv_common.h   26;"    d
-EAP_TLV_SERVER_TRUSTED_ROOT_TLV        src/eap_peer/eap_tlv_common.h   28;"    d
-EAP_TLV_TYPE_MANDATORY src/eap_peer/eap_tlv_common.h   35;"    d
-EAP_TLV_TYPE_MASK      src/eap_peer/eap_tlv_common.h   36;"    d
-EAP_TLV_URI_TLV        src/eap_peer/eap_tlv_common.h   18;"    d
-EAP_TLV_VENDOR_SPECIFIC_TLV    src/eap_peer/eap_tlv_common.h   17;"    d
-EAP_TTLS_CHAP_CHALLENGE_LEN    src/eap_peer/eap_ttls.h 62;"    d
-EAP_TTLS_CHAP_PASSWORD_LEN     src/eap_peer/eap_ttls.h 63;"    d
-EAP_TTLS_H     src/eap_peer/eap_ttls.h 10;"    d
-EAP_TTLS_MSCHAPV2_CHALLENGE_LEN        src/eap_peer/eap_ttls.h 58;"    d
-EAP_TTLS_MSCHAPV2_RESPONSE_LEN src/eap_peer/eap_ttls.h 59;"    d
-EAP_TTLS_MSCHAP_CHALLENGE_LEN  src/eap_peer/eap_ttls.h 60;"    d
-EAP_TTLS_MSCHAP_RESPONSE_LEN   src/eap_peer/eap_ttls.h 61;"    d
-EAP_TTLS_PHASE2_CHAP   src/eap_peer/eap_ttls.c /^              EAP_TTLS_PHASE2_CHAP$/;"        e       enum:eap_ttls_data::phase2_types        file:
-EAP_TTLS_PHASE2_EAP    src/eap_peer/eap_ttls.c /^              EAP_TTLS_PHASE2_EAP,$/;"        e       enum:eap_ttls_data::phase2_types        file:
-EAP_TTLS_PHASE2_MSCHAP src/eap_peer/eap_ttls.c /^              EAP_TTLS_PHASE2_MSCHAP,$/;"     e       enum:eap_ttls_data::phase2_types        file:
-EAP_TTLS_PHASE2_MSCHAPV2       src/eap_peer/eap_ttls.c /^              EAP_TTLS_PHASE2_MSCHAPV2,$/;"   e       enum:eap_ttls_data::phase2_types        file:
-EAP_TTLS_PHASE2_PAP    src/eap_peer/eap_ttls.c /^              EAP_TTLS_PHASE2_PAP,$/;"        e       enum:eap_ttls_data::phase2_types        file:
-EAP_TTLS_VERSION       src/eap_peer/eap_ttls.c 28;"    d       file:
-EAP_TYPE_AKA   src/eap_peer/eap_defs.h /^      EAP_TYPE_AKA = 23 \/* RFC 4187 *\/,$/;" e       enum:__anon5
-EAP_TYPE_AKA_PRIME     src/eap_peer/eap_defs.h /^      EAP_TYPE_AKA_PRIME = 50 \/* RFC 5448 *\/,$/;"   e       enum:__anon5
-EAP_TYPE_EKE   src/eap_peer/eap_defs.h /^      EAP_TYPE_EKE = 53 \/* RFC 6124 *\/,$/;" e       enum:__anon5
-EAP_TYPE_EXPANDED      src/eap_peer/eap_defs.h /^      EAP_TYPE_EXPANDED = 254 \/* RFC 3748 *\/$/;"    e       enum:__anon5
-EAP_TYPE_FAST  src/eap_peer/eap_defs.h /^      EAP_TYPE_FAST = 43 \/* RFC 4851 *\/,$/;"        e       enum:__anon5
-EAP_TYPE_GPSK  src/eap_peer/eap_defs.h /^      EAP_TYPE_GPSK = 51 \/* RFC 5433 *\/,$/;"        e       enum:__anon5
-EAP_TYPE_GTC   src/eap_peer/eap_defs.h /^      EAP_TYPE_GTC = 6, \/* RFC 3748 *\/$/;"  e       enum:__anon5
-EAP_TYPE_IDENTITY      src/eap_peer/eap_defs.h /^      EAP_TYPE_IDENTITY = 1 \/* RFC 3748 *\/,$/;"     e       enum:__anon5
-EAP_TYPE_IKEV2 src/eap_peer/eap_defs.h /^      EAP_TYPE_IKEV2 = 49 \/* RFC 5106 *\/,$/;"       e       enum:__anon5
-EAP_TYPE_LEAP  src/eap_peer/eap_defs.h /^      EAP_TYPE_LEAP = 17 \/* Cisco proprietary *\/,$/;"       e       enum:__anon5
-EAP_TYPE_MD5   src/eap_peer/eap_defs.h /^      EAP_TYPE_MD5 = 4, \/* RFC 3748 *\/$/;"  e       enum:__anon5
-EAP_TYPE_MSCHAPV2      src/eap_peer/eap_defs.h /^      EAP_TYPE_MSCHAPV2 = 26 \/* draft-kamath-pppext-eap-mschapv2-00.txt *\/,$/;"     e       enum:__anon5
-EAP_TYPE_NAK   src/eap_peer/eap_defs.h /^      EAP_TYPE_NAK = 3 \/* Response only, RFC 3748 *\/,$/;"   e       enum:__anon5
-EAP_TYPE_NONE  src/eap_peer/eap_defs.h /^      EAP_TYPE_NONE = 0,$/;"  e       enum:__anon5
-EAP_TYPE_NOTIFICATION  src/eap_peer/eap_defs.h /^      EAP_TYPE_NOTIFICATION = 2 \/* RFC 3748 *\/,$/;" e       enum:__anon5
-EAP_TYPE_OTP   src/eap_peer/eap_defs.h /^      EAP_TYPE_OTP = 5 \/* RFC 3748 *\/,$/;"  e       enum:__anon5
-EAP_TYPE_PAX   src/eap_peer/eap_defs.h /^      EAP_TYPE_PAX = 46 \/* RFC 4746 *\/,$/;" e       enum:__anon5
-EAP_TYPE_PEAP  src/eap_peer/eap_defs.h /^      EAP_TYPE_PEAP = 25 \/* draft-josefsson-pppext-eap-tls-eap-06.txt *\/,$/;"       e       enum:__anon5
-EAP_TYPE_PSK   src/eap_peer/eap_defs.h /^      EAP_TYPE_PSK = 47 \/* RFC 4764 *\/,$/;" e       enum:__anon5
-EAP_TYPE_PWD   src/eap_peer/eap_defs.h /^      EAP_TYPE_PWD = 52 \/* RFC 5931 *\/,$/;" e       enum:__anon5
-EAP_TYPE_SAKE  src/eap_peer/eap_defs.h /^      EAP_TYPE_SAKE = 48 \/* RFC 4763 *\/,$/;"        e       enum:__anon5
-EAP_TYPE_SIM   src/eap_peer/eap_defs.h /^      EAP_TYPE_SIM = 18 \/* RFC 4186 *\/,$/;" e       enum:__anon5
-EAP_TYPE_TLS   src/eap_peer/eap_defs.h /^      EAP_TYPE_TLS = 13 \/* RFC 2716 *\/,$/;" e       enum:__anon5
-EAP_TYPE_TLV   src/eap_peer/eap_defs.h /^      EAP_TYPE_TLV = 33 \/* draft-josefsson-pppext-eap-tls-eap-07.txt *\/,$/;"        e       enum:__anon5
-EAP_TYPE_TNC   src/eap_peer/eap_defs.h /^      EAP_TYPE_TNC = 38 \/* TNC IF-T v1.0-r3; note: tentative assignment;$/;" e       enum:__anon5
-EAP_TYPE_TTLS  src/eap_peer/eap_defs.h /^      EAP_TYPE_TTLS = 21 \/* RFC 5281 *\/,$/;"        e       enum:__anon5
-EAP_UNAUTH_TLS_TYPE    src/eap_peer/eap_tls_common.h   89;"    d
-EAP_VENDOR_HOSTAP      src/eap_peer/eap_defs.h /^      EAP_VENDOR_HOSTAP = 39068 \/* hostapd\/wpa_supplicant project *\/$/;"   e       enum:__anon6
-EAP_VENDOR_IETF        src/eap_peer/eap_defs.h /^      EAP_VENDOR_IETF = 0,$/;"        e       enum:__anon6
-EAP_VENDOR_MICROSOFT   src/eap_peer/eap_defs.h /^      EAP_VENDOR_MICROSOFT = 0x000137 \/* Microsoft *\/,$/;"  e       enum:__anon6
-EAP_VENDOR_TYPE_UNAUTH_TLS     src/eap_peer/eap_defs.h 87;"    d
-EAP_VENDOR_UNAUTH_TLS  src/eap_peer/eap_defs.h 86;"    d
-EAP_VENDOR_WFA src/eap_peer/eap_defs.h /^      EAP_VENDOR_WFA = 0x00372A \/* Wi-Fi Alliance *\/,$/;"   e       enum:__anon6
-ERP_INFO_BARKER_PREAMBLE_MODE  src/common/ieee802_11_defs.h    388;"   d
-ERP_INFO_NON_ERP_PRESENT       src/common/ieee802_11_defs.h    386;"   d
-ERP_INFO_USE_PROTECTION        src/common/ieee802_11_defs.h    387;"   d
-ERROR_ACCT_DISABLED    src/eap_peer/eap_mschapv2.c     35;"    d       file:
-ERROR_AUTHENTICATION_FAILURE   src/eap_peer/eap_mschapv2.c     38;"    d       file:
-ERROR_CHANGING_PASSWORD        src/eap_peer/eap_mschapv2.c     39;"    d       file:
-ERROR_NO_DIALIN_PERMISSION     src/eap_peer/eap_mschapv2.c     37;"    d       file:
-ERROR_PASSWD_EXPIRED   src/eap_peer/eap_mschapv2.c     36;"    d       file:
-ERROR_RESTRICTED_LOGON_HOURS   src/eap_peer/eap_mschapv2.c     34;"    d       file:
-ESP_ERR_WIFI_REGISTRAR include/esp_supplicant/esp_wps.h        46;"    d
-ESP_ERR_WIFI_WPS_SM    include/esp_supplicant/esp_wps.h        48;"    d
-ESP_ERR_WIFI_WPS_TYPE  include/esp_supplicant/esp_wps.h        47;"    d
-ESP_HOSTAP_H   src/esp_supplicant/esp_hostap.h 16;"    d
-ESP_WPA_ENTERPRISE_H   include/esp_supplicant/esp_wpa_enterprise.h     16;"    d
-ESS_DISASSOC_IMMINENT  src/common/wpa_ctrl.h   148;"   d
-ESTABLISHED    src/tls/tlsv1_client_i.h        /^              ESTABLISHED, FAILED$/;" e       enum:tlsv1_client::__anon43
-ESTABLISHED    src/tls/tlsv1_server_i.h        /^              ESTABLISHED, FAILED$/;" e       enum:tlsv1_server::__anon39
-ETH_ALEN       include/utils/common.h  194;"   d
-ETH_P_ALL      include/utils/common.h  200;"   d
-ETH_P_EAPOL    include/utils/common.h  206;"   d
-ETH_P_PAE      include/utils/common.h  203;"   d
-ETH_P_RRB      include/utils/common.h  212;"   d
-ETH_P_RSN_PREAUTH      include/utils/common.h  209;"   d
-ETSParam       src/esp_supplicant/esp_wifi_driver.h    /^typedef uint32_t ETSParam;$/;"        t
-ETSSignal      src/esp_supplicant/esp_wifi_driver.h    /^typedef uint32_t ETSSignal;$/;"       t
-EXT_HT_CAP_INFO_HTC_SUPPORTED  src/common/ieee802_11_defs.h    416;"   d
-EXT_HT_CAP_INFO_MCS_FEEDBACK_OFFSET    src/common/ieee802_11_defs.h    415;"   d
-EXT_HT_CAP_INFO_PCO    src/common/ieee802_11_defs.h    413;"   d
-EXT_HT_CAP_INFO_RD_RESPONDER   src/common/ieee802_11_defs.h    417;"   d
-EXT_HT_CAP_INFO_TRANS_TIME_OFFSET      src/common/ieee802_11_defs.h    414;"   d
-EXT_PASSWORD_H src/utils/ext_password.h        10;"    d
-EXT_PASSWORD_I_H       src/utils/ext_password_i.h      10;"    d
-EapDecision    src/eap_peer/eap_i.h    /^} EapDecision;$/;"    t       typeref:enum:__anon1
-EapMethodState src/eap_peer/eap_i.h    /^} EapMethodState;$/;" t       typeref:enum:__anon2
-EapType        src/eap_peer/eap_defs.h /^} EapType;$/;"        t       typeref:enum:__anon5
-F1     src/crypto/md4-internal.c       128;"   d       file:
-F1     src/crypto/md5-internal.c       201;"   d       file:
-F2     src/crypto/md4-internal.c       129;"   d       file:
-F2     src/crypto/md5-internal.c       202;"   d       file:
-F3     src/crypto/md4-internal.c       130;"   d       file:
-F3     src/crypto/md5-internal.c       203;"   d       file:
-F4     src/crypto/md5-internal.c       204;"   d       file:
-FAILED src/tls/tlsv1_client_i.h        /^              ESTABLISHED, FAILED$/;" e       enum:tlsv1_client::__anon43
-FAILED src/tls/tlsv1_server_i.h        /^              ESTABLISHED, FAILED$/;" e       enum:tlsv1_server::__anon39
-FALSE  src/common/defs.h       /^typedef enum { FALSE = 0, TRUE = 1 } Boolean;$/;"     e       enum:__anon87
-FALSE  src/common/defs.h       19;"    d
-FTIE_SUBELEM_GTK       src/common/wpa_common.h 290;"   d
-FTIE_SUBELEM_IGTK      src/common/wpa_common.h 292;"   d
-FTIE_SUBELEM_R0KH_ID   src/common/wpa_common.h 291;"   d
-FTIE_SUBELEM_R1KH_ID   src/common/wpa_common.h 289;"   d
-FT_PACKET_R0KH_R1KH_PULL       src/ap/wpa_auth.h       40;"    d
-FT_PACKET_R0KH_R1KH_PUSH       src/ap/wpa_auth.h       42;"    d
-FT_PACKET_R0KH_R1KH_RESP       src/ap/wpa_auth.h       41;"    d
-FT_PACKET_REQUEST      src/ap/wpa_auth.h       37;"    d
-FT_PACKET_RESPONSE     src/ap/wpa_auth.h       38;"    d
-FT_R0KH_ID_MAX_LEN     src/common/wpa_common.h 125;"   d
-FT_R0KH_R1KH_PULL_DATA_LEN     src/ap/wpa_auth.h       44;"    d
-FT_R0KH_R1KH_PUSH_DATA_LEN     src/ap/wpa_auth.h       46;"    d
-FT_R0KH_R1KH_RESP_DATA_LEN     src/ap/wpa_auth.h       45;"    d
-FT_R1KH_ID_LEN src/common/wpa_common.h 126;"   d
-GAS_DIALOG_MAX src/ap/sta_info.h       118;"   d
-GAS_RESPONSE_INFO      src/common/wpa_ctrl.h   153;"   d
-GETU32 src/crypto/aes_i.h      116;"   d
-GETU32 src/crypto/aes_i.h      119;"   d
-GInit  src/ap/wpa_auth_i.h     /^      Boolean GInit;$/;"      m       struct:wpa_group
-GKeyDoneStations       src/ap/wpa_auth_i.h     /^      int GKeyDoneStations;$/;"       m       struct:wpa_group
-GM     src/ap/wpa_auth_i.h     /^      int GN, GM;$/;" m       struct:wpa_group
-GMK    src/ap/wpa_auth_i.h     /^      u8 GMK[WPA_GMK_LEN];$/;"        m       struct:wpa_group
-GM_igtk        src/ap/wpa_auth_i.h     /^      int GN_igtk, GM_igtk;$/;"       m       struct:wpa_group
-GN     src/ap/wpa_auth_i.h     /^      int GN, GM;$/;" m       struct:wpa_group
-GN_igtk        src/ap/wpa_auth_i.h     /^      int GN_igtk, GM_igtk;$/;"       m       struct:wpa_group
-GNonce src/ap/wpa_auth_i.h     /^      u8 GNonce[WPA_NONCE_LEN];$/;"   m       struct:wpa_group
-GTK    src/ap/wpa_auth_i.h     /^      u8 GTK[2][WPA_GTK_MAX_LEN];$/;" m       struct:wpa_group
-GTKAuthenticator       src/ap/wpa_auth_i.h     /^      Boolean GTKAuthenticator;$/;"   m       struct:wpa_group
-GTKReKey       src/ap/wpa_auth_i.h     /^      Boolean GTKReKey;$/;"   m       struct:wpa_group
-GTK_len        src/ap/wpa_auth_i.h     /^      int GTK_len;$/;"        m       struct:wpa_group
-GTimeoutCtr    src/ap/wpa_auth_i.h     /^      int GTimeoutCtr;$/;"    m       struct:wpa_state_machine
-GUpdateStationKeys     src/ap/wpa_auth_i.h     /^      Boolean GUpdateStationKeys;$/;" m       struct:wpa_state_machine
-Gamma0 src/crypto/sha256-internal.c    93;"    d       file:
-Gamma1 src/crypto/sha256-internal.c    94;"    d       file:
-HOSTAPD_CONFIG_H       src/ap/ap_config.h      10;"    d
-HOSTAPD_H      src/ap/hostapd.h        10;"    d
-HOSTAPD_MAX_SSID_LEN   src/ap/ap_config.h      32;"    d
-HOSTAPD_MODE_IEEE80211A        src/common/defs.h       /^      HOSTAPD_MODE_IEEE80211A,$/;"    e       enum:hostapd_hw_mode
-HOSTAPD_MODE_IEEE80211AD       src/common/defs.h       /^      HOSTAPD_MODE_IEEE80211AD,$/;"   e       enum:hostapd_hw_mode
-HOSTAPD_MODE_IEEE80211B        src/common/defs.h       /^      HOSTAPD_MODE_IEEE80211B,$/;"    e       enum:hostapd_hw_mode
-HOSTAPD_MODE_IEEE80211G        src/common/defs.h       /^      HOSTAPD_MODE_IEEE80211G,$/;"    e       enum:hostapd_hw_mode
-HOSTAPD_RATE_BASIC     src/ap/hostapd.h        53;"    d
-HT_CAP_INFO_40MHZ_INTOLERANT   src/common/ieee802_11_defs.h    409;"   d
-HT_CAP_INFO_DELAYED_BA src/common/ieee802_11_defs.h    405;"   d
-HT_CAP_INFO_DSSS_CCK40MHZ      src/common/ieee802_11_defs.h    407;"   d
-HT_CAP_INFO_GREEN_FIELD        src/common/ieee802_11_defs.h    397;"   d
-HT_CAP_INFO_LDPC_CODING_CAP    src/common/ieee802_11_defs.h    391;"   d
-HT_CAP_INFO_LSIG_TXOP_PROTECT_SUPPORT  src/common/ieee802_11_defs.h    410;"   d
-HT_CAP_INFO_MAX_AMSDU_SIZE     src/common/ieee802_11_defs.h    406;"   d
-HT_CAP_INFO_PSMP_SUPP  src/common/ieee802_11_defs.h    408;"   d
-HT_CAP_INFO_RX_STBC_1  src/common/ieee802_11_defs.h    402;"   d
-HT_CAP_INFO_RX_STBC_12 src/common/ieee802_11_defs.h    403;"   d
-HT_CAP_INFO_RX_STBC_123        src/common/ieee802_11_defs.h    404;"   d
-HT_CAP_INFO_RX_STBC_MASK       src/common/ieee802_11_defs.h    401;"   d
-HT_CAP_INFO_SHORT_GI20MHZ      src/common/ieee802_11_defs.h    398;"   d
-HT_CAP_INFO_SHORT_GI40MHZ      src/common/ieee802_11_defs.h    399;"   d
-HT_CAP_INFO_SMPS_DISABLED      src/common/ieee802_11_defs.h    396;"   d
-HT_CAP_INFO_SMPS_DYNAMIC       src/common/ieee802_11_defs.h    395;"   d
-HT_CAP_INFO_SMPS_MASK  src/common/ieee802_11_defs.h    393;"   d
-HT_CAP_INFO_SMPS_STATIC        src/common/ieee802_11_defs.h    394;"   d
-HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET     src/common/ieee802_11_defs.h    392;"   d
-HT_CAP_INFO_TX_STBC    src/common/ieee802_11_defs.h    400;"   d
-HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY      src/common/ieee802_11_defs.h    453;"   d
-HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH  src/common/ieee802_11_defs.h    451;"   d
-HT_INFO_HT_PARAM_RIFS_MODE     src/common/ieee802_11_defs.h    452;"   d
-HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE  src/common/ieee802_11_defs.h    449;"   d
-HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW  src/common/ieee802_11_defs.h    450;"   d
-HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK       src/common/ieee802_11_defs.h    448;"   d
-HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY      src/common/ieee802_11_defs.h    454;"   d
-HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT     src/common/ieee802_11_defs.h    465;"   d
-HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT      src/common/ieee802_11_defs.h    467;"   d
-HT_INFO_OPERATION_MODE_OP_MODE_MASK    src/common/ieee802_11_defs.h    462;"   d
-HT_INFO_OPERATION_MODE_OP_MODE_OFFSET  src/common/ieee802_11_defs.h    464;"   d
-HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT    src/common/ieee802_11_defs.h    466;"   d
-HT_INFO_STBC_PARAM_DUAL_BEACON src/common/ieee802_11_defs.h    469;"   d
-HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT   src/common/ieee802_11_defs.h    470;"   d
-HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED   src/common/ieee802_11_defs.h    472;"   d
-HT_INFO_STBC_PARAM_PCO_ACTIVE  src/common/ieee802_11_defs.h    473;"   d
-HT_INFO_STBC_PARAM_PCO_PHASE   src/common/ieee802_11_defs.h    474;"   d
-HT_INFO_STBC_PARAM_SECONDARY_BCN       src/common/ieee802_11_defs.h    471;"   d
-IANA_SECP256R1 src/crypto/crypto_mbedtls.c     30;"    d       file:
-IBSS_RSN_COMPLETED     src/common/wpa_ctrl.h   71;"    d
-ICACHE_RODATA_ATTR     src/crypto/crypto_internal-cipher.c     /^static const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;$/;" v       file:
-ICACHE_RODATA_ATTR     src/crypto/crypto_internal.c    /^static const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;$/;" v       file:
-ICACHE_RODATA_ATTR     src/fast_crypto/fast_crypto_internal.c  /^static const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;$/;" v       file:
-ICACHE_RODATA_ATTR     src/tls/libtommath.h    /^static const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;$/;" v
-IEEE80211_BSSID_FROMDS src/common/ieee802_11_defs.h    252;"   d
-IEEE80211_DA_FROMDS    src/common/ieee802_11_defs.h    251;"   d
-IEEE80211_FC   src/common/ieee802_11_defs.h    257;"   d
-IEEE80211_HDRLEN       src/common/ieee802_11_defs.h    255;"   d
-IEEE80211_SA_FROMDS    src/common/ieee802_11_defs.h    253;"   d
-IEEE8021X_KEY_INDEX_FLAG       src/common/eapol_common.h       44;"    d
-IEEE8021X_KEY_INDEX_MASK       src/common/eapol_common.h       45;"    d
-IEEE8021X_KEY_IV_LEN   src/common/eapol_common.h       42;"    d
-IEEE8021X_KEY_SIGN_LEN src/common/eapol_common.h       41;"    d
-IEEE8021X_REPLAY_COUNTER_LEN   src/common/eapol_common.h       40;"    d
-IEEE802_11_DEFS_H      src/common/ieee802_11_defs.h    17;"    d
-IEEE802_1X_H   src/ap/ieee802_1x.h     10;"    d
-IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT   src/common/eapol_common.h       /^       IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4$/;"   e       enum:__anon85
-IEEE802_1X_TYPE_EAPOL_KEY      src/common/eapol_common.h       /^       IEEE802_1X_TYPE_EAPOL_KEY = 3,$/;"     e       enum:__anon85
-IEEE802_1X_TYPE_EAPOL_LOGOFF   src/common/eapol_common.h       /^       IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,$/;"  e       enum:__anon85
-IEEE802_1X_TYPE_EAPOL_START    src/common/eapol_common.h       /^       IEEE802_1X_TYPE_EAPOL_START = 1,$/;"   e       enum:__anon85
-IEEE802_1X_TYPE_EAP_PACKET     src/common/eapol_common.h       /^enum { IEEE802_1X_TYPE_EAP_PACKET = 0,$/;"    e       enum:__anon85
-IGTK   src/ap/wpa_auth_i.h     /^      u8 IGTK[2][WPA_IGTK_LEN];$/;"   m       struct:wpa_group
-INCLUDES_H     src/utils/includes.h    20;"    d
-INLINE port/include/endian.h   118;"   d
-INTERWORKING_AP        src/common/wpa_ctrl.h   150;"   d
-INTERWORKING_NO_MATCH  src/common/wpa_ctrl.h   151;"   d
-IS_WPS_ENROLLEE        src/esp_supplicant/esp_wifi_driver.h    118;"   d
-IS_WPS_REGISTRAR       src/esp_supplicant/esp_wifi_driver.h    117;"   d
-Init   src/ap/wpa_auth_i.h     /^      Boolean Init;$/;"       m       struct:wpa_state_machine
-K      src/crypto/sha256-internal.c    /^static const unsigned long K[64] = {$/;"      v       file:
-KEYENTRY_TABLE_MAP     src/rsn_supp/wpa.h      178;"   d
-KEY_MGMT_802_1X        src/common/defs.h       /^      KEY_MGMT_802_1X,$/;"    e       enum:wpa_key_mgmt
-KEY_MGMT_802_1X_NO_WPA src/common/defs.h       /^      KEY_MGMT_802_1X_NO_WPA,$/;"     e       enum:wpa_key_mgmt
-KEY_MGMT_802_1X_SHA256 src/common/defs.h       /^      KEY_MGMT_802_1X_SHA256,$/;"     e       enum:wpa_key_mgmt
-KEY_MGMT_FT_802_1X     src/common/defs.h       /^      KEY_MGMT_FT_802_1X,$/;" e       enum:wpa_key_mgmt
-KEY_MGMT_FT_PSK        src/common/defs.h       /^      KEY_MGMT_FT_PSK,$/;"    e       enum:wpa_key_mgmt
-KEY_MGMT_NONE  src/common/defs.h       /^      KEY_MGMT_NONE,$/;"      e       enum:wpa_key_mgmt
-KEY_MGMT_PSK   src/common/defs.h       /^      KEY_MGMT_PSK,$/;"       e       enum:wpa_key_mgmt
-KEY_MGMT_PSK_SHA256    src/common/defs.h       /^      KEY_MGMT_PSK_SHA256,$/;"        e       enum:wpa_key_mgmt
-KEY_MGMT_WPA_NONE      src/common/defs.h       /^      KEY_MGMT_WPA_NONE,$/;"  e       enum:wpa_key_mgmt
-KEY_MGMT_WPS   src/common/defs.h       /^      KEY_MGMT_WPS$/;"        e       enum:wpa_key_mgmt
-LIST_H src/utils/list.h        16;"    d
-LITTLE_ENDIAN  port/include/endian.h   40;"    d
-LOGGER_DEBUG   src/ap/wpa_auth.h       /^      LOGGER_DEBUG, LOGGER_INFO, LOGGER_WARNING$/;"   e       enum:__anon20
-LOGGER_INFO    src/ap/wpa_auth.h       /^      LOGGER_DEBUG, LOGGER_INFO, LOGGER_WARNING$/;"   e       enum:__anon20
-LOGGER_WARNING src/ap/wpa_auth.h       /^      LOGGER_DEBUG, LOGGER_INFO, LOGGER_WARNING$/;"   e       enum:__anon20
-LONG_PREAMBLE  src/ap/ap_config.h      /^              LONG_PREAMBLE = 0,$/;"  e       enum:hostapd_config::__anon19
-LTM_NO_NEG_EXP src/crypto/libtommath.h 59;"    d
-LTM_NO_NEG_EXP src/tls/libtommath.h    61;"    d
-MAC2STR        include/utils/common.h  259;"   d
-MACSTR include/utils/common.h  260;"   d
-MAX    src/crypto/libtommath.h 68;"    d
-MAX    src/tls/libtommath.h    70;"    d
-MAX_CIPHER_COUNT       src/tls/tlsv1_client_i.h        42;"    d
-MAX_CIPHER_COUNT       src/tls/tlsv1_server_i.h        37;"    d
-MAX_CRED_COUNT src/wps/wps_attr_parse.h        92;"    d
-MAX_REQ_DEV_TYPE_COUNT src/wps/wps_attr_parse.h        97;"    d
-MAX_STA_COUNT  src/ap/ap_config.h      18;"    d
-MAX_VLAN_ID    src/ap/ap_config.h      19;"    d
-MAX_WPS_PARSE_VENDOR_EXT       src/wps/wps.h   71;"    d
-MAX_WPS_VENDOR_EXTENSIONS      src/wps/wps.h   67;"    d
-MD4Context     src/crypto/md4-internal.c       /^typedef struct MD4Context {$/;"       s       file:
-MD4Final       src/crypto/md4-internal.c       /^static void MD4Final(unsigned char digest[MD4_DIGEST_LENGTH], MD4_CTX *ctx)$/;"       f       file:
-MD4Init        src/crypto/md4-internal.c       /^static void MD4Init(MD4_CTX *ctx)$/;" f       file:
-MD4Pad src/crypto/md4-internal.c       /^static void MD4Pad(MD4_CTX *ctx)$/;"  f       file:
-MD4SETP        src/crypto/md4-internal.c       132;"   d       file:
-MD4Transform   src/crypto/md4-internal.c       /^static void MD4Transform(u32 state[4], const u8 block[MD4_BLOCK_LENGTH])$/;"  f       file:
-MD4Update      src/crypto/md4-internal.c       /^static void MD4Update(MD4_CTX *ctx, const unsigned char *input, size_t len)$/;"       f       file:
-MD4_BLOCK_LENGTH       src/crypto/md4-internal.c       11;"    d       file:
-MD4_CTX        src/crypto/md4-internal.c       /^} MD4_CTX;$/;"        t       typeref:struct:MD4Context       file:
-MD4_DIGEST_LENGTH      src/crypto/md4-internal.c       12;"    d       file:
-MD4_DIGEST_STRING_LENGTH       src/crypto/md4-internal.c       36;"    d       file:
-MD5Context     src/crypto/md5_i.h      /^struct MD5Context {$/;"       s
-MD5Final       src/crypto/md5-internal.c       /^MD5Final(unsigned char digest[16], struct MD5Context *ctx)$/;"        f
-MD5Init        src/crypto/md5-internal.c       /^MD5Init(struct MD5Context *ctx)$/;"   f
-MD5STEP        src/crypto/md5-internal.c       207;"   d       file:
-MD5Transform   src/crypto/md5-internal.c       /^MD5Transform(u32 buf[4], u32 const in[16])$/;"        f       file:
-MD5Update      src/crypto/md5-internal.c       /^MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)$/;" f
-MD5_CTX        src/crypto/md5-internal.c       /^typedef struct MD5Context MD5_CTX;$/;"        t       typeref:struct:MD5Context       file:
-MD5_H  include/crypto/md5.h    16;"    d
-MD5_I_H        src/crypto/md5_i.h      16;"    d
-MD5_MAC_LEN    include/crypto/md5.h    18;"    d
-MD5_MAC_LEN    src/common/wpa_common.c 26;"    d       file:
-METHOD_CONT    src/eap_peer/eap_i.h    /^      METHOD_NONE, METHOD_INIT, METHOD_CONT, METHOD_MAY_CONT, METHOD_DONE$/;" e       enum:__anon2
-METHOD_DONE    src/eap_peer/eap_i.h    /^      METHOD_NONE, METHOD_INIT, METHOD_CONT, METHOD_MAY_CONT, METHOD_DONE$/;" e       enum:__anon2
-METHOD_INIT    src/eap_peer/eap_i.h    /^      METHOD_NONE, METHOD_INIT, METHOD_CONT, METHOD_MAY_CONT, METHOD_DONE$/;" e       enum:__anon2
-METHOD_MAY_CONT        src/eap_peer/eap_i.h    /^      METHOD_NONE, METHOD_INIT, METHOD_CONT, METHOD_MAY_CONT, METHOD_DONE$/;" e       enum:__anon2
-METHOD_NONE    src/eap_peer/eap_i.h    /^      METHOD_NONE, METHOD_INIT, METHOD_CONT, METHOD_MAY_CONT, METHOD_DONE$/;" e       enum:__anon2
-MICVerified    src/ap/wpa_auth_i.h     /^      Boolean MICVerified;$/;"        m       struct:wpa_state_machine
-MIN    src/crypto/libtommath.h 64;"    d
-MIN    src/crypto/sha256-internal.c    96;"    d       file:
-MIN    src/tls/libtommath.h    66;"    d
-MLME_SETPROTECTION_KEY_TYPE_GROUP      src/common/defs.h       249;"   d
-MLME_SETPROTECTION_KEY_TYPE_PAIRWISE   src/common/defs.h       250;"   d
-MLME_SETPROTECTION_PROTECT_TYPE_NONE   src/common/defs.h       244;"   d
-MLME_SETPROTECTION_PROTECT_TYPE_RX     src/common/defs.h       245;"   d
-MLME_SETPROTECTION_PROTECT_TYPE_RX_TX  src/common/defs.h       247;"   d
-MLME_SETPROTECTION_PROTECT_TYPE_TX     src/common/defs.h       246;"   d
-MOBILITY_DOMAIN_ID_LEN src/common/wpa_common.h 124;"   d
-MP_28BIT       src/crypto/libtommath.h 77;"    d
-MP_28BIT       src/tls/libtommath.h    79;"    d
-MP_EQ  src/crypto/libtommath.h 88;"    d
-MP_EQ  src/tls/libtommath.h    90;"    d
-MP_GT  src/crypto/libtommath.h 89;"    d
-MP_GT  src/tls/libtommath.h    91;"    d
-MP_LOW_MEM     src/crypto/libtommath.h 104;"   d
-MP_LOW_MEM     src/tls/libtommath.h    106;"   d
-MP_LT  src/crypto/libtommath.h 87;"    d
-MP_LT  src/tls/libtommath.h    89;"    d
-MP_MASK        src/crypto/libtommath.h 85;"    d
-MP_MASK        src/tls/libtommath.h    87;"    d
-MP_MEM src/crypto/libtommath.h 95;"    d
-MP_MEM src/tls/libtommath.h    97;"    d
-MP_NEG src/crypto/libtommath.h 92;"    d
-MP_NEG src/tls/libtommath.h    94;"    d
-MP_NO  src/crypto/libtommath.h 99;"    d
-MP_NO  src/tls/libtommath.h    101;"   d
-MP_OKAY        src/crypto/libtommath.h 94;"    d
-MP_OKAY        src/tls/libtommath.h    96;"    d
-MP_PREC        src/crypto/libtommath.h 109;"   d
-MP_PREC        src/crypto/libtommath.h 111;"   d
-MP_PREC        src/tls/libtommath.h    111;"   d
-MP_PREC        src/tls/libtommath.h    113;"   d
-MP_VAL src/crypto/libtommath.h 96;"    d
-MP_VAL src/tls/libtommath.h    98;"    d
-MP_WARRAY      src/crypto/libtommath.h 116;"   d
-MP_WARRAY      src/tls/libtommath.h    118;"   d
-MP_YES src/crypto/libtommath.h 98;"    d
-MP_YES src/tls/libtommath.h    100;"   d
-MP_ZPOS        src/crypto/libtommath.h 91;"    d
-MP_ZPOS        src/tls/libtommath.h    93;"    d
-MSCHAPV2_AUTH_RESPONSE_LEN     src/eap_peer/mschapv2.h 11;"    d
-MSCHAPV2_CHAL_LEN      src/eap_peer/mschapv2.h 9;"     d
-MSCHAPV2_H     src/eap_peer/mschapv2.h 7;"     d
-MSCHAPV2_KEY_LEN       src/eap_peer/eap_mschapv2.c     32;"    d       file:
-MSCHAPV2_MASTER_KEY_LEN        src/eap_peer/mschapv2.h 12;"    d
-MSCHAPV2_NT_RESPONSE_LEN       src/eap_peer/mschapv2.h 10;"    d
-MSCHAPV2_OP_CHALLENGE  src/eap_peer/eap_mschapv2.c     25;"    d       file:
-MSCHAPV2_OP_CHANGE_PASSWORD    src/eap_peer/eap_mschapv2.c     29;"    d       file:
-MSCHAPV2_OP_FAILURE    src/eap_peer/eap_mschapv2.c     28;"    d       file:
-MSCHAPV2_OP_RESPONSE   src/eap_peer/eap_mschapv2.c     26;"    d       file:
-MSCHAPV2_OP_SUCCESS    src/eap_peer/eap_mschapv2.c     27;"    d       file:
-MSG_DEBUG      include/utils/wpa_debug.h       /^enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };$/;"        e       enum:__anon91
-MSG_DEBUG      include/utils/wpa_debug.h       28;"    d
-MSG_DONTWAIT   include/utils/common.h  249;"   d
-MSG_ERROR      include/utils/wpa_debug.h       /^enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };$/;"        e       enum:__anon91
-MSG_ERROR      include/utils/wpa_debug.h       25;"    d
-MSG_INFO       include/utils/wpa_debug.h       /^enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };$/;"        e       enum:__anon91
-MSG_INFO       include/utils/wpa_debug.h       27;"    d
-MSG_MSGDUMP    include/utils/wpa_debug.h       /^enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };$/;"        e       enum:__anon91
-MSG_MSGDUMP    include/utils/wpa_debug.h       29;"    d
-MSG_PRINT      include/utils/wpa_debug.h       62;"    d
-MSG_WARNING    include/utils/wpa_debug.h       /^enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };$/;"        e       enum:__anon91
-MSG_WARNING    include/utils/wpa_debug.h       26;"    d
-MS_FUNCS_H     include/crypto/ms_funcs.h       8;"     d
-Maj    src/crypto/sha256-internal.c    88;"    d       file:
-NONE_AUTH      src/esp_supplicant/esp_wifi_driver.h    /^    NONE_AUTH           = 0x01,$/;"   e       enum:__anon29
-NO_BINDING     src/eap_peer/eap_peap.c /^      enum { NO_BINDING, OPTIONAL_BINDING, REQUIRE_BINDING } crypto_binding;$/;"      e       enum:eap_peap_data::__anon7     file:
-NUM_DH_GROUPS  src/crypto/dh_groups.c  536;"   d       file:
-NUM_ELEMS      src/tls/tlsv1_common.c  70;"    d       file:
-NUM_HOSTAPD_MODES      src/common/defs.h       /^      NUM_HOSTAPD_MODES$/;"   e       enum:hostapd_hw_mode
-NUM_TLS_CIPHER_DATA    src/tls/tlsv1_common.c  101;"   d       file:
-NUM_TLS_CIPHER_SUITES  src/tls/tlsv1_common.c  71;"    d       file:
-NUM_WEP_KEYS   src/ap/ap_config.h      34;"    d
-NUM_WPS_EI_VALUES      src/wps/wps_defs.h      /^      NUM_WPS_EI_VALUES$/;"   e       enum:wps_error_indication
-OPTIONAL_BINDING       src/eap_peer/eap_peap.c /^      enum { NO_BINDING, OPTIONAL_BINDING, REQUIRE_BINDING } crypto_binding;$/;"      e       enum:eap_peap_data::__anon7     file:
-OPT_CAST       src/crypto/libtommath.h 71;"    d
-OPT_CAST       src/tls/libtommath.h    73;"    d
-OP_MODE_20MHZ_HT_STA_ASSOCED   src/common/ieee802_11_defs.h    459;"   d
-OP_MODE_MAY_BE_LEGACY_STAS     src/common/ieee802_11_defs.h    458;"   d
-OP_MODE_MIXED  src/common/ieee802_11_defs.h    460;"   d
-OP_MODE_PURE   src/common/ieee802_11_defs.h    457;"   d
-OS_H   port/include/os.h       16;"    d
-OUI_BROADCOM   src/common/ieee802_11_defs.h    590;"   d
-OUI_MICROSOFT  src/common/ieee802_11_defs.h    477;"   d
-P2P_ALLOW_CROSS_CONNECTION     src/ap/ap_config.h      384;"   d
-P2P_ENABLED    src/ap/ap_config.h      380;"   d
-P2P_EVENT_CROSS_CONNECT_DISABLE        src/common/wpa_ctrl.h   127;"   d
-P2P_EVENT_CROSS_CONNECT_ENABLE src/common/wpa_ctrl.h   126;"   d
-P2P_EVENT_DEVICE_FOUND src/common/wpa_ctrl.h   112;"   d
-P2P_EVENT_DEVICE_LOST  src/common/wpa_ctrl.h   115;"   d
-P2P_EVENT_FIND_STOPPED src/common/wpa_ctrl.h   144;"   d
-P2P_EVENT_GO_NEG_FAILURE       src/common/wpa_ctrl.h   121;"   d
-P2P_EVENT_GO_NEG_REQUEST       src/common/wpa_ctrl.h   119;"   d
-P2P_EVENT_GO_NEG_SUCCESS       src/common/wpa_ctrl.h   120;"   d
-P2P_EVENT_GROUP_FORMATION_FAILURE      src/common/wpa_ctrl.h   123;"   d
-P2P_EVENT_GROUP_FORMATION_SUCCESS      src/common/wpa_ctrl.h   122;"   d
-P2P_EVENT_GROUP_REMOVED        src/common/wpa_ctrl.h   125;"   d
-P2P_EVENT_GROUP_STARTED        src/common/wpa_ctrl.h   124;"   d
-P2P_EVENT_INVITATION_RECEIVED  src/common/wpa_ctrl.h   142;"   d
-P2P_EVENT_INVITATION_RESULT    src/common/wpa_ctrl.h   143;"   d
-P2P_EVENT_PERSISTENT_PSK_FAIL  src/common/wpa_ctrl.h   145;"   d
-P2P_EVENT_PROV_DISC_ENTER_PIN  src/common/wpa_ctrl.h   131;"   d
-P2P_EVENT_PROV_DISC_FAILURE    src/common/wpa_ctrl.h   137;"   d
-P2P_EVENT_PROV_DISC_PBC_REQ    src/common/wpa_ctrl.h   133;"   d
-P2P_EVENT_PROV_DISC_PBC_RESP   src/common/wpa_ctrl.h   135;"   d
-P2P_EVENT_PROV_DISC_SHOW_PIN   src/common/wpa_ctrl.h   129;"   d
-P2P_EVENT_SERV_DISC_REQ        src/common/wpa_ctrl.h   139;"   d
-P2P_EVENT_SERV_DISC_RESP       src/common/wpa_ctrl.h   141;"   d
-P2P_GROUP_FORMATION    src/ap/ap_config.h      382;"   d
-P2P_GROUP_OWNER        src/ap/ap_config.h      381;"   d
-P2P_MANAGE     src/ap/ap_config.h      383;"   d
-PADDING        src/crypto/md4-internal.c       /^static u8 PADDING[MD4_BLOCK_LENGTH] = {$/;"   v       file:
-PASSWD_CHANGE_CHAL_LEN src/eap_peer/eap_mschapv2.c     31;"    d       file:
-PIN_EXPIRES    src/wps/wps_registrar.c 83;"    d       file:
-PIN_LOCKED     src/wps/wps_registrar.c 82;"    d       file:
-PInitAKeys     src/ap/wpa_auth_i.h     /^      Boolean PInitAKeys; \/* WPA only, not in IEEE 802.11i *\/$/;"   m       struct:wpa_state_machine
-PKCS1_H        src/tls/pkcs1.h 10;"    d
-PKCS5_ALG_MD5_DES_CBC  src/tls/pkcs5.c /^              PKCS5_ALG_MD5_DES_CBC$/;"       e       enum:pkcs5_params::pkcs5_alg    file:
-PKCS5_ALG_UNKNOWN      src/tls/pkcs5.c /^              PKCS5_ALG_UNKNOWN,$/;"  e       enum:pkcs5_params::pkcs5_alg    file:
-PKCS5_H        src/tls/pkcs5.h 10;"    d
-PKCS8_H        src/tls/pkcs8.h 10;"    d
-PMK    src/ap/wpa_auth_i.h     /^      u8 PMK[PMK_LEN];$/;"    m       struct:wpa_state_machine
-PMKID_LEN      src/common/wpa_common.h 22;"    d
-PMK_LEN        src/ap/ap_config.h      102;"   d
-PMK_LEN        src/common/wpa_common.h 23;"    d
-PRINTF_FORMAT  include/utils/common.h  217;"   d
-PRINTF_FORMAT  include/utils/common.h  220;"   d
-PRIVATE_KEY_NAME       src/eap_peer/eap_i.h    97;"    d
-PSK_RADIUS_ACCEPTED    src/ap/ap_config.h      /^              PSK_RADIUS_ACCEPTED = 1,$/;"    e       enum:hostapd_bss_config::__anon18
-PSK_RADIUS_IGNORED     src/ap/ap_config.h      /^              PSK_RADIUS_IGNORED = 0,$/;"     e       enum:hostapd_bss_config::__anon18
-PSK_RADIUS_REQUIRED    src/ap/ap_config.h      /^              PSK_RADIUS_REQUIRED = 2$/;"     e       enum:hostapd_bss_config::__anon18
-PTK    src/ap/wpa_auth_i.h     /^      struct wpa_ptk PTK;$/;" m       struct:wpa_state_machine        typeref:struct:wpa_state_machine::wpa_ptk
-PTKRequest     src/ap/wpa_auth_i.h     /^      Boolean PTKRequest; \/* not in IEEE 802.11i state machine *\/$/;"       m       struct:wpa_state_machine
-PTK_valid      src/ap/wpa_auth_i.h     /^      Boolean PTK_valid;$/;"  m       struct:wpa_state_machine
-PUTU32 src/crypto/aes_i.h      117;"   d
-PUTU32 src/crypto/aes_i.h      121;"   d
-PUT_32BIT_LE   src/crypto/md4-internal.c       50;"    d       file:
-PUT_64BIT_LE   src/crypto/md4-internal.c       40;"    d       file:
-PWBLOCK_LEN    src/crypto/ms_funcs.c   420;"   d       file:
-Pair   src/ap/wpa_auth_i.h     /^      Boolean Pair;$/;"       m       struct:wpa_state_machine
-PtkGroupInit   src/ap/wpa_auth_i.h     /^      Boolean PtkGroupInit; \/* init request for PTK Group state machine *\/$/;"      m       struct:wpa_state_machine
-R      src/crypto/sha256-internal.c    90;"    d       file:
-R0     src/crypto/sha1-internal.c      146;"   d       file:
-R1     src/crypto/sha1-internal.c      149;"   d       file:
-R2     src/crypto/sha1-internal.c      152;"   d       file:
-R3     src/crypto/sha1-internal.c      154;"   d       file:
-R4     src/crypto/sha1-internal.c      157;"   d       file:
-RADIUS_ATTR_CHAP_CHALLENGE     src/eap_peer/eap_ttls.h 45;"    d
-RADIUS_ATTR_CHAP_PASSWORD      src/eap_peer/eap_ttls.h 43;"    d
-RADIUS_ATTR_EAP_MESSAGE        src/eap_peer/eap_ttls.h 46;"    d
-RADIUS_ATTR_MS_CHAP2_CPW       src/eap_peer/eap_ttls.h 56;"    d
-RADIUS_ATTR_MS_CHAP2_RESPONSE  src/eap_peer/eap_ttls.h 54;"    d
-RADIUS_ATTR_MS_CHAP2_SUCCESS   src/eap_peer/eap_ttls.h 55;"    d
-RADIUS_ATTR_MS_CHAP_CHALLENGE  src/eap_peer/eap_ttls.h 53;"    d
-RADIUS_ATTR_MS_CHAP_ERROR      src/eap_peer/eap_ttls.h 51;"    d
-RADIUS_ATTR_MS_CHAP_NT_ENC_PW  src/eap_peer/eap_ttls.h 52;"    d
-RADIUS_ATTR_MS_CHAP_RESPONSE   src/eap_peer/eap_ttls.h 50;"    d
-RADIUS_ATTR_REPLY_MESSAGE      src/eap_peer/eap_ttls.h 44;"    d
-RADIUS_ATTR_USER_NAME  src/eap_peer/eap_ttls.h 41;"    d
-RADIUS_ATTR_USER_PASSWORD      src/eap_peer/eap_ttls.h 42;"    d
-RADIUS_VENDOR_ID_MICROSOFT     src/eap_peer/eap_ttls.h 49;"    d
-RANDOM_H       include/crypto/random.h 16;"    d
-RCON   src/crypto/aes_i.h      39;"    d
-RCON   src/crypto/aes_i.h      74;"    d
-RECEIVED_M2D   src/wps/wps_i.h /^              RECV_M8, RECEIVED_M2D, WPS_MSG_DONE, RECV_ACK, WPS_FINISHED,$/;"        e       enum:wps_data::__anon53
-RECV_ACK       src/wps/wps_i.h /^              RECV_M8, RECEIVED_M2D, WPS_MSG_DONE, RECV_ACK, WPS_FINISHED,$/;"        e       enum:wps_data::__anon53
-RECV_DONE      src/wps/wps_i.h /^              RECV_M7, SEND_M8, RECV_DONE, SEND_M2D, RECV_M2D_ACK$/;" e       enum:wps_data::__anon53
-RECV_M1        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-RECV_M2        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-RECV_M2D_ACK   src/wps/wps_i.h /^              RECV_M7, SEND_M8, RECV_DONE, SEND_M2D, RECV_M2D_ACK$/;" e       enum:wps_data::__anon53
-RECV_M3        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-RECV_M4        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-RECV_M5        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-RECV_M6        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-RECV_M7        src/wps/wps_i.h /^              RECV_M7, SEND_M8, RECV_DONE, SEND_M2D, RECV_M2D_ACK$/;" e       enum:wps_data::__anon53
-RECV_M8        src/wps/wps_i.h /^              RECV_M8, RECEIVED_M2D, WPS_MSG_DONE, RECV_ACK, WPS_FINISHED,$/;"        e       enum:wps_data::__anon53
-REQUIRE_BINDING        src/eap_peer/eap_peap.c /^      enum { NO_BINDING, OPTIONAL_BINDING, REQUIRE_BINDING } crypto_binding;$/;"      e       enum:eap_peap_data::__anon7     file:
-RND    src/crypto/sha256-internal.c    123;"   d       file:
-ROLc   src/crypto/des-internal.c       39;"    d       file:
-RORc   src/crypto/des-internal.c       43;"    d       file:
-RORc   src/crypto/sha256-internal.c    84;"    d       file:
-ROUND  src/crypto/aes-internal-dec.c   103;"   d       file:
-ROUND  src/crypto/aes-internal-dec.c   145;"   d       file:
-ROUND  src/crypto/aes-internal-enc.c   47;"    d       file:
-ROUND  src/crypto/aes-internal-enc.c   89;"    d       file:
-RSA_H  src/tls/rsa.h   10;"    d
-RSNA_MAX_EAPOL_RETRIES src/ap/wpa_auth_i.h     13;"    d
-RSN_AUTH_KEY_MGMT_802_1X_SHA256        src/common/wpa_common.h 58;"    d
-RSN_AUTH_KEY_MGMT_FT_802_1X    src/common/wpa_common.h 55;"    d
-RSN_AUTH_KEY_MGMT_FT_PSK       src/common/wpa_common.h 56;"    d
-RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X      src/common/wpa_common.h 53;"    d
-RSN_AUTH_KEY_MGMT_PSK_SHA256   src/common/wpa_common.h 59;"    d
-RSN_AUTH_KEY_MGMT_UNSPEC_802_1X        src/common/wpa_common.h 52;"    d
-RSN_CIPHER_SUITE_AES_128_CMAC  src/common/wpa_common.h 70;"    d
-RSN_CIPHER_SUITE_CCMP  src/common/wpa_common.h 67;"    d
-RSN_CIPHER_SUITE_GCMP  src/common/wpa_common.h 73;"    d
-RSN_CIPHER_SUITE_NONE  src/common/wpa_common.h 61;"    d
-RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED    src/common/wpa_common.h 72;"    d
-RSN_CIPHER_SUITE_TKIP  src/common/wpa_common.h 63;"    d
-RSN_CIPHER_SUITE_WEP104        src/common/wpa_common.h 68;"    d
-RSN_CIPHER_SUITE_WEP40 src/common/wpa_common.h 62;"    d
-RSN_FT_CAPAB_FT_OVER_DS        src/common/wpa_common.h 278;"   d
-RSN_FT_CAPAB_FT_RESOURCE_REQ_SUPP      src/common/wpa_common.h 279;"   d
-RSN_KEY_DATA_ERROR     src/common/wpa_common.h 88;"    d
-RSN_KEY_DATA_GROUPKEY  src/common/wpa_common.h 78;"    d
-RSN_KEY_DATA_IGTK      src/common/wpa_common.h 91;"    d
-RSN_KEY_DATA_LIFETIME  src/common/wpa_common.h 87;"    d
-RSN_KEY_DATA_MAC_ADDR  src/common/wpa_common.h 82;"    d
-RSN_KEY_DATA_NONCE     src/common/wpa_common.h 86;"    d
-RSN_KEY_DATA_PMKID     src/common/wpa_common.h 83;"    d
-RSN_KEY_DATA_SMK       src/common/wpa_common.h 85;"    d
-RSN_NUM_REPLAY_COUNTERS_1      src/common/wpa_common.h 99;"    d
-RSN_NUM_REPLAY_COUNTERS_16     src/common/wpa_common.h 102;"   d
-RSN_NUM_REPLAY_COUNTERS_2      src/common/wpa_common.h 100;"   d
-RSN_NUM_REPLAY_COUNTERS_4      src/common/wpa_common.h 101;"   d
-RSN_REMOTE_FRAME_TYPE_FT_RRB   src/ap/wpa_auth.h       35;"    d
-RSN_SELECTOR   src/common/wpa_common.h 35;"    d
-RSN_SELECTOR_GET       src/common/wpa_common.h 97;"    d
-RSN_SELECTOR_LEN       src/common/wpa_common.h 32;"    d
-RSN_SELECTOR_PUT       src/common/wpa_common.h 96;"    d
-RSN_VERSION    src/common/wpa_common.h 33;"    d
-ReAuthenticationRequest        src/ap/wpa_auth_i.h     /^      Boolean ReAuthenticationRequest;$/;"    m       struct:wpa_state_machine
-S      src/crypto/sha256-internal.c    89;"    d       file:
-SAE_COMMIT     src/ap/sta_info.h       /^      enum { SAE_INIT, SAE_COMMIT, SAE_CONFIRM } sae_state;$/;"       e       enum:sta_info::__anon16
-SAE_CONFIRM    src/ap/sta_info.h       /^      enum { SAE_INIT, SAE_COMMIT, SAE_CONFIRM } sae_state;$/;"       e       enum:sta_info::__anon16
-SAE_INIT       src/ap/sta_info.h       /^      enum { SAE_INIT, SAE_COMMIT, SAE_CONFIRM } sae_state;$/;"       e       enum:sta_info::__anon16
-SECURITY_IEEE_802_1X   src/ap/ap_config.h      /^      SECURITY_IEEE_802_1X = 2,$/;"   e       enum:hostap_security_policy
-SECURITY_PLAINTEXT     src/ap/ap_config.h      /^      SECURITY_PLAINTEXT = 0,$/;"     e       enum:hostap_security_policy
-SECURITY_STATIC_WEP    src/ap/ap_config.h      /^      SECURITY_STATIC_WEP = 1,$/;"    e       enum:hostap_security_policy
-SECURITY_WPA   src/ap/ap_config.h      /^      SECURITY_WPA = 4$/;"    e       enum:hostap_security_policy
-SECURITY_WPA_PSK       src/ap/ap_config.h      /^      SECURITY_WPA_PSK = 3,$/;"       e       enum:hostap_security_policy
-SEND_M1        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-SEND_M2        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-SEND_M2D       src/wps/wps_i.h /^              RECV_M7, SEND_M8, RECV_DONE, SEND_M2D, RECV_M2D_ACK$/;" e       enum:wps_data::__anon53
-SEND_M3        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-SEND_M4        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-SEND_M5        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-SEND_M6        src/wps/wps_i.h /^              RECV_M1, SEND_M2, RECV_M3, SEND_M4, RECV_M5, SEND_M6,$/;"       e       enum:wps_data::__anon53
-SEND_M7        src/wps/wps_i.h /^              SEND_M1, RECV_M2, SEND_M3, RECV_M4, SEND_M5, RECV_M6, SEND_M7,$/;"      e       enum:wps_data::__anon53
-SEND_M8        src/wps/wps_i.h /^              RECV_M7, SEND_M8, RECV_DONE, SEND_M2D, RECV_M2D_ACK$/;" e       enum:wps_data::__anon53
-SEND_WSC_NACK  src/wps/wps_i.h /^              SEND_WSC_NACK,$/;"      e       enum:wps_data::__anon53
-SERVER_CERTIFICATE     src/tls/tlsv1_client_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_client::__anon43
-SERVER_CERTIFICATE     src/tls/tlsv1_server_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_server::__anon39
-SERVER_CERTIFICATE_REQUEST     src/tls/tlsv1_client_i.h        /^              SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,$/;"    e       enum:tlsv1_client::__anon43
-SERVER_CERTIFICATE_REQUEST     src/tls/tlsv1_server_i.h        /^              SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,$/;"    e       enum:tlsv1_server::__anon39
-SERVER_CHANGE_CIPHER_SPEC      src/tls/tlsv1_client_i.h        /^              SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED, ACK_FINISHED,$/;"   e       enum:tlsv1_client::__anon43
-SERVER_CHANGE_CIPHER_SPEC      src/tls/tlsv1_server_i.h        /^              SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,$/;" e       enum:tlsv1_server::__anon39
-SERVER_FINISHED        src/tls/tlsv1_client_i.h        /^              SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED, ACK_FINISHED,$/;"   e       enum:tlsv1_client::__anon43
-SERVER_FINISHED        src/tls/tlsv1_server_i.h        /^              SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,$/;" e       enum:tlsv1_server::__anon39
-SERVER_HELLO   src/tls/tlsv1_client_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_client::__anon43
-SERVER_HELLO   src/tls/tlsv1_server_i.h        /^              CLIENT_HELLO, SERVER_HELLO, SERVER_CERTIFICATE,$/;"     e       enum:tlsv1_server::__anon39
-SERVER_HELLO_DONE      src/tls/tlsv1_client_i.h        /^              SERVER_HELLO_DONE, CLIENT_KEY_EXCHANGE, CHANGE_CIPHER_SPEC,$/;" e       enum:tlsv1_client::__anon43
-SERVER_HELLO_DONE      src/tls/tlsv1_server_i.h        /^              SERVER_HELLO_DONE, CLIENT_CERTIFICATE, CLIENT_KEY_EXCHANGE,$/;" e       enum:tlsv1_server::__anon39
-SERVER_KEY_EXCHANGE    src/tls/tlsv1_client_i.h        /^              SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,$/;"    e       enum:tlsv1_client::__anon43
-SERVER_KEY_EXCHANGE    src/tls/tlsv1_server_i.h        /^              SERVER_KEY_EXCHANGE, SERVER_CERTIFICATE_REQUEST,$/;"    e       enum:tlsv1_server::__anon39
-SHA1Context    src/crypto/sha1_i.h     /^struct SHA1Context {$/;"      s
-SHA1Final      src/crypto/sha1-internal.c      /^SHA1Final(unsigned char digest[20], SHA1_CTX* context)$/;"    f
-SHA1HANDSOFF   src/crypto/sha1-internal.c      130;"   d       file:
-SHA1Init       src/crypto/sha1-internal.c      /^SHA1Init(SHA1_CTX* context)$/;"       f
-SHA1Transform  src/crypto/sha1-internal.c      /^SHA1Transform(u32 state[5], const unsigned char buffer[64])$/;"       f
-SHA1Update     src/crypto/sha1-internal.c      /^SHA1Update(SHA1_CTX* context, const void *_data, u32 len)$/;" f
-SHA1_CTX       src/crypto/sha1-internal.c      /^typedef struct SHA1Context SHA1_CTX;$/;"      t       typeref:struct:SHA1Context      file:
-SHA1_H include/crypto/sha1.h   16;"    d
-SHA1_I_H       src/crypto/sha1_i.h     16;"    d
-SHA1_MAC_LEN   include/crypto/sha1.h   18;"    d
-SHA256_BLOCK_SIZE      src/crypto/sha256-internal.c    21;"    d       file:
-SHA256_H       include/crypto/sha256.h 16;"    d
-SHA256_MAC_LEN include/crypto/sha256.h 18;"    d
-SHAPrintContext        src/crypto/sha1-internal.c      /^void SHAPrintContext(SHA1_CTX *context, char *msg)$/;"        f
-SHORT_PREAMBLE src/ap/ap_config.h      /^              SHORT_PREAMBLE = 1$/;"  e       enum:hostapd_config::__anon19
-SIG_WPA2       src/eap_peer/eap_i.h    /^enum SIG_WPA2 {$/;"   g
-SIG_WPA2_MAX   src/eap_peer/eap_i.h    /^    SIG_WPA2_MAX,$/;" e       enum:SIG_WPA2
-SIG_WPA2_RX    src/eap_peer/eap_i.h    /^    SIG_WPA2_RX,$/;"  e       enum:SIG_WPA2
-SIG_WPA2_START src/eap_peer/eap_i.h    /^    SIG_WPA2_START = 0,$/;"   e       enum:SIG_WPA2
-SIG_WPA2_TASK_DEL      src/eap_peer/eap_i.h    /^    SIG_WPA2_TASK_DEL,$/;"    e       enum:SIG_WPA2
-SIG_WPS_DISABLE        src/wps/wps.h   /^    SIG_WPS_DISABLE,            \/\/2$/;"     e       enum:wps_sig_type
-SIG_WPS_ENABLE src/wps/wps.h   /^    SIG_WPS_ENABLE = 1,         \/\/1$/;"     e       enum:wps_sig_type
-SIG_WPS_NUM    src/wps/wps.h   /^    SIG_WPS_NUM,                \/\/10$/;"    e       enum:wps_sig_type
-SIG_WPS_RX     src/wps/wps.h   /^    SIG_WPS_RX,                 \/\/4$/;"     e       enum:wps_sig_type
-SIG_WPS_START  src/wps/wps.h   /^    SIG_WPS_START,              \/\/3$/;"     e       enum:wps_sig_type
-SIG_WPS_TIMER_EAPOL_START      src/wps/wps.h   /^    SIG_WPS_TIMER_EAPOL_START,  \/\/9$/;"     e       enum:wps_sig_type
-SIG_WPS_TIMER_MSG_TIMEOUT      src/wps/wps.h   /^    SIG_WPS_TIMER_MSG_TIMEOUT,  \/\/6$/;"     e       enum:wps_sig_type
-SIG_WPS_TIMER_SCAN     src/wps/wps.h   /^    SIG_WPS_TIMER_SCAN,         \/\/8$/;"     e       enum:wps_sig_type
-SIG_WPS_TIMER_SUCCESS_CB       src/wps/wps.h   /^    SIG_WPS_TIMER_SUCCESS_CB,   \/\/7$/;"     e       enum:wps_sig_type
-SIG_WPS_TIMER_TIMEOUT  src/wps/wps.h   /^    SIG_WPS_TIMER_TIMEOUT,      \/\/5$/;"     e       enum:wps_sig_type
-SM_ENTER       src/utils/state_machine.h       101;"   d
-SM_ENTER_GLOBAL        src/utils/state_machine.h       114;"   d
-SM_ENTRY       src/utils/state_machine.h       46;"    d
-SM_ENTRY_M     src/utils/state_machine.h       65;"    d
-SM_ENTRY_MA    src/utils/state_machine.h       83;"    d
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, AUTHENTICATION)$/;" f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, AUTHENTICATION2)$/;"        f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, DISCONNECT)$/;"     f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, DISCONNECTED)$/;"   f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, INITIALIZE)$/;"     f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, INITPMK)$/;"        f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, INITPSK)$/;"        f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, PTKCALCNEGOTIATING)$/;"     f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, PTKCALCNEGOTIATING2)$/;"    f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, PTKINITDONE)$/;"    f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, PTKINITNEGOTIATING)$/;"     f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK, PTKSTART)$/;"       f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK_GROUP, IDLE)$/;"     f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK_GROUP, KEYERROR)$/;" f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK_GROUP, REKEYESTABLISHED)$/;" f
-SM_STATE       src/ap/wpa_auth.c       /^SM_STATE(WPA_PTK_GROUP, REKEYNEGOTIATING)$/;" f
-SM_STATE       src/utils/state_machine.h       32;"    d
-SM_STEP        src/ap/wpa_auth.c       /^SM_STEP(WPA_PTK)$/;"  f
-SM_STEP        src/ap/wpa_auth.c       /^SM_STEP(WPA_PTK_GROUP)$/;"    f
-SM_STEP        src/utils/state_machine.h       126;"   d
-SM_STEP_RUN    src/utils/state_machine.h       136;"   d
-SNonce src/ap/wpa_auth_i.h     /^      u8 SNonce[WPA_NONCE_LEN];$/;"   m       struct:wpa_state_machine
-SP1    src/crypto/des-internal.c       /^static const u32 SP1[64] =$/;"        v       file:
-SP2    src/crypto/des-internal.c       /^static const u32 SP2[64] =$/;"        v       file:
-SP3    src/crypto/des-internal.c       /^static const u32 SP3[64] =$/;"        v       file:
-SP4    src/crypto/des-internal.c       /^static const u32 SP4[64] =$/;"        v       file:
-SP5    src/crypto/des-internal.c       /^static const u32 SP5[64] =$/;"        v       file:
-SP6    src/crypto/des-internal.c       /^static const u32 SP6[64] =$/;"        v       file:
-SP7    src/crypto/des-internal.c       /^static const u32 SP7[64] =$/;"        v       file:
-SP8    src/crypto/des-internal.c       /^static const u32 SP8[64] =$/;"        v       file:
-SSID_LEN       src/ap/wpa_auth.h       149;"   d
-STATE_MACHINE_ADDR     src/ap/wpa_auth.c       34;"    d       file:
-STATE_MACHINE_DATA     src/ap/wpa_auth.c       32;"    d       file:
-STATE_MACHINE_DEBUG_PREFIX     src/ap/wpa_auth.c       33;"    d       file:
-STATE_MACHINE_H        src/utils/state_machine.h       21;"    d
-STA_DEAUTH     src/ap/sta_info.h       /^              STA_NULLFUNC = 0, STA_DISASSOC, STA_DEAUTH, STA_REMOVE$/;"      e       enum:sta_info::__anon15
-STA_DISASSOC   src/ap/sta_info.h       /^              STA_NULLFUNC = 0, STA_DISASSOC, STA_DEAUTH, STA_REMOVE$/;"      e       enum:sta_info::__anon15
-STA_INFO_H     src/ap/sta_info.h       10;"    d
-STA_NULLFUNC   src/ap/sta_info.h       /^              STA_NULLFUNC = 0, STA_DISASSOC, STA_DEAUTH, STA_REMOVE$/;"      e       enum:sta_info::__anon15
-STA_REMOVE     src/ap/sta_info.h       /^              STA_NULLFUNC = 0, STA_DISASSOC, STA_DEAUTH, STA_REMOVE$/;"      e       enum:sta_info::__anon15
-STK_ERR_CPHR_NS        src/common/wpa_common.h /^      STK_ERR_CPHR_NS = 3,$/;"        e       enum:__anon65
-STK_ERR_NO_STSL        src/common/wpa_common.h /^      STK_ERR_NO_STSL = 4$/;" e       enum:__anon65
-STK_ERR_STA_NR src/common/wpa_common.h /^      STK_ERR_STA_NR = 1,$/;" e       enum:__anon65
-STK_ERR_STA_NRSN       src/common/wpa_common.h /^      STK_ERR_STA_NRSN = 2,$/;"       e       enum:__anon65
-STK_MUI_4WAY_STAT_STA  src/common/wpa_common.h /^      STK_MUI_4WAY_STAT_STA = 2,$/;"  e       enum:__anon64
-STK_MUI_4WAY_STA_AP    src/common/wpa_common.h /^      STK_MUI_4WAY_STA_AP = 1,$/;"    e       enum:__anon64
-STK_MUI_GTK    src/common/wpa_common.h /^      STK_MUI_GTK = 3,$/;"    e       enum:__anon64
-STK_MUI_SMK    src/common/wpa_common.h /^      STK_MUI_SMK = 4$/;"     e       enum:__anon64
-STRUCT_PACKED  include/utils/common.h  218;"   d
-STRUCT_PACKED  include/utils/common.h  221;"   d
-STRUCT_PACKED  src/ap/wpa_auth.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ft_r0kh_r1kh_pull_frame
-STRUCT_PACKED  src/ap/wpa_auth.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ft_r0kh_r1kh_push_frame
-STRUCT_PACKED  src/ap/wpa_auth.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ft_r0kh_r1kh_resp_frame
-STRUCT_PACKED  src/ap/wpa_auth.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ft_rrb_frame
-STRUCT_PACKED  src/common/eapol_common.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee802_1x_eapol_key
-STRUCT_PACKED  src/common/eapol_common.h       /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee802_1x_hdr
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^}  STRUCT_PACKED;$/;" v       typeref:struct:wmm_ac_parameter
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee80211_hdr
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee80211_ht_capabilities
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee80211_ht_operation
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:ieee80211_mgmt
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:wmm_information_element
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:wmm_parameter_element
-STRUCT_PACKED  src/common/ieee802_11_defs.h    /^} STRUCT_PACKED;$/;"  v       typeref:struct:wmm_tspec_element
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:rsn_error_kde
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:rsn_ftie
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:rsn_ie_hdr
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:rsn_mdie
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:rsn_rdie
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:wpa_eapol_key
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:wpa_ie_hdr
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:wpa_igtk_kde
-STRUCT_PACKED  src/common/wpa_common.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:wpa_ptk
-STRUCT_PACKED  src/eap_peer/eap_defs.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_expand
-STRUCT_PACKED  src/eap_peer/eap_defs.h /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_hdr
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_crypto_binding_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_hdr
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_intermediate_result_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_nak_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_pac_ack_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_pac_type_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_request_action_tlv
-STRUCT_PACKED  src/eap_peer/eap_tlv_common.h   /^} STRUCT_PACKED;$/;"  v       typeref:struct:eap_tlv_result_tlv
-STRUCT_PACKED  src/rsn_supp/wpa.h      /^} STRUCT_PACKED;$/;"  v       typeref:struct:l2_ethhdr
-SWAP   src/crypto/aes_i.h      115;"   d
-S_SWAP src/crypto/rc4.c        20;"    d       file:
-Sigma0 src/crypto/sha256-internal.c    91;"    d       file:
-Sigma1 src/crypto/sha256-internal.c    92;"    d       file:
-TAB_SIZE       src/crypto/libtommath.h 1906;"  d
-TAB_SIZE       src/crypto/libtommath.h 1908;"  d
-TAB_SIZE       src/tls/libtommath.h    1906;"  d
-TAB_SIZE       src/tls/libtommath.h    1908;"  d
-TAG    include/utils/wpa_debug.h       23;"    d
-TASK_STACK_SIZE_ADD    src/esp_supplicant/esp_wifi_driver.h    22;"    d
-TASK_STACK_SIZE_ADD    src/esp_supplicant/esp_wifi_driver.h    24;"    d
-TD0    src/crypto/aes_i.h      59;"    d
-TD0    src/crypto/aes_i.h      99;"    d
-TD0_   src/crypto/aes_i.h      107;"   d
-TD0_   src/crypto/aes_i.h      67;"    d
-TD1    src/crypto/aes_i.h      100;"   d
-TD1    src/crypto/aes_i.h      60;"    d
-TD1_   src/crypto/aes_i.h      108;"   d
-TD1_   src/crypto/aes_i.h      68;"    d
-TD2    src/crypto/aes_i.h      101;"   d
-TD2    src/crypto/aes_i.h      61;"    d
-TD2_   src/crypto/aes_i.h      109;"   d
-TD2_   src/crypto/aes_i.h      69;"    d
-TD3    src/crypto/aes_i.h      102;"   d
-TD3    src/crypto/aes_i.h      62;"    d
-TD3_   src/crypto/aes_i.h      110;"   d
-TD3_   src/crypto/aes_i.h      70;"    d
-TD41   src/crypto/aes_i.h      103;"   d
-TD41   src/crypto/aes_i.h      63;"    d
-TD42   src/crypto/aes_i.h      104;"   d
-TD42   src/crypto/aes_i.h      64;"    d
-TD43   src/crypto/aes_i.h      105;"   d
-TD43   src/crypto/aes_i.h      65;"    d
-TD44   src/crypto/aes_i.h      106;"   d
-TD44   src/crypto/aes_i.h      66;"    d
-TDLS_PROHIBIT  src/ap/ap_config.h      390;"   d
-TDLS_PROHIBIT_CHAN_SWITCH      src/ap/ap_config.h      391;"   d
-TE0    src/crypto/aes_i.h      41;"    d
-TE0    src/crypto/aes_i.h      81;"    d
-TE1    src/crypto/aes_i.h      42;"    d
-TE1    src/crypto/aes_i.h      82;"    d
-TE2    src/crypto/aes_i.h      43;"    d
-TE2    src/crypto/aes_i.h      83;"    d
-TE3    src/crypto/aes_i.h      44;"    d
-TE3    src/crypto/aes_i.h      84;"    d
-TE4    src/crypto/aes_i.h      57;"    d
-TE4    src/crypto/aes_i.h      97;"    d
-TE41   src/crypto/aes_i.h      45;"    d
-TE41   src/crypto/aes_i.h      85;"    d
-TE411  src/crypto/aes_i.h      53;"    d
-TE411  src/crypto/aes_i.h      93;"    d
-TE414  src/crypto/aes_i.h      52;"    d
-TE414  src/crypto/aes_i.h      92;"    d
-TE42   src/crypto/aes_i.h      46;"    d
-TE42   src/crypto/aes_i.h      86;"    d
-TE421  src/crypto/aes_i.h      49;"    d
-TE421  src/crypto/aes_i.h      89;"    d
-TE422  src/crypto/aes_i.h      54;"    d
-TE422  src/crypto/aes_i.h      94;"    d
-TE43   src/crypto/aes_i.h      47;"    d
-TE43   src/crypto/aes_i.h      87;"    d
-TE432  src/crypto/aes_i.h      50;"    d
-TE432  src/crypto/aes_i.h      90;"    d
-TE433  src/crypto/aes_i.h      55;"    d
-TE433  src/crypto/aes_i.h      95;"    d
-TE44   src/crypto/aes_i.h      48;"    d
-TE44   src/crypto/aes_i.h      88;"    d
-TE443  src/crypto/aes_i.h      51;"    d
-TE443  src/crypto/aes_i.h      91;"    d
-TE444  src/crypto/aes_i.h      56;"    d
-TE444  src/crypto/aes_i.h      96;"    d
-TLSV1_CLIENT_H src/tls/tlsv1_client.h  10;"    d
-TLSV1_CLIENT_I_H       src/tls/tlsv1_client_i.h        10;"    d
-TLSV1_COMMON_H src/tls/tlsv1_common.h  10;"    d
-TLSV1_CRED_H   src/tls/tlsv1_cred.h    10;"    d
-TLSV1_RECORD_H src/tls/tlsv1_record.h  10;"    d
-TLSV1_SERVER_H src/tls/tlsv1_server.h  10;"    d
-TLSV1_SERVER_I_H       src/tls/tlsv1_server_i.h        10;"    d
-TLS_ALERT      src/tls/tls.h   /^      TLS_ALERT$/;"   e       enum:tls_event
-TLS_ALERT_ACCESS_DENIED        src/tls/tlsv1_common.h  145;"   d
-TLS_ALERT_BAD_CERTIFICATE      src/tls/tlsv1_common.h  138;"   d
-TLS_ALERT_BAD_CERTIFICATE_HASH_VALUE   src/tls/tlsv1_common.h  158;"   d
-TLS_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE      src/tls/tlsv1_common.h  157;"   d
-TLS_ALERT_BAD_RECORD_MAC       src/tls/tlsv1_common.h  133;"   d
-TLS_ALERT_CERTIFICATE_EXPIRED  src/tls/tlsv1_common.h  141;"   d
-TLS_ALERT_CERTIFICATE_REVOKED  src/tls/tlsv1_common.h  140;"   d
-TLS_ALERT_CERTIFICATE_UNKNOWN  src/tls/tlsv1_common.h  142;"   d
-TLS_ALERT_CERTIFICATE_UNOBTAINABLE     src/tls/tlsv1_common.h  155;"   d
-TLS_ALERT_CLOSE_NOTIFY src/tls/tlsv1_common.h  131;"   d
-TLS_ALERT_DECODE_ERROR src/tls/tlsv1_common.h  146;"   d
-TLS_ALERT_DECOMPRESSION_FAILURE        src/tls/tlsv1_common.h  136;"   d
-TLS_ALERT_DECRYPTION_FAILED    src/tls/tlsv1_common.h  134;"   d
-TLS_ALERT_DECRYPT_ERROR        src/tls/tlsv1_common.h  147;"   d
-TLS_ALERT_EXPORT_RESTRICTION   src/tls/tlsv1_common.h  148;"   d
-TLS_ALERT_HANDSHAKE_FAILURE    src/tls/tlsv1_common.h  137;"   d
-TLS_ALERT_ILLEGAL_PARAMETER    src/tls/tlsv1_common.h  143;"   d
-TLS_ALERT_INSUFFICIENT_SECURITY        src/tls/tlsv1_common.h  150;"   d
-TLS_ALERT_INTERNAL_ERROR       src/tls/tlsv1_common.h  151;"   d
-TLS_ALERT_LEVEL_FATAL  src/tls/tlsv1_common.h  128;"   d
-TLS_ALERT_LEVEL_WARNING        src/tls/tlsv1_common.h  127;"   d
-TLS_ALERT_NO_RENEGOTIATION     src/tls/tlsv1_common.h  153;"   d
-TLS_ALERT_PROTOCOL_VERSION     src/tls/tlsv1_common.h  149;"   d
-TLS_ALERT_RECORD_OVERFLOW      src/tls/tlsv1_common.h  135;"   d
-TLS_ALERT_UNEXPECTED_MESSAGE   src/tls/tlsv1_common.h  132;"   d
-TLS_ALERT_UNKNOWN_CA   src/tls/tlsv1_common.h  144;"   d
-TLS_ALERT_UNRECOGNIZED_NAME    src/tls/tlsv1_common.h  156;"   d
-TLS_ALERT_UNSUPPORTED_CERTIFICATE      src/tls/tlsv1_common.h  139;"   d
-TLS_ALERT_UNSUPPORTED_EXTENSION        src/tls/tlsv1_common.h  154;"   d
-TLS_ALERT_USER_CANCELED        src/tls/tlsv1_common.h  152;"   d
-TLS_CERT_CHAIN_FAILURE src/tls/tls.h   /^      TLS_CERT_CHAIN_FAILURE,$/;"     e       enum:tls_event
-TLS_CERT_CHAIN_SUCCESS src/tls/tls.h   /^      TLS_CERT_CHAIN_SUCCESS,$/;"     e       enum:tls_event
-TLS_CHANGE_CIPHER_SPEC src/tls/tlsv1_common.h  /^      TLS_CHANGE_CIPHER_SPEC = 1$/;"  e       enum:__anon48
-TLS_CIPHER_3DES_EDE_CBC        src/tls/tlsv1_common.h  /^      TLS_CIPHER_3DES_EDE_CBC,$/;"    e       enum:__anon50
-TLS_CIPHER_AES128_SHA  src/tls/tls.h   /^      TLS_CIPHER_AES128_SHA \/* 0x002f *\/,$/;"       e       enum:__anon38
-TLS_CIPHER_AES_128_CBC src/tls/tlsv1_common.h  /^      TLS_CIPHER_AES_128_CBC,$/;"     e       enum:__anon50
-TLS_CIPHER_AES_256_CBC src/tls/tlsv1_common.h  /^      TLS_CIPHER_AES_256_CBC$/;"      e       enum:__anon50
-TLS_CIPHER_ANON_DH_AES128_SHA  src/tls/tls.h   /^      TLS_CIPHER_ANON_DH_AES128_SHA \/* 0x0034 *\/$/;"        e       enum:__anon38
-TLS_CIPHER_BLOCK       src/tls/tlsv1_common.h  /^      TLS_CIPHER_BLOCK$/;"    e       enum:__anon52
-TLS_CIPHER_DES40_CBC   src/tls/tlsv1_common.h  /^      TLS_CIPHER_DES40_CBC,$/;"       e       enum:__anon50
-TLS_CIPHER_DES_CBC     src/tls/tlsv1_common.h  /^      TLS_CIPHER_DES_CBC,$/;" e       enum:__anon50
-TLS_CIPHER_IDEA_CBC    src/tls/tlsv1_common.h  /^      TLS_CIPHER_IDEA_CBC,$/;"        e       enum:__anon50
-TLS_CIPHER_NONE        src/tls/tls.h   /^      TLS_CIPHER_NONE,$/;"    e       enum:__anon38
-TLS_CIPHER_NULL        src/tls/tlsv1_common.h  /^      TLS_CIPHER_NULL,$/;"    e       enum:__anon50
-TLS_CIPHER_RC2_CBC_40  src/tls/tlsv1_common.h  /^      TLS_CIPHER_RC2_CBC_40,$/;"      e       enum:__anon50
-TLS_CIPHER_RC4_128     src/tls/tlsv1_common.h  /^      TLS_CIPHER_RC4_128,$/;" e       enum:__anon50
-TLS_CIPHER_RC4_40      src/tls/tlsv1_common.h  /^      TLS_CIPHER_RC4_40,$/;"  e       enum:__anon50
-TLS_CIPHER_RC4_SHA     src/tls/tls.h   /^      TLS_CIPHER_RC4_SHA \/* 0x0005 *\/,$/;"  e       enum:__anon38
-TLS_CIPHER_RSA_DHE_AES128_SHA  src/tls/tls.h   /^      TLS_CIPHER_RSA_DHE_AES128_SHA \/* 0x0031 *\/,$/;"       e       enum:__anon38
-TLS_CIPHER_STREAM      src/tls/tlsv1_common.h  /^      TLS_CIPHER_STREAM,$/;"  e       enum:__anon52
-TLS_COMPRESSION_NULL   src/tls/tlsv1_common.h  105;"   d
-TLS_CONN_ALLOW_SIGN_RSA_MD5    src/tls/tls.h   82;"    d
-TLS_CONN_DISABLE_SESSION_TICKET        src/tls/tls.h   84;"    d
-TLS_CONN_DISABLE_TIME_CHECKS   src/tls/tls.h   83;"    d
-TLS_CONN_REQUEST_OCSP  src/tls/tls.h   85;"    d
-TLS_CONN_REQUIRE_OCSP  src/tls/tls.h   86;"    d
-TLS_CONTENT_TYPE_ALERT src/tls/tlsv1_record.h  /^      TLS_CONTENT_TYPE_ALERT = 21,$/;"        e       enum:__anon44
-TLS_CONTENT_TYPE_APPLICATION_DATA      src/tls/tlsv1_record.h  /^      TLS_CONTENT_TYPE_APPLICATION_DATA = 23$/;"      e       enum:__anon44
-TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC    src/tls/tlsv1_record.h  /^      TLS_CONTENT_TYPE_CHANGE_CIPHER_SPEC = 20,$/;"   e       enum:__anon44
-TLS_CONTENT_TYPE_HANDSHAKE     src/tls/tlsv1_record.h  /^      TLS_CONTENT_TYPE_HANDSHAKE = 22,$/;"    e       enum:__anon44
-TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA  src/tls/tlsv1_common.h  67;"    d
-TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA      src/tls/tlsv1_common.h  69;"    d
-TLS_DHE_DSS_WITH_AES_128_CBC_SHA       src/tls/tlsv1_common.h  81;"    d
-TLS_DHE_DSS_WITH_AES_128_CBC_SHA256    src/tls/tlsv1_common.h  95;"    d
-TLS_DHE_DSS_WITH_AES_256_CBC_SHA       src/tls/tlsv1_common.h  87;"    d
-TLS_DHE_DSS_WITH_AES_256_CBC_SHA256    src/tls/tlsv1_common.h  99;"    d
-TLS_DHE_DSS_WITH_DES_CBC_SHA   src/tls/tlsv1_common.h  68;"    d
-TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA  src/tls/tlsv1_common.h  70;"    d
-TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA      src/tls/tlsv1_common.h  72;"    d
-TLS_DHE_RSA_WITH_AES_128_CBC_SHA       src/tls/tlsv1_common.h  82;"    d
-TLS_DHE_RSA_WITH_AES_128_CBC_SHA256    src/tls/tlsv1_common.h  96;"    d
-TLS_DHE_RSA_WITH_AES_256_CBC_SHA       src/tls/tlsv1_common.h  88;"    d
-TLS_DHE_RSA_WITH_AES_256_CBC_SHA256    src/tls/tlsv1_common.h  100;"   d
-TLS_DHE_RSA_WITH_DES_CBC_SHA   src/tls/tlsv1_common.h  71;"    d
-TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA   src/tls/tlsv1_common.h  61;"    d
-TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA       src/tls/tlsv1_common.h  63;"    d
-TLS_DH_DSS_WITH_AES_128_CBC_SHA        src/tls/tlsv1_common.h  79;"    d
-TLS_DH_DSS_WITH_AES_128_CBC_SHA256     src/tls/tlsv1_common.h  93;"    d
-TLS_DH_DSS_WITH_AES_256_CBC_SHA        src/tls/tlsv1_common.h  85;"    d
-TLS_DH_DSS_WITH_AES_256_CBC_SHA256     src/tls/tlsv1_common.h  97;"    d
-TLS_DH_DSS_WITH_DES_CBC_SHA    src/tls/tlsv1_common.h  62;"    d
-TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA   src/tls/tlsv1_common.h  64;"    d
-TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA       src/tls/tlsv1_common.h  66;"    d
-TLS_DH_RSA_WITH_AES_128_CBC_SHA        src/tls/tlsv1_common.h  80;"    d
-TLS_DH_RSA_WITH_AES_128_CBC_SHA256     src/tls/tlsv1_common.h  94;"    d
-TLS_DH_RSA_WITH_AES_256_CBC_SHA        src/tls/tlsv1_common.h  86;"    d
-TLS_DH_RSA_WITH_AES_256_CBC_SHA256     src/tls/tlsv1_common.h  98;"    d
-TLS_DH_RSA_WITH_DES_CBC_SHA    src/tls/tlsv1_common.h  65;"    d
-TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA  src/tls/tlsv1_common.h  75;"    d
-TLS_DH_anon_EXPORT_WITH_RC4_40_MD5     src/tls/tlsv1_common.h  73;"    d
-TLS_DH_anon_WITH_3DES_EDE_CBC_SHA      src/tls/tlsv1_common.h  77;"    d
-TLS_DH_anon_WITH_AES_128_CBC_SHA       src/tls/tlsv1_common.h  83;"    d
-TLS_DH_anon_WITH_AES_128_CBC_SHA256    src/tls/tlsv1_common.h  101;"   d
-TLS_DH_anon_WITH_AES_256_CBC_SHA       src/tls/tlsv1_common.h  89;"    d
-TLS_DH_anon_WITH_AES_256_CBC_SHA256    src/tls/tlsv1_common.h  102;"   d
-TLS_DH_anon_WITH_DES_CBC_SHA   src/tls/tlsv1_common.h  76;"    d
-TLS_DH_anon_WITH_RC4_128_MD5   src/tls/tlsv1_common.h  74;"    d
-TLS_EXT_CLIENT_CERTIFICATE_URL src/tls/tlsv1_common.h  168;"   d
-TLS_EXT_MAX_FRAGMENT_LENGTH    src/tls/tlsv1_common.h  167;"   d
-TLS_EXT_PAC_OPAQUE     src/tls/tlsv1_common.h  174;"   d
-TLS_EXT_SERVER_NAME    src/tls/tlsv1_common.h  166;"   d
-TLS_EXT_SESSION_TICKET src/tls/tlsv1_common.h  172;"   d
-TLS_EXT_STATUS_REQUEST src/tls/tlsv1_common.h  171;"   d
-TLS_EXT_TRUNCATED_HMAC src/tls/tlsv1_common.h  170;"   d
-TLS_EXT_TRUSTED_CA_KEYS        src/tls/tlsv1_common.h  169;"   d
-TLS_FAIL_ALTSUBJECT_MISMATCH   src/tls/tls.h   /^      TLS_FAIL_ALTSUBJECT_MISMATCH = 6,$/;"   e       enum:tls_fail_reason
-TLS_FAIL_BAD_CERTIFICATE       src/tls/tls.h   /^      TLS_FAIL_BAD_CERTIFICATE = 7,$/;"       e       enum:tls_fail_reason
-TLS_FAIL_EXPIRED       src/tls/tls.h   /^      TLS_FAIL_EXPIRED = 4,$/;"       e       enum:tls_fail_reason
-TLS_FAIL_NOT_YET_VALID src/tls/tls.h   /^      TLS_FAIL_NOT_YET_VALID = 3,$/;" e       enum:tls_fail_reason
-TLS_FAIL_REVOKED       src/tls/tls.h   /^      TLS_FAIL_REVOKED = 2,$/;"       e       enum:tls_fail_reason
-TLS_FAIL_SERVER_CHAIN_PROBE    src/tls/tls.h   /^      TLS_FAIL_SERVER_CHAIN_PROBE = 8$/;"     e       enum:tls_fail_reason
-TLS_FAIL_SUBJECT_MISMATCH      src/tls/tls.h   /^      TLS_FAIL_SUBJECT_MISMATCH = 5,$/;"      e       enum:tls_fail_reason
-TLS_FAIL_UNSPECIFIED   src/tls/tls.h   /^      TLS_FAIL_UNSPECIFIED = 0,$/;"   e       enum:tls_fail_reason
-TLS_FAIL_UNTRUSTED     src/tls/tls.h   /^      TLS_FAIL_UNTRUSTED = 1,$/;"     e       enum:tls_fail_reason
-TLS_H  src/tls/tls.h   10;"    d
-TLS_HANDSHAKE_TYPE_CERTIFICATE src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CERTIFICATE = 11,$/;"        e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CERTIFICATE_REQUEST = 13,$/;"        e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CERTIFICATE_STATUS  src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CERTIFICATE_STATUS = 22 \/* RFC 4366 *\/$/;" e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CERTIFICATE_URL     src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CERTIFICATE_URL = 21 \/* RFC 4366 *\/,$/;"   e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY  src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CERTIFICATE_VERIFY = 15,$/;" e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CLIENT_HELLO        src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CLIENT_HELLO = 1,$/;"        e       enum:__anon45
-TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_CLIENT_KEY_EXCHANGE = 16,$/;"        e       enum:__anon45
-TLS_HANDSHAKE_TYPE_FINISHED    src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_FINISHED = 20,$/;"   e       enum:__anon45
-TLS_HANDSHAKE_TYPE_HELLO_REQUEST       src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_HELLO_REQUEST = 0,$/;"       e       enum:__anon45
-TLS_HANDSHAKE_TYPE_NEW_SESSION_TICKET  src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_NEW_SESSION_TICKET = 4 \/* RFC 4507 *\/,$/;" e       enum:__anon45
-TLS_HANDSHAKE_TYPE_SERVER_HELLO        src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_SERVER_HELLO = 2,$/;"        e       enum:__anon45
-TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE   src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_SERVER_HELLO_DONE = 14,$/;"  e       enum:__anon45
-TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE src/tls/tlsv1_common.h  /^      TLS_HANDSHAKE_TYPE_SERVER_KEY_EXCHANGE = 12,$/;"        e       enum:__anon45
-TLS_HASH_ALG_MD5       src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_MD5 = 1,$/;"       e       enum:__anon46
-TLS_HASH_ALG_NONE      src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_NONE = 0,$/;"      e       enum:__anon46
-TLS_HASH_ALG_SHA1      src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_SHA1 = 2,$/;"      e       enum:__anon46
-TLS_HASH_ALG_SHA224    src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_SHA224 = 3,$/;"    e       enum:__anon46
-TLS_HASH_ALG_SHA256    src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_SHA256 = 4,$/;"    e       enum:__anon46
-TLS_HASH_ALG_SHA384    src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_SHA384 = 5,$/;"    e       enum:__anon46
-TLS_HASH_ALG_SHA512    src/tls/tlsv1_common.h  /^      TLS_HASH_ALG_SHA512 = 6$/;"     e       enum:__anon46
-TLS_HASH_MD5   src/tls/tlsv1_common.h  /^      TLS_HASH_MD5,$/;"       e       enum:__anon51
-TLS_HASH_NULL  src/tls/tlsv1_common.h  /^      TLS_HASH_NULL,$/;"      e       enum:__anon51
-TLS_HASH_SHA   src/tls/tlsv1_common.h  /^      TLS_HASH_SHA,$/;"       e       enum:__anon51
-TLS_HASH_SHA256        src/tls/tlsv1_common.h  /^      TLS_HASH_SHA256$/;"     e       enum:__anon51
-TLS_KEY_X_DHE_DSS      src/tls/tlsv1_common.h  /^      TLS_KEY_X_DHE_DSS,$/;"  e       enum:__anon49
-TLS_KEY_X_DHE_DSS_EXPORT       src/tls/tlsv1_common.h  /^      TLS_KEY_X_DHE_DSS_EXPORT,$/;"   e       enum:__anon49
-TLS_KEY_X_DHE_RSA      src/tls/tlsv1_common.h  /^      TLS_KEY_X_DHE_RSA,$/;"  e       enum:__anon49
-TLS_KEY_X_DHE_RSA_EXPORT       src/tls/tlsv1_common.h  /^      TLS_KEY_X_DHE_RSA_EXPORT,$/;"   e       enum:__anon49
-TLS_KEY_X_DH_DSS       src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_DSS,$/;"   e       enum:__anon49
-TLS_KEY_X_DH_DSS_EXPORT        src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_DSS_EXPORT,$/;"    e       enum:__anon49
-TLS_KEY_X_DH_RSA       src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_RSA,$/;"   e       enum:__anon49
-TLS_KEY_X_DH_RSA_EXPORT        src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_RSA_EXPORT,$/;"    e       enum:__anon49
-TLS_KEY_X_DH_anon      src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_anon$/;"   e       enum:__anon49
-TLS_KEY_X_DH_anon_EXPORT       src/tls/tlsv1_common.h  /^      TLS_KEY_X_DH_anon_EXPORT,$/;"   e       enum:__anon49
-TLS_KEY_X_NULL src/tls/tlsv1_common.h  /^      TLS_KEY_X_NULL,$/;"     e       enum:__anon49
-TLS_KEY_X_RSA  src/tls/tlsv1_common.h  /^      TLS_KEY_X_RSA,$/;"      e       enum:__anon49
-TLS_KEY_X_RSA_EXPORT   src/tls/tlsv1_common.h  /^      TLS_KEY_X_RSA_EXPORT,$/;"       e       enum:__anon49
-TLS_MASTER_SECRET_LEN  src/tls/tlsv1_common.h  28;"    d
-TLS_MAX_IV_LEN src/tls/tlsv1_record.h  16;"    d
-TLS_MAX_KEY_BLOCK_LEN  src/tls/tlsv1_record.h  17;"    d
-TLS_MAX_WRITE_KEY_LEN  src/tls/tlsv1_record.h  15;"    d
-TLS_MAX_WRITE_MAC_SECRET_LEN   src/tls/tlsv1_record.h  14;"    d
-TLS_NULL_WITH_NULL_NULL        src/tls/tlsv1_common.h  50;"    d
-TLS_PEER_CERTIFICATE   src/tls/tls.h   /^      TLS_PEER_CERTIFICATE,$/;"       e       enum:tls_event
-TLS_PRE_MASTER_SECRET_LEN      src/tls/tlsv1_common.h  27;"    d
-TLS_RANDOM_LEN src/tls/tlsv1_common.h  26;"    d
-TLS_RECORD_HEADER_LEN  src/tls/tlsv1_record.h  21;"    d
-TLS_RSA_EXPORT_WITH_DES40_CBC_SHA      src/tls/tlsv1_common.h  58;"    d
-TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5     src/tls/tlsv1_common.h  56;"    d
-TLS_RSA_EXPORT_WITH_RC4_40_MD5 src/tls/tlsv1_common.h  53;"    d
-TLS_RSA_WITH_3DES_EDE_CBC_SHA  src/tls/tlsv1_common.h  60;"    d
-TLS_RSA_WITH_AES_128_CBC_SHA   src/tls/tlsv1_common.h  78;"    d
-TLS_RSA_WITH_AES_128_CBC_SHA256        src/tls/tlsv1_common.h  91;"    d
-TLS_RSA_WITH_AES_256_CBC_SHA   src/tls/tlsv1_common.h  84;"    d
-TLS_RSA_WITH_AES_256_CBC_SHA256        src/tls/tlsv1_common.h  92;"    d
-TLS_RSA_WITH_DES_CBC_SHA       src/tls/tlsv1_common.h  59;"    d
-TLS_RSA_WITH_IDEA_CBC_SHA      src/tls/tlsv1_common.h  57;"    d
-TLS_RSA_WITH_NULL_MD5  src/tls/tlsv1_common.h  51;"    d
-TLS_RSA_WITH_NULL_SHA  src/tls/tlsv1_common.h  52;"    d
-TLS_RSA_WITH_NULL_SHA256       src/tls/tlsv1_common.h  90;"    d
-TLS_RSA_WITH_RC4_128_MD5       src/tls/tlsv1_common.h  54;"    d
-TLS_RSA_WITH_RC4_128_SHA       src/tls/tlsv1_common.h  55;"    d
-TLS_SEQ_NUM_LEN        src/tls/tlsv1_record.h  20;"    d
-TLS_SESSION_ID_MAX_LEN src/tls/tlsv1_common.h  29;"    d
-TLS_SET_PARAMS_ENGINE_PRV_INIT_FAILED  src/tls/tls.h   /^      TLS_SET_PARAMS_ENGINE_PRV_INIT_FAILED = -2$/;"  e       enum:__anon37
-TLS_SET_PARAMS_ENGINE_PRV_VERIFY_FAILED        src/tls/tls.h   /^      TLS_SET_PARAMS_ENGINE_PRV_VERIFY_FAILED = -3,$/;"       e       enum:__anon37
-TLS_SIGN_ALG_ANONYMOUS src/tls/tlsv1_common.h  /^      TLS_SIGN_ALG_ANONYMOUS = 0,$/;" e       enum:__anon47
-TLS_SIGN_ALG_DSA       src/tls/tlsv1_common.h  /^      TLS_SIGN_ALG_DSA = 2,$/;"       e       enum:__anon47
-TLS_SIGN_ALG_ECDSA     src/tls/tlsv1_common.h  /^      TLS_SIGN_ALG_ECDSA = 3,$/;"     e       enum:__anon47
-TLS_SIGN_ALG_RSA       src/tls/tlsv1_common.h  /^      TLS_SIGN_ALG_RSA = 1,$/;"       e       enum:__anon47
-TLS_VERIFY_DATA_LEN    src/tls/tlsv1_common.h  30;"    d
-TLS_VERSION    src/tls/tlsv1_common.h  18;"    d
-TLS_VERSION    src/tls/tlsv1_common.h  21;"    d
-TLS_VERSION    src/tls/tlsv1_common.h  23;"    d
-TLS_VERSION_1  src/tls/tlsv1_common.h  14;"    d
-TLS_VERSION_1_1        src/tls/tlsv1_common.h  15;"    d
-TLS_VERSION_1_2        src/tls/tlsv1_common.h  16;"    d
-TRUE   src/common/defs.h       /^typedef enum { FALSE = 0, TRUE = 1 } Boolean;$/;"     e       enum:__anon87
-TRUE   src/common/defs.h       22;"    d
-TX_BEAMFORM_CAP_CALIB_OFFSET   src/common/ieee802_11_defs.h    426;"   d
-TX_BEAMFORM_CAP_COMPRESSED_STEERING_MATRIX_BEAMFORMER_ANT_OFFSET       src/common/ieee802_11_defs.h    436;"   d
-TX_BEAMFORM_CAP_CSI_NUM_BEAMFORMER_ANT_OFFSET  src/common/ieee802_11_defs.h    434;"   d
-TX_BEAMFORM_CAP_EXPLICIT_BF_CSI_FEEDBACK_CAP   src/common/ieee802_11_defs.h    429;"   d
-TX_BEAMFORM_CAP_EXPLICIT_BF_CSI_FEEDBACK_OFFSET        src/common/ieee802_11_defs.h    430;"   d
-TX_BEAMFORM_CAP_EXPLICIT_COMPRESSED_STEERING_MATRIX_FEEDBACK_OFFSET    src/common/ieee802_11_defs.h    432;"   d
-TX_BEAMFORM_CAP_EXPLICIT_CSI_TXBF_CAP  src/common/ieee802_11_defs.h    427;"   d
-TX_BEAMFORM_CAP_EXPLICIT_UNCOMPR_STEERING_MATRIX_CAP   src/common/ieee802_11_defs.h    428;"   d
-TX_BEAMFORM_CAP_EXPLICIT_UNCOMPR_STEERING_MATRIX_FEEDBACK_OFFSET       src/common/ieee802_11_defs.h    431;"   d
-TX_BEAMFORM_CAP_IMPLICIT_ZLF_CAP       src/common/ieee802_11_defs.h    425;"   d
-TX_BEAMFORM_CAP_MINIMAL_GROUPING_OFFSET        src/common/ieee802_11_defs.h    433;"   d
-TX_BEAMFORM_CAP_RX_STAGGERED_SOUNDING_CAP      src/common/ieee802_11_defs.h    421;"   d
-TX_BEAMFORM_CAP_RX_ZLF_CAP     src/common/ieee802_11_defs.h    423;"   d
-TX_BEAMFORM_CAP_SCI_MAX_OF_ROWS_BEANFORMER_SUPPORTED_OFFSET    src/common/ieee802_11_defs.h    437;"   d
-TX_BEAMFORM_CAP_TXBF_CAP       src/common/ieee802_11_defs.h    420;"   d
-TX_BEAMFORM_CAP_TX_STAGGERED_SOUNDING_CAP      src/common/ieee802_11_defs.h    422;"   d
-TX_BEAMFORM_CAP_TX_ZLF_CAP     src/common/ieee802_11_defs.h    424;"   d
-TX_BEAMFORM_CAP_UNCOMPRESSED_STEERING_MATRIX_BEAMFORMER_ANT_OFFSET     src/common/ieee802_11_defs.h    435;"   d
-Td0    src/crypto/aes-internal.c       /^const u32 Td0[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Td1    src/crypto/aes-internal.c       /^const u32 Td1[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Td2    src/crypto/aes-internal.c       /^const u32 Td2[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Td3    src/crypto/aes-internal.c       /^const u32 Td3[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Td4    src/crypto/aes-internal.c       /^const u32 Td4[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Td4s   src/crypto/aes-internal.c       /^const u8 Td4s[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Te0    src/crypto/aes-internal.c       /^const u32 Te0[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Te1    src/crypto/aes-internal.c       /^const u32 Te1[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Te2    src/crypto/aes-internal.c       /^const u32 Te2[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Te3    src/crypto/aes-internal.c       /^const u32 Te3[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-Te4    src/crypto/aes-internal.c       /^const u32 Te4[256] \/* ICACHE_RODATA_ATTR *\/ = {$/;" v
-TimeoutCtr     src/ap/wpa_auth_i.h     /^      int TimeoutCtr;$/;"     m       struct:wpa_state_machine
-TimeoutEvt     src/ap/wpa_auth_i.h     /^      Boolean TimeoutEvt;$/;" m       struct:wpa_state_machine
-USERNAME_LEN_MAX       src/esp_supplicant/esp_wpa_enterprise.c 969;"   d       file:
-USE_EXTERNAL_RADIUS_AUTH       src/ap/ap_config.h      /^              USE_EXTERNAL_RADIUS_AUTH = 2$/;"        e       enum:hostapd_bss_config::__anon17
-UUID_H src/utils/uuid.h        10;"    d
-UUID_LEN       src/utils/uuid.h        12;"    d
-VENDOR_HT_CAPAB_OUI_TYPE       src/common/ieee802_11_defs.h    592;"   d
-WEPKEY_64_BYTES        include/crypto/wepkey.h 4;"     d
-WEPKEY_H       include/crypto/wepkey.h 2;"     d
-WFA_ELEM_AUTHORIZEDMACS        src/wps/wps_defs.h      /^      WFA_ELEM_AUTHORIZEDMACS = 0x01,$/;"     e       enum:__anon55
-WFA_ELEM_NETWORK_KEY_SHAREABLE src/wps/wps_defs.h      /^      WFA_ELEM_NETWORK_KEY_SHAREABLE = 0x02,$/;"      e       enum:__anon55
-WFA_ELEM_REQUEST_TO_ENROLL     src/wps/wps_defs.h      /^      WFA_ELEM_REQUEST_TO_ENROLL = 0x03,$/;"  e       enum:__anon55
-WFA_ELEM_SETTINGS_DELAY_TIME   src/wps/wps_defs.h      /^      WFA_ELEM_SETTINGS_DELAY_TIME = 0x04$/;" e       enum:__anon55
-WFA_ELEM_VERSION2      src/wps/wps_defs.h      /^      WFA_ELEM_VERSION2 = 0x00,$/;"   e       enum:__anon55
-WIFI_APPIE_ASSOC_REQ   src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_ASSOC_REQ,$/;" e       enum:__anon28
-WIFI_APPIE_ASSOC_RESP  src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_ASSOC_RESP,$/;"        e       enum:__anon28
-WIFI_APPIE_COUNTRY     src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_COUNTRY,$/;"   e       enum:__anon28
-WIFI_APPIE_ESP_MANUFACTOR      src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_ESP_MANUFACTOR,$/;"    e       enum:__anon28
-WIFI_APPIE_FREQ_ERROR  src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_FREQ_ERROR,$/;"        e       enum:__anon28
-WIFI_APPIE_MAX src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_MAX,$/;"       e       enum:__anon28
-WIFI_APPIE_MESH_QUICK  src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_MESH_QUICK,$/;"        e       enum:__anon28
-WIFI_APPIE_PROBEREQ    src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_PROBEREQ = 0,$/;"      e       enum:__anon28
-WIFI_APPIE_RSN src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_RSN,$/;"       e       enum:__anon28
-WIFI_APPIE_WPA src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_WPA,$/;"       e       enum:__anon28
-WIFI_APPIE_WPS_AR      src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_WPS_AR,$/;"    e       enum:__anon28
-WIFI_APPIE_WPS_PR      src/esp_supplicant/esp_wifi_driver.h    /^    WIFI_APPIE_WPS_PR,$/;"    e       enum:__anon28
-WIFI_CAPINFO_PRIVACY   src/wps/wps.h   1063;"  d
-WIFI_TID_SIZE  src/esp_supplicant/esp_wifi_driver.h    144;"   d
-WIFI_TXCB_EAPOL_ID     src/esp_supplicant/esp_wifi_driver.h    134;"   d
-WLAN_ACTION_BLOCK_ACK  src/common/ieee802_11_defs.h    216;"   d
-WLAN_ACTION_DLS        src/common/ieee802_11_defs.h    215;"   d
-WLAN_ACTION_FT src/common/ieee802_11_defs.h    219;"   d
-WLAN_ACTION_HT src/common/ieee802_11_defs.h    220;"   d
-WLAN_ACTION_PUBLIC     src/common/ieee802_11_defs.h    217;"   d
-WLAN_ACTION_QOS        src/common/ieee802_11_defs.h    214;"   d
-WLAN_ACTION_RADIO_MEASUREMENT  src/common/ieee802_11_defs.h    218;"   d
-WLAN_ACTION_SA_QUERY   src/common/ieee802_11_defs.h    221;"   d
-WLAN_ACTION_SPECTRUM_MGMT      src/common/ieee802_11_defs.h    213;"   d
-WLAN_ACTION_WMM        src/common/ieee802_11_defs.h    222;"   d
-WLAN_AKM_SUITE_8021X   src/common/ieee802_11_defs.h    604;"   d
-WLAN_AKM_SUITE_PSK     src/common/ieee802_11_defs.h    605;"   d
-WLAN_AUTH_CHALLENGE_LEN        src/common/ieee802_11_defs.h    81;"    d
-WLAN_AUTH_FT   src/common/ieee802_11_defs.h    78;"    d
-WLAN_AUTH_LEAP src/common/ieee802_11_defs.h    79;"    d
-WLAN_AUTH_OPEN src/common/ieee802_11_defs.h    76;"    d
-WLAN_AUTH_SHARED_KEY   src/common/ieee802_11_defs.h    77;"    d
-WLAN_CAPABILITY_CF_POLLABLE    src/common/ieee802_11_defs.h    85;"    d
-WLAN_CAPABILITY_CF_POLL_REQUEST        src/common/ieee802_11_defs.h    86;"    d
-WLAN_CAPABILITY_CHANNEL_AGILITY        src/common/ieee802_11_defs.h    90;"    d
-WLAN_CAPABILITY_DSSS_OFDM      src/common/ieee802_11_defs.h    93;"    d
-WLAN_CAPABILITY_ESS    src/common/ieee802_11_defs.h    83;"    d
-WLAN_CAPABILITY_IBSS   src/common/ieee802_11_defs.h    84;"    d
-WLAN_CAPABILITY_PBCC   src/common/ieee802_11_defs.h    89;"    d
-WLAN_CAPABILITY_PRIVACY        src/common/ieee802_11_defs.h    87;"    d
-WLAN_CAPABILITY_SHORT_PREAMBLE src/common/ieee802_11_defs.h    88;"    d
-WLAN_CAPABILITY_SHORT_SLOT_TIME        src/common/ieee802_11_defs.h    92;"    d
-WLAN_CAPABILITY_SPECTRUM_MGMT  src/common/ieee802_11_defs.h    91;"    d
-WLAN_CIPHER_SUITE_AES_CMAC     src/common/ieee802_11_defs.h    601;"   d
-WLAN_CIPHER_SUITE_CCMP src/common/ieee802_11_defs.h    599;"   d
-WLAN_CIPHER_SUITE_TKIP src/common/ieee802_11_defs.h    597;"   d
-WLAN_CIPHER_SUITE_USE_GROUP    src/common/ieee802_11_defs.h    595;"   d
-WLAN_CIPHER_SUITE_WEP104       src/common/ieee802_11_defs.h    600;"   d
-WLAN_CIPHER_SUITE_WEP40        src/common/ieee802_11_defs.h    596;"   d
-WLAN_EID_20_40_BSS_COEXISTENCE src/common/ieee802_11_defs.h    205;"   d
-WLAN_EID_20_40_BSS_INTOLERANT  src/common/ieee802_11_defs.h    206;"   d
-WLAN_EID_CF_PARAMS     src/common/ieee802_11_defs.h    178;"   d
-WLAN_EID_CHALLENGE     src/common/ieee802_11_defs.h    182;"   d
-WLAN_EID_CHANNEL_SWITCH        src/common/ieee802_11_defs.h    189;"   d
-WLAN_EID_COUNTRY       src/common/ieee802_11_defs.h    181;"   d
-WLAN_EID_DS_PARAMS     src/common/ieee802_11_defs.h    177;"   d
-WLAN_EID_ERP_INFO      src/common/ieee802_11_defs.h    195;"   d
-WLAN_EID_EXT_SUPP_RATES        src/common/ieee802_11_defs.h    198;"   d
-WLAN_EID_FAST_BSS_TRANSITION   src/common/ieee802_11_defs.h    200;"   d
-WLAN_EID_FH_PARAMS     src/common/ieee802_11_defs.h    176;"   d
-WLAN_EID_HT_CAP        src/common/ieee802_11_defs.h    196;"   d
-WLAN_EID_HT_OPERATION  src/common/ieee802_11_defs.h    203;"   d
-WLAN_EID_IBSS_DFS      src/common/ieee802_11_defs.h    193;"   d
-WLAN_EID_IBSS_PARAMS   src/common/ieee802_11_defs.h    180;"   d
-WLAN_EID_MEASURE_REPORT        src/common/ieee802_11_defs.h    191;"   d
-WLAN_EID_MEASURE_REQUEST       src/common/ieee802_11_defs.h    190;"   d
-WLAN_EID_MMIE  src/common/ieee802_11_defs.h    208;"   d
-WLAN_EID_MOBILITY_DOMAIN       src/common/ieee802_11_defs.h    199;"   d
-WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS   src/common/ieee802_11_defs.h    207;"   d
-WLAN_EID_PWR_CAPABILITY        src/common/ieee802_11_defs.h    185;"   d
-WLAN_EID_PWR_CONSTRAINT        src/common/ieee802_11_defs.h    184;"   d
-WLAN_EID_QUITE src/common/ieee802_11_defs.h    192;"   d
-WLAN_EID_RIC_DATA      src/common/ieee802_11_defs.h    202;"   d
-WLAN_EID_RSN   src/common/ieee802_11_defs.h    197;"   d
-WLAN_EID_SECONDARY_CHANNEL_OFFSET      src/common/ieee802_11_defs.h    204;"   d
-WLAN_EID_SSID  src/common/ieee802_11_defs.h    174;"   d
-WLAN_EID_SUPPORTED_CHANNELS    src/common/ieee802_11_defs.h    188;"   d
-WLAN_EID_SUPP_RATES    src/common/ieee802_11_defs.h    175;"   d
-WLAN_EID_TIM   src/common/ieee802_11_defs.h    179;"   d
-WLAN_EID_TIMEOUT_INTERVAL      src/common/ieee802_11_defs.h    201;"   d
-WLAN_EID_TPC_REPORT    src/common/ieee802_11_defs.h    187;"   d
-WLAN_EID_TPC_REQUEST   src/common/ieee802_11_defs.h    186;"   d
-WLAN_EID_VENDOR_SPECIFIC       src/common/ieee802_11_defs.h    209;"   d
-WLAN_FC_FROMDS src/common/ieee802_11_defs.h    23;"    d
-WLAN_FC_GET_STYPE      src/common/ieee802_11_defs.h    32;"    d
-WLAN_FC_GET_TYPE       src/common/ieee802_11_defs.h    31;"    d
-WLAN_FC_ISWEP  src/common/ieee802_11_defs.h    28;"    d
-WLAN_FC_MOREDATA       src/common/ieee802_11_defs.h    27;"    d
-WLAN_FC_MOREFRAG       src/common/ieee802_11_defs.h    24;"    d
-WLAN_FC_ORDER  src/common/ieee802_11_defs.h    29;"    d
-WLAN_FC_PVER   src/common/ieee802_11_defs.h    21;"    d
-WLAN_FC_PWRMGT src/common/ieee802_11_defs.h    26;"    d
-WLAN_FC_RETRY  src/common/ieee802_11_defs.h    25;"    d
-WLAN_FC_STYPE_ACK      src/common/ieee802_11_defs.h    60;"    d
-WLAN_FC_STYPE_ACTION   src/common/ieee802_11_defs.h    54;"    d
-WLAN_FC_STYPE_ASSOC_REQ        src/common/ieee802_11_defs.h    43;"    d
-WLAN_FC_STYPE_ASSOC_RESP       src/common/ieee802_11_defs.h    44;"    d
-WLAN_FC_STYPE_ATIM     src/common/ieee802_11_defs.h    50;"    d
-WLAN_FC_STYPE_AUTH     src/common/ieee802_11_defs.h    52;"    d
-WLAN_FC_STYPE_BEACON   src/common/ieee802_11_defs.h    49;"    d
-WLAN_FC_STYPE_CFACK    src/common/ieee802_11_defs.h    70;"    d
-WLAN_FC_STYPE_CFACKPOLL        src/common/ieee802_11_defs.h    72;"    d
-WLAN_FC_STYPE_CFEND    src/common/ieee802_11_defs.h    61;"    d
-WLAN_FC_STYPE_CFENDACK src/common/ieee802_11_defs.h    62;"    d
-WLAN_FC_STYPE_CFPOLL   src/common/ieee802_11_defs.h    71;"    d
-WLAN_FC_STYPE_CTS      src/common/ieee802_11_defs.h    59;"    d
-WLAN_FC_STYPE_DATA     src/common/ieee802_11_defs.h    65;"    d
-WLAN_FC_STYPE_DATA_CFACK       src/common/ieee802_11_defs.h    66;"    d
-WLAN_FC_STYPE_DATA_CFACKPOLL   src/common/ieee802_11_defs.h    68;"    d
-WLAN_FC_STYPE_DATA_CFPOLL      src/common/ieee802_11_defs.h    67;"    d
-WLAN_FC_STYPE_DEAUTH   src/common/ieee802_11_defs.h    53;"    d
-WLAN_FC_STYPE_DISASSOC src/common/ieee802_11_defs.h    51;"    d
-WLAN_FC_STYPE_NULLFUNC src/common/ieee802_11_defs.h    69;"    d
-WLAN_FC_STYPE_PROBE_REQ        src/common/ieee802_11_defs.h    47;"    d
-WLAN_FC_STYPE_PROBE_RESP       src/common/ieee802_11_defs.h    48;"    d
-WLAN_FC_STYPE_PSPOLL   src/common/ieee802_11_defs.h    57;"    d
-WLAN_FC_STYPE_QOS_DATA src/common/ieee802_11_defs.h    73;"    d
-WLAN_FC_STYPE_REASSOC_REQ      src/common/ieee802_11_defs.h    45;"    d
-WLAN_FC_STYPE_REASSOC_RESP     src/common/ieee802_11_defs.h    46;"    d
-WLAN_FC_STYPE_RTS      src/common/ieee802_11_defs.h    58;"    d
-WLAN_FC_TODS   src/common/ieee802_11_defs.h    22;"    d
-WLAN_FC_TYPE_CTRL      src/common/ieee802_11_defs.h    39;"    d
-WLAN_FC_TYPE_DATA      src/common/ieee802_11_defs.h    40;"    d
-WLAN_FC_TYPE_MGMT      src/common/ieee802_11_defs.h    38;"    d
-WLAN_GET_SEQ_FRAG      src/common/ieee802_11_defs.h    34;"    d
-WLAN_GET_SEQ_SEQ       src/common/ieee802_11_defs.h    35;"    d
-WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT     src/common/ieee802_11_defs.h    161;"   d
-WLAN_REASON_AKMP_NOT_VALID     src/common/ieee802_11_defs.h    166;"   d
-WLAN_REASON_CIPHER_SUITE_REJECTED      src/common/ieee802_11_defs.h    170;"   d
-WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA      src/common/ieee802_11_defs.h    151;"   d
-WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA     src/common/ieee802_11_defs.h    152;"   d
-WLAN_REASON_DEAUTH_LEAVING     src/common/ieee802_11_defs.h    148;"   d
-WLAN_REASON_DISASSOC_AP_BUSY   src/common/ieee802_11_defs.h    150;"   d
-WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY src/common/ieee802_11_defs.h    149;"   d
-WLAN_REASON_DISASSOC_STA_HAS_LEFT      src/common/ieee802_11_defs.h    153;"   d
-WLAN_REASON_GROUP_CIPHER_NOT_VALID     src/common/ieee802_11_defs.h    164;"   d
-WLAN_REASON_GROUP_KEY_UPDATE_TIMEOUT   src/common/ieee802_11_defs.h    162;"   d
-WLAN_REASON_IEEE_802_1X_AUTH_FAILED    src/common/ieee802_11_defs.h    169;"   d
-WLAN_REASON_IE_IN_4WAY_DIFFERS src/common/ieee802_11_defs.h    163;"   d
-WLAN_REASON_INVALID_IE src/common/ieee802_11_defs.h    159;"   d
-WLAN_REASON_INVALID_RSN_IE_CAPAB       src/common/ieee802_11_defs.h    168;"   d
-WLAN_REASON_MICHAEL_MIC_FAILURE        src/common/ieee802_11_defs.h    160;"   d
-WLAN_REASON_PAIRWISE_CIPHER_NOT_VALID  src/common/ieee802_11_defs.h    165;"   d
-WLAN_REASON_PREV_AUTH_NOT_VALID        src/common/ieee802_11_defs.h    147;"   d
-WLAN_REASON_PWR_CAPABILITY_NOT_VALID   src/common/ieee802_11_defs.h    156;"   d
-WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH src/common/ieee802_11_defs.h    154;"   d
-WLAN_REASON_SUPPORTED_CHANNEL_NOT_VALID        src/common/ieee802_11_defs.h    157;"   d
-WLAN_REASON_UNSPECIFIED        src/common/ieee802_11_defs.h    146;"   d
-WLAN_REASON_UNSUPPORTED_RSN_IE_VERSION src/common/ieee802_11_defs.h    167;"   d
-WLAN_SA_QUERY_REQUEST  src/common/ieee802_11_defs.h    225;"   d
-WLAN_SA_QUERY_RESPONSE src/common/ieee802_11_defs.h    226;"   d
-WLAN_SA_QUERY_TR_ID_LEN        src/common/ieee802_11_defs.h    228;"   d
-WLAN_STATUS_AKMP_NOT_VALID     src/common/ieee802_11_defs.h    130;"   d
-WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA        src/common/ieee802_11_defs.h    105;"   d
-WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE  src/common/ieee802_11_defs.h    138;"   d
-WLAN_STATUS_ASSOC_DENIED_NOAGILITY     src/common/ieee802_11_defs.h    110;"   d
-WLAN_STATUS_ASSOC_DENIED_NOPBCC        src/common/ieee802_11_defs.h    109;"   d
-WLAN_STATUS_ASSOC_DENIED_NOSHORT       src/common/ieee802_11_defs.h    108;"   d
-WLAN_STATUS_ASSOC_DENIED_NO_DSSS_OFDM  src/common/ieee802_11_defs.h    118;"   d
-WLAN_STATUS_ASSOC_DENIED_NO_ER_PBCC    src/common/ieee802_11_defs.h    117;"   d
-WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME    src/common/ieee802_11_defs.h    116;"   d
-WLAN_STATUS_ASSOC_DENIED_RATES src/common/ieee802_11_defs.h    106;"   d
-WLAN_STATUS_ASSOC_DENIED_UNSPEC        src/common/ieee802_11_defs.h    100;"   d
-WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY src/common/ieee802_11_defs.h    121;"   d
-WLAN_STATUS_AUTH_TIMEOUT       src/common/ieee802_11_defs.h    104;"   d
-WLAN_STATUS_CAPS_UNSUPPORTED   src/common/ieee802_11_defs.h    98;"    d
-WLAN_STATUS_CHALLENGE_FAIL     src/common/ieee802_11_defs.h    103;"   d
-WLAN_STATUS_CIPHER_REJECTED_PER_POLICY src/common/ieee802_11_defs.h    133;"   d
-WLAN_STATUS_DEST_STA_NOT_PRESENT       src/common/ieee802_11_defs.h    136;"   d
-WLAN_STATUS_DEST_STA_NOT_QOS_STA       src/common/ieee802_11_defs.h    137;"   d
-WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED    src/common/ieee802_11_defs.h    135;"   d
-WLAN_STATUS_GROUP_CIPHER_NOT_VALID     src/common/ieee802_11_defs.h    128;"   d
-WLAN_STATUS_INVALID_FTIE       src/common/ieee802_11_defs.h    143;"   d
-WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT      src/common/ieee802_11_defs.h    140;"   d
-WLAN_STATUS_INVALID_IE src/common/ieee802_11_defs.h    127;"   d
-WLAN_STATUS_INVALID_MDIE       src/common/ieee802_11_defs.h    142;"   d
-WLAN_STATUS_INVALID_PARAMETERS src/common/ieee802_11_defs.h    125;"   d
-WLAN_STATUS_INVALID_PMKID      src/common/ieee802_11_defs.h    141;"   d
-WLAN_STATUS_INVALID_RSN_IE_CAPAB       src/common/ieee802_11_defs.h    132;"   d
-WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG     src/common/ieee802_11_defs.h    101;"   d
-WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID  src/common/ieee802_11_defs.h    129;"   d
-WLAN_STATUS_PWR_CAPABILITY_NOT_VALID   src/common/ieee802_11_defs.h    113;"   d
-WLAN_STATUS_R0KH_UNREACHABLE   src/common/ieee802_11_defs.h    119;"   d
-WLAN_STATUS_REASSOC_NO_ASSOC   src/common/ieee802_11_defs.h    99;"    d
-WLAN_STATUS_REQUEST_DECLINED   src/common/ieee802_11_defs.h    124;"   d
-WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION src/common/ieee802_11_defs.h    122;"   d
-WLAN_STATUS_SPEC_MGMT_REQUIRED src/common/ieee802_11_defs.h    112;"   d
-WLAN_STATUS_SUCCESS    src/common/ieee802_11_defs.h    96;"    d
-WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID        src/common/ieee802_11_defs.h    114;"   d
-WLAN_STATUS_TS_NOT_CREATED     src/common/ieee802_11_defs.h    134;"   d
-WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION   src/common/ieee802_11_defs.h    102;"   d
-WLAN_STATUS_UNSPECIFIED_FAILURE        src/common/ieee802_11_defs.h    97;"    d
-WLAN_STATUS_UNSPECIFIED_QOS_FAILURE    src/common/ieee802_11_defs.h    123;"   d
-WLAN_STATUS_UNSUPPORTED_RSN_IE_VERSION src/common/ieee802_11_defs.h    131;"   d
-WLAN_STA_ASSOC src/ap/sta_info.h       14;"    d
-WLAN_STA_ASSOC_REQ_OK  src/ap/sta_info.h       28;"    d
-WLAN_STA_AUTH  src/ap/sta_info.h       13;"    d
-WLAN_STA_AUTHORIZED    src/ap/sta_info.h       18;"    d
-WLAN_STA_GAS   src/ap/sta_info.h       30;"    d
-WLAN_STA_HT    src/ap/sta_info.h       24;"    d
-WLAN_STA_MAYBE_WPS     src/ap/sta_info.h       26;"    d
-WLAN_STA_MFP   src/ap/sta_info.h       23;"    d
-WLAN_STA_NONERP        src/ap/sta_info.h       34;"    d
-WLAN_STA_PENDING_DEAUTH_CB     src/ap/sta_info.h       33;"    d
-WLAN_STA_PENDING_DISASSOC_CB   src/ap/sta_info.h       32;"    d
-WLAN_STA_PENDING_POLL  src/ap/sta_info.h       19;"    d
-WLAN_STA_PERM  src/ap/sta_info.h       17;"    d
-WLAN_STA_PREAUTH       src/ap/sta_info.h       21;"    d
-WLAN_STA_PS    src/ap/sta_info.h       15;"    d
-WLAN_STA_SHORT_PREAMBLE        src/ap/sta_info.h       20;"    d
-WLAN_STA_TIM   src/ap/sta_info.h       16;"    d
-WLAN_STA_VHT   src/ap/sta_info.h       31;"    d
-WLAN_STA_WDS   src/ap/sta_info.h       27;"    d
-WLAN_STA_WMM   src/ap/sta_info.h       22;"    d
-WLAN_STA_WPS   src/ap/sta_info.h       25;"    d
-WLAN_STA_WPS2  src/ap/sta_info.h       29;"    d
-WLAN_SUPP_RATES_MAX    src/ap/sta_info.h       38;"    d
-WLAN_TIMEOUT_ASSOC_COMEBACK    src/common/ieee802_11_defs.h    233;"   d
-WLAN_TIMEOUT_KEY_LIFETIME      src/common/ieee802_11_defs.h    232;"   d
-WLAN_TIMEOUT_REASSOC_DEADLINE  src/common/ieee802_11_defs.h    231;"   d
-WMM_ACTION_CODE_ADDTS_REQ      src/common/ieee802_11_defs.h    488;"   d
-WMM_ACTION_CODE_ADDTS_RESP     src/common/ieee802_11_defs.h    489;"   d
-WMM_ACTION_CODE_DELTS  src/common/ieee802_11_defs.h    490;"   d
-WMM_AC_ACI_MASK        src/common/ieee802_11_defs.h    522;"   d
-WMM_AC_ACI_SHIFT       src/common/ieee802_11_defs.h    523;"   d
-WMM_AC_ACM     src/common/ieee802_11_defs.h    521;"   d
-WMM_AC_AIFNS_SHIFT     src/common/ieee802_11_defs.h    520;"   d
-WMM_AC_AIFSN_MASK      src/common/ieee802_11_defs.h    519;"   d
-WMM_AC_BE      src/common/ieee802_11_defs.h    /^      WMM_AC_BE = 0 \/* Best Effort *\/,$/;"  e       enum:__anon84
-WMM_AC_BK      src/common/ieee802_11_defs.h    /^      WMM_AC_BK = 1 \/* Background *\/,$/;"   e       enum:__anon84
-WMM_AC_ECWMAX_MASK     src/common/ieee802_11_defs.h    527;"   d
-WMM_AC_ECWMAX_SHIFT    src/common/ieee802_11_defs.h    528;"   d
-WMM_AC_ECWMIN_MASK     src/common/ieee802_11_defs.h    525;"   d
-WMM_AC_ECWMIN_SHIFT    src/common/ieee802_11_defs.h    526;"   d
-WMM_AC_VI      src/common/ieee802_11_defs.h    /^      WMM_AC_VI = 2 \/* Video *\/,$/;"        e       enum:__anon84
-WMM_AC_VO      src/common/ieee802_11_defs.h    /^      WMM_AC_VO = 3 \/* Voice *\/$/;" e       enum:__anon84
-WMM_ADDTS_STATUS_ADMISSION_ACCEPTED    src/common/ieee802_11_defs.h    492;"   d
-WMM_ADDTS_STATUS_INVALID_PARAMETERS    src/common/ieee802_11_defs.h    493;"   d
-WMM_ADDTS_STATUS_REFUSED       src/common/ieee802_11_defs.h    495;"   d
-WMM_OUI_SUBTYPE_INFORMATION_ELEMENT    src/common/ieee802_11_defs.h    483;"   d
-WMM_OUI_SUBTYPE_PARAMETER_ELEMENT      src/common/ieee802_11_defs.h    484;"   d
-WMM_OUI_SUBTYPE_TSPEC_ELEMENT  src/common/ieee802_11_defs.h    485;"   d
-WMM_OUI_TYPE   src/common/ieee802_11_defs.h    482;"   d
-WMM_TSPEC_DIRECTION_BI_DIRECTIONAL     src/common/ieee802_11_defs.h    502;"   d
-WMM_TSPEC_DIRECTION_DOWNLINK   src/common/ieee802_11_defs.h    500;"   d
-WMM_TSPEC_DIRECTION_UPLINK     src/common/ieee802_11_defs.h    499;"   d
-WMM_VERSION    src/common/ieee802_11_defs.h    486;"   d
-WORDS_BIGENDIAN        include/utils/common.h  116;"   d
-WPA2_AUTH_CCKM src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_AUTH_CCKM      = 0x07,$/;"   e       enum:__anon29
-WPA2_AUTH_ENT  src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_AUTH_ENT       = 0x04,$/;"   e       enum:__anon29
-WPA2_AUTH_PSK  src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_AUTH_PSK       = 0x05,$/;"   e       enum:__anon29
-WPA2_CONFIG_INIT_DEFAULT       include/esp_supplicant/esp_wpa_enterprise.h     29;"    d
-WPA2_ENT_EAP_STATE_FAIL        src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_ENT_EAP_STATE_FAIL,$/;"      e       enum:__anon30
-WPA2_ENT_EAP_STATE_IN_PROGRESS src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_ENT_EAP_STATE_IN_PROGRESS,$/;"       e       enum:__anon30
-WPA2_ENT_EAP_STATE_NOT_START   src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_ENT_EAP_STATE_NOT_START,$/;" e       enum:__anon30
-WPA2_ENT_EAP_STATE_SUCCESS     src/esp_supplicant/esp_wifi_driver.h    /^    WPA2_ENT_EAP_STATE_SUCCESS,$/;"   e       enum:__anon30
-WPA2_STATE_DISABLED    src/eap_peer/eap_i.h    /^    WPA2_STATE_DISABLED,$/;"  e       enum:__anon3
-WPA2_STATE_ENABLED     src/eap_peer/eap_i.h    /^    WPA2_STATE_ENABLED = 0,$/;"       e       enum:__anon3
-WPA2_TASK_STACK_SIZE   src/esp_supplicant/esp_wifi_driver.h    27;"    d
-WPA2_VERSION   src/esp_supplicant/esp_wpa_enterprise.c 48;"    d       file:
-WPABUF_H       include/utils/wpabuf.h  16;"    d
-WPABUF_MAGIC   src/utils/wpabuf.c      25;"    d       file:
-WPAS_GLUE_H    src/esp_supplicant/esp_wpas_glue.h      16;"    d
-WPA_4_4_HANDSHAKE_BIT  src/rsn_supp/wpa.c      43;"    d       file:
-WPA_ADDR_LEN   src/esp_supplicant/esp_wpa_enterprise.c 130;"   d       file:
-WPA_ALG_CCMP   src/common/defs.h       /^      WPA_ALG_CCMP = 3,$/;"   e       enum:wpa_alg
-WPA_ALG_GCMP   src/common/defs.h       /^      WPA_ALG_GCMP$/;"        e       enum:wpa_alg
-WPA_ALG_IGTK   src/common/defs.h       /^      WPA_ALG_IGTK,$/;"       e       enum:wpa_alg
-WPA_ALG_NONE   src/common/defs.h       /^      WPA_ALG_NONE =0,$/;"    e       enum:wpa_alg
-WPA_ALG_PMK    src/common/defs.h       /^      WPA_ALG_PMK,$/;"        e       enum:wpa_alg
-WPA_ALG_TKIP   src/common/defs.h       /^      WPA_ALG_TKIP = 2,$/;"   e       enum:wpa_alg
-WPA_ALG_WAPI   src/common/defs.h       /^      WPA_ALG_WAPI = 4,$/;"   e       enum:wpa_alg
-WPA_ALG_WEP    src/common/defs.h       /^      WPA_ALG_WEP,$/;"        e       enum:wpa_alg
-WPA_ALG_WEP104 src/common/defs.h       /^      WPA_ALG_WEP104 = 5,$/;" e       enum:wpa_alg
-WPA_ALG_WEP40  src/common/defs.h       /^      WPA_ALG_WEP40 = 1,$/;"  e       enum:wpa_alg
-WPA_ALLOC_FAIL src/ap/wpa_auth.h       /^      WPA_INVALID_AKMP, WPA_NOT_ENABLED, WPA_ALLOC_FAIL,$/;"  e       enum:__anon22
-WPA_ASSERT     src/rsn_supp/wpa.h      32;"    d
-WPA_ASSOC      src/ap/wpa_auth.h       /^      WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,$/;"  e       enum:__anon23
-WPA_ASSOCIATED src/common/defs.h       /^      WPA_ASSOCIATED,$/;"     e       enum:wpa_states
-WPA_ASSOCIATING        src/common/defs.h       /^      WPA_ASSOCIATING,$/;"    e       enum:wpa_states
-WPA_ASSOC_FT   src/ap/wpa_auth.h       /^      WPA_REAUTH_EAPOL, WPA_ASSOC_FT$/;"      e       enum:__anon23
-WPA_AUTH       src/ap/wpa_auth.h       /^      WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,$/;"  e       enum:__anon23
-WPA_AUTHENTICATING     src/common/defs.h       /^      WPA_AUTHENTICATING,$/;" e       enum:wpa_states
-WPA_AUTH_ALG_FT        src/common/defs.h       80;"    d
-WPA_AUTH_ALG_LEAP      src/common/defs.h       79;"    d
-WPA_AUTH_ALG_OPEN      src/common/defs.h       77;"    d
-WPA_AUTH_ALG_SHARED    src/common/defs.h       78;"    d
-WPA_AUTH_CCKM  src/esp_supplicant/esp_wifi_driver.h    /^    WPA_AUTH_CCKM       = 0x06,$/;"   e       enum:__anon29
-WPA_AUTH_H     src/ap/wpa_auth.h       10;"    d
-WPA_AUTH_IE_H  src/ap/wpa_auth_ie.h    10;"    d
-WPA_AUTH_I_H   src/ap/wpa_auth_i.h     10;"    d
-WPA_AUTH_KEY_MGMT_NONE src/common/wpa_common.h 39;"    d
-WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X      src/common/wpa_common.h 41;"    d
-WPA_AUTH_KEY_MGMT_UNSPEC_802_1X        src/common/wpa_common.h 40;"    d
-WPA_AUTH_PSK   src/esp_supplicant/esp_wifi_driver.h    /^    WPA_AUTH_PSK        = 0x03,$/;"   e       enum:__anon29
-WPA_AUTH_UNSPEC        src/esp_supplicant/esp_wifi_driver.h    /^    WPA_AUTH_UNSPEC     = 0x02,$/;"   e       enum:__anon29
-WPA_BSS_MASK_AGE       src/common/wpa_ctrl.h   181;"   d
-WPA_BSS_MASK_ALL       src/common/wpa_ctrl.h   171;"   d
-WPA_BSS_MASK_BEACON_INT        src/common/wpa_ctrl.h   175;"   d
-WPA_BSS_MASK_BSSID     src/common/wpa_ctrl.h   173;"   d
-WPA_BSS_MASK_CAPABILITIES      src/common/wpa_ctrl.h   176;"   d
-WPA_BSS_MASK_DELIM     src/common/wpa_ctrl.h   189;"   d
-WPA_BSS_MASK_FLAGS     src/common/wpa_ctrl.h   183;"   d
-WPA_BSS_MASK_FREQ      src/common/wpa_ctrl.h   174;"   d
-WPA_BSS_MASK_ID        src/common/wpa_ctrl.h   172;"   d
-WPA_BSS_MASK_IE        src/common/wpa_ctrl.h   182;"   d
-WPA_BSS_MASK_INTERNETW src/common/wpa_ctrl.h   187;"   d
-WPA_BSS_MASK_LEVEL     src/common/wpa_ctrl.h   179;"   d
-WPA_BSS_MASK_NOISE     src/common/wpa_ctrl.h   178;"   d
-WPA_BSS_MASK_P2P_SCAN  src/common/wpa_ctrl.h   186;"   d
-WPA_BSS_MASK_QUAL      src/common/wpa_ctrl.h   177;"   d
-WPA_BSS_MASK_SSID      src/common/wpa_ctrl.h   184;"   d
-WPA_BSS_MASK_TSF       src/common/wpa_ctrl.h   180;"   d
-WPA_BSS_MASK_WIFI_DISPLAY      src/common/wpa_ctrl.h   188;"   d
-WPA_BSS_MASK_WPS_SCAN  src/common/wpa_ctrl.h   185;"   d
-WPA_BYTE_SWAP_DEFINED  include/utils/common.h  122;"   d
-WPA_BYTE_SWAP_DEFINED  include/utils/common.h  71;"    d
-WPA_CAPABILITY_MFPC    src/common/wpa_common.h 119;"   d
-WPA_CAPABILITY_MFPR    src/common/wpa_common.h 118;"   d
-WPA_CAPABILITY_NO_PAIRWISE     src/common/wpa_common.h 115;"   d
-WPA_CAPABILITY_PEERKEY_ENABLED src/common/wpa_common.h 120;"   d
-WPA_CAPABILITY_PREAUTH src/common/wpa_common.h 114;"   d
-WPA_CIPHER_AES_128_CMAC        src/common/defs.h       31;"    d
-WPA_CIPHER_CCMP        src/common/defs.h       30;"    d
-WPA_CIPHER_GCMP        src/common/defs.h       32;"    d
-WPA_CIPHER_NONE        src/common/defs.h       26;"    d
-WPA_CIPHER_SUITE_CCMP  src/common/wpa_common.h 48;"    d
-WPA_CIPHER_SUITE_NONE  src/common/wpa_common.h 42;"    d
-WPA_CIPHER_SUITE_TKIP  src/common/wpa_common.h 44;"    d
-WPA_CIPHER_SUITE_WEP104        src/common/wpa_common.h 49;"    d
-WPA_CIPHER_SUITE_WEP40 src/common/wpa_common.h 43;"    d
-WPA_CIPHER_TKIP        src/common/defs.h       29;"    d
-WPA_CIPHER_WEP104      src/common/defs.h       28;"    d
-WPA_CIPHER_WEP40       src/common/defs.h       27;"    d
-WPA_COMMON_H   src/common/wpa_common.h 17;"    d
-WPA_COMPLETED  src/common/defs.h       /^      WPA_COMPLETED,$/;"      e       enum:wpa_states
-WPA_CTRL_H     src/common/wpa_ctrl.h   10;"    d
-WPA_CTRL_REQ   src/common/wpa_ctrl.h   19;"    d
-WPA_CTRL_RSP   src/common/wpa_ctrl.h   22;"    d
-WPA_DEAUTH     src/ap/wpa_auth.h       /^      WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,$/;"  e       enum:__anon23
-WPA_DEAUTH_FUNC        src/rsn_supp/wpa_i.h    /^typedef void (*WPA_DEAUTH_FUNC)(u8 reason_code);$/;"  t
-WPA_DEBUG_H    include/utils/wpa_debug.h       16;"    d
-WPA_DISASSOC   src/ap/wpa_auth.h       /^      WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,$/;"  e       enum:__anon23
-WPA_DISCONNECTED       src/common/defs.h       /^      WPA_DISCONNECTED,$/;"   e       enum:wpa_states
-WPA_EAPOL_authorized   src/ap/wpa_auth.h       /^      WPA_EAPOL_portEnabled, WPA_EAPOL_portValid, WPA_EAPOL_authorized,$/;"   e       enum:__anon21
-WPA_EAPOL_inc_EapolFramesTx    src/ap/wpa_auth.h       /^      WPA_EAPOL_keyDone, WPA_EAPOL_inc_EapolFramesTx$/;"      e       enum:__anon21
-WPA_EAPOL_keyAvailable src/ap/wpa_auth.h       /^      WPA_EAPOL_portControl_Auto, WPA_EAPOL_keyRun, WPA_EAPOL_keyAvailable,$/;"       e       enum:__anon21
-WPA_EAPOL_keyDone      src/ap/wpa_auth.h       /^      WPA_EAPOL_keyDone, WPA_EAPOL_inc_EapolFramesTx$/;"      e       enum:__anon21
-WPA_EAPOL_keyRun       src/ap/wpa_auth.h       /^      WPA_EAPOL_portControl_Auto, WPA_EAPOL_keyRun, WPA_EAPOL_keyAvailable,$/;"       e       enum:__anon21
-WPA_EAPOL_portControl_Auto     src/ap/wpa_auth.h       /^      WPA_EAPOL_portControl_Auto, WPA_EAPOL_keyRun, WPA_EAPOL_keyAvailable,$/;"       e       enum:__anon21
-WPA_EAPOL_portEnabled  src/ap/wpa_auth.h       /^      WPA_EAPOL_portEnabled, WPA_EAPOL_portValid, WPA_EAPOL_authorized,$/;"   e       enum:__anon21
-WPA_EAPOL_portValid    src/ap/wpa_auth.h       /^      WPA_EAPOL_portEnabled, WPA_EAPOL_portValid, WPA_EAPOL_authorized,$/;"   e       enum:__anon21
-WPA_EVENT_ASSOC_REJECT src/common/wpa_ctrl.h   30;"    d
-WPA_EVENT_BSS_ADDED    src/common/wpa_ctrl.h   62;"    d
-WPA_EVENT_BSS_REMOVED  src/common/wpa_ctrl.h   64;"    d
-WPA_EVENT_CONNECTED    src/common/wpa_ctrl.h   26;"    d
-WPA_EVENT_DISCONNECTED src/common/wpa_ctrl.h   28;"    d
-WPA_EVENT_EAP_FAILURE  src/common/wpa_ctrl.h   52;"    d
-WPA_EVENT_EAP_METHOD   src/common/wpa_ctrl.h   42;"    d
-WPA_EVENT_EAP_NOTIFICATION     src/common/wpa_ctrl.h   36;"    d
-WPA_EVENT_EAP_PEER_CERT        src/common/wpa_ctrl.h   44;"    d
-WPA_EVENT_EAP_PROPOSED_METHOD  src/common/wpa_ctrl.h   40;"    d
-WPA_EVENT_EAP_STARTED  src/common/wpa_ctrl.h   38;"    d
-WPA_EVENT_EAP_STATUS   src/common/wpa_ctrl.h   48;"    d
-WPA_EVENT_EAP_SUCCESS  include/utils/wpa_debug.h       36;"    d
-WPA_EVENT_EAP_SUCCESS  src/common/wpa_ctrl.h   50;"    d
-WPA_EVENT_EAP_TLS_CERT_ERROR   src/common/wpa_ctrl.h   46;"    d
-WPA_EVENT_FREQ_CONFLICT        src/common/wpa_ctrl.h   67;"    d
-WPA_EVENT_PASSWORD_CHANGED     src/common/wpa_ctrl.h   34;"    d
-WPA_EVENT_REENABLED    src/common/wpa_ctrl.h   56;"    d
-WPA_EVENT_SCAN_RESULTS src/common/wpa_ctrl.h   58;"    d
-WPA_EVENT_STATE_CHANGE src/common/wpa_ctrl.h   60;"    d
-WPA_EVENT_TEMP_DISABLED        src/common/wpa_ctrl.h   54;"    d
-WPA_EVENT_TERMINATING  src/common/wpa_ctrl.h   32;"    d
-WPA_FIRST_HALF_4WAY_HANDSHAKE  src/common/defs.h       /^      WPA_FIRST_HALF_4WAY_HANDSHAKE,$/;"      e       enum:wpa_states
-WPA_GET_BE16   include/utils/common.h  128;"   d
-WPA_GET_BE24   include/utils/common.h  142;"   d
-WPA_GET_BE32   include/utils/common.h  151;"   d
-WPA_GET_BE64   include/utils/common.h  171;"   d
-WPA_GET_KEY    src/rsn_supp/wpa_i.h    /^typedef int (*WPA_GET_KEY) (u8 *ifx, int *alg, u8 *addt, int *keyidx, u8 *key, size_t key_len, int key_entry_valid);$/;"      t
-WPA_GET_LE16   include/utils/common.h  135;"   d
-WPA_GET_LE32   include/utils/common.h  161;"   d
-WPA_GET_LE64   include/utils/common.h  187;"   d
-WPA_GMK_LEN    src/common/wpa_common.h 27;"    d
-WPA_GROUP_GTK_INIT     src/ap/wpa_auth_i.h     /^              WPA_GROUP_GTK_INIT = 0,$/;"     e       enum:wpa_group::__anon27
-WPA_GROUP_HANDSHAKE    src/common/defs.h       /^      WPA_GROUP_HANDSHAKE,$/;"        e       enum:wpa_states
-WPA_GROUP_HANDSHAKE_BIT        src/rsn_supp/wpa.c      44;"    d       file:
-WPA_GROUP_SETKEYS      src/ap/wpa_auth_i.h     /^              WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE$/;"    e       enum:wpa_group::__anon27
-WPA_GROUP_SETKEYSDONE  src/ap/wpa_auth_i.h     /^              WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE$/;"    e       enum:wpa_group::__anon27
-WPA_GTK_MAX_LEN        src/common/wpa_common.h 28;"    d
-WPA_H  src/rsn_supp/wpa.h      16;"    d
-WPA_IE_H       src/rsn_supp/wpa_ie.h   16;"    d
-WPA_IE_OK      src/ap/wpa_auth.h       /^      WPA_IE_OK, WPA_INVALID_IE, WPA_INVALID_GROUP, WPA_INVALID_PAIRWISE,$/;" e       enum:__anon22
-WPA_IE_VENDOR_TYPE     src/common/ieee802_11_defs.h    479;"   d
-WPA_IGTK_LEN   src/common/wpa_common.h 109;"   d
-WPA_INACTIVE   src/common/defs.h       /^      WPA_INACTIVE,$/;"       e       enum:wpa_states
-WPA_INSTALL_KEY        src/rsn_supp/wpa_i.h    /^typedef void (*WPA_INSTALL_KEY) (enum wpa_alg alg, u8 *addr, int key_idx, int set_tx,$/;"     t
-WPA_INVALID_AKMP       src/ap/wpa_auth.h       /^      WPA_INVALID_AKMP, WPA_NOT_ENABLED, WPA_ALLOC_FAIL,$/;"  e       enum:__anon22
-WPA_INVALID_GROUP      src/ap/wpa_auth.h       /^      WPA_IE_OK, WPA_INVALID_IE, WPA_INVALID_GROUP, WPA_INVALID_PAIRWISE,$/;" e       enum:__anon22
-WPA_INVALID_IE src/ap/wpa_auth.h       /^      WPA_IE_OK, WPA_INVALID_IE, WPA_INVALID_GROUP, WPA_INVALID_PAIRWISE,$/;" e       enum:__anon22
-WPA_INVALID_MDIE       src/ap/wpa_auth.h       /^      WPA_INVALID_MDIE, WPA_INVALID_PROTO$/;" e       enum:__anon22
-WPA_INVALID_MGMT_GROUP_CIPHER  src/ap/wpa_auth.h       /^      WPA_MGMT_FRAME_PROTECTION_VIOLATION, WPA_INVALID_MGMT_GROUP_CIPHER,$/;" e       enum:__anon22
-WPA_INVALID_PAIRWISE   src/ap/wpa_auth.h       /^      WPA_IE_OK, WPA_INVALID_IE, WPA_INVALID_GROUP, WPA_INVALID_PAIRWISE,$/;" e       enum:__anon22
-WPA_INVALID_PROTO      src/ap/wpa_auth.h       /^      WPA_INVALID_MDIE, WPA_INVALID_PROTO$/;" e       enum:__anon22
-WPA_IS_MULTICAST       src/ap/wpa_auth.h       20;"    d
-WPA_I_H        src/rsn_supp/wpa_i.h    16;"    d
-WPA_KEY_INFO_ACK       src/common/wpa_common.h 141;"   d
-WPA_KEY_INFO_ENCR_KEY_DATA     src/common/wpa_common.h 146;"   d
-WPA_KEY_INFO_ERROR     src/common/wpa_common.h 144;"   d
-WPA_KEY_INFO_INSTALL   src/common/wpa_common.h 139;"   d
-WPA_KEY_INFO_KEY_INDEX_MASK    src/common/wpa_common.h 137;"   d
-WPA_KEY_INFO_KEY_INDEX_SHIFT   src/common/wpa_common.h 138;"   d
-WPA_KEY_INFO_KEY_TYPE  src/common/wpa_common.h 135;"   d
-WPA_KEY_INFO_MIC       src/common/wpa_common.h 142;"   d
-WPA_KEY_INFO_REQUEST   src/common/wpa_common.h 145;"   d
-WPA_KEY_INFO_SECURE    src/common/wpa_common.h 143;"   d
-WPA_KEY_INFO_SMK_MESSAGE       src/common/wpa_common.h 147;"   d
-WPA_KEY_INFO_TXRX      src/common/wpa_common.h 140;"   d
-WPA_KEY_INFO_TYPE_AES_128_CMAC src/common/wpa_common.h 134;"   d
-WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 src/common/wpa_common.h 132;"   d
-WPA_KEY_INFO_TYPE_HMAC_SHA1_AES        src/common/wpa_common.h 133;"   d
-WPA_KEY_INFO_TYPE_MASK src/common/wpa_common.h 131;"   d
-WPA_KEY_MGMT_CCKM      src/common/defs.h       44;"    d
-WPA_KEY_MGMT_FT_IEEE8021X      src/common/defs.h       39;"    d
-WPA_KEY_MGMT_FT_PSK    src/common/defs.h       40;"    d
-WPA_KEY_MGMT_IEEE8021X src/common/defs.h       34;"    d
-WPA_KEY_MGMT_IEEE8021X_NO_WPA  src/common/defs.h       37;"    d
-WPA_KEY_MGMT_IEEE8021X_SHA256  src/common/defs.h       41;"    d
-WPA_KEY_MGMT_NONE      src/common/defs.h       36;"    d
-WPA_KEY_MGMT_PSK       src/common/defs.h       35;"    d
-WPA_KEY_MGMT_PSK_SHA256        src/common/defs.h       42;"    d
-WPA_KEY_MGMT_WPA_NONE  src/common/defs.h       38;"    d
-WPA_KEY_MGMT_WPS       src/common/defs.h       43;"    d
-WPA_KEY_RSC_LEN        src/common/wpa_common.h 26;"    d
-WPA_LAST_HALF_4WAY_HANDSHAKE   src/common/defs.h       /^      WPA_LAST_HALF_4WAY_HANDSHAKE,$/;"       e       enum:wpa_states
-WPA_MAX_SSID_LEN       src/common/wpa_common.h 19;"    d
-WPA_MGMT_FRAME_PROTECTION_VIOLATION    src/ap/wpa_auth.h       /^      WPA_MGMT_FRAME_PROTECTION_VIOLATION, WPA_INVALID_MGMT_GROUP_CIPHER,$/;" e       enum:__anon22
-WPA_MIC_FAILURE        src/common/defs.h       /^      WPA_MIC_FAILURE,                         \/\/ first mic_error event occur$/;"   e       enum:wpa_states
-WPA_NEG_COMPLETE       src/rsn_supp/wpa_i.h    /^typedef void (*WPA_NEG_COMPLETE)();$/;"       t
-WPA_NONCE_LEN  src/common/wpa_common.h 25;"    d
-WPA_NOT_ENABLED        src/ap/wpa_auth.h       /^      WPA_INVALID_AKMP, WPA_NOT_ENABLED, WPA_ALLOC_FAIL,$/;"  e       enum:__anon22
-WPA_OUI_TYPE   src/common/wpa_common.h 94;"    d
-WPA_PMK_NAME_LEN       src/common/wpa_common.h 127;"   d
-WPA_PROTO_RSN  src/common/defs.h       75;"    d
-WPA_PROTO_WPA  src/common/defs.h       74;"    d
-WPA_PTK_AUTHENTICATION src/ap/wpa_auth_i.h     /^              WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2,$/;"    e       enum:wpa_state_machine::__anon24
-WPA_PTK_AUTHENTICATION2        src/ap/wpa_auth_i.h     /^              WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2,$/;"    e       enum:wpa_state_machine::__anon24
-WPA_PTK_DISCONNECT     src/ap/wpa_auth_i.h     /^              WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED,$/;"       e       enum:wpa_state_machine::__anon24
-WPA_PTK_DISCONNECTED   src/ap/wpa_auth_i.h     /^              WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED,$/;"       e       enum:wpa_state_machine::__anon24
-WPA_PTK_GROUP_IDLE     src/ap/wpa_auth_i.h     /^              WPA_PTK_GROUP_IDLE = 0,$/;"     e       enum:wpa_state_machine::__anon25
-WPA_PTK_GROUP_KEYERROR src/ap/wpa_auth_i.h     /^              WPA_PTK_GROUP_KEYERROR$/;"      e       enum:wpa_state_machine::__anon25
-WPA_PTK_GROUP_REKEYESTABLISHED src/ap/wpa_auth_i.h     /^              WPA_PTK_GROUP_REKEYESTABLISHED,$/;"     e       enum:wpa_state_machine::__anon25
-WPA_PTK_GROUP_REKEYNEGOTIATING src/ap/wpa_auth_i.h     /^              WPA_PTK_GROUP_REKEYNEGOTIATING,$/;"     e       enum:wpa_state_machine::__anon25
-WPA_PTK_INITIALIZE     src/ap/wpa_auth_i.h     /^              WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED,$/;"       e       enum:wpa_state_machine::__anon24
-WPA_PTK_INITPMK        src/ap/wpa_auth_i.h     /^              WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART,$/;" e       enum:wpa_state_machine::__anon24
-WPA_PTK_INITPSK        src/ap/wpa_auth_i.h     /^              WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART,$/;" e       enum:wpa_state_machine::__anon24
-WPA_PTK_PTKCALCNEGOTIATING     src/ap/wpa_auth_i.h     /^              WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2,$/;"    e       enum:wpa_state_machine::__anon24
-WPA_PTK_PTKCALCNEGOTIATING2    src/ap/wpa_auth_i.h     /^              WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2,$/;"    e       enum:wpa_state_machine::__anon24
-WPA_PTK_PTKINITDONE    src/ap/wpa_auth_i.h     /^              WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE$/;"     e       enum:wpa_state_machine::__anon24
-WPA_PTK_PTKINITNEGOTIATING     src/ap/wpa_auth_i.h     /^              WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE$/;"     e       enum:wpa_state_machine::__anon24
-WPA_PTK_PTKSTART       src/ap/wpa_auth_i.h     /^              WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART,$/;" e       enum:wpa_state_machine::__anon24
-WPA_PUT_BE16   include/utils/common.h  129;"   d
-WPA_PUT_BE24   include/utils/common.h  144;"   d
-WPA_PUT_BE32   include/utils/common.h  153;"   d
-WPA_PUT_BE64   include/utils/common.h  175;"   d
-WPA_PUT_LE16   include/utils/common.h  136;"   d
-WPA_PUT_LE32   include/utils/common.h  163;"   d
-WPA_REAUTH     src/ap/wpa_auth.h       /^      WPA_AUTH, WPA_ASSOC, WPA_DISASSOC, WPA_DEAUTH, WPA_REAUTH,$/;"  e       enum:__anon23
-WPA_REAUTH_EAPOL       src/ap/wpa_auth.h       /^      WPA_REAUTH_EAPOL, WPA_ASSOC_FT$/;"      e       enum:__anon23
-WPA_REPLAY_COUNTER_LEN src/common/wpa_common.h 24;"    d
-WPA_SCANNING   src/common/defs.h       /^      WPA_SCANNING,$/;"       e       enum:wpa_states
-WPA_SELECTOR_LEN       src/common/wpa_common.h 30;"    d
-WPA_SEND_FUNC  src/rsn_supp/wpa_i.h    /^typedef void (* WPA_SEND_FUNC)(void *buffer, u16 len);$/;"    t
-WPA_SET_ASSOC_IE       src/rsn_supp/wpa_i.h    /^typedef void (* WPA_SET_ASSOC_IE)(u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len);$/;" t
-WPA_SM_MAX_INDEX       src/ap/wpa_auth.c       55;"    d       file:
-WPA_SM_STATE   src/rsn_supp/wpa.h      25;"    d
-WPA_TKIP_COUNTERMEASURES       src/common/defs.h       /^      WPA_TKIP_COUNTERMEASURES  \/\/in countermeasure period that stop connect with ap in 60 sec$/;"  e       enum:wpa_states
-WPA_TX_MSG_BUFF_MAXLEN src/ap/wpa_auth.c       159;"   d       file:
-WPA_TX_MSG_BUFF_MAXLEN src/esp_supplicant/esp_wpa_main.c       62;"    d       file:
-WPA_TX_MSG_BUFF_MAXLEN src/rsn_supp/wpa.c      47;"    d       file:
-WPA_VERSION    src/common/wpa_common.h 31;"    d
-WPA_VERSION_NO_WPA     src/ap/wpa_auth_i.h     /^              WPA_VERSION_NO_WPA = 0 \/* WPA not used *\/,$/;"        e       enum:wpa_state_machine::__anon26
-WPA_VERSION_WPA        src/ap/wpa_auth_i.h     /^              WPA_VERSION_WPA = 1 \/* WPA \/ IEEE 802.11i\/D3.0 *\/,$/;"      e       enum:wpa_state_machine::__anon26
-WPA_VERSION_WPA2       src/ap/wpa_auth_i.h     /^              WPA_VERSION_WPA2 = 2 \/* WPA2 \/ IEEE 802.11i *\/$/;"   e       enum:wpa_state_machine::__anon26
-WPS_ADDR_LEN   src/esp_supplicant/esp_wps.c    49;"    d       file:
-WPS_ASSOC_CFG_FAILURE  src/wps/wps_defs.h      /^      WPS_ASSOC_CFG_FAILURE = 2,$/;"  e       enum:wps_assoc_state
-WPS_ASSOC_CONN_SUCCESS src/wps/wps_defs.h      /^      WPS_ASSOC_CONN_SUCCESS = 1,$/;" e       enum:wps_assoc_state
-WPS_ASSOC_FAILURE      src/wps/wps_defs.h      /^      WPS_ASSOC_FAILURE = 3,$/;"      e       enum:wps_assoc_state
-WPS_ASSOC_IP_FAILURE   src/wps/wps_defs.h      /^      WPS_ASSOC_IP_FAILURE = 4$/;"    e       enum:wps_assoc_state
-WPS_ASSOC_NOT_ASSOC    src/wps/wps_defs.h      /^      WPS_ASSOC_NOT_ASSOC = 0,$/;"    e       enum:wps_assoc_state
-WPS_ATTR_PARSE_H       src/wps/wps_attr_parse.h        10;"    d
-WPS_AUTHENTICATOR_LEN  src/wps/wps_defs.h      35;"    d
-WPS_AUTHKEY_LEN        src/wps/wps_defs.h      36;"    d
-WPS_AUTH_SHARED        src/wps/wps_defs.h      191;"   d
-WPS_AUTH_TYPES src/wps/wps_defs.h      195;"   d
-WPS_AUTH_WPA   src/wps/wps_defs.h      192;"   d
-WPS_AUTH_WPA2  src/wps/wps_defs.h      193;"   d
-WPS_AUTH_WPA2PSK       src/wps/wps_defs.h      194;"   d
-WPS_AUTH_WPAPSK        src/wps/wps_defs.h      190;"   d
-WPS_Beacon     src/wps/wps_defs.h      /^      WPS_Beacon = 0x01,$/;"  e       enum:wps_msg_type
-WPS_CALC_KEY_MAX       src/wps/wps_i.h /^      WPS_CALC_KEY_MAX,$/;"   e       enum:wps_calc_key_mode
-WPS_CALC_KEY_NORMAL    src/wps/wps_i.h /^      WPS_CALC_KEY_NORMAL = 0,$/;"    e       enum:wps_calc_key_mode
-WPS_CALC_KEY_NO_CALC   src/wps/wps_i.h /^      WPS_CALC_KEY_NO_CALC,$/;"       e       enum:wps_calc_key_mode
-WPS_CALC_KEY_PRE_CALC  src/wps/wps_i.h /^      WPS_CALC_KEY_PRE_CALC,$/;"      e       enum:wps_calc_key_mode
-WPS_CB_ST_FAILED       src/wps/wps.h   /^      WPS_CB_ST_FAILED,$/;"   e       enum:wps_cb_status
-WPS_CB_ST_SCAN_ERR     src/wps/wps.h   /^      WPS_CB_ST_SCAN_ERR,$/;" e       enum:wps_cb_status
-WPS_CB_ST_SUCCESS      src/wps/wps.h   /^      WPS_CB_ST_SUCCESS = 0,$/;"      e       enum:wps_cb_status
-WPS_CB_ST_TIMEOUT      src/wps/wps.h   /^      WPS_CB_ST_TIMEOUT,$/;"  e       enum:wps_cb_status
-WPS_CB_ST_WEP  src/wps/wps.h   /^      WPS_CB_ST_WEP,$/;"      e       enum:wps_cb_status
-WPS_CFG_24_CHAN_NOT_SUPPORTED  src/wps/wps_defs.h      /^      WPS_CFG_24_CHAN_NOT_SUPPORTED = 3,$/;"  e       enum:wps_config_error
-WPS_CFG_50_CHAN_NOT_SUPPORTED  src/wps/wps_defs.h      /^      WPS_CFG_50_CHAN_NOT_SUPPORTED = 4,$/;"  e       enum:wps_config_error
-WPS_CFG_DECRYPTION_CRC_FAILURE src/wps/wps_defs.h      /^      WPS_CFG_DECRYPTION_CRC_FAILURE = 2,$/;" e       enum:wps_config_error
-WPS_CFG_DEVICE_BUSY    src/wps/wps_defs.h      /^      WPS_CFG_DEVICE_BUSY = 14,$/;"   e       enum:wps_config_error
-WPS_CFG_DEV_PASSWORD_AUTH_FAILURE      src/wps/wps_defs.h      /^      WPS_CFG_DEV_PASSWORD_AUTH_FAILURE = 18$/;"      e       enum:wps_config_error
-WPS_CFG_FAILED_DHCP_CONFIG     src/wps/wps_defs.h      /^      WPS_CFG_FAILED_DHCP_CONFIG = 9,$/;"     e       enum:wps_config_error
-WPS_CFG_IP_ADDR_CONFLICT       src/wps/wps_defs.h      /^      WPS_CFG_IP_ADDR_CONFLICT = 10,$/;"      e       enum:wps_config_error
-WPS_CFG_MSG_TIMEOUT    src/wps/wps_defs.h      /^      WPS_CFG_MSG_TIMEOUT = 16,$/;"   e       enum:wps_config_error
-WPS_CFG_MULTIPLE_PBC_DETECTED  src/wps/wps_defs.h      /^      WPS_CFG_MULTIPLE_PBC_DETECTED = 12,$/;" e       enum:wps_config_error
-WPS_CFG_NETWORK_ASSOC_FAILURE  src/wps/wps_defs.h      /^      WPS_CFG_NETWORK_ASSOC_FAILURE = 7,$/;"  e       enum:wps_config_error
-WPS_CFG_NETWORK_AUTH_FAILURE   src/wps/wps_defs.h      /^      WPS_CFG_NETWORK_AUTH_FAILURE = 6,$/;"   e       enum:wps_config_error
-WPS_CFG_NO_CONN_TO_REGISTRAR   src/wps/wps_defs.h      /^      WPS_CFG_NO_CONN_TO_REGISTRAR = 11,$/;"  e       enum:wps_config_error
-WPS_CFG_NO_DHCP_RESPONSE       src/wps/wps_defs.h      /^      WPS_CFG_NO_DHCP_RESPONSE = 8,$/;"       e       enum:wps_config_error
-WPS_CFG_NO_ERROR       src/wps/wps_defs.h      /^      WPS_CFG_NO_ERROR = 0,$/;"       e       enum:wps_config_error
-WPS_CFG_OOB_IFACE_READ_ERROR   src/wps/wps_defs.h      /^      WPS_CFG_OOB_IFACE_READ_ERROR = 1,$/;"   e       enum:wps_config_error
-WPS_CFG_REG_SESS_TIMEOUT       src/wps/wps_defs.h      /^      WPS_CFG_REG_SESS_TIMEOUT = 17,$/;"      e       enum:wps_config_error
-WPS_CFG_ROGUE_SUSPECTED        src/wps/wps_defs.h      /^      WPS_CFG_ROGUE_SUSPECTED = 13,$/;"       e       enum:wps_config_error
-WPS_CFG_SETUP_LOCKED   src/wps/wps_defs.h      /^      WPS_CFG_SETUP_LOCKED = 15,$/;"  e       enum:wps_config_error
-WPS_CFG_SIGNAL_TOO_WEAK        src/wps/wps_defs.h      /^      WPS_CFG_SIGNAL_TOO_WEAK = 5,$/;"        e       enum:wps_config_error
-WPS_CONFIG_DISPLAY     src/wps/wps_defs.h      245;"   d
-WPS_CONFIG_ETHERNET    src/wps/wps_defs.h      243;"   d
-WPS_CONFIG_EXT_NFC_TOKEN       src/wps/wps_defs.h      246;"   d
-WPS_CONFIG_INIT_DEFAULT        include/esp_supplicant/esp_wps.h        80;"    d
-WPS_CONFIG_INT_NFC_TOKEN       src/wps/wps_defs.h      247;"   d
-WPS_CONFIG_KEYPAD      src/wps/wps_defs.h      250;"   d
-WPS_CONFIG_LABEL       src/wps/wps_defs.h      244;"   d
-WPS_CONFIG_NFC_INTERFACE       src/wps/wps_defs.h      248;"   d
-WPS_CONFIG_PHY_DISPLAY src/wps/wps_defs.h      255;"   d
-WPS_CONFIG_PHY_PUSHBUTTON      src/wps/wps_defs.h      253;"   d
-WPS_CONFIG_PUSHBUTTON  src/wps/wps_defs.h      249;"   d
-WPS_CONFIG_USBA        src/wps/wps_defs.h      242;"   d
-WPS_CONFIG_VIRT_DISPLAY        src/wps/wps_defs.h      254;"   d
-WPS_CONFIG_VIRT_PUSHBUTTON     src/wps/wps_defs.h      252;"   d
-WPS_CONN_ESS   src/wps/wps_defs.h      259;"   d
-WPS_CONN_IBSS  src/wps/wps_defs.h      260;"   d
-WPS_CONTINUE   src/wps/wps.h   /^      WPS_CONTINUE,$/;"       e       enum:wps_process_res
-WPS_DEFS_H     src/wps/wps_defs.h      10;"    d
-WPS_DEV_ATTR_H src/wps/wps_dev_attr.h  10;"    d
-WPS_DEV_CAMERA src/wps/wps_defs.h      /^      WPS_DEV_CAMERA = 4,$/;" e       enum:wps_dev_categ
-WPS_DEV_CAMERA_DIGITAL_STILL_CAMERA    src/wps/wps_defs.h      /^      WPS_DEV_CAMERA_DIGITAL_STILL_CAMERA = 1,$/;"    e       enum:wps_dev_subcateg
-WPS_DEV_COMPUTER       src/wps/wps_defs.h      /^      WPS_DEV_COMPUTER = 1,$/;"       e       enum:wps_dev_categ
-WPS_DEV_COMPUTER_MEDIA_CENTER  src/wps/wps_defs.h      /^      WPS_DEV_COMPUTER_MEDIA_CENTER = 3,$/;"  e       enum:wps_dev_subcateg
-WPS_DEV_COMPUTER_PC    src/wps/wps_defs.h      /^      WPS_DEV_COMPUTER_PC = 1,$/;"    e       enum:wps_dev_subcateg
-WPS_DEV_COMPUTER_SERVER        src/wps/wps_defs.h      /^      WPS_DEV_COMPUTER_SERVER = 2,$/;"        e       enum:wps_dev_subcateg
-WPS_DEV_DISPLAY        src/wps/wps_defs.h      /^      WPS_DEV_DISPLAY = 7,$/;"        e       enum:wps_dev_categ
-WPS_DEV_DISPLAY_PICTURE_FRAME  src/wps/wps_defs.h      /^      WPS_DEV_DISPLAY_PICTURE_FRAME = 2,$/;"  e       enum:wps_dev_subcateg
-WPS_DEV_DISPLAY_PROJECTOR      src/wps/wps_defs.h      /^      WPS_DEV_DISPLAY_PROJECTOR = 3,$/;"      e       enum:wps_dev_subcateg
-WPS_DEV_DISPLAY_TV     src/wps/wps_defs.h      /^      WPS_DEV_DISPLAY_TV = 1,$/;"     e       enum:wps_dev_subcateg
-WPS_DEV_GAMING src/wps/wps_defs.h      /^      WPS_DEV_GAMING = 9,$/;" e       enum:wps_dev_categ
-WPS_DEV_GAMING_PLAYSTATION     src/wps/wps_defs.h      /^      WPS_DEV_GAMING_PLAYSTATION = 3,$/;"     e       enum:wps_dev_subcateg
-WPS_DEV_GAMING_XBOX    src/wps/wps_defs.h      /^      WPS_DEV_GAMING_XBOX = 1,$/;"    e       enum:wps_dev_subcateg
-WPS_DEV_GAMING_XBOX360 src/wps/wps_defs.h      /^      WPS_DEV_GAMING_XBOX360 = 2,$/;" e       enum:wps_dev_subcateg
-WPS_DEV_INPUT  src/wps/wps_defs.h      /^      WPS_DEV_INPUT = 2,$/;"  e       enum:wps_dev_categ
-WPS_DEV_MULTIMEDIA     src/wps/wps_defs.h      /^      WPS_DEV_MULTIMEDIA = 8,$/;"     e       enum:wps_dev_categ
-WPS_DEV_MULTIMEDIA_DAR src/wps/wps_defs.h      /^      WPS_DEV_MULTIMEDIA_DAR = 1,$/;" e       enum:wps_dev_subcateg
-WPS_DEV_MULTIMEDIA_MCX src/wps/wps_defs.h      /^      WPS_DEV_MULTIMEDIA_MCX = 3,$/;" e       enum:wps_dev_subcateg
-WPS_DEV_MULTIMEDIA_PVR src/wps/wps_defs.h      /^      WPS_DEV_MULTIMEDIA_PVR = 2,$/;" e       enum:wps_dev_subcateg
-WPS_DEV_NETWORK_INFRA  src/wps/wps_defs.h      /^      WPS_DEV_NETWORK_INFRA = 6,$/;"  e       enum:wps_dev_categ
-WPS_DEV_NETWORK_INFRA_AP       src/wps/wps_defs.h      /^      WPS_DEV_NETWORK_INFRA_AP = 1,$/;"       e       enum:wps_dev_subcateg
-WPS_DEV_NETWORK_INFRA_ROUTER   src/wps/wps_defs.h      /^      WPS_DEV_NETWORK_INFRA_ROUTER = 2,$/;"   e       enum:wps_dev_subcateg
-WPS_DEV_NETWORK_INFRA_SWITCH   src/wps/wps_defs.h      /^      WPS_DEV_NETWORK_INFRA_SWITCH = 3,$/;"   e       enum:wps_dev_subcateg
-WPS_DEV_OUI_WFA        src/wps/wps_defs.h      278;"   d
-WPS_DEV_PHONE  src/wps/wps_defs.h      /^      WPS_DEV_PHONE = 10$/;"  e       enum:wps_dev_categ
-WPS_DEV_PHONE_WINDOWS_MOBILE   src/wps/wps_defs.h      /^      WPS_DEV_PHONE_WINDOWS_MOBILE = 1$/;"    e       enum:wps_dev_subcateg
-WPS_DEV_PRINTER        src/wps/wps_defs.h      /^      WPS_DEV_PRINTER = 3,$/;"        e       enum:wps_dev_categ
-WPS_DEV_PRINTER_PRINTER        src/wps/wps_defs.h      /^      WPS_DEV_PRINTER_PRINTER = 1,$/;"        e       enum:wps_dev_subcateg
-WPS_DEV_PRINTER_SCANNER        src/wps/wps_defs.h      /^      WPS_DEV_PRINTER_SCANNER = 2,$/;"        e       enum:wps_dev_subcateg
-WPS_DEV_STORAGE        src/wps/wps_defs.h      /^      WPS_DEV_STORAGE = 5,$/;"        e       enum:wps_dev_categ
-WPS_DEV_STORAGE_NAS    src/wps/wps_defs.h      /^      WPS_DEV_STORAGE_NAS = 1,$/;"    e       enum:wps_dev_subcateg
-WPS_DEV_TYPE_BUFSIZE   src/wps/wps.h   64;"    d
-WPS_DEV_TYPE_LEN       src/wps/wps.h   63;"    d
-WPS_DH_GROUP   src/wps/wps_defs.h      31;"    d
-WPS_DONE       src/wps/wps.h   /^      WPS_DONE,$/;"   e       enum:wps_process_res
-WPS_EAP_EXT_VENDOR_TYPE        src/wps/wps.h   1026;"  d
-WPS_EI_NO_ERROR        src/wps/wps_defs.h      /^      WPS_EI_NO_ERROR,$/;"    e       enum:wps_error_indication
-WPS_EI_SECURITY_TKIP_ONLY_PROHIBITED   src/wps/wps_defs.h      /^      WPS_EI_SECURITY_TKIP_ONLY_PROHIBITED,$/;"       e       enum:wps_error_indication
-WPS_EI_SECURITY_WEP_PROHIBITED src/wps/wps_defs.h      /^      WPS_EI_SECURITY_WEP_PROHIBITED,$/;"     e       enum:wps_error_indication
-WPS_EMSK_LEN   src/wps/wps_defs.h      38;"    d
-WPS_ENCR_AES   src/wps/wps_defs.h      202;"   d
-WPS_ENCR_NONE  src/wps/wps_defs.h      199;"   d
-WPS_ENCR_TKIP  src/wps/wps_defs.h      201;"   d
-WPS_ENCR_TYPES src/wps/wps_defs.h      203;"   d
-WPS_ENCR_WEP   src/wps/wps_defs.h      200;"   d
-WPS_ER_SET_SEL_REG_DONE        src/wps/wps.h   /^                      WPS_ER_SET_SEL_REG_DONE,$/;"    e       enum:wps_event_data::wps_event_er_set_selected_registrar::__anon54
-WPS_ER_SET_SEL_REG_FAILED      src/wps/wps.h   /^                      WPS_ER_SET_SEL_REG_FAILED$/;"   e       enum:wps_event_data::wps_event_er_set_selected_registrar::__anon54
-WPS_ER_SET_SEL_REG_START       src/wps/wps.h   /^                      WPS_ER_SET_SEL_REG_START,$/;"   e       enum:wps_event_data::wps_event_er_set_selected_registrar::__anon54
-WPS_EVENT_ACTIVE       src/common/wpa_ctrl.h   95;"    d
-WPS_EVENT_AP_AVAILABLE src/common/wpa_ctrl.h   83;"    d
-WPS_EVENT_AP_AVAILABLE_AUTH    src/common/wpa_ctrl.h   78;"    d
-WPS_EVENT_AP_AVAILABLE_PBC     src/common/wpa_ctrl.h   76;"    d
-WPS_EVENT_AP_AVAILABLE_PIN     src/common/wpa_ctrl.h   81;"    d
-WPS_EVENT_AP_PIN_DISABLED      src/common/wpa_ctrl.h   162;"   d
-WPS_EVENT_AP_PIN_ENABLED       src/common/wpa_ctrl.h   161;"   d
-WPS_EVENT_AP_SETUP_LOCKED      src/common/wpa_ctrl.h   159;"   d
-WPS_EVENT_AP_SETUP_UNLOCKED    src/common/wpa_ctrl.h   160;"   d
-WPS_EVENT_CRED_RECEIVED        src/common/wpa_ctrl.h   85;"    d
-WPS_EVENT_DISABLE      src/common/wpa_ctrl.h   97;"    d
-WPS_EVENT_ENROLLEE_SEEN        src/common/wpa_ctrl.h   99;"    d
-WPS_EVENT_ER_AP_ADD    src/common/wpa_ctrl.h   104;"   d
-WPS_EVENT_ER_AP_REMOVE src/common/wpa_ctrl.h   105;"   d
-WPS_EVENT_ER_AP_SETTINGS       src/common/wpa_ctrl.h   108;"   d
-WPS_EVENT_ER_ENROLLEE_ADD      src/common/wpa_ctrl.h   106;"   d
-WPS_EVENT_ER_ENROLLEE_REMOVE   src/common/wpa_ctrl.h   107;"   d
-WPS_EVENT_ER_SET_SEL_REG       src/common/wpa_ctrl.h   109;"   d
-WPS_EVENT_FAIL src/common/wpa_ctrl.h   89;"    d
-WPS_EVENT_M2D  src/common/wpa_ctrl.h   87;"    d
-WPS_EVENT_NEW_AP_SETTINGS      src/common/wpa_ctrl.h   157;"   d
-WPS_EVENT_OPEN_NETWORK src/common/wpa_ctrl.h   101;"   d
-WPS_EVENT_OVERLAP      src/common/wpa_ctrl.h   74;"    d
-WPS_EVENT_PIN_NEEDED   src/common/wpa_ctrl.h   156;"   d
-WPS_EVENT_REG_SUCCESS  src/common/wpa_ctrl.h   158;"   d
-WPS_EVENT_SUCCESS      src/common/wpa_ctrl.h   91;"    d
-WPS_EVENT_TIMEOUT      src/common/wpa_ctrl.h   93;"    d
-WPS_EV_AP_PIN_SUCCESS  src/wps/wps.h   /^      WPS_EV_AP_PIN_SUCCESS$/;"       e       enum:wps_event
-WPS_EV_ER_AP_ADD       src/wps/wps.h   /^      WPS_EV_ER_AP_ADD,$/;"   e       enum:wps_event
-WPS_EV_ER_AP_REMOVE    src/wps/wps.h   /^      WPS_EV_ER_AP_REMOVE,$/;"        e       enum:wps_event
-WPS_EV_ER_AP_SETTINGS  src/wps/wps.h   /^      WPS_EV_ER_AP_SETTINGS,$/;"      e       enum:wps_event
-WPS_EV_ER_ENROLLEE_ADD src/wps/wps.h   /^      WPS_EV_ER_ENROLLEE_ADD,$/;"     e       enum:wps_event
-WPS_EV_ER_ENROLLEE_REMOVE      src/wps/wps.h   /^      WPS_EV_ER_ENROLLEE_REMOVE,$/;"  e       enum:wps_event
-WPS_EV_ER_SET_SELECTED_REGISTRAR       src/wps/wps.h   /^      WPS_EV_ER_SET_SELECTED_REGISTRAR,$/;"   e       enum:wps_event
-WPS_EV_FAIL    src/wps/wps.h   /^      WPS_EV_FAIL,$/;"        e       enum:wps_event
-WPS_EV_M2D     src/wps/wps.h   /^      WPS_EV_M2D,$/;" e       enum:wps_event
-WPS_EV_PBC_OVERLAP     src/wps/wps.h   /^      WPS_EV_PBC_OVERLAP,$/;" e       enum:wps_event
-WPS_EV_PBC_TIMEOUT     src/wps/wps.h   /^      WPS_EV_PBC_TIMEOUT,$/;" e       enum:wps_event
-WPS_EV_PWD_AUTH_FAIL   src/wps/wps.h   /^      WPS_EV_PWD_AUTH_FAIL,$/;"       e       enum:wps_event
-WPS_EV_SUCCESS src/wps/wps.h   /^      WPS_EV_SUCCESS,$/;"     e       enum:wps_event
-WPS_FAILURE    src/wps/wps.h   /^      WPS_FAILURE,$/;"        e       enum:wps_process_res
-WPS_FINISHED   src/wps/wps_i.h /^              RECV_M8, RECEIVED_M2D, WPS_MSG_DONE, RECV_ACK, WPS_FINISHED,$/;"        e       enum:wps_data::__anon53
-WPS_FRAGMENT   src/wps/wps.h   /^      WPS_FRAGMENT    \/* Tim, send wsc fragment ack *\/$/;"  e       enum:wps_process_res
-WPS_H  src/wps/wps.h   10;"    d
-WPS_HASH_LEN   src/wps/wps_defs.h      41;"    d
-WPS_IE_VENDOR_TYPE     src/common/ieee802_11_defs.h    480;"   d
-WPS_IGNORE     src/wps/wps.h   /^      WPS_IGNORE,     \/* snake, ignore the re-packge *\/$/;" e       enum:wps_process_res
-WPS_IGNORE_SEL_REG_MAX_CNT     src/wps/wps_defs.h      338;"   d
-WPS_IGNORE_STATE       src/wps/wps_enrollee.c  1235;"  d       file:
-WPS_I_H        src/wps/wps_i.h 10;"    d
-WPS_KEYWRAPKEY_LEN     src/wps/wps_defs.h      37;"    d
-WPS_KWA_LEN    src/wps/wps_defs.h      42;"    d
-WPS_M1 src/wps/wps_defs.h      /^      WPS_M1 = 0x04,$/;"      e       enum:wps_msg_type
-WPS_M2 src/wps/wps_defs.h      /^      WPS_M2 = 0x05,$/;"      e       enum:wps_msg_type
-WPS_M2D        src/wps/wps_defs.h      /^      WPS_M2D = 0x06,$/;"     e       enum:wps_msg_type
-WPS_M3 src/wps/wps_defs.h      /^      WPS_M3 = 0x07,$/;"      e       enum:wps_msg_type
-WPS_M4 src/wps/wps_defs.h      /^      WPS_M4 = 0x08,$/;"      e       enum:wps_msg_type
-WPS_M5 src/wps/wps_defs.h      /^      WPS_M5 = 0x09,$/;"      e       enum:wps_msg_type
-WPS_M6 src/wps/wps_defs.h      /^      WPS_M6 = 0x0a,$/;"      e       enum:wps_msg_type
-WPS_M7 src/wps/wps_defs.h      /^      WPS_M7 = 0x0b,$/;"      e       enum:wps_msg_type
-WPS_M8 src/wps/wps_defs.h      /^      WPS_M8 = 0x0c,$/;"      e       enum:wps_msg_type
-WPS_MAX_AUTHORIZED_MACS        src/wps/wps_defs.h      336;"   d
-WPS_MAX_DEVICE_NAME_LEN        include/esp_supplicant/esp_wps.h        66;"    d
-WPS_MAX_DIS_AP_NUM     src/wps/wps_defs.h      340;"   d
-WPS_MAX_MANUFACTURER_LEN       include/esp_supplicant/esp_wps.h        63;"    d
-WPS_MAX_MODEL_NAME_LEN include/esp_supplicant/esp_wps.h        65;"    d
-WPS_MAX_MODEL_NUMBER_LEN       include/esp_supplicant/esp_wps.h        64;"    d
-WPS_MAX_VENDOR_EXT_LEN src/wps/wps.h   69;"    d
-WPS_MGMTAUTHKEY_LEN    src/wps/wps_defs.h      43;"    d
-WPS_MGMTENCKEY_LEN     src/wps/wps_defs.h      44;"    d
-WPS_MGMT_KEY_ID_LEN    src/wps/wps_defs.h      45;"    d
-WPS_MSG_DONE   src/wps/wps_i.h /^              RECV_M8, RECEIVED_M2D, WPS_MSG_DONE, RECV_ACK, WPS_FINISHED,$/;"        e       enum:wps_data::__anon53
-WPS_MSG_FLAG_LEN       src/wps/wps_defs.h      /^      WPS_MSG_FLAG_LEN = 0x02$/;"     e       enum:wps_msg_flag
-WPS_MSG_FLAG_MORE      src/wps/wps_defs.h      /^      WPS_MSG_FLAG_MORE = 0x01,$/;"   e       enum:wps_msg_flag
-WPS_NONCE_LEN  src/wps/wps_defs.h      34;"    d
-WPS_OOB_DEVICE_PASSWORD_LEN    src/wps/wps_defs.h      47;"    d
-WPS_OOB_DEVICE_PASSWORD_MIN_LEN        src/wps/wps_defs.h      46;"    d
-WPS_OOB_PUBKEY_HASH_LEN        src/wps/wps_defs.h      48;"    d
-WPS_OUTBUF_SIZE        src/wps/wps.h   1027;"  d
-WPS_PBC_WALK_TIME      src/wps/wps_defs.h      334;"   d
-WPS_PENDING    src/wps/wps.h   /^      WPS_PENDING,$/;"        e       enum:wps_process_res
-WPS_PSK_LEN    src/wps/wps_defs.h      39;"    d
-WPS_ProbeRequest       src/wps/wps_defs.h      /^      WPS_ProbeRequest = 0x02,$/;"    e       enum:wps_msg_type
-WPS_ProbeResponse      src/wps/wps_defs.h      /^      WPS_ProbeResponse = 0x03,$/;"   e       enum:wps_msg_type
-WPS_REQ_ENROLLEE       src/wps/wps_defs.h      /^      WPS_REQ_ENROLLEE = 1,$/;"       e       enum:wps_request_type
-WPS_REQ_ENROLLEE_INFO  src/wps/wps_defs.h      /^      WPS_REQ_ENROLLEE_INFO = 0,$/;"  e       enum:wps_request_type
-WPS_REQ_REGISTRAR      src/wps/wps_defs.h      /^      WPS_REQ_REGISTRAR = 2,$/;"      e       enum:wps_request_type
-WPS_REQ_WLAN_MANAGER_REGISTRAR src/wps/wps_defs.h      /^      WPS_REQ_WLAN_MANAGER_REGISTRAR = 3$/;"  e       enum:wps_request_type
-WPS_RESP_AP    src/wps/wps_defs.h      /^      WPS_RESP_AP = 3$/;"     e       enum:wps_response_type
-WPS_RESP_ENROLLEE      src/wps/wps_defs.h      /^      WPS_RESP_ENROLLEE = 1,$/;"      e       enum:wps_response_type
-WPS_RESP_ENROLLEE_INFO src/wps/wps_defs.h      /^      WPS_RESP_ENROLLEE_INFO = 0,$/;" e       enum:wps_response_type
-WPS_RESP_REGISTRAR     src/wps/wps_defs.h      /^      WPS_RESP_REGISTRAR = 2,$/;"     e       enum:wps_response_type
-WPS_RF_24GHZ   src/wps/wps_defs.h      238;"   d
-WPS_RF_50GHZ   src/wps/wps_defs.h      239;"   d
-WPS_SECRET_NONCE_LEN   src/wps/wps_defs.h      40;"    d
-WPS_SEC_DEVICE_TYPES   src/wps/wps.h   96;"    d
-WPS_SEC_DEV_TYPE_MAX_LEN       src/wps/wps.h   65;"    d
-WPS_STATE_CONFIGURED   src/wps/wps_defs.h      /^      WPS_STATE_CONFIGURED = 2$/;"    e       enum:wps_state
-WPS_STATE_NOT_CONFIGURED       src/wps/wps_defs.h      /^      WPS_STATE_NOT_CONFIGURED = 1,$/;"       e       enum:wps_state
-WPS_STATUS_DISABLE     src/esp_supplicant/esp_wifi_driver.h    /^    WPS_STATUS_DISABLE = 0,$/;"       e       enum:wps_status
-WPS_STATUS_MAX src/esp_supplicant/esp_wifi_driver.h    /^    WPS_STATUS_MAX,$/;"       e       enum:wps_status
-WPS_STATUS_PENDING     src/esp_supplicant/esp_wifi_driver.h    /^    WPS_STATUS_PENDING,$/;"   e       enum:wps_status
-WPS_STATUS_SCANNING    src/esp_supplicant/esp_wifi_driver.h    /^    WPS_STATUS_SCANNING,$/;"  e       enum:wps_status
-WPS_STATUS_SUCCESS     src/esp_supplicant/esp_wifi_driver.h    /^    WPS_STATUS_SUCCESS,$/;"   e       enum:wps_status
-WPS_STATUS_t   src/esp_supplicant/esp_wifi_driver.h    /^} WPS_STATUS_t;$/;"   t       typeref:enum:wps_status
-WPS_STRDUP     src/wps/wps_registrar.c 281;"   d       file:
-WPS_STRDUP     src/wps/wps_registrar.c 290;"   d       file:
-WPS_STRICT_WPS2        src/wps/wps_validate.c  16;"    d       file:
-WPS_TASK_STACK_SIZE    src/esp_supplicant/esp_wifi_driver.h    28;"    d
-WPS_TYPE_ALL_MAX       include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_ALL_MAX,$/;"     e       enum:wps_type
-WPS_TYPE_DISABLE       include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_DISABLE = 0,$/;" e       enum:wps_type
-WPS_TYPE_DISPLAY       include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_DISPLAY,$/;"     e       enum:wps_type
-WPS_TYPE_E_MAX include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_E_MAX,$/;"       e       enum:wps_type
-WPS_TYPE_PBC   include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_PBC,$/;" e       enum:wps_type
-WPS_TYPE_PIN   include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_PIN,$/;" e       enum:wps_type
-WPS_TYPE_R_DISPLAY     include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_R_DISPLAY,$/;"   e       enum:wps_type
-WPS_TYPE_R_MAX include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_R_MAX,$/;"       e       enum:wps_type
-WPS_TYPE_R_PBC include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_R_PBC,$/;"       e       enum:wps_type
-WPS_TYPE_R_PIN include/esp_supplicant/esp_wps.h        /^    WPS_TYPE_R_PIN,$/;"       e       enum:wps_type
-WPS_UUID_LEN   src/wps/wps_defs.h      33;"    d
-WPS_VENDOR_ID_WFA      src/wps/wps_defs.h      142;"   d
-WPS_VERSION    src/wps/wps_defs.h      16;"    d
-WPS_VERSION    src/wps/wps_defs.h      21;"    d
-WPS_VERSION    src/wps/wps_defs.h      23;"    d
-WPS_WIFI_AUTH_OPEN     src/wps/wps_defs.h      189;"   d
-WPS_WORKAROUNDS        src/wps/wps_attr_parse.c        15;"    d       file:
-WPS_WORKAROUNDS        src/wps/wps_registrar.c 25;"    d       file:
-WPS_WSC_ACK    src/wps/wps_defs.h      /^      WPS_WSC_ACK = 0x0d,$/;" e       enum:wps_msg_type
-WPS_WSC_DONE   src/wps/wps_defs.h      /^      WPS_WSC_DONE = 0x0f$/;" e       enum:wps_msg_type
-WPS_WSC_NACK   src/wps/wps_defs.h      /^      WPS_WSC_NACK = 0x0e,$/;"        e       enum:wps_msg_type
-WSC_ACK        src/wps/wps.h   /^      WSC_ACK = 0x02,$/;"     e       enum:wsc_op_code
-WSC_Done       src/wps/wps.h   /^      WSC_Done = 0x05,$/;"    e       enum:wsc_op_code
-WSC_FRAG_ACK   src/wps/wps.h   /^      WSC_FRAG_ACK = 0x06$/;" e       enum:wsc_op_code
-WSC_MSG        src/wps/wps.h   /^      WSC_MSG = 0x04,$/;"     e       enum:wsc_op_code
-WSC_NACK       src/wps/wps.h   /^      WSC_NACK = 0x03,$/;"    e       enum:wsc_op_code
-WSC_Start      src/wps/wps.h   /^      WSC_Start = 0x01,$/;"   e       enum:wsc_op_code
-WSC_UPnP       src/wps/wps.h   /^      WSC_UPnP = 0 \/* No OP Code in UPnP transport *\/,$/;"  e       enum:wsc_op_code
-WePKEY_128_BYTES       include/crypto/wepkey.h 5;"     d
-X509V3_H       src/tls/x509v3.h        10;"    d
-X509_CERT_V1   src/tls/x509v3.h        /^      enum { X509_CERT_V1 = 0, X509_CERT_V2 = 1, X509_CERT_V3 = 2 } version;$/;"      e       enum:x509_certificate::__anon41
-X509_CERT_V2   src/tls/x509v3.h        /^      enum { X509_CERT_V1 = 0, X509_CERT_V2 = 1, X509_CERT_V3 = 2 } version;$/;"      e       enum:x509_certificate::__anon41
-X509_CERT_V3   src/tls/x509v3.h        /^      enum { X509_CERT_V1 = 0, X509_CERT_V2 = 1, X509_CERT_V3 = 2 } version;$/;"      e       enum:x509_certificate::__anon41
-X509_EXT_BASIC_CONSTRAINTS     src/tls/x509v3.h        66;"    d
-X509_EXT_ISSUER_ALT_NAME       src/tls/x509v3.h        70;"    d
-X509_EXT_KEY_USAGE     src/tls/x509v3.h        68;"    d
-X509_EXT_PATH_LEN_CONSTRAINT   src/tls/x509v3.h        67;"    d
-X509_EXT_SUBJECT_ALT_NAME      src/tls/x509v3.h        69;"    d
-X509_KEY_USAGE_CRL_SIGN        src/tls/x509v3.h        84;"    d
-X509_KEY_USAGE_DATA_ENCIPHERMENT       src/tls/x509v3.h        81;"    d
-X509_KEY_USAGE_DECIPHER_ONLY   src/tls/x509v3.h        86;"    d
-X509_KEY_USAGE_DIGITAL_SIGNATURE       src/tls/x509v3.h        78;"    d
-X509_KEY_USAGE_ENCIPHER_ONLY   src/tls/x509v3.h        85;"    d
-X509_KEY_USAGE_KEY_AGREEMENT   src/tls/x509v3.h        82;"    d
-X509_KEY_USAGE_KEY_CERT_SIGN   src/tls/x509v3.h        83;"    d
-X509_KEY_USAGE_KEY_ENCIPHERMENT        src/tls/x509v3.h        80;"    d
-X509_KEY_USAGE_NON_REPUDIATION src/tls/x509v3.h        79;"    d
-X509_MAX_NAME_ATTRIBUTES       src/tls/x509v3.h        32;"    d
-X509_NAME_ATTR_C       src/tls/x509v3.h        /^              X509_NAME_ATTR_C,$/;"   e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_CN      src/tls/x509v3.h        /^              X509_NAME_ATTR_CN,$/;"  e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_DC      src/tls/x509v3.h        /^              X509_NAME_ATTR_DC,$/;"  e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_L       src/tls/x509v3.h        /^              X509_NAME_ATTR_L,$/;"   e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_NOT_USED        src/tls/x509v3.h        /^              X509_NAME_ATTR_NOT_USED,$/;"    e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_O       src/tls/x509v3.h        /^              X509_NAME_ATTR_O,$/;"   e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_OU      src/tls/x509v3.h        /^              X509_NAME_ATTR_OU$/;"   e       enum:x509_name_attr::x509_name_attr_type
-X509_NAME_ATTR_ST      src/tls/x509v3.h        /^              X509_NAME_ATTR_ST,$/;"  e       enum:x509_name_attr::x509_name_attr_type
-X509_VALIDATE_BAD_CERTIFICATE  src/tls/x509v3.h        /^      X509_VALIDATE_BAD_CERTIFICATE,$/;"      e       enum:__anon42
-X509_VALIDATE_CERTIFICATE_EXPIRED      src/tls/x509v3.h        /^      X509_VALIDATE_CERTIFICATE_EXPIRED,$/;"  e       enum:__anon42
-X509_VALIDATE_CERTIFICATE_REVOKED      src/tls/x509v3.h        /^      X509_VALIDATE_CERTIFICATE_REVOKED,$/;"  e       enum:__anon42
-X509_VALIDATE_CERTIFICATE_UNKNOWN      src/tls/x509v3.h        /^      X509_VALIDATE_CERTIFICATE_UNKNOWN,$/;"  e       enum:__anon42
-X509_VALIDATE_OK       src/tls/x509v3.h        /^      X509_VALIDATE_OK,$/;"   e       enum:__anon42
-X509_VALIDATE_UNKNOWN_CA       src/tls/x509v3.h        /^      X509_VALIDATE_UNKNOWN_CA$/;"    e       enum:__anon42
-X509_VALIDATE_UNSUPPORTED_CERTIFICATE  src/tls/x509v3.h        /^      X509_VALIDATE_UNSUPPORTED_CERTIFICATE,$/;"      e       enum:__anon42
-XFREE  src/crypto/libtommath.h 81;"    d
-XFREE  src/tls/libtommath.h    83;"    d
-XMALLOC        src/crypto/libtommath.h 80;"    d
-XMALLOC        src/tls/libtommath.h    82;"    d
-XREALLOC       src/crypto/libtommath.h 82;"    d
-XREALLOC       src/tls/libtommath.h    84;"    d
-_ENDIAN_H_     port/include/endian.h   30;"    d
-_ESP_WIFI_DRIVER_H_    src/esp_supplicant/esp_wifi_driver.h    16;"    d
-_UINT16_T_DECLARED     port/include/endian.h   57;"    d
-_UINT16_T_DECLARED     port/include/endian.h   60;"    d
-_UINT32_T_DECLARED     port/include/endian.h   63;"    d
-_UINT32_T_DECLARED     port/include/endian.h   66;"    d
-_UINT64_T_DECLARED     port/include/endian.h   69;"    d
-_UINT64_T_DECLARED     port/include/endian.h   72;"    d
-_UINT8_T_DECLARED      port/include/endian.h   51;"    d
-_UINT8_T_DECLARED      port/include/endian.h   54;"    d
-__BIG_ENDIAN   include/utils/common.h  40;"    d
-__BIG_ENDIAN   include/utils/common.h  82;"    d
-__BYTE_ORDER   include/utils/common.h  38;"    d
-__BYTE_ORDER   include/utils/common.h  84;"    d
-__ESP_WPA_PSK_H__      include/esp_supplicant/esp_wpa_psk.h    16;"    d
-__ESP_WPS_H__  include/esp_supplicant/esp_wps.h        16;"    d
-__LITTLE_ENDIAN        include/utils/common.h  39;"    d
-__LITTLE_ENDIAN        include/utils/common.h  81;"    d
-__bitwise      include/utils/common.h  273;"   d
-__bitwise      include/utils/common.h  276;"   d
-__bswap_16     port/include/byteswap.h /^__bswap_16 (unsigned short int __bsx)$/;"     f
-__bswap_16     port/include/byteswap.h 13;"    d
-__bswap_32     port/include/byteswap.h /^__bswap_32 (unsigned int __bsx)$/;"   f
-__bswap_32     port/include/byteswap.h 29;"    d
-__bswap_64     port/include/byteswap.h 57;"    d
-__bswap_constant_64    port/include/byteswap.h 47;"    d
-__force        include/utils/common.h  272;"   d
-__force        include/utils/common.h  275;"   d
-__func__       include/utils/common.h  234;"   d
-__must_check   include/utils/common.h  288;"   d
-__must_check   include/utils/common.h  290;"   d
-__packed       src/eap_peer/eap_mschapv2.c     /^} __packed;$/;"       v       typeref:struct:eap_mschapv2_hdr
-__packed       src/eap_peer/eap_mschapv2.c     /^} __packed;$/;"       v       typeref:struct:ms_change_password
-__packed       src/eap_peer/eap_mschapv2.c     /^} __packed;$/;"       v       typeref:struct:ms_response
-__wpa_send_eapol       src/ap/wpa_auth.c       /^void __wpa_send_eapol(struct wpa_authenticator *wpa_auth,$/;" f
-_wpa_snprintf_hex      src/utils/wpa_debug.c   /^static inline int  _wpa_snprintf_hex(char *buf, size_t buf_size, const u8 *data, size_t len, int uppercase)$/;"       f       file:
-a_mpdu_params  src/common/ieee802_11_defs.h    /^      u8 a_mpdu_params;$/;"   m       struct:ieee80211_ht_capabilities
-ac     src/common/ieee802_11_defs.h    /^      struct wmm_ac_parameter ac[4]; \/* AC_BE, AC_BK, AC_VI, AC_VO *\/$/;"   m       struct:wmm_parameter_element    typeref:struct:wmm_parameter_element::wmm_ac_parameter
-aci_aifsn      src/common/ieee802_11_defs.h    /^      u8 aci_aifsn; \/* AIFSN, ACM, ACI *\/$/;"       m       struct:wmm_ac_parameter
-action src/common/ieee802_11_defs.h    /^                                      u8 action; \/* *\/$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon83
-action src/common/ieee802_11_defs.h    /^                                      u8 action;$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon80
-action src/common/ieee802_11_defs.h    /^                                      u8 action;$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-action src/common/ieee802_11_defs.h    /^                                      u8 action;$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon82
-action src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED action;$/;"     m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon76
-action src/eap_peer/eap_tlv_common.h   /^      be16 action;$/;"        m       struct:eap_tlv_request_action_tlv
-action_code    src/common/ieee802_11_defs.h    /^                                      u8 action_code;$/;"     m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon78
-action_code    src/common/ieee802_11_defs.h    /^                                      u8 action_code;$/;"     m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-action_length  src/ap/wpa_auth.h       /^      le16 action_length; \/* little endian length of action_frame *\/$/;"    m       struct:ft_rrb_frame
-add_sta        src/ap/wpa_auth.h       /^      struct wpa_state_machine * (*add_sta)(void *ctx, const u8 *sta_addr);$/;"       m       struct:wpa_auth_callbacks       typeref:struct:wpa_auth_callbacks::add_sta
-add_tspec      src/ap/wpa_auth.h       /^      int (*add_tspec)(void *ctx, const u8 *sta_addr, u8 *tspec_ie,$/;"       m       struct:wpa_auth_callbacks
-addr   src/ap/ap_config.h      /^      macaddr addr;$/;"       m       struct:mac_acl_entry
-addr   src/ap/ap_config.h      /^      u8 addr[ETH_ALEN];$/;"  m       struct:hostapd_wpa_psk
-addr   src/ap/sta_info.h       /^      u8 addr[6];$/;" m       struct:sta_info
-addr   src/ap/wpa_auth.h       /^      u8 addr[ETH_ALEN];$/;"  m       struct:ft_remote_r0kh
-addr   src/ap/wpa_auth.h       /^      u8 addr[ETH_ALEN];$/;"  m       struct:ft_remote_r1kh
-addr   src/ap/wpa_auth_i.h     /^      u8 addr[ETH_ALEN];$/;"  m       struct:wpa_authenticator
-addr   src/ap/wpa_auth_i.h     /^      u8 addr[ETH_ALEN];$/;"  m       struct:wpa_state_machine
-addr   src/rsn_supp/wpa.h      /^    u8 addr[ETH_ALEN];$/;"    m       struct:install_key
-addr   src/wps/wps.h   /^      u8 addr[ETH_ALEN];$/;"  m       struct:upnp_pending_message
-addr   src/wps/wps_registrar.c /^      u8 addr[ETH_ALEN];$/;"  m       struct:wps_pbc_session  file:
-addr1  src/common/ieee802_11_defs.h    /^      u8 addr1[6];$/;"        m       struct:ieee80211_hdr
-addr2  src/common/ieee802_11_defs.h    /^      u8 addr2[6];$/;"        m       struct:ieee80211_hdr
-addr3  src/common/ieee802_11_defs.h    /^      u8 addr3[6];$/;"        m       struct:ieee80211_hdr
-aes    src/crypto/crypto_internal-cipher.c     /^              } aes;$/;"      m       union:crypto_cipher::__anon10   typeref:struct:crypto_cipher::__anon10::__anon12        file:
-aes    src/fast_crypto/fast_crypto_internal-cipher.c   /^        } aes;$/;"    m       union:fast_crypto_cipher::__anon56      typeref:struct:fast_crypto_cipher::__anon56::__anon58   file:
-aes_128_cbc_decrypt    src/crypto/aes-cbc.c    /^aes_128_cbc_decrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)$/;"       f
-aes_128_cbc_encrypt    src/crypto/aes-cbc.c    /^aes_128_cbc_encrypt(const u8 *key, const u8 *iv, u8 *data, size_t data_len)$/;"       f
-aes_decrypt    src/crypto/aes-internal-dec.c   /^void  aes_decrypt(void *ctx, const u8 *crypt, u8 *plain)$/;"  f
-aes_decrypt_deinit     src/crypto/aes-internal-dec.c   /^void  aes_decrypt_deinit(void *ctx)$/;"       f
-aes_decrypt_init       src/crypto/aes-internal-dec.c   /^void *  aes_decrypt_init(const u8 *key, size_t len)$/;"       f
-aes_encrypt    src/crypto/aes-internal-enc.c   /^void  aes_encrypt(void *ctx, const u8 *plain, u8 *crypt)$/;"  f
-aes_encrypt_deinit     src/crypto/aes-internal-enc.c   /^void  aes_encrypt_deinit(void *ctx)$/;"       f
-aes_encrypt_init       src/crypto/aes-internal-enc.c   /^void *  aes_encrypt_init(const u8 *key, size_t len)$/;"       f
-aes_unwrap     src/crypto/aes-unwrap.c /^aes_unwrap(const u8 *kek, int n, const u8 *cipher, u8 *plain)$/;"     f
-aes_wrap       src/crypto/aes-wrap.c   /^int  aes_wrap(const u8 *kek, int n, const u8 *plain, u8 *cipher)$/;"  f
-aid    src/ap/sta_info.h       /^      u16 aid; \/* STA's unique AID (1 .. 2007) or 0 if not yet assigned *\/$/;"      m       struct:sta_info
-aid    src/common/ieee802_11_defs.h    /^                      le16 aid;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon70
-alert  src/tls/tls.h   /^      } alert;$/;"    m       union:tls_event_data    typeref:struct:tls_event_data::__anon36
-alert_description      src/tls/tlsv1_client_i.h        /^      u8 alert_description;$/;"       m       struct:tlsv1_client
-alert_description      src/tls/tlsv1_server_i.h        /^      u8 alert_description;$/;"       m       struct:tlsv1_server
-alert_level    src/tls/tlsv1_client_i.h        /^      u8 alert_level;$/;"     m       struct:tlsv1_client
-alert_level    src/tls/tlsv1_server_i.h        /^      u8 alert_level;$/;"     m       struct:tlsv1_server
-alg    src/common/wpa_common.h /^      enum wpa_alg alg;$/;"   m       struct:wpa_gtk_data     typeref:enum:wpa_gtk_data::wpa_alg
-alg    src/crypto/crypto_internal-cipher.c     /^      enum crypto_cipher_alg alg;$/;" m       struct:crypto_cipher    typeref:enum:crypto_cipher::crypto_cipher_alg   file:
-alg    src/crypto/crypto_internal.c    /^      enum crypto_hash_alg alg;$/;"   m       struct:crypto_hash      typeref:enum:crypto_hash::crypto_hash_alg       file:
-alg    src/fast_crypto/fast_crypto_internal-cipher.c   /^    enum crypto_cipher_alg alg;$/;"   m       struct:fast_crypto_cipher       typeref:enum:fast_crypto_cipher::crypto_cipher_alg      file:
-alg    src/fast_crypto/fast_crypto_internal.c  /^      enum crypto_hash_alg alg;$/;"   m       struct:fast_crypto_hash typeref:enum:fast_crypto_hash::crypto_hash_alg  file:
-alg    src/rsn_supp/wpa.h      /^    enum wpa_alg alg;$/;"     m       struct:install_key      typeref:enum:install_key::wpa_alg
-alg    src/tls/pkcs5.c /^      } alg;$/;"      m       struct:pkcs5_params     typeref:enum:pkcs5_params::pkcs5_alg    file:
-alg    src/tls/tlsv1_common.h  /^      enum crypto_cipher_alg alg;$/;" m       struct:tls_cipher_data  typeref:enum:tls_cipher_data::crypto_cipher_alg
-aliasing_hide_typecast include/utils/common.h  336;"   d
-alloc  src/crypto/libtommath.h /^    int used, alloc, sign;$/;"        m       struct:__anon8
-alloc  src/tls/libtommath.h    /^    int used, alloc, sign;$/;"        m       struct:__anon40
-allowNotifications     src/eap_peer/eap_i.h    /^      Boolean allowNotifications;$/;" m       struct:eap_method_ret
-alt_email      src/tls/x509v3.h        /^      char *alt_email; \/* rfc822Name *\/$/;" m       struct:x509_name
-altsubject_match       src/tls/tls.h   /^      const char *altsubject_match;$/;"       m       struct:tls_connection_params
-anonce src/common/wpa_common.h /^      u8 anonce[WPA_NONCE_LEN];$/;"   m       struct:rsn_ftie
-anonce src/rsn_supp/wpa.h      /^    u8 anonce[WPA_NONCE_LEN]; \/* ANonce from the last 1\/4 msg *\/$/;"       m       struct:wpa_sm
-anonymous_identity     src/eap_peer/eap_config.h       /^      u8 *anonymous_identity;$/;"     m       struct:eap_peer_config
-anonymous_identity_len src/eap_peer/eap_config.h       /^      size_t anonymous_identity_len;$/;"      m       struct:eap_peer_config
-ap     src/wps/wps.h   /^      int ap;$/;"     m       struct:wps_context
-ap     src/wps/wps.h   /^      } ap;$/;"       m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_er_ap
-ap_address     src/ap/wpa_auth.h       /^      u8 ap_address[ETH_ALEN];$/;"    m       struct:ft_r0kh_r1kh_pull_frame
-ap_address     src/ap/wpa_auth.h       /^      u8 ap_address[ETH_ALEN];$/;"    m       struct:ft_r0kh_r1kh_push_frame
-ap_address     src/ap/wpa_auth.h       /^      u8 ap_address[ETH_ALEN];$/;"    m       struct:ft_r0kh_r1kh_resp_frame
-ap_address     src/ap/wpa_auth.h       /^      u8 ap_address[ETH_ALEN];$/;"    m       struct:ft_rrb_frame
-ap_channel     src/wps/wps.h   /^      u16 ap_channel;$/;"     m       struct:wps_credential
-ap_channel     src/wps/wps_attr_parse.h        /^      const u8 *ap_channel; \/* 2 octets *\/$/;"      m       struct:wps_parse_attr
-ap_max_inactivity      src/ap/ap_config.h      /^      int ap_max_inactivity;$/;"      m       struct:hostapd_bss_config
-ap_mlme        src/ap/wpa_auth.h       /^      int ap_mlme;$/;"        m       struct:wpa_auth_config
-ap_nfc_dev_pw  src/wps/wps.h   /^      struct wpabuf *ap_nfc_dev_pw;$/;"       m       struct:wps_context      typeref:struct:wps_context::wpabuf
-ap_nfc_dev_pw_id       src/wps/wps.h   /^      u16 ap_nfc_dev_pw_id;$/;"       m       struct:wps_context
-ap_nfc_dh_privkey      src/wps/wps.h   /^      struct wpabuf *ap_nfc_dh_privkey;$/;"   m       struct:wps_context      typeref:struct:wps_context::wpabuf
-ap_nfc_dh_pubkey       src/wps/wps.h   /^      struct wpabuf *ap_nfc_dh_pubkey;$/;"    m       struct:wps_context      typeref:struct:wps_context::wpabuf
-ap_notify_completed_rsne       src/rsn_supp/wpa.h      /^    bool   ap_notify_completed_rsne;$/;"      m       struct:wpa_sm
-ap_pin src/ap/ap_config.h      /^      char *ap_pin;$/;"       m       struct:hostapd_bss_config
-ap_pin_failures        src/ap/hostapd.h        /^      unsigned int ap_pin_failures;$/;"       m       struct:hostapd_data
-ap_pin_failures_consecutive    src/ap/hostapd.h        /^      unsigned int ap_pin_failures_consecutive;$/;"   m       struct:hostapd_data
-ap_pin_lockout_time    src/ap/hostapd.h        /^      unsigned int ap_pin_lockout_time;$/;"   m       struct:hostapd_data
-ap_rsn_ie      src/rsn_supp/wpa.h      /^    u8 *ap_wpa_ie, *ap_rsn_ie;$/;"    m       struct:wpa_sm
-ap_rsn_ie_len  src/rsn_supp/wpa.h      /^    size_t ap_wpa_ie_len, ap_rsn_ie_len;$/;"  m       struct:wpa_sm
-ap_settings    src/ap/ap_config.h      /^      u8 *ap_settings;$/;"    m       struct:hostapd_bss_config
-ap_settings    src/wps/wps.h   /^      u8 *ap_settings;$/;"    m       struct:wps_context
-ap_settings    src/wps/wps.h   /^      } ap_settings;$/;"      m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_er_ap_settings
-ap_settings_cb src/wps/wps_i.h /^      void (*ap_settings_cb)(void *ctx, const struct wps_credential *cred);$/;"       m       struct:wps_data
-ap_settings_cb_ctx     src/wps/wps_i.h /^      void *ap_settings_cb_ctx;$/;"   m       struct:wps_data
-ap_settings_len        src/ap/ap_config.h      /^      size_t ap_settings_len;$/;"     m       struct:hostapd_bss_config
-ap_settings_len        src/wps/wps.h   /^      size_t ap_settings_len;$/;"     m       struct:wps_context
-ap_setup_locked        src/ap/ap_config.h      /^      int ap_setup_locked;$/;"        m       struct:hostapd_bss_config
-ap_setup_locked        src/wps/wps.h   /^      int ap_setup_locked;$/;"        m       struct:wps_context
-ap_setup_locked        src/wps/wps_attr_parse.h        /^      const u8 *ap_setup_locked; \/* 1 octet *\/$/;"  m       struct:wps_parse_attr
-ap_sta_is_authorized   src/ap/sta_info.h       /^static inline int ap_sta_is_authorized(struct sta_info *sta)$/;"      f
-ap_table_expiration_time       src/ap/ap_config.h      /^      int ap_table_expiration_time;$/;"       m       struct:hostapd_config
-ap_table_max_size      src/ap/ap_config.h      /^      int ap_table_max_size;$/;"      m       struct:hostapd_config
-ap_wpa_ie      src/rsn_supp/wpa.h      /^    u8 *ap_wpa_ie, *ap_rsn_ie;$/;"    m       struct:wpa_sm
-ap_wpa_ie_len  src/rsn_supp/wpa.h      /^    size_t ap_wpa_ie_len, ap_rsn_ie_len;$/;"  m       struct:wpa_sm
-arg    src/esp_supplicant/esp_wifi_driver.h    /^    void *arg;$/;"    m       struct:__anon32
-arg    src/esp_supplicant/esp_wps.c    /^    void *arg;$/;"    m       struct:__anon33 file:
-arg_size       src/esp_supplicant/esp_wifi_driver.h    /^    uint32_t arg_size;$/;"    m       struct:__anon32
-asel_capabilities      src/common/ieee802_11_defs.h    /^      u8 asel_capabilities;$/;"       m       struct:ieee80211_ht_capabilities
-asn1_bit_string_to_long        src/tls/asn1.c  /^unsigned long asn1_bit_string_to_long(const u8 *buf, size_t len)$/;"  f
-asn1_get_next  src/tls/asn1.c  /^int asn1_get_next(const u8 *buf, size_t len, struct asn1_hdr *hdr)$/;"        f
-asn1_get_oid   src/tls/asn1.c  /^int asn1_get_oid(const u8 *buf, size_t len, struct asn1_oid *oid,$/;" f
-asn1_hdr       src/tls/asn1.h  /^struct asn1_hdr {$/;" s
-asn1_oid       src/tls/asn1.h  /^struct asn1_oid {$/;" s
-asn1_oid_to_str        src/tls/asn1.c  /^void asn1_oid_to_str(struct asn1_oid *oid, char *buf, size_t len)$/;" f
-asn1_parse_oid src/tls/asn1.c  /^int asn1_parse_oid(const u8 *buf, size_t len, struct asn1_oid *oid)$/;"       f
-assoc_ie_buf   src/rsn_supp/wpa.c      /^u8 assoc_ie_buf[ASSOC_IE_LEN+2]; $/;" v
-assoc_req      src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED assoc_req;$/;"  m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon69
-assoc_resp     src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED assoc_resp, reassoc_resp;$/;"   m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon70
-assoc_resp_ftie        src/ap/wpa_auth_i.h     /^      u8 *assoc_resp_ftie;$/;"        m       struct:wpa_state_machine
-assoc_sa_query_max_timeout     src/ap/ap_config.h      /^      unsigned int assoc_sa_query_max_timeout;$/;"    m       struct:hostapd_bss_config
-assoc_sa_query_retry_timeout   src/ap/ap_config.h      /^      int assoc_sa_query_retry_timeout;$/;"   m       struct:hostapd_bss_config
-assoc_state    src/wps/wps_attr_parse.h        /^      const u8 *assoc_state; \/* 2 octets *\/$/;"     m       struct:wps_parse_attr
-assoc_wpa_ie   src/rsn_supp/wpa.h      /^    u8 *assoc_wpa_ie; \/* Own WPA\/RSN IE from (Re)AssocReq *\/$/;"   m       struct:wpa_sm
-assoc_wpa_ie_len       src/rsn_supp/wpa.h      /^    size_t assoc_wpa_ie_len;$/;"      m       struct:wpa_sm
-assoc_wps_ie   src/wps/wps.h   /^      const struct wpabuf *assoc_wps_ie;$/;"  m       struct:wps_config       typeref:struct:wps_config::wpabuf
-attr   src/tls/x509v3.h        /^      struct x509_name_attr attr[X509_MAX_NAME_ATTRIBUTES];$/;"       m       struct:x509_name        typeref:struct:x509_name::x509_name_attr
-auth   src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED auth;$/;"       m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon67
-auth   src/common/wpa_common.h /^              } auth;$/;"     m       union:wpa_ptk::__anon62 typeref:struct:wpa_ptk::__anon62::__anon63
-auth_alg       src/ap/sta_info.h       /^      u16 auth_alg;$/;"       m       struct:sta_info
-auth_alg       src/common/ieee802_11_defs.h    /^                      le16 auth_alg;$/;"      m       struct:ieee80211_mgmt::__anon66::__anon67
-auth_algs      src/ap/ap_config.h      /^      int auth_algs; \/* bitfield of allowed IEEE 802.11 authentication$/;"   m       struct:hostapd_bss_config
-auth_challenge src/eap_peer/eap_mschapv2.c     /^      u8 *auth_challenge;$/;" m       struct:eap_mschapv2_data        file:
-auth_response  src/eap_peer/eap_mschapv2.c     /^      u8 auth_response[MSCHAPV2_AUTH_RESPONSE_LEN];$/;"       m       struct:eap_mschapv2_data        file:
-auth_response  src/eap_peer/eap_ttls.c /^      u8 auth_response[MSCHAPV2_AUTH_RESPONSE_LEN];$/;"       m       struct:eap_ttls_data    file:
-auth_response_valid    src/eap_peer/eap_mschapv2.c     /^      int auth_response_valid;$/;"    m       struct:eap_mschapv2_data        file:
-auth_response_valid    src/eap_peer/eap_ttls.c /^      int auth_response_valid;$/;"    m       struct:eap_ttls_data    file:
-auth_transaction       src/common/ieee802_11_defs.h    /^                      le16 auth_transaction;$/;"      m       struct:ieee80211_mgmt::__anon66::__anon67
-auth_type      src/wps/wps.h   /^      u16 auth_type;$/;"      m       struct:wps_credential
-auth_type      src/wps/wps_attr_parse.h        /^      const u8 *auth_type; \/* 2 octets *\/$/;"       m       struct:wps_parse_attr
-auth_type      src/wps/wps_i.h /^      u16 auth_type;$/;"      m       struct:wps_data
-auth_type_flags        src/wps/wps_attr_parse.h        /^      const u8 *auth_type_flags; \/* 2 octets *\/$/;" m       struct:wps_parse_attr
-auth_types     src/wps/wps.h   /^      u16 auth_types;$/;"     m       struct:wps_context
-authenticator  src/wps/wps_attr_parse.h        /^      const u8 *authenticator; \/* WPS_AUTHENTICATOR_LEN (8) octets *\/$/;"   m       struct:wps_parse_attr
-authkey        src/wps/wps_i.h /^      u8 authkey[WPS_AUTHKEY_LEN];$/;"        m       struct:wps_data
-authorized_macs        src/wps/wps_attr_parse.h        /^      const u8 *authorized_macs; \/* <= 30 octets *\/$/;"     m       struct:wps_parse_attr
-authorized_macs        src/wps/wps_registrar.c /^      u8 authorized_macs[WPS_MAX_AUTHORIZED_MACS][ETH_ALEN];$/;"      m       struct:wps_registrar    file:
-authorized_macs_len    src/wps/wps_attr_parse.h        /^      size_t authorized_macs_len;$/;" m       struct:wps_parse_attr
-authorized_macs_union  src/wps/wps_registrar.c /^      u8 authorized_macs_union[WPS_MAX_AUTHORIZED_MACS][ETH_ALEN];$/;"        m       struct:wps_registrar    file:
-avp_code       src/eap_peer/eap_ttls.h /^      be32 avp_code;$/;"      m       struct:ttls_avp
-avp_code       src/eap_peer/eap_ttls.h /^      be32 avp_code;$/;"      m       struct:ttls_avp_vendor
-avp_length     src/eap_peer/eap_ttls.h /^      be32 avp_length; \/* 8-bit flags, 24-bit length;$/;"    m       struct:ttls_avp
-avp_length     src/eap_peer/eap_ttls.h /^      be32 avp_length; \/* 8-bit flags, 24-bit length;$/;"    m       struct:ttls_avp_vendor
-backend        src/utils/ext_password.c        /^      const struct ext_password_backend *backend;$/;" m       struct:ext_password_data        typeref:struct:ext_password_data::ext_password_backend  file:
-backends       src/utils/ext_password.c        /^static const struct ext_password_backend *backends[] = {$/;"  v       typeref:struct:ext_password_backend     file:
-base64_decode  src/utils/base64.c      /^unsigned char * base64_decode(const unsigned char *src, size_t len,$/;"       f
-base64_encode  src/utils/base64.c      /^unsigned char * base64_encode(const unsigned char *src, size_t len,$/;"       f
-base64_table   src/utils/base64.c      /^static const unsigned char base64_table[65] =$/;"     v       file:
-basic_rates    src/ap/ap_config.h      /^      int *basic_rates;$/;"   m       struct:hostapd_config
-basic_set      src/common/ieee802_11_defs.h    /^      u8 basic_set[16];$/;"   m       struct:ieee80211_ht_operation
-be16   include/utils/common.h  /^typedef u16 __bitwise be16;$/;"       t
-be16dec        port/include/endian.h   /^be16dec(const void *pp)$/;"   f
-be16enc        port/include/endian.h   /^be16enc(void *pp, uint16_t u)$/;"     f
-be16toh        port/include/endian.h   109;"   d
-be16toh        port/include/endian.h   94;"    d
-be32   include/utils/common.h  /^typedef u32 __bitwise be32;$/;"       t
-be32dec        port/include/endian.h   /^be32dec(const void *pp)$/;"   f
-be32enc        port/include/endian.h   /^be32enc(void *pp, uint32_t u)$/;"     f
-be32toh        port/include/endian.h   110;"   d
-be32toh        port/include/endian.h   95;"    d
-be64   include/utils/common.h  /^typedef u64 __bitwise be64;$/;"       t
-be64dec        port/include/endian.h   /^be64dec(const void *pp)$/;"   f
-be64enc        port/include/endian.h   /^be64enc(void *pp, uint64_t u)$/;"     f
-be64toh        port/include/endian.h   111;"   d
-be64toh        port/include/endian.h   96;"    d
-be_to_host16   include/utils/common.h  106;"   d
-be_to_host16   include/utils/common.h  65;"    d
-be_to_host16   include/utils/common.h  93;"    d
-be_to_host32   include/utils/common.h  109;"   d
-be_to_host32   include/utils/common.h  68;"    d
-be_to_host32   include/utils/common.h  97;"    d
-be_to_host64   include/utils/common.h  101;"   d
-be_to_host64   include/utils/common.h  113;"   d
-beacon src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED beacon;$/;"     m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon73
-beacon_int     src/ap/ap_config.h      /^      u16 beacon_int;$/;"     m       struct:hostapd_config
-beacon_int     src/common/ieee802_11_defs.h    /^                      le16 beacon_int;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon73
-beacon_int     src/common/ieee802_11_defs.h    /^                      le16 beacon_int;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon75
-bigbyte        src/crypto/des-internal.c       /^static const u32 bigbyte[24] =$/;"    v       file:
-bignum_add     src/crypto/bignum.c     /^bignum_add(const struct bignum *a, const struct bignum *b,$/;"        f
-bignum_add     src/tls/bignum.c        /^bignum_add(const struct bignum *a, const struct bignum *b,$/;"        f
-bignum_cmp     src/crypto/bignum.c     /^bignum_cmp(const struct bignum *a, const struct bignum *b)$/;"        f
-bignum_cmp     src/tls/bignum.c        /^bignum_cmp(const struct bignum *a, const struct bignum *b)$/;"        f
-bignum_cmp_d   src/crypto/bignum.c     /^bignum_cmp_d(const struct bignum *a, unsigned long b)$/;"     f
-bignum_cmp_d   src/tls/bignum.c        /^bignum_cmp_d(const struct bignum *a, unsigned long b)$/;"     f
-bignum_deinit  src/crypto/bignum.c     /^bignum_deinit(struct bignum *n)$/;"   f
-bignum_deinit  src/tls/bignum.c        /^bignum_deinit(struct bignum *n)$/;"   f
-bignum_exptmod src/crypto/bignum.c     /^bignum_exptmod(const struct bignum *a, const struct bignum *b,$/;"    f
-bignum_exptmod src/tls/bignum.c        /^bignum_exptmod(const struct bignum *a, const struct bignum *b,$/;"    f
-bignum_get_unsigned_bin        src/crypto/bignum.c     /^bignum_get_unsigned_bin(const struct bignum *n, u8 *buf, size_t *len)$/;"     f
-bignum_get_unsigned_bin        src/tls/bignum.c        /^bignum_get_unsigned_bin(const struct bignum *n, u8 *buf, size_t *len)$/;"     f
-bignum_get_unsigned_bin_len    src/crypto/bignum.c     /^bignum_get_unsigned_bin_len(struct bignum *n)$/;"     f
-bignum_get_unsigned_bin_len    src/tls/bignum.c        /^bignum_get_unsigned_bin_len(struct bignum *n)$/;"     f
-bignum_init    src/crypto/bignum.c     /^bignum_init(void)$/;" f
-bignum_init    src/tls/bignum.c        /^bignum_init(void)$/;" f
-bignum_mul     src/crypto/bignum.c     /^bignum_mul(const struct bignum *a, const struct bignum *b,$/;"        f
-bignum_mul     src/tls/bignum.c        /^bignum_mul(const struct bignum *a, const struct bignum *b,$/;"        f
-bignum_mulmod  src/crypto/bignum.c     /^bignum_mulmod(const struct bignum *a, const struct bignum *b,$/;"     f
-bignum_mulmod  src/tls/bignum.c        /^bignum_mulmod(const struct bignum *a, const struct bignum *b,$/;"     f
-bignum_set_unsigned_bin        src/crypto/bignum.c     /^bignum_set_unsigned_bin(struct bignum *n, const u8 *buf, size_t len)$/;"      f
-bignum_set_unsigned_bin        src/tls/bignum.c        /^bignum_set_unsigned_bin(struct bignum *n, const u8 *buf, size_t len)$/;"      f
-bignum_sub     src/crypto/bignum.c     /^bignum_sub(const struct bignum *a, const struct bignum *b,$/;"        f
-bignum_sub     src/tls/bignum.c        /^bignum_sub(const struct bignum *a, const struct bignum *b,$/;"        f
-binding_nonce  src/eap_peer/eap_peap.c /^      u8 binding_nonce[32];$/;"       m       struct:eap_peap_data    file:
-bits   src/crypto/md5_i.h      /^      u32 bits[2];$/;"        m       struct:MD5Context
-blk    src/crypto/sha1-internal.c      142;"   d       file:
-blk0   src/crypto/sha1-internal.c      137;"   d       file:
-blk0   src/crypto/sha1-internal.c      140;"   d       file:
-blob   src/eap_peer/eap_i.h    /^      struct wpa_config_blob blob[BLOB_NUM];$/;"      m       struct:eap_sm   typeref:struct:eap_sm::wpa_config_blob
-block_size     src/tls/tlsv1_common.h  /^      size_t block_size; \/* also iv_size *\/$/;"     m       struct:tls_cipher_data
-bn_reverse     src/crypto/libtommath.h /^bn_reverse (unsigned char *s, int len)$/;"    f
-bn_reverse     src/tls/libtommath.h    /^bn_reverse (unsigned char *s, int len)$/;"    f
-broadcast_ether_addr   include/utils/common.h  320;"   d
-broadcast_key_idx_max  src/ap/ap_config.h      /^      int broadcast_key_idx_min, broadcast_key_idx_max;$/;"   m       struct:hostapd_bss_config
-broadcast_key_idx_min  src/ap/ap_config.h      /^      int broadcast_key_idx_min, broadcast_key_idx_max;$/;"   m       struct:hostapd_bss_config
-bss    src/ap/ap_config.h      /^      struct hostapd_bss_config *bss, *last_bss;$/;"  m       struct:hostapd_config   typeref:struct:hostapd_config::hostapd_bss_config
-bssid  src/ap/ap_config.h      /^      macaddr bssid;$/;"      m       struct:hostapd_bss_config
-bssid  src/common/ieee802_11_defs.h    /^      u8 bssid[6];$/;"        m       struct:ieee80211_mgmt
-bssid  src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    *bssid;$/;"    m       struct:wps_scan_ie
-bssid  src/esp_supplicant/esp_wpa_enterprise.c /^    uint8_t *bssid;$/;"       m       struct:wpa2_rx_param    file:
-bssid  src/rsn_supp/wpa.h      /^    u8 bssid[ETH_ALEN];$/;"   m       struct:wpa_sm
-bssid  src/wps/wps.h   /^      u8 bssid[6];$/;"        m       struct:discard_ap_list_t
-bssid  src/wps/wps.h   /^    u8 bssid[ETH_ALEN];$/;"   m       struct:wps_sm
-bswap16        port/include/endian.h   78;"    d
-bswap32        port/include/endian.h   79;"    d
-bswap64        port/include/endian.h   80;"    d
-bswap_16       include/utils/common.h  238;"   d
-bswap_32       include/utils/common.h  242;"   d
-buf    src/crypto/md5_i.h      /^      u32 buf[4];$/;" m       struct:MD5Context
-buf    src/crypto/sha256-internal.c    /^      u8 buf[SHA256_BLOCK_SIZE];$/;"  m       struct:sha256_state     file:
-buf    src/esp_supplicant/esp_wpa_enterprise.c /^    u8 *buf;$/;"      m       struct:wpa2_rx_param    file:
-buf    src/esp_supplicant/esp_wps.c    /^    u8 *buf;$/;"      m       struct:wps_rx_param     file:
-buffer src/crypto/md4-internal.c       /^      u8 buffer[MD4_BLOCK_LENGTH];$/;"        m       struct:MD4Context       file:
-buffer src/crypto/sha1_i.h     /^      unsigned char buffer[64];$/;"   m       struct:SHA1Context
-byteReverse    src/crypto/md5-internal.c       /^static void byteReverse(unsigned char *buf, unsigned longs)$/;"       f       file:
-byteReverse    src/crypto/md5-internal.c       70;"    d       file:
-bytebit        src/crypto/des-internal.c       /^static const u32 bytebit[8] =$/;"     v       file:
-ca     src/tls/x509v3.h        /^      int ca; \/* cA *\/$/;"  m       struct:x509_certificate
-ca_cert        src/eap_peer/eap_config.h       /^      u8 *ca_cert;$/;"        m       struct:eap_peer_config
-ca_cert        src/tls/tls.h   /^      const char *ca_cert;$/;"        m       struct:tls_connection_params
-ca_cert2       src/eap_peer/eap_config.h       /^      u8 *ca_cert2;$/;"       m       struct:eap_peer_config
-ca_cert_blob   src/tls/tls.h   /^      const u8 *ca_cert_blob;$/;"     m       struct:tls_connection_params
-ca_cert_blob_len       src/tls/tls.h   /^      size_t ca_cert_blob_len;$/;"    m       struct:tls_connection_params
-ca_cert_id     src/tls/tls.h   /^      const char *ca_cert_id;$/;"     m       struct:tls_connection_params
-ca_path        src/eap_peer/eap_config.h       /^      u8 *ca_path;$/;"        m       struct:eap_peer_config
-ca_path        src/tls/tls.h   /^      const char *ca_path;$/;"        m       struct:tls_connection_params
-ca_path2       src/eap_peer/eap_config.h       /^      u8 *ca_path2;$/;"       m       struct:eap_peer_config
-capab_info     src/common/ieee802_11_defs.h    /^                      le16 capab_info;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon69
-capab_info     src/common/ieee802_11_defs.h    /^                      le16 capab_info;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon70
-capab_info     src/common/ieee802_11_defs.h    /^                      le16 capab_info;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon71
-capab_info     src/common/ieee802_11_defs.h    /^                      le16 capab_info;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon73
-capab_info     src/common/ieee802_11_defs.h    /^                      le16 capab_info;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon75
-capabilities   src/common/wpa_common.h /^      int capabilities;$/;"   m       struct:wpa_ie_data
-capability     src/ap/sta_info.h       /^      u16 capability;$/;"     m       struct:sta_info
-capinfo        src/esp_supplicant/esp_wifi_driver.h    /^    uint16_t   capinfo;$/;"   m       struct:wps_scan_ie
-category       src/common/ieee802_11_defs.h    /^                      u8 category;$/;"        m       struct:ieee80211_mgmt::__anon66::__anon76
-cb     src/ap/hostapd.h        /^      int (*cb)(void *ctx, const u8 *sa, const u8 *da, const u8 *bssid,$/;"   m       struct:hostapd_probereq_cb
-cb_ctx src/tls/tls.h   /^      void *cb_ctx;$/;"       m       struct:tls_config
-cb_ctx src/wps/wps.h   /^      void *cb_ctx;$/;"       m       struct:wps_context
-cb_ctx src/wps/wps.h   /^      void *cb_ctx;$/;"       m       struct:wps_registrar_config
-cb_ctx src/wps/wps_registrar.c /^      void *cb_ctx;$/;"       m       struct:wps_registrar    file:
-cbc    src/crypto/crypto_internal-cipher.c     /^                      u8 cbc[32];$/;" m       struct:crypto_cipher::__anon10::__anon12        file:
-cbc    src/crypto/crypto_internal-cipher.c     /^                      u8 cbc[8];$/;"  m       struct:crypto_cipher::__anon10::__anon13        file:
-cbc    src/crypto/crypto_internal-cipher.c     /^                      u8 cbc[8];$/;"  m       struct:crypto_cipher::__anon10::__anon14        file:
-cbc    src/fast_crypto/fast_crypto_internal-cipher.c   /^          uint32_t cbc[8];$/;"        m       struct:fast_crypto_cipher::__anon56::__anon60   file:
-cbc    src/fast_crypto/fast_crypto_internal-cipher.c   /^            uint8_t cbc[32];$/;"      m       struct:fast_crypto_cipher::__anon56::__anon58   file:
-cbc    src/fast_crypto/fast_crypto_internal-cipher.c   /^            uint8_t cbc[8];$/;"       m       struct:fast_crypto_cipher::__anon56::__anon59   file:
-ccmp   src/esp_supplicant/esp_wifi_driver.h    /^struct wifi_cipher ccmp;$/;"  v       typeref:struct:wifi_cipher
-cert   src/tls/tls.h   /^              const struct wpabuf *cert;$/;"  m       struct:tls_event_data::__anon34 typeref:struct:tls_event_data::__anon34::wpabuf
-cert   src/tls/tls.h   /^              const struct wpabuf *cert;$/;"  m       struct:tls_event_data::__anon35 typeref:struct:tls_event_data::__anon35::wpabuf
-cert   src/tls/tlsv1_cred.h    /^      struct x509_certificate *cert;$/;"      m       struct:tlsv1_credentials        typeref:struct:tlsv1_credentials::x509_certificate
-cert_fail      src/tls/tls.h   /^      } cert_fail;$/;"        m       union:tls_event_data    typeref:struct:tls_event_data::__anon34
-cert_id        src/tls/tls.h   /^      const char *cert_id;$/;"        m       struct:tls_connection_params
-cert_in_cb     src/tls/tls.h   /^      int cert_in_cb;$/;"     m       struct:tls_config
-cert_len       src/tls/x509v3.h        /^      size_t cert_len;$/;"    m       struct:x509_certificate
-cert_start     src/tls/x509v3.h        /^      const u8 *cert_start;$/;"       m       struct:x509_certificate
-certificate_requested  src/tls/tlsv1_client_i.h        /^      unsigned int certificate_requested:1;$/;"       m       struct:tlsv1_client
-challenge_hash src/crypto/ms_funcs.c   /^static int challenge_hash(const u8 *peer_challenge, const u8 *auth_challenge,$/;"     f       file:
-challenge_response     src/crypto/ms_funcs.c   /^void challenge_response(const u8 *challenge, const u8 *password_hash,$/;"     f
-chan   src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    chan;$/;"      m       struct:wps_scan_ie
-chan_switch    src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED chan_switch;$/;"        m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-changed        src/ap/wpa_auth_i.h     /^      Boolean changed;$/;"    m       struct:wpa_group
-changed        src/ap/wpa_auth_i.h     /^      unsigned int changed:1;$/;"     m       struct:wpa_state_machine
-channel        src/ap/ap_config.h      /^      u8 channel;$/;" m       struct:hostapd_config
-channel        src/ap/hostapd.h        /^      u32 channel;$/;"        m       struct:hostapd_frame_info
-channel        src/wps/wps.h   /^    u8 channel;$/;"   m       struct:wps_sm
-chap_md5       src/eap_peer/chap.c     /^int chap_md5(u8 id, const u8 *secret, size_t secret_len, const u8 *challenge,$/;"     f
-check_crl      src/tls/tls_internal.c  /^      int check_crl;$/;"      m       struct:tls_global       file:
-cipher src/tls/tlsv1_common.h  /^      tls_cipher cipher;$/;"  m       struct:tls_cipher_data
-cipher src/tls/tlsv1_common.h  /^      tls_cipher cipher;$/;"  m       struct:tls_cipher_suite
-cipher_alg     src/tls/tlsv1_record.h  /^      enum crypto_cipher_alg cipher_alg;$/;"  m       struct:tlsv1_record_layer       typeref:enum:tlsv1_record_layer::crypto_cipher_alg
-cipher_suite   src/tls/tlsv1_record.h  /^      u16 cipher_suite;$/;"   m       struct:tlsv1_record_layer
-cipher_suite   src/tls/tlsv1_server_i.h        /^      u16 cipher_suite;$/;"   m       struct:tlsv1_server
-cipher_suites  src/tls/tlsv1_client_i.h        /^      u16 cipher_suites[MAX_CIPHER_COUNT];$/;"        m       struct:tlsv1_client
-cipher_suites  src/tls/tlsv1_server_i.h        /^      u16 cipher_suites[MAX_CIPHER_COUNT];$/;"        m       struct:tlsv1_server
-client src/tls/tls_internal.c  /^      struct tlsv1_client *client;$/;"        m       struct:tls_connection   typeref:struct:tls_connection::tlsv1_client     file:
-client_cert    src/eap_peer/eap_config.h       /^      u8 *client_cert;$/;"    m       struct:eap_peer_config
-client_cert    src/tls/tls.h   /^      const char *client_cert;$/;"    m       struct:tls_connection_params
-client_cert2   src/eap_peer/eap_config.h       /^      u8 *client_cert2;$/;"   m       struct:eap_peer_config
-client_cert_blob       src/tls/tls.h   /^      const u8 *client_cert_blob;$/;" m       struct:tls_connection_params
-client_cert_blob_len   src/tls/tls.h   /^      size_t client_cert_blob_len;$/;"        m       struct:tls_connection_params
-client_hello_ext       src/tls/tlsv1_client_i.h        /^      u8 *client_hello_ext;$/;"       m       struct:tlsv1_client
-client_hello_ext_len   src/tls/tlsv1_client_i.h        /^      size_t client_hello_ext_len;$/;"        m       struct:tlsv1_client
-client_random  src/tls/tls.h   /^      const u8 *client_random;$/;"    m       struct:tls_keys
-client_random  src/tls/tlsv1_client_i.h        /^      u8 client_random[TLS_RANDOM_LEN];$/;"   m       struct:tlsv1_client
-client_random  src/tls/tlsv1_server_i.h        /^      u8 client_random[TLS_RANDOM_LEN];$/;"   m       struct:tlsv1_server
-client_random_len      src/tls/tls.h   /^      size_t client_random_len;$/;"   m       struct:tls_keys
-client_rsa_key src/tls/tlsv1_server_i.h        /^      struct crypto_public_key *client_rsa_key;$/;"   m       struct:tlsv1_server     typeref:struct:tlsv1_server::crypto_public_key
-client_version src/tls/tlsv1_server_i.h        /^      u16 client_version;$/;" m       struct:tlsv1_server
-cm_timer       src/rsn_supp/wpa.h      /^    ETSTimer  cm_timer;$/;"   m       struct:wpa_sm
-cmk    src/eap_peer/eap_peap.c /^      u8 cmk[20];$/;" m       struct:eap_peap_data    file:
-code   src/eap_peer/eap_defs.h /^      u8 code;$/;"    m       struct:eap_hdr
-compound_mac   src/eap_peer/eap_tlv_common.h   /^      u8 compound_mac[20];$/;"        m       struct:eap_tlv_crypto_binding_tlv
-conf   src/ap/hostapd.h        /^      struct hostapd_bss_config *conf;$/;"    m       struct:hostapd_data     typeref:struct:hostapd_data::hostapd_bss_config
-conf   src/ap/wpa_auth_i.h     /^      struct wpa_auth_config conf;$/;"        m       struct:wpa_authenticator        typeref:struct:wpa_authenticator::wpa_auth_config
-config src/eap_peer/eap_i.h    /^      struct eap_peer_config config;$/;"      m       struct:eap_sm   typeref:struct:eap_sm::eap_peer_config
-config src/wps/wps.h   /^    wifi_sta_config_t config;$/;"     m       struct:wps_sm
-config_assoc_ie        src/rsn_supp/wpa.h      /^    void (*config_assoc_ie) (u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len);$/;"      m       struct:wpa_sm
-config_error   src/wps/wps.h   /^              u16 config_error;$/;"   m       struct:wps_event_data::wps_event_fail
-config_error   src/wps/wps.h   /^              u16 config_error;$/;"   m       struct:wps_event_data::wps_event_m2d
-config_error   src/wps/wps_attr_parse.h        /^      const u8 *config_error; \/* 2 octets *\/$/;"    m       struct:wps_parse_attr
-config_error   src/wps/wps_i.h /^      u16 config_error;$/;"   m       struct:wps_data
-config_methods src/ap/ap_config.h      /^      char *config_methods;$/;"       m       struct:hostapd_bss_config
-config_methods src/wps/wps.h   /^              u16 config_methods;$/;" m       struct:wps_event_data::wps_event_er_enrollee
-config_methods src/wps/wps.h   /^              u16 config_methods;$/;" m       struct:wps_event_data::wps_event_m2d
-config_methods src/wps/wps.h   /^      u16 config_methods;$/;" m       struct:wps_context
-config_methods src/wps/wps.h   /^      u16 config_methods;$/;" m       struct:wps_device_data
-config_methods src/wps/wps_attr_parse.h        /^      const u8 *config_methods; \/* 2 octets *\/$/;"  m       struct:wps_parse_attr
-config_read_cb src/ap/hostapd.h        /^      struct hostapd_config * (*config_read_cb)(const char *config_fname);$/;"        m       struct:hapd_interfaces  typeref:struct:hapd_interfaces::config_read_cb
-conn   src/eap_peer/eap_tls_common.h   /^      struct tls_connection *conn;$/;"        m       struct:eap_ssl_data     typeref:struct:eap_ssl_data::tls_connection
-conn_type_flags        src/wps/wps_attr_parse.h        /^      const u8 *conn_type_flags; \/* 1 octet *\/$/;"  m       struct:wps_parse_attr
-constructed    src/tls/asn1.h  /^      u8 identifier, class, constructed;$/;"  m       struct:asn1_hdr typeref:class:asn1_hdr::
-control_chan   src/common/ieee802_11_defs.h    /^      u8 control_chan;$/;"    m       struct:ieee80211_ht_operation
-cookey src/crypto/des-internal.c       /^static void cookey(const u32 *raw1, u32 *keyout)$/;"  f       file:
-count  src/ap/hostapd.h        /^      size_t count;$/;"       m       struct:hapd_interfaces
-count  src/crypto/md4-internal.c       /^      u64 count;$/;"  m       struct:MD4Context       file:
-count  src/crypto/sha1_i.h     /^      u32 count[2];$/;"       m       struct:SHA1Context
-counter        src/ap/wpa_auth_i.h     /^              u8 counter[WPA_REPLAY_COUNTER_LEN];$/;" m       struct:wpa_state_machine::wpa_key_replay_counter
-countermeasures        src/rsn_supp/wpa.h      /^    int countermeasures; \/*TKIP countermeasures state flag, 1:in countermeasures state*\/$/;"        m       struct:wpa_sm
-country        src/ap/ap_config.h      /^      char country[3]; \/* first two octets: country code as described in$/;" m       struct:hostapd_config
-cred   src/tls/tlsv1_client_i.h        /^      struct tlsv1_credentials *cred;$/;"     m       struct:tlsv1_client     typeref:struct:tlsv1_client::tlsv1_credentials
-cred   src/tls/tlsv1_server_i.h        /^      struct tlsv1_credentials *cred;$/;"     m       struct:tlsv1_server     typeref:struct:tlsv1_server::tlsv1_credentials
-cred   src/wps/wps.h   /^              const struct wps_credential *cred;$/;"  m       struct:wps_event_data::wps_event_er_ap_settings typeref:struct:wps_event_data::wps_event_er_ap_settings::wps_credential
-cred   src/wps/wps_attr_parse.h        /^      const u8 *cred[MAX_CRED_COUNT];$/;"     m       struct:wps_parse_attr
-cred   src/wps/wps_i.h /^      struct wps_credential cred;$/;" m       struct:wps_data typeref:struct:wps_data::wps_credential
-cred_attr      src/wps/wps.h   /^      const u8 *cred_attr;$/;"        m       struct:wps_credential
-cred_attr_len  src/wps/wps.h   /^      size_t cred_attr_len;$/;"       m       struct:wps_credential
-cred_cb        src/wps/wps.h   /^      int (*cred_cb)(void *ctx, const struct wps_credential *cred);$/;"       m       struct:wps_context
-cred_len       src/wps/wps_attr_parse.h        /^      size_t cred_len[MAX_CRED_COUNT];$/;"    m       struct:wps_parse_attr
-crypto_bignum  test/test_crypto.c      /^typedef struct crypto_bignum crypto_bignum;$/;"       t       typeref:struct:crypto_bignum    file:
-crypto_bignum_add      src/crypto/crypto_mbedtls.c     /^int crypto_bignum_add(const struct crypto_bignum *a,$/;"      f
-crypto_bignum_bits     src/crypto/crypto_mbedtls.c     /^int crypto_bignum_bits(const struct crypto_bignum *a)$/;"     f
-crypto_bignum_cmp      src/crypto/crypto_mbedtls.c     /^int crypto_bignum_cmp(const struct crypto_bignum *a,$/;"      f
-crypto_bignum_deinit   src/crypto/crypto_mbedtls.c     /^void crypto_bignum_deinit(struct crypto_bignum *n, int clear)$/;"     f
-crypto_bignum_div      src/crypto/crypto_mbedtls.c     /^int crypto_bignum_div(const struct crypto_bignum *a,$/;"      f
-crypto_bignum_exptmod  src/crypto/crypto_mbedtls.c     /^int crypto_bignum_exptmod(const struct crypto_bignum *a,$/;"  f
-crypto_bignum_init     src/crypto/crypto_mbedtls.c     /^struct crypto_bignum *crypto_bignum_init(void)$/;"    f
-crypto_bignum_init_set src/crypto/crypto_mbedtls.c     /^struct crypto_bignum *crypto_bignum_init_set(const u8 *buf, size_t len)$/;"   f
-crypto_bignum_inverse  src/crypto/crypto_mbedtls.c     /^int crypto_bignum_inverse(const struct crypto_bignum *a,$/;"  f
-crypto_bignum_is_one   src/crypto/crypto_mbedtls.c     /^int crypto_bignum_is_one(const struct crypto_bignum *a)$/;"   f
-crypto_bignum_is_zero  src/crypto/crypto_mbedtls.c     /^int crypto_bignum_is_zero(const struct crypto_bignum *a)$/;"  f
-crypto_bignum_legendre src/crypto/crypto_mbedtls.c     /^int crypto_bignum_legendre(const struct crypto_bignum *a,$/;" f
-crypto_bignum_mod      src/crypto/crypto_mbedtls.c     /^int crypto_bignum_mod(const struct crypto_bignum *a,$/;"      f
-crypto_bignum_mulmod   src/crypto/crypto_mbedtls.c     /^int crypto_bignum_mulmod(const struct crypto_bignum *a,$/;"   f
-crypto_bignum_sub      src/crypto/crypto_mbedtls.c     /^int crypto_bignum_sub(const struct crypto_bignum *a,$/;"      f
-crypto_bignum_to_bin   src/crypto/crypto_mbedtls.c     /^int crypto_bignum_to_bin(const struct crypto_bignum *a,$/;"   f
-crypto_binding src/eap_peer/eap_peap.c /^      enum { NO_BINDING, OPTIONAL_BINDING, REQUIRE_BINDING } crypto_binding;$/;"      m       struct:eap_peap_data    typeref:enum:eap_peap_data::__anon7     file:
-crypto_binding_used    src/eap_peer/eap_peap.c /^      int crypto_binding_used;$/;"    m       struct:eap_peap_data    file:
-crypto_cipher  src/crypto/crypto_internal-cipher.c     /^struct crypto_cipher {$/;"    s       file:
-crypto_cipher_alg      include/crypto/crypto.h /^enum crypto_cipher_alg {$/;"  g
-crypto_cipher_decrypt  src/crypto/crypto_internal-cipher.c     /^int  crypto_cipher_decrypt(struct crypto_cipher *ctx, const u8 *crypt,$/;"    f
-crypto_cipher_deinit   src/crypto/crypto_internal-cipher.c     /^void  crypto_cipher_deinit(struct crypto_cipher *ctx)$/;"     f
-crypto_cipher_encrypt  src/crypto/crypto_internal-cipher.c     /^int  crypto_cipher_encrypt(struct crypto_cipher *ctx, const u8 *plain,$/;"    f
-crypto_cipher_init     src/crypto/crypto_internal-cipher.c     /^struct crypto_cipher *  crypto_cipher_init(enum crypto_cipher_alg alg,$/;"    f
-crypto_ec      src/crypto/crypto_mbedtls.c     /^struct crypto_ec {$/;"        s       file:
-crypto_ec_deinit       src/crypto/crypto_mbedtls.c     /^void crypto_ec_deinit(struct crypto_ec *e)$/;"        f
-crypto_ec_get_order    src/crypto/crypto_mbedtls.c     /^const struct crypto_bignum *crypto_ec_get_order(struct crypto_ec *e)$/;"      f
-crypto_ec_get_prime    src/crypto/crypto_mbedtls.c     /^const struct crypto_bignum *crypto_ec_get_prime(struct crypto_ec *e)$/;"      f
-crypto_ec_init src/crypto/crypto_mbedtls.c     /^struct crypto_ec *crypto_ec_init(int group)$/;"       f
-crypto_ec_point_add    src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_add(struct crypto_ec *e, const struct crypto_ec_point *a,$/;"     f
-crypto_ec_point_cmp    src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_cmp(const struct crypto_ec *e,$/;"        f
-crypto_ec_point_compute_y_sqr  src/crypto/crypto_mbedtls.c     /^crypto_ec_point_compute_y_sqr(struct crypto_ec *e,$/;"        f
-crypto_ec_point_deinit src/crypto/crypto_mbedtls.c     /^void crypto_ec_point_deinit(struct crypto_ec_point *p, int clear)$/;" f
-crypto_ec_point_from_bin       src/crypto/crypto_mbedtls.c     /^struct crypto_ec_point *crypto_ec_point_from_bin(struct crypto_ec *e,$/;"     f
-crypto_ec_point_init   src/crypto/crypto_mbedtls.c     /^struct crypto_ec_point *crypto_ec_point_init(struct crypto_ec *e)$/;" f
-crypto_ec_point_invert src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_invert(struct crypto_ec *e, struct crypto_ec_point *p)$/;"        f
-crypto_ec_point_is_at_infinity src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_is_at_infinity(struct crypto_ec *e,$/;"   f
-crypto_ec_point_is_on_curve    src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_is_on_curve(struct crypto_ec *e,$/;"      f
-crypto_ec_point_mul    src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_mul(struct crypto_ec *e, const struct crypto_ec_point *p,$/;"     f
-crypto_ec_point_solve_y_coord  src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_solve_y_coord(struct crypto_ec *e,$/;"    f
-crypto_ec_point_to_bin src/crypto/crypto_mbedtls.c     /^int crypto_ec_point_to_bin(struct crypto_ec *e,$/;"   f
-crypto_ec_prime_len    src/crypto/crypto_mbedtls.c     /^size_t crypto_ec_prime_len(struct crypto_ec *e)$/;"   f
-crypto_ec_prime_len_bits       src/crypto/crypto_mbedtls.c     /^size_t crypto_ec_prime_len_bits(struct crypto_ec *e)$/;"      f
-crypto_get_random      src/crypto/crypto_mbedtls.c     /^int crypto_get_random(void *buf, size_t len)$/;"      f
-crypto_global_deinit   src/crypto/crypto_internal.c    /^void  crypto_global_deinit(void)$/;"  f
-crypto_global_init     src/crypto/crypto_internal.c    /^int  crypto_global_init(void)$/;"     f
-crypto_hash    src/crypto/crypto_internal.c    /^struct crypto_hash {$/;"      s       file:
-crypto_hash_alg        include/crypto/crypto.h /^enum crypto_hash_alg {$/;"    g
-crypto_hash_finish     src/crypto/crypto_internal.c    /^int  crypto_hash_finish(struct crypto_hash *ctx, u8 *mac, size_t *len)$/;"    f
-crypto_hash_init       src/crypto/crypto_internal.c    /^struct crypto_hash *  crypto_hash_init(enum crypto_hash_alg alg, const u8 *key,$/;"   f
-crypto_hash_update     src/crypto/crypto_internal.c    /^void  crypto_hash_update(struct crypto_hash *ctx, const u8 *data, size_t len)$/;"     f
-crypto_mod_exp src/crypto/crypto_internal-modexp.c     /^crypto_mod_exp(const u8 *base, size_t base_len,$/;"   f
-crypto_private_key_decrypt_pkcs1_v15   src/crypto/crypto_internal-rsa.c        /^int  crypto_private_key_decrypt_pkcs1_v15(struct crypto_private_key *key,$/;" f
-crypto_private_key_free        src/crypto/crypto_internal-rsa.c        /^void  crypto_private_key_free(struct crypto_private_key *key)$/;"     f
-crypto_private_key_import      src/crypto/crypto_internal-rsa.c        /^struct crypto_private_key *  crypto_private_key_import(const u8 *key,$/;"     f
-crypto_private_key_sign_pkcs1  src/crypto/crypto_internal-rsa.c        /^int  crypto_private_key_sign_pkcs1(struct crypto_private_key *key,$/;"        f
-crypto_public_key_decrypt_pkcs1        src/crypto/crypto_internal-rsa.c        /^int  crypto_public_key_decrypt_pkcs1(struct crypto_public_key *key,$/;"       f
-crypto_public_key_encrypt_pkcs1_v15    src/crypto/crypto_internal-rsa.c        /^int  crypto_public_key_encrypt_pkcs1_v15(struct crypto_public_key *key,$/;"   f
-crypto_public_key_free src/crypto/crypto_internal-rsa.c        /^void  crypto_public_key_free(struct crypto_public_key *key)$/;"       f
-crypto_public_key_from_cert    src/crypto/crypto_internal-rsa.c        /^struct crypto_public_key *  crypto_public_key_from_cert(const u8 *buf,$/;"    f
-crypto_public_key_import       src/crypto/crypto_internal-rsa.c        /^struct crypto_public_key *  crypto_public_key_import(const u8 *key, size_t len)$/;"   f
-crypto_rsa_exptmod     src/tls/rsa.c   /^int crypto_rsa_exptmod(const u8 *in, size_t inlen, u8 *out, size_t *outlen,$/;"       f
-crypto_rsa_free        src/tls/rsa.c   /^void crypto_rsa_free(struct crypto_rsa_key *key)$/;"  f
-crypto_rsa_get_modulus_len     src/tls/rsa.c   /^size_t crypto_rsa_get_modulus_len(struct crypto_rsa_key *key)$/;"     f
-crypto_rsa_import_private_key  src/tls/rsa.c   /^crypto_rsa_import_private_key(const u8 *buf, size_t len)$/;"  f
-crypto_rsa_import_public_key   src/tls/rsa.c   /^crypto_rsa_import_public_key(const u8 *buf, size_t len)$/;"   f
-crypto_rsa_key src/tls/rsa.c   /^struct crypto_rsa_key {$/;"   s       file:
-crypto_rsa_parse_integer       src/tls/rsa.c   /^static const u8 * crypto_rsa_parse_integer(const u8 *pos, const u8 *end,$/;"  f       file:
-ctrl_iface_deinit      src/ap/hostapd.h        /^      void (*ctrl_iface_deinit)(struct hostapd_data *hapd);$/;"       m       struct:hapd_interfaces
-ctrl_iface_init        src/ap/hostapd.h        /^      int (*ctrl_iface_init)(struct hostapd_data *hapd);$/;"  m       struct:hapd_interfaces
-ctx    src/ap/hostapd.h        /^      void *ctx;$/;"  m       struct:hostapd_probereq_cb
-ctx    src/ap/wpa_auth.h       /^      void *ctx;$/;"  m       struct:wpa_auth_callbacks
-ctx_dec        src/crypto/crypto_internal-cipher.c     /^                      void *ctx_dec;$/;"      m       struct:crypto_cipher::__anon10::__anon12        file:
-ctx_dec        src/fast_crypto/fast_crypto_internal-cipher.c   /^            mbedtls_aes_context ctx_dec;$/;"  m       struct:fast_crypto_cipher::__anon56::__anon58   file:
-ctx_enc        src/crypto/crypto_internal-cipher.c     /^                      void *ctx_enc;$/;"      m       struct:crypto_cipher::__anon10::__anon12        file:
-ctx_enc        src/fast_crypto/fast_crypto_internal-cipher.c   /^            mbedtls_aes_context ctx_enc;$/;"  m       struct:fast_crypto_cipher::__anon56::__anon58   file:
-curlen src/crypto/sha256-internal.c    /^      u32 state[8], curlen;$/;"       m       struct:sha256_state     file:
-current_ap     src/common/ieee802_11_defs.h    /^                      u8 current_ap[6];$/;"   m       struct:ieee80211_mgmt::__anon66::__anon71
-current_identifier     src/eap_peer/eap_i.h    /^      u8 current_identifier;$/;"      m       struct:eap_sm
-current_identifier     src/wps/wps.h   /^    u8 current_identifier;$/;"        m       struct:wps_sm
-cw     src/common/ieee802_11_defs.h    /^      u8 cw; \/* ECWmin, ECWmax (CW = 2^ECW - 1) *\/$/;"      m       struct:wmm_ac_parameter
-d      src/tls/rsa.c   /^      struct bignum *d; \/* private exponent *\/$/;"  m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-da     src/common/ieee802_11_defs.h    /^      u8 da[6];$/;"   m       struct:ieee80211_mgmt
-data   src/eap_peer/eap_config.h       /^      const u8 *data;$/;"     m       struct:wpa_config_blob
-data_length    src/ap/wpa_auth.h       /^      le16 data_length; \/* little endian length of data (44) *\/$/;" m       struct:ft_r0kh_r1kh_pull_frame
-data_length    src/ap/wpa_auth.h       /^      le16 data_length; \/* little endian length of data (76) *\/$/;" m       struct:ft_r0kh_r1kh_resp_frame
-data_length    src/ap/wpa_auth.h       /^      le16 data_length; \/* little endian length of data (88) *\/$/;" m       struct:ft_r0kh_r1kh_push_frame
-datarate       src/ap/hostapd.h        /^      u32 datarate;$/;"       m       struct:hostapd_frame_info
-deauth src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED deauth;$/;"     m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon68
-decision       src/eap_peer/eap_i.h    /^      EapDecision decision;$/;"       m       struct:eap_method_ret
-default_len    src/ap/ap_config.h      /^      size_t default_len; \/* key length used for dynamic key generation *\/$/;"      m       struct:hostapd_wep_keys
-deinit src/eap_peer/eap_i.h    /^      void (*deinit)(struct eap_sm *sm, void *priv);$/;"      m       struct:eap_method
-deinit src/utils/ext_password_i.h      /^      void (*deinit)(void *ctx);$/;"  m       struct:ext_password_backend
-deinit_for_reauth      src/eap_peer/eap_i.h    /^      void (*deinit_for_reauth)(struct eap_sm *sm, void *priv);$/;"   m       struct:eap_method
-delay_bound    src/common/ieee802_11_defs.h    /^      le32 delay_bound;$/;"   m       struct:wmm_tspec_element
-depth  src/tls/tls.h   /^              int depth;$/;"  m       struct:tls_event_data::__anon34
-depth  src/tls/tls.h   /^              int depth;$/;"  m       struct:tls_event_data::__anon35
-des    src/crypto/crypto_internal-cipher.c     /^              } des;$/;"      m       union:crypto_cipher::__anon10   typeref:struct:crypto_cipher::__anon10::__anon14        file:
-des    src/fast_crypto/fast_crypto_internal-cipher.c   /^      } des;$/;"      m       union:fast_crypto_cipher::__anon56      typeref:struct:fast_crypto_cipher::__anon56::__anon60   file:
-des3   src/crypto/crypto_internal-cipher.c     /^              } des3;$/;"     m       union:crypto_cipher::__anon10   typeref:struct:crypto_cipher::__anon10::__anon13        file:
-des3   src/fast_crypto/fast_crypto_internal-cipher.c   /^        } des3;$/;"   m       union:fast_crypto_cipher::__anon56      typeref:struct:fast_crypto_cipher::__anon56::__anon59   file:
-des3_key_s     src/crypto/des_i.h      /^struct des3_key_s {$/;"       s
-des_encrypt    src/crypto/des-internal.c       /^void des_encrypt(const u8 *clear, const u8 *key, u8 *cypher)$/;"      f
-descr_count    src/common/wpa_common.h /^      u8 descr_count;$/;"     m       struct:rsn_rdie
-description    src/tls/tls.h   /^              const char *description;$/;"    m       struct:tls_event_data::__anon36
-desfunc        src/crypto/des-internal.c       /^static void desfunc(u32 *block, const u32 *keys)$/;"  f       file:
-deskey src/crypto/des-internal.c       /^static void deskey(const u8 *key, int decrypt, u32 *keyout)$/;"       f       file:
-dev    src/wps/wps.h   /^      struct wps_device_data dev;$/;" m       struct:wps_context      typeref:struct:wps_context::wps_device_data
-dev    src/wps/wps.h   /^    struct wps_device_data *dev;$/;"  m       struct:wps_sm   typeref:struct:wps_sm::wps_device_data
-dev    src/wps/wps_registrar.c /^      struct wps_device_data dev;$/;" m       struct:wps_registrar_device     typeref:struct:wps_registrar_device::wps_device_data    file:
-dev_name       src/wps/wps.h   /^              const char *dev_name;$/;"       m       struct:wps_event_data::wps_event_er_enrollee
-dev_name       src/wps/wps.h   /^              const u8 *dev_name;$/;" m       struct:wps_event_data::wps_event_m2d
-dev_name       src/wps/wps_attr_parse.h        /^      const u8 *dev_name;$/;" m       struct:wps_parse_attr
-dev_name_len   src/wps/wps.h   /^              size_t dev_name_len;$/;"        m       struct:wps_event_data::wps_event_m2d
-dev_name_len   src/wps/wps_attr_parse.h        /^      size_t dev_name_len;$/;"        m       struct:wps_parse_attr
-dev_passwd_id  src/wps/wps.h   /^              u16 dev_passwd_id;$/;"  m       struct:wps_event_data::wps_event_er_enrollee
-dev_passwd_id  src/wps/wps.h   /^              u16 dev_passwd_id;$/;"  m       struct:wps_event_data::wps_event_er_set_selected_registrar
-dev_password   src/wps/wps_i.h /^      u8 *dev_password;$/;"   m       struct:wps_data
-dev_password_id        src/wps/wps.h   /^              u16 dev_password_id;$/;"        m       struct:wps_event_data::wps_event_m2d
-dev_password_id        src/wps/wps_attr_parse.h        /^      const u8 *dev_password_id; \/* 2 octets *\/$/;" m       struct:wps_parse_attr
-dev_password_len       src/wps/wps_i.h /^      size_t dev_password_len;$/;"    m       struct:wps_data
-dev_pw src/wps/wps_registrar.c /^      u8 dev_pw[WPS_OOB_DEVICE_PASSWORD_LEN];$/;"     m       struct:wps_nfc_pw_token file:
-dev_pw_id      src/wps/wps.h   /^      u16 dev_pw_id;$/;"      m       struct:wps_config
-dev_pw_id      src/wps/wps_i.h /^      u16 dev_pw_id;$/;"      m       struct:wps_data
-dev_pw_len     src/wps/wps_registrar.c /^      size_t dev_pw_len;$/;"  m       struct:wps_nfc_pw_token file:
-device_name    include/esp_supplicant/esp_wps.h        /^    char device_name[WPS_MAX_DEVICE_NAME_LEN];   \/*!< Device name, null-terminated string. The default device name is used if the string is empty *\/$/;"    m       struct:__anon89
-device_name    src/ap/ap_config.h      /^      char *device_name;$/;"  m       struct:hostapd_bss_config
-device_name    src/wps/wps.h   /^      char *device_name;$/;"  m       struct:wps_device_data
-device_type    src/ap/ap_config.h      /^      u8 device_type[WPS_DEV_TYPE_LEN];$/;"   m       struct:hostapd_bss_config
-devices        src/wps/wps_registrar.c /^      struct wps_registrar_device *devices;$/;"       m       struct:wps_registrar    typeref:struct:wps_registrar::wps_registrar_device      file:
-dh5_derive_shared      src/crypto/dh_group5.c  /^dh5_derive_shared(void *ctx, const struct wpabuf *peer_public,$/;"    f
-dh5_free       src/crypto/dh_group5.c  /^dh5_free(void *ctx)$/;"       f
-dh5_init       src/crypto/dh_group5.c  /^dh5_init(struct wpabuf **priv, struct wpabuf **publ)$/;"      f
-dh_blob        src/tls/tls.h   /^      const u8 *dh_blob;$/;"  m       struct:tls_connection_params
-dh_blob_len    src/tls/tls.h   /^      size_t dh_blob_len;$/;" m       struct:tls_connection_params
-dh_ctx src/wps/wps.h   /^      void *dh_ctx;$/;"       m       struct:wps_context
-dh_ctx src/wps/wps_i.h /^      void *dh_ctx;$/;"       m       struct:wps_data
-dh_derive_shared       src/crypto/dh_groups.c  /^dh_derive_shared(const struct wpabuf *peer_public,$/;"        f
-dh_file        src/tls/tls.h   /^      const char *dh_file;$/;"        m       struct:tls_connection_params
-dh_g   src/tls/tlsv1_client_i.h        /^      u8 *dh_g;$/;"   m       struct:tlsv1_client
-dh_g   src/tls/tlsv1_cred.h    /^      u8 *dh_g; \/* generator *\/$/;" m       struct:tlsv1_credentials
-dh_g_len       src/tls/tlsv1_client_i.h        /^      size_t dh_g_len;$/;"    m       struct:tlsv1_client
-dh_g_len       src/tls/tlsv1_cred.h    /^      size_t dh_g_len;$/;"    m       struct:tlsv1_credentials
-dh_group       include/crypto/dh_groups.h      /^struct dh_group {$/;" s
-dh_group14_generator   src/crypto/dh_groups.c  /^static const u8 dh_group14_generator[1] = { 0x02 };$/;"       v       file:
-dh_group14_prime       src/crypto/dh_groups.c  /^static const u8 dh_group14_prime[256] = {$/;" v       file:
-dh_group15_generator   src/crypto/dh_groups.c  /^static const u8 dh_group15_generator[1] = { 0x02 };$/;"       v       file:
-dh_group15_prime       src/crypto/dh_groups.c  /^static const u8 dh_group15_prime[384] = {$/;" v       file:
-dh_group16_generator   src/crypto/dh_groups.c  /^static const u8 dh_group16_generator[1] = { 0x02 };$/;"       v       file:
-dh_group16_prime       src/crypto/dh_groups.c  /^static const u8 dh_group16_prime[512] = {$/;" v       file:
-dh_group17_generator   src/crypto/dh_groups.c  /^static const u8 dh_group17_generator[1] = { 0x02 };$/;"       v       file:
-dh_group17_prime       src/crypto/dh_groups.c  /^static const u8 dh_group17_prime[768] = {$/;" v       file:
-dh_group18_generator   src/crypto/dh_groups.c  /^static const u8 dh_group18_generator[1] = { 0x02 };$/;"       v       file:
-dh_group18_prime       src/crypto/dh_groups.c  /^static const u8 dh_group18_prime[1024] = {$/;"        v       file:
-dh_group1_generator    src/crypto/dh_groups.c  /^static const u8 dh_group1_generator[1] = { 0x02 };$/;"        v       file:
-dh_group1_prime        src/crypto/dh_groups.c  /^static const u8 dh_group1_prime[96] = {$/;"   v       file:
-dh_group2_generator    src/crypto/dh_groups.c  /^static const u8 dh_group2_generator[1] = { 0x02 };$/;"        v       file:
-dh_group2_prime        src/crypto/dh_groups.c  /^static const u8 dh_group2_prime[128] = {$/;"  v       file:
-dh_group5_generator    src/crypto/dh_groups.c  /^static const u8 dh_group5_generator[1] = { 0x02 };$/;"        v       file:
-dh_group5_prime        src/crypto/dh_groups.c  /^static const u8 dh_group5_prime[192] = {$/;"  v       file:
-dh_groups      src/crypto/dh_groups.c  /^static struct dh_group dh_groups[] = {$/;"    v       typeref:struct:dh_group file:
-dh_groups_get  src/crypto/dh_groups.c  /^dh_groups_get(int id)$/;"     f
-dh_init        src/crypto/dh_groups.c  /^dh_init(const struct dh_group *dh, struct wpabuf **priv)$/;"  f
-dh_p   src/tls/tlsv1_client_i.h        /^      u8 *dh_p;$/;"   m       struct:tlsv1_client
-dh_p   src/tls/tlsv1_cred.h    /^      u8 *dh_p; \/* prime *\/$/;"     m       struct:tlsv1_credentials
-dh_p_len       src/tls/tlsv1_client_i.h        /^      size_t dh_p_len;$/;"    m       struct:tlsv1_client
-dh_p_len       src/tls/tlsv1_cred.h    /^      size_t dh_p_len;$/;"    m       struct:tlsv1_credentials
-dh_privkey     src/wps/wps.h   /^      struct wpabuf *dh_privkey;$/;"  m       struct:wps_context      typeref:struct:wps_context::wpabuf
-dh_privkey     src/wps/wps_i.h /^      struct wpabuf *dh_privkey;$/;"  m       struct:wps_data typeref:struct:wps_data::wpabuf
-dh_pubkey      src/wps/wps.h   /^      struct wpabuf *dh_pubkey;$/;"   m       struct:wps_context      typeref:struct:wps_context::wpabuf
-dh_pubkey_e    src/wps/wps_i.h /^      struct wpabuf *dh_pubkey_e;$/;" m       struct:wps_data typeref:struct:wps_data::wpabuf
-dh_pubkey_r    src/wps/wps_i.h /^      struct wpabuf *dh_pubkey_r;$/;" m       struct:wps_data typeref:struct:wps_data::wpabuf
-dh_secret      src/tls/tlsv1_server_i.h        /^      u8 *dh_secret;$/;"      m       struct:tlsv1_server
-dh_secret_len  src/tls/tlsv1_server_i.h        /^      size_t dh_secret_len;$/;"       m       struct:tlsv1_server
-dh_ys  src/tls/tlsv1_client_i.h        /^      u8 *dh_ys;$/;"  m       struct:tlsv1_client
-dh_ys_len      src/tls/tlsv1_client_i.h        /^      size_t dh_ys_len;$/;"   m       struct:tlsv1_client
-dialog_token   src/common/ieee802_11_defs.h    /^                                      u8 dialog_token;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon78
-dis_ap_list    src/wps/wps.h   /^    struct discard_ap_list_t dis_ap_list[WPS_MAX_DIS_AP_NUM];$/;"     m       struct:wps_sm   typeref:struct:wps_sm::discard_ap_list_t
-disable_auto_conf      src/wps/wps.h   /^      int disable_auto_conf;$/;"      m       struct:wps_registrar_config
-disable_auto_conf      src/wps/wps_registrar.c /^      int disable_auto_conf;$/;"      m       struct:wps_registrar    file:
-disable_dgaf   src/ap/ap_config.h      /^      int disable_dgaf;$/;"   m       struct:hostapd_bss_config
-disable_gtk    src/ap/wpa_auth.h       /^      int disable_gtk;$/;"    m       struct:wpa_auth_config
-disable_pmksa_caching  src/ap/wpa_auth.h       /^      int disable_pmksa_caching;$/;"  m       struct:wpa_auth_config
-disable_time_checks    src/tls/tlsv1_client_i.h        /^      unsigned int disable_time_checks:1;$/;" m       struct:tlsv1_client
-disassoc       src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED disassoc;$/;"   m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon72
-discard_ap_cnt src/wps/wps.h   /^    u8 discard_ap_cnt;$/;"    m       struct:wps_sm
-discard_ap_list_t      src/wps/wps.h   /^struct discard_ap_list_t{$/;" s
-disconnect     src/ap/wpa_auth.h       /^      void (*disconnect)(void *ctx, const u8 *addr, u16 reason);$/;"  m       struct:wpa_auth_callbacks
-discover_ssid_cnt      src/wps/wps.h   /^    u8 discover_ssid_cnt;$/;" m       struct:wps_sm
-dk     src/crypto/crypto_internal-cipher.c     /^                      u32 dk[32];$/;" m       struct:crypto_cipher::__anon10::__anon14        file:
-dk     src/crypto/des_i.h      /^      u32 dk[3][32];$/;"      m       struct:des3_key_s
-dk     src/fast_crypto/fast_crypto_internal-cipher.c   /^          uint32_t dk[32];$/;"        m       struct:fast_crypto_cipher::__anon56::__anon60   file:
-dl_list        src/utils/list.h        /^struct dl_list {$/;"  s
-dl_list_add    src/utils/list.h        /^static inline void dl_list_add(struct dl_list *list, struct dl_list *item)$/;"        f
-dl_list_add_tail       src/utils/list.h        /^static inline void dl_list_add_tail(struct dl_list *list, struct dl_list *item)$/;"   f
-dl_list_del    src/utils/list.h        /^static inline void dl_list_del(struct dl_list *item)$/;"      f
-dl_list_empty  src/utils/list.h        /^static inline int dl_list_empty(struct dl_list *list)$/;"     f
-dl_list_entry  src/utils/list.h        73;"    d
-dl_list_first  src/utils/list.h        76;"    d
-dl_list_for_each       src/utils/list.h        84;"    d
-dl_list_for_each_reverse       src/utils/list.h        95;"    d
-dl_list_for_each_safe  src/utils/list.h        89;"    d
-dl_list_init   src/utils/list.h        /^static inline void dl_list_init(struct dl_list *list)$/;"     f
-dl_list_last   src/utils/list.h        80;"    d
-dl_list_len    src/utils/list.h        /^static inline unsigned int dl_list_len(struct dl_list *list)$/;"      f
-dmp1   src/tls/rsa.c   /^      struct bignum *dmp1; \/* d mod (p - 1); CRT exponent *\/$/;"    m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-dmq1   src/tls/rsa.c   /^      struct bignum *dmq1; \/* d mod (q - 1); CRT exponent *\/$/;"    m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-dns    src/tls/x509v3.h        /^      char *dns; \/* dNSName *\/$/;"  m       struct:x509_name
-dot11RSNAConfigGroupUpdateCount        src/ap/wpa_auth.c       /^static const u32 dot11RSNAConfigGroupUpdateCount = 4;$/;"     v       file:
-dot11RSNAConfigPairwiseUpdateCount     src/ap/wpa_auth.c       /^static const u32 dot11RSNAConfigPairwiseUpdateCount = 4;$/;"  v       file:
-dot1x_enabled  src/wps/wps_attr_parse.h        /^      const u8 *dot1x_enabled; \/* 1 octet (Bool) *\/$/;"     m       struct:wps_parse_attr
-dp     src/crypto/libtommath.h /^    mp_digit *dp;$/;" m       struct:__anon8
-dp     src/tls/libtommath.h    /^    mp_digit *dp;$/;" m       struct:__anon40
-driver src/ap/ap_config.h      /^      const struct wpa_driver_ops *driver;$/;"        m       struct:hostapd_config   typeref:struct:hostapd_config::wpa_driver_ops
-driver_init    src/ap/hostapd.h        /^      int (*driver_init)(struct hostapd_iface *iface);$/;"    m       struct:hapd_interfaces
-dtim_period    src/ap/ap_config.h      /^      int dtim_period;$/;"    m       struct:hostapd_bss_config
-dualband       src/wps/wps.h   /^      int dualband;$/;"       m       struct:wps_registrar_config
-dualband       src/wps/wps_registrar.c /^      int dualband;$/;"       m       struct:wps_registrar    file:
-dump_msk_file  src/ap/ap_config.h      /^      char *dump_msk_file;$/;"        m       struct:hostapd_bss_config
-dup_binstr     src/utils/common.c      /^char * dup_binstr(const void *src, size_t len)$/;"    f
-duration       src/common/ieee802_11_defs.h    /^      le16 duration;$/;"      m       struct:ieee80211_mgmt
-duration_id    src/common/ieee802_11_defs.h    /^      le16 duration_id;$/;"   m       struct:ieee80211_hdr
-e      src/tls/rsa.c   /^      struct bignum *e; \/* public exponent *\/$/;"   m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-e_hash1        src/wps/wps_attr_parse.h        /^      const u8 *e_hash1; \/* WPS_HASH_LEN (32) octets *\/$/;" m       struct:wps_parse_attr
-e_hash2        src/wps/wps_attr_parse.h        /^      const u8 *e_hash2; \/* WPS_HASH_LEN (32) octets *\/$/;" m       struct:wps_parse_attr
-e_snonce1      src/wps/wps_attr_parse.h        /^      const u8 *e_snonce1; \/* WPS_SECRET_NONCE_LEN (16) octets *\/$/;"       m       struct:wps_parse_attr
-e_snonce2      src/wps/wps_attr_parse.h        /^      const u8 *e_snonce2; \/* WPS_SECRET_NONCE_LEN (16) octets *\/$/;"       m       struct:wps_parse_attr
-eap    src/eap_peer/eap_tls_common.h   /^      struct eap_sm *eap;$/;" m       struct:eap_ssl_data     typeref:struct:eap_ssl_data::eap_sm
-eapKeyData     src/eap_peer/eap_i.h    /^      u8 *eapKeyData;$/;"     m       struct:eap_sm
-eapKeyDataLen  src/eap_peer/eap_i.h    /^      size_t eapKeyDataLen;$/;"       m       struct:eap_sm
-eap_allowed_phase2_type        src/eap_peer/eap.c      /^eap_allowed_phase2_type(int vendor, int type)$/;"     f       file:
-eap_deinit_prev_method src/eap_peer/eap.c      /^void eap_deinit_prev_method(struct eap_sm *sm, const char *txt)$/;"   f
-eap_expand     src/eap_peer/eap_defs.h /^struct eap_expand {$/;"       s
-eap_get_config src/eap_peer/eap.c      /^struct eap_peer_config * eap_get_config(struct eap_sm *sm)$/;"        f
-eap_get_config_blob    src/eap_peer/eap.c      /^const struct wpa_config_blob * eap_get_config_blob(struct eap_sm *sm,$/;"     f
-eap_get_config_identity        src/eap_peer/eap.c      /^const u8 * eap_get_config_identity(struct eap_sm *sm, size_t *len)$/;"        f
-eap_get_config_new_password    src/eap_peer/eap.c      /^const u8 * eap_get_config_new_password(struct eap_sm *sm, size_t *len)$/;"    f
-eap_get_config_password        src/eap_peer/eap.c      /^const u8 * eap_get_config_password(struct eap_sm *sm, size_t *len)$/;"        f
-eap_get_config_password2       src/eap_peer/eap.c      /^const u8 * eap_get_config_password2(struct eap_sm *sm, size_t *len, int *hash)$/;"    f
-eap_get_id     src/eap_peer/eap_common.c       /^u8 eap_get_id(const struct wpabuf *msg)$/;"   f
-eap_get_phase2_type    src/eap_peer/eap.c      /^u32 eap_get_phase2_type(const char *name, int *vendor)$/;"    f
-eap_get_phase2_types   src/eap_peer/eap.c      /^struct eap_method_type * eap_get_phase2_types(struct eap_peer_config *config,$/;"     f
-eap_get_type   src/eap_peer/eap_common.c       /^EapType eap_get_type(const struct wpabuf *msg)$/;"    f
-eap_hdr        src/eap_peer/eap_defs.h /^struct eap_hdr {$/;"  s
-eap_hdr_len_valid      src/eap_peer/eap_common.c       /^int eap_hdr_len_valid(const struct wpabuf *msg, size_t min_payload)$/;"       f
-eap_hdr_validate       src/eap_peer/eap_common.c       /^const u8 * eap_hdr_validate(int vendor, EapType eap_type,$/;" f
-eap_identity   src/wps/wps_attr_parse.h        /^      const u8 *eap_identity; \/* <= 64 octets *\/$/;"        m       struct:wps_parse_attr
-eap_identity_len       src/wps/wps_attr_parse.h        /^      size_t eap_identity_len;$/;"    m       struct:wps_parse_attr
-eap_len        src/eap_peer/eap_ttls.c /^      size_t eap_len;$/;"     m       struct:ttls_parse_avp   file:
-eap_method     src/eap_peer/eap_i.h    /^struct eap_method {$/;"       s
-eap_method_priv        src/eap_peer/eap_i.h    /^      void *eap_method_priv;$/;"      m       struct:eap_sm
-eap_method_ret src/eap_peer/eap_i.h    /^struct eap_method_ret {$/;"   s
-eap_method_type        src/eap_peer/eap.h      /^struct eap_method_type {$/;"  s
-eap_methods    src/eap_peer/eap.c      /^static struct eap_method *eap_methods = NULL;$/;"     v       typeref:struct:eap_method       file:
-eap_methods    src/eap_peer/eap_config.h       /^      struct eap_method_type *eap_methods;$/;"        m       struct:eap_peer_config  typeref:struct:eap_peer_config::eap_method_type
-eap_mschapv2_challenge src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_challenge($/;"   f       file:
-eap_mschapv2_challenge_reply   src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_challenge_reply($/;"     f       file:
-eap_mschapv2_change_password   src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_change_password($/;"     f       file:
-eap_mschapv2_check_config      src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_check_config(struct eap_sm *sm)$/;"      f       file:
-eap_mschapv2_check_mslen       src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_check_mslen(struct eap_sm *sm, size_t len,$/;"   f       file:
-eap_mschapv2_copy_challenge    src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_copy_challenge(struct eap_mschapv2_data *data,$/;"       f       file:
-eap_mschapv2_data      src/eap_peer/eap_mschapv2.c     /^struct eap_mschapv2_data {$/;"        s       file:
-eap_mschapv2_deinit    src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_deinit(struct eap_sm *sm, void *priv)$/;"        f       file:
-eap_mschapv2_failure   src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_failure(struct eap_sm *sm,$/;"   f       file:
-eap_mschapv2_failure_txt       src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_failure_txt(struct eap_sm *sm,$/;"       f       file:
-eap_mschapv2_getKey    src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_getKey(struct eap_sm *sm, void *priv, size_t *len)$/;"   f       file:
-eap_mschapv2_hdr       src/eap_peer/eap_mschapv2.c     /^struct eap_mschapv2_hdr {$/;" s       file:
-eap_mschapv2_init      src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_init(struct eap_sm *sm)$/;"      f       file:
-eap_mschapv2_isKeyAvailable    src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_isKeyAvailable(struct eap_sm *sm, void *priv)$/;"        f       file:
-eap_mschapv2_password_changed  src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_password_changed(struct eap_sm *sm,$/;"  f       file:
-eap_mschapv2_process   src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_process(struct eap_sm *sm, void *priv,$/;"       f       file:
-eap_mschapv2_success   src/eap_peer/eap_mschapv2.c     /^eap_mschapv2_success(struct eap_sm *sm,$/;"   f       file:
-eap_msg_alloc  src/eap_peer/eap_common.c       /^struct wpabuf * eap_msg_alloc(int vendor, EapType type, size_t payload_len,$/;"       f
-eap_peap_data  src/eap_peer/eap_peap.c /^struct eap_peap_data {$/;"    s       file:
-eap_peap_decrypt       src/eap_peer/eap_peap.c /^eap_peap_decrypt(struct eap_sm *sm, struct eap_peap_data *data,$/;"   f       file:
-eap_peap_deinit        src/eap_peer/eap_peap.c /^eap_peap_deinit(struct eap_sm *sm, void *priv)$/;"    f       file:
-eap_peap_deinit_for_reauth     src/eap_peer/eap_peap.c /^eap_peap_deinit_for_reauth(struct eap_sm *sm, void *priv)$/;" f       file:
-eap_peap_derive_cmk    src/eap_peer/eap_peap.c /^eap_peap_derive_cmk(struct eap_sm *sm, struct eap_peap_data *data)$/;"        f       file:
-eap_peap_getKey        src/eap_peer/eap_peap.c /^eap_peap_getKey(struct eap_sm *sm, void *priv, size_t *len)$/;"       f       file:
-eap_peap_get_isk       src/eap_peer/eap_peap.c /^eap_peap_get_isk(struct eap_sm *sm, struct eap_peap_data *data,$/;"   f       file:
-eap_peap_get_session_id        src/eap_peer/eap_peap.c /^eap_peap_get_session_id(struct eap_sm *sm, void *priv, size_t *len)$/;"       f       file:
-eap_peap_get_status    src/eap_peer/eap_peap.c /^eap_peap_get_status(struct eap_sm *sm, void *priv, char *buf,$/;"     f       file:
-eap_peap_has_reauth_data       src/eap_peer/eap_peap.c /^eap_peap_has_reauth_data(struct eap_sm *sm, void *priv)$/;"   f       file:
-eap_peap_init  src/eap_peer/eap_peap.c /^eap_peap_init(struct eap_sm *sm)$/;"  f       file:
-eap_peap_init_for_reauth       src/eap_peer/eap_peap.c /^eap_peap_init_for_reauth(struct eap_sm *sm, void *priv)$/;"   f       file:
-eap_peap_isKeyAvailable        src/eap_peer/eap_peap.c /^eap_peap_isKeyAvailable(struct eap_sm *sm, void *priv)$/;"    f       file:
-eap_peap_parse_phase1  src/eap_peer/eap_peap.c /^eap_peap_parse_phase1(struct eap_peap_data *data,$/;" f       file:
-eap_peap_phase2_request        src/eap_peer/eap_peap.c /^static int eap_peap_phase2_request(struct eap_sm *sm,$/;"     f       file:
-eap_peap_process       src/eap_peer/eap_peap.c /^eap_peap_process(struct eap_sm *sm, void *priv,$/;"   f       file:
-eap_peapv2_tlv_eap_payload     src/eap_peer/eap_peap.c /^eap_peapv2_tlv_eap_payload(struct wpabuf *buf)$/;"    f       file:
-eap_peer_blob_deinit   src/eap_peer/eap.c      /^void eap_peer_blob_deinit(struct eap_sm *sm)$/;"      f
-eap_peer_blob_init     src/eap_peer/eap.c      /^int eap_peer_blob_init(struct eap_sm *sm)$/;" f
-eap_peer_config        src/eap_peer/eap_config.h       /^struct eap_peer_config {$/;"  s
-eap_peer_config_deinit src/eap_peer/eap.c      /^void eap_peer_config_deinit(struct eap_sm *sm)$/;"    f
-eap_peer_config_init   src/eap_peer/eap.c      /^int eap_peer_config_init($/;" f
-eap_peer_get_eap_method        src/eap_peer/eap.c      /^const struct eap_method * eap_peer_get_eap_method(int vendor, EapType method)$/;"     f
-eap_peer_get_methods   src/eap_peer/eap.c      /^const struct eap_method * eap_peer_get_methods(size_t *count)$/;"     f
-eap_peer_get_type      src/eap_peer/eap.c      /^EapType eap_peer_get_type(const char *name, int *vendor)$/;"  f
-eap_peer_method_alloc  src/eap_peer/eap.c      /^struct eap_method * eap_peer_method_alloc(int vendor, EapType method,$/;"     f
-eap_peer_method_free   src/eap_peer/eap.c      /^void eap_peer_method_free(struct eap_method *method)$/;"      f
-eap_peer_method_register       src/eap_peer/eap.c      /^int eap_peer_method_register(struct eap_method *method)$/;"   f
-eap_peer_mschapv2_register     src/eap_peer/eap_mschapv2.c     /^eap_peer_mschapv2_register(void)$/;"  f
-eap_peer_peap_register src/eap_peer/eap_peap.c /^eap_peer_peap_register(void)$/;"      f
-eap_peer_register_methods      src/eap_peer/eap.c      /^int eap_peer_register_methods(void)$/;"       f
-eap_peer_select_phase2_methods src/eap_peer/eap_tls_common.c   /^int eap_peer_select_phase2_methods(struct eap_peer_config *config,$/;"        f
-eap_peer_sm_deinit     src/esp_supplicant/esp_wpa_enterprise.c /^static void eap_peer_sm_deinit(void)$/;"      f       file:
-eap_peer_sm_init       src/esp_supplicant/esp_wpa_enterprise.c /^static int eap_peer_sm_init(void)$/;" f       file:
-eap_peer_tls_build_ack src/eap_peer/eap_tls_common.c   /^struct wpabuf * eap_peer_tls_build_ack(u8 id, EapType eap_type,$/;"   f
-eap_peer_tls_data_reassemble   src/eap_peer/eap_tls_common.c   /^static const struct wpabuf * eap_peer_tls_data_reassemble($/;"        f       file:
-eap_peer_tls_decrypt   src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_decrypt(struct eap_sm *sm, struct eap_ssl_data *data,$/;"    f
-eap_peer_tls_derive_key        src/eap_peer/eap_tls_common.c   /^u8 * eap_peer_tls_derive_key(struct eap_sm *sm, struct eap_ssl_data *data,$/;"        f
-eap_peer_tls_derive_session_id src/eap_peer/eap_tls_common.c   /^u8 * eap_peer_tls_derive_session_id(struct eap_sm *sm,$/;"    f
-eap_peer_tls_encrypt   src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_encrypt(struct eap_sm *sm, struct eap_ssl_data *data,$/;"    f
-eap_peer_tls_phase2_nak        src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_phase2_nak(struct eap_method_type *types, size_t num_types,$/;"      f
-eap_peer_tls_process_helper    src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_process_helper(struct eap_sm *sm, struct eap_ssl_data *data,$/;"     f
-eap_peer_tls_process_init      src/eap_peer/eap_tls_common.c   /^const u8 * eap_peer_tls_process_init(struct eap_sm *sm,$/;"   f
-eap_peer_tls_reassemble_fragment       src/eap_peer/eap_tls_common.c   /^static int eap_peer_tls_reassemble_fragment(struct eap_ssl_data *data,$/;"    f       file:
-eap_peer_tls_reauth_init       src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_reauth_init(struct eap_sm *sm, struct eap_ssl_data *data)$/;"        f
-eap_peer_tls_register  src/eap_peer/eap_tls.c  /^int eap_peer_tls_register(void)$/;"   f
-eap_peer_tls_reset_input       src/eap_peer/eap_tls_common.c   /^void eap_peer_tls_reset_input(struct eap_ssl_data *data)$/;"  f
-eap_peer_tls_reset_output      src/eap_peer/eap_tls_common.c   /^void eap_peer_tls_reset_output(struct eap_ssl_data *data)$/;" f
-eap_peer_tls_ssl_deinit        src/eap_peer/eap_tls_common.c   /^void eap_peer_tls_ssl_deinit(struct eap_sm *sm, struct eap_ssl_data *data)$/;"        f
-eap_peer_tls_ssl_init  src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_ssl_init(struct eap_sm *sm, struct eap_ssl_data *data,$/;"   f
-eap_peer_tls_status    src/eap_peer/eap_tls_common.c   /^int eap_peer_tls_status(struct eap_sm *sm, struct eap_ssl_data *data,$/;"     f
-eap_peer_ttls_register src/eap_peer/eap_ttls.c /^int eap_peer_ttls_register(void)$/;"  f
-eap_peer_unregister_methods    src/eap_peer/eap.c      /^void eap_peer_unregister_methods(void)$/;"    f
-eap_sm src/eap_peer/eap_i.h    /^struct eap_sm {$/;"   s
-eap_sm_abort   src/eap_peer/eap.c      /^void eap_sm_abort(struct eap_sm *sm)$/;"      f
-eap_sm_build_identity_resp     src/eap_peer/eap.c      /^struct wpabuf * eap_sm_build_identity_resp(struct eap_sm *sm, u8 id, int encrypted)$/;"       f
-eap_sm_build_nak       src/eap_peer/eap.c      /^struct wpabuf * eap_sm_build_nak(struct eap_sm *sm, EapType type, u8 id)$/;"  f
-eap_sm_process_request src/esp_supplicant/esp_wpa_enterprise.c /^int eap_sm_process_request(struct eap_sm *sm, struct wpabuf *reqData)$/;"     f
-eap_sm_send_eapol      src/esp_supplicant/esp_wpa_enterprise.c /^int eap_sm_send_eapol(struct eap_sm *sm, struct wpabuf *resp)$/;"     f
-eap_ssl_data   src/eap_peer/eap_tls_common.h   /^struct eap_ssl_data {$/;"     s
-eap_tls_check_blob     src/eap_peer/eap_tls_common.c   /^static int eap_tls_check_blob(struct eap_sm *sm, const char **name,$/;"       f       file:
-eap_tls_data   src/eap_peer/eap_tls.c  /^struct eap_tls_data {$/;"     s       file:
-eap_tls_deinit src/eap_peer/eap_tls.c  /^static void eap_tls_deinit(struct eap_sm *sm, void *priv)$/;" f       file:
-eap_tls_failure        src/eap_peer/eap_tls.c  /^static struct wpabuf * eap_tls_failure(struct eap_sm *sm,$/;" f       file:
-eap_tls_getKey src/eap_peer/eap_tls.c  /^static u8 * eap_tls_getKey(struct eap_sm *sm, void *priv, size_t *len)$/;"    f       file:
-eap_tls_init   src/eap_peer/eap_tls.c  /^static void * eap_tls_init(struct eap_sm *sm)$/;"     f       file:
-eap_tls_init_connection        src/eap_peer/eap_tls_common.c   /^static int eap_tls_init_connection(struct eap_sm *sm,$/;"     f       file:
-eap_tls_isKeyAvailable src/eap_peer/eap_tls.c  /^static bool eap_tls_isKeyAvailable(struct eap_sm *sm, void *priv)$/;" f       file:
-eap_tls_msg_alloc      src/eap_peer/eap_tls_common.c   /^static struct wpabuf * eap_tls_msg_alloc(EapType type, size_t payload_len,$/;"        f       file:
-eap_tls_params_flags   src/eap_peer/eap_tls_common.c   /^static void eap_tls_params_flags(struct tls_connection_params *params,$/;"    f       file:
-eap_tls_params_from_conf       src/eap_peer/eap_tls_common.c   /^static int eap_tls_params_from_conf(struct eap_sm *sm,$/;"    f       file:
-eap_tls_params_from_conf1      src/eap_peer/eap_tls_common.c   /^static void eap_tls_params_from_conf1(struct tls_connection_params *params,$/;"       f       file:
-eap_tls_process        src/eap_peer/eap_tls.c  /^static struct wpabuf * eap_tls_process(struct eap_sm *sm, void *priv,$/;"     f       file:
-eap_tls_process_input  src/eap_peer/eap_tls_common.c   /^static int eap_tls_process_input(struct eap_sm *sm, struct eap_ssl_data *data,$/;"    f       file:
-eap_tls_process_output src/eap_peer/eap_tls_common.c   /^static int eap_tls_process_output(struct eap_ssl_data *data, EapType eap_type,$/;"    f       file:
-eap_tls_success        src/eap_peer/eap_tls.c  /^static void eap_tls_success(struct eap_sm *sm, struct eap_tls_data *data,$/;" f       file:
-eap_tlv_add_cryptobinding      src/eap_peer/eap_peap.c /^eap_tlv_add_cryptobinding(struct eap_sm *sm,$/;"      f       file:
-eap_tlv_build_nak      src/eap_peer/eap_peap.c /^eap_tlv_build_nak(int id, u16 nak_type)$/;"   f       file:
-eap_tlv_build_result   src/eap_peer/eap_peap.c /^eap_tlv_build_result(struct eap_sm *sm,$/;"   f       file:
-eap_tlv_crypto_binding_tlv     src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_crypto_binding_tlv {$/;"       s
-eap_tlv_hdr    src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_hdr {$/;"      s
-eap_tlv_intermediate_result_tlv        src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_intermediate_result_tlv {$/;"  s
-eap_tlv_nak_tlv        src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_nak_tlv {$/;"  s
-eap_tlv_pac_ack_tlv    src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_pac_ack_tlv {$/;"      s
-eap_tlv_pac_type_tlv   src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_pac_type_tlv {$/;"     s
-eap_tlv_process        src/eap_peer/eap_peap.c /^eap_tlv_process(struct eap_sm *sm, struct eap_peap_data *data,$/;"    f       file:
-eap_tlv_request_action_tlv     src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_request_action_tlv {$/;"       s
-eap_tlv_result_tlv     src/eap_peer/eap_tlv_common.h   /^struct eap_tlv_result_tlv {$/;"       s
-eap_tlv_validate_cryptobinding src/eap_peer/eap_peap.c /^eap_tlv_validate_cryptobinding(struct eap_sm *sm,$/;" f       file:
-eap_ttls_avp_add       src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_avp_add(u8 *start, u8 *avphdr, u32 avp_code,$/;" f       file:
-eap_ttls_avp_hdr       src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_avp_hdr(u8 *avphdr, u32 avp_code, u32 vendor_id,$/;"     f       file:
-eap_ttls_check_auth_status     src/eap_peer/eap_ttls.c /^static void eap_ttls_check_auth_status(struct eap_sm *sm, $/;"        f       file:
-eap_ttls_data  src/eap_peer/eap_ttls.c /^struct eap_ttls_data {$/;"    s       file:
-eap_ttls_decrypt       src/eap_peer/eap_ttls.c /^static int eap_ttls_decrypt(struct eap_sm *sm, struct eap_ttls_data *data,$/;"        f       file:
-eap_ttls_deinit        src/eap_peer/eap_ttls.c /^static void eap_ttls_deinit(struct eap_sm *sm, void *priv)$/;"        f       file:
-eap_ttls_deinit_for_reauth     src/eap_peer/eap_ttls.c /^static void eap_ttls_deinit_for_reauth(struct eap_sm *sm, void *priv)$/;"     f       file:
-eap_ttls_encrypt_response      src/eap_peer/eap_ttls.c /^static int eap_ttls_encrypt_response(struct eap_sm *sm,$/;"   f       file:
-eap_ttls_fake_identity_request src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_fake_identity_request(void)$/;"  f       file:
-eap_ttls_getKey        src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_getKey(struct eap_sm *sm, void *priv, size_t *len)$/;"   f       file:
-eap_ttls_get_session_id        src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_get_session_id(struct eap_sm *sm, void *priv, size_t *len)$/;"   f       file:
-eap_ttls_get_status    src/eap_peer/eap_ttls.c /^static int eap_ttls_get_status(struct eap_sm *sm, void *priv, char *buf,$/;"  f       file:
-eap_ttls_has_reauth_data       src/eap_peer/eap_ttls.c /^static bool eap_ttls_has_reauth_data(struct eap_sm *sm, void *priv)$/;"       f       file:
-eap_ttls_implicit_challenge    src/eap_peer/eap_ttls.c /^static u8 * eap_ttls_implicit_challenge(struct eap_sm *sm,$/;"        f       file:
-eap_ttls_implicit_identity_request     src/eap_peer/eap_ttls.c /^static int eap_ttls_implicit_identity_request(struct eap_sm *sm,$/;"  f       file:
-eap_ttls_init  src/eap_peer/eap_ttls.c /^static void * eap_ttls_init(struct eap_sm *sm)$/;"    f       file:
-eap_ttls_init_for_reauth       src/eap_peer/eap_ttls.c /^static void * eap_ttls_init_for_reauth(struct eap_sm *sm, void *priv)$/;"     f       file:
-eap_ttls_isKeyAvailable        src/eap_peer/eap_ttls.c /^static bool eap_ttls_isKeyAvailable(struct eap_sm *sm, void *priv)$/;"        f       file:
-eap_ttls_parse_attr_eap        src/eap_peer/eap_ttls.c /^static int eap_ttls_parse_attr_eap(const u8 *dpos, size_t dlen,$/;"   f       file:
-eap_ttls_parse_avp     src/eap_peer/eap_ttls.c /^static int eap_ttls_parse_avp(u8 *pos, size_t left,$/;"       f       file:
-eap_ttls_parse_avps    src/eap_peer/eap_ttls.c /^static int eap_ttls_parse_avps(struct wpabuf *in_decrypted,$/;"       f       file:
-eap_ttls_phase2_eap_deinit     src/eap_peer/eap_ttls.c /^static void eap_ttls_phase2_eap_deinit(struct eap_sm *sm,$/;" f       file:
-eap_ttls_phase2_request        src/eap_peer/eap_ttls.c /^static int eap_ttls_phase2_request(struct eap_sm *sm,$/;"     f       file:
-eap_ttls_phase2_request_mschapv2       src/eap_peer/eap_ttls.c /^static int eap_ttls_phase2_request_mschapv2(struct eap_sm *sm,$/;"    f       file:
-eap_ttls_phase2_start  src/eap_peer/eap_ttls.c /^static int eap_ttls_phase2_start(struct eap_sm *sm, struct eap_ttls_data *data,$/;"   f       file:
-eap_ttls_process       src/eap_peer/eap_ttls.c /^static struct wpabuf * eap_ttls_process(struct eap_sm *sm, void *priv,$/;"    f       file:
-eap_ttls_process_decrypted     src/eap_peer/eap_ttls.c /^static int eap_ttls_process_decrypted(struct eap_sm *sm,$/;"  f       file:
-eap_ttls_process_handshake     src/eap_peer/eap_ttls.c /^static int eap_ttls_process_handshake(struct eap_sm *sm,$/;"  f       file:
-eap_ttls_process_phase2_mschapv2       src/eap_peer/eap_ttls.c /^static int eap_ttls_process_phase2_mschapv2(struct eap_sm *sm,$/;"    f       file:
-eap_ttls_process_tnc_start     src/eap_peer/eap_ttls.c /^static int eap_ttls_process_tnc_start(struct eap_sm *sm,$/;"  f       file:
-eap_ttls_v0_derive_key src/eap_peer/eap_ttls.c /^static int eap_ttls_v0_derive_key(struct eap_sm *sm,$/;"      f       file:
-eap_type       src/eap_peer/eap_tls.c  /^      u8 eap_type;$/;"        m       struct:eap_tls_data     file:
-eap_type       src/eap_peer/eap_tls_common.h   /^      u8 eap_type;$/;"        m       struct:eap_ssl_data
-eap_type       src/wps/wps_attr_parse.h        /^      const u8 *eap_type; \/* <= 8 octets *\/$/;"     m       struct:wps_parse_attr
-eap_type_len   src/wps/wps_attr_parse.h        /^      size_t eap_type_len;$/;"        m       struct:wps_parse_attr
-eap_update_len src/eap_peer/eap_common.c       /^void eap_update_len(struct wpabuf *msg)$/;"   f
-eapdata        src/eap_peer/eap_ttls.c /^      u8 *eapdata;$/;"        m       struct:ttls_parse_avp   file:
-eapol_key_timeout_first        src/ap/wpa_auth.c       /^static const u32 eapol_key_timeout_first = 100; \/* ms *\/$/;"        v       file:
-eapol_key_timeout_first_group  src/ap/wpa_auth.c       /^static const u32 eapol_key_timeout_first_group = 500; \/* ms *\/$/;"  v       file:
-eapol_key_timeout_subseq       src/ap/wpa_auth.c       /^static const u32 eapol_key_timeout_subseq = 1000; \/* ms *\/$/;"      v       file:
-eapol_sm_notify_eap_success    src/rsn_supp/wpa.c      /^void   eapol_sm_notify_eap_success(Boolean success)$/;"       f
-eapol_txcb     src/rsn_supp/wpa.c      /^void eapol_txcb(void *eb)$/;" f
-eapol_version  src/ap/ap_config.h      /^      int eapol_version;$/;"  m       struct:hostapd_bss_config
-eapol_version  src/ap/wpa_auth.h       /^      int eapol_version;$/;"  m       struct:wpa_auth_config
-eapol_version  src/rsn_supp/wpa.h      /^    u8 eapol_version;$/;"     m       struct:wpa_sm
-eapol_version  src/wps/wps.h   /^    u8 eapol_version;$/;"     m       struct:wps_sm
-ecp_mpi_load   test/test_crypto.c      /^static inline void ecp_mpi_load( mbedtls_mpi *X, const mbedtls_mpi_uint *p, size_t len )$/;"  f       file:
-ecp_opp        src/crypto/crypto_mbedtls.c     /^static int ecp_opp( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_ecp_point *P)$/;"       f       file:
-ecw2cw src/ap/ap_config.c      100;"   d       file:
-ecw2cw src/ap/ap_config.c      124;"   d       file:
-eid    src/common/ieee802_11_defs.h    /^      u8 eid; \/* 221 = 0xdd *\/$/;"  m       struct:wmm_tspec_element
-ek     src/crypto/crypto_internal-cipher.c     /^                      u32 ek[32];$/;" m       struct:crypto_cipher::__anon10::__anon14        file:
-ek     src/crypto/des_i.h      /^      u32 ek[3][32];$/;"      m       struct:des3_key_s
-ek     src/fast_crypto/fast_crypto_internal-cipher.c   /^          uint32_t ek[32];$/;"        m       struct:fast_crypto_cipher::__anon56::__anon60   file:
-elem_id        src/common/wpa_common.h /^      u8 elem_id; \/* WLAN_EID_RSN *\/$/;"    m       struct:rsn_ie_hdr
-elem_id        src/common/wpa_common.h /^      u8 elem_id;$/;" m       struct:wpa_ie_hdr
-element_id     src/common/ieee802_11_defs.h    /^                                      u8 element_id;$/;"      m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-eloop_cancel_timeout   src/utils/wpa_debug.c   /^int  eloop_cancel_timeout(eloop_timeout_handler handler,$/;"  f
-eloop_register_timeout src/utils/wpa_debug.c   /^int  eloop_register_timeout(unsigned int secs, unsigned int usecs,$/;"        f
-eloop_timeout_handler  include/utils/wpa_debug.h       /^typedef void (*eloop_timeout_handler)(void *eloop_data, void *user_ctx);$/;"  t
-email  src/tls/x509v3.h        /^      char *email; \/* emailAddress *\/$/;"   m       struct:x509_name
-emsk   src/wps/wps_i.h /^      u8 emsk[WPS_EMSK_LEN];$/;"      m       struct:wps_data
-encr_hash      src/eap_peer/eap_mschapv2.c     /^      u8 encr_hash[16];$/;"   m       struct:ms_change_password       file:
-encr_password  src/eap_peer/eap_mschapv2.c     /^      u8 encr_password[516];$/;"      m       struct:ms_change_password       file:
-encr_settings  src/wps/wps_attr_parse.h        /^      const u8 *encr_settings;$/;"    m       struct:wps_parse_attr
-encr_settings_len      src/wps/wps_attr_parse.h        /^      size_t encr_settings_len;$/;"   m       struct:wps_parse_attr
-encr_type      src/wps/wps.h   /^      u16 encr_type;$/;"      m       struct:wps_credential
-encr_type      src/wps/wps_attr_parse.h        /^      const u8 *encr_type; \/* 2 octets *\/$/;"       m       struct:wps_parse_attr
-encr_type      src/wps/wps_i.h /^      u16 encr_type;$/;"      m       struct:wps_data
-encr_type_flags        src/wps/wps_attr_parse.h        /^      const u8 *encr_type_flags; \/* 2 octets *\/$/;" m       struct:wps_parse_attr
-encr_types     src/wps/wps.h   /^      u16 encr_types;$/;"     m       struct:wps_context
-encrypt_pw_block_with_password_hash    src/crypto/ms_funcs.c   /^int encrypt_pw_block_with_password_hash($/;"  f
-engine src/tls/tls.h   /^      int engine;$/;" m       struct:tls_connection_params
-engine_id      src/tls/tls.h   /^      const char *engine_id;$/;"      m       struct:tls_connection_params
-enrollee       src/wps/wps.h   /^              int enrollee;$/;"       m       struct:wps_event_data::wps_event_pwd_auth_fail
-enrollee       src/wps/wps.h   /^      } enrollee;$/;" m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_er_enrollee
-enrollee_addr  src/wps/wps_registrar.c /^      u8 enrollee_addr[ETH_ALEN];$/;" m       struct:wps_uuid_pin     file:
-enrollee_nonce src/wps/wps_attr_parse.h        /^      const u8 *enrollee_nonce; \/* WPS_NONCE_LEN (16) octets *\/$/;" m       struct:wps_parse_attr
-enrollee_seen_cb       src/wps/wps.h   /^      void (*enrollee_seen_cb)(void *ctx, const u8 *addr, const u8 *uuid_e,$/;"       m       struct:wps_registrar_config
-enrollee_seen_cb       src/wps/wps_registrar.c /^      void (*enrollee_seen_cb)(void *ctx, const u8 *addr, const u8 *uuid_e,$/;"       m       struct:wps_registrar    file:
-er     src/wps/wps_i.h /^      int er;$/;"     m       struct:wps_data
-error  src/ap/wpa_auth_ie.h    /^      const u8 *error;$/;"    m       struct:wpa_eapol_ie_parse
-error  src/rsn_supp/wpa_ie.h   /^      const u8 *error;$/;"    m       struct:wpa_eapol_ie_parse
-error_indication       src/wps/wps.h   /^              u16 error_indication;$/;"       m       struct:wps_event_data::wps_event_fail
-error_indication       src/wps/wps_i.h /^      u16 error_indication;$/;"       m       struct:wps_data
-error_len      src/ap/wpa_auth_ie.h    /^      size_t error_len;$/;"   m       struct:wpa_eapol_ie_parse
-error_len      src/rsn_supp/wpa_ie.h   /^      size_t error_len;$/;"   m       struct:wpa_eapol_ie_parse
-error_type     src/common/wpa_common.h /^      be16 error_type;$/;"    m       struct:rsn_error_kde
-esp_supplicant_init    src/esp_supplicant/esp_wpa_main.c       /^int esp_supplicant_init(void)$/;"     f
-esp_wifi_sta_wpa2_ent_clear_ca_cert    src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_ca_cert(void)$/;"    f
-esp_wifi_sta_wpa2_ent_clear_cert_key   src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_cert_key(void)$/;"   f
-esp_wifi_sta_wpa2_ent_clear_identity   src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_identity(void)$/;"   f
-esp_wifi_sta_wpa2_ent_clear_new_password       src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_new_password(void)$/;"       f
-esp_wifi_sta_wpa2_ent_clear_password   src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_password(void)$/;"   f
-esp_wifi_sta_wpa2_ent_clear_username   src/esp_supplicant/esp_wpa_enterprise.c /^void esp_wifi_sta_wpa2_ent_clear_username(void)$/;"   f
-esp_wifi_sta_wpa2_ent_disable  src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_disable(void)$/;"     f
-esp_wifi_sta_wpa2_ent_disable_fn       src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_disable_fn(void *param)$/;"   f
-esp_wifi_sta_wpa2_ent_enable   src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_enable(const esp_wpa2_config_t *config)$/;"   f
-esp_wifi_sta_wpa2_ent_enable_fn        src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_enable_fn(const esp_wpa2_config_t *config)$/;"        f
-esp_wifi_sta_wpa2_ent_get_disable_time_check   src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_get_disable_time_check(bool *disable)$/;"     f
-esp_wifi_sta_wpa2_ent_set_ca_cert      src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_ca_cert(const unsigned char *ca_cert, int ca_cert_len)$/;"        f
-esp_wifi_sta_wpa2_ent_set_cert_key     src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_cert_key(const unsigned char *client_cert, int client_cert_len, const unsigned char *private_key, int private_key_len, const unsigned char *private_key_passwd, int private_key_passwd_len)$/;"   f
-esp_wifi_sta_wpa2_ent_set_disable_time_check   src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_disable_time_check(bool disable)$/;"      f
-esp_wifi_sta_wpa2_ent_set_identity     src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_identity(const unsigned char *identity, int len)$/;"      f
-esp_wifi_sta_wpa2_ent_set_new_password src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_new_password(const unsigned char *new_password, int len)$/;"      f
-esp_wifi_sta_wpa2_ent_set_password     src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_password(const unsigned char *password, int len)$/;"      f
-esp_wifi_sta_wpa2_ent_set_username     src/esp_supplicant/esp_wpa_enterprise.c /^esp_err_t esp_wifi_sta_wpa2_ent_set_username(const unsigned char *username, int len)$/;"      f
-esp_wifi_wps_disable   src/esp_supplicant/esp_wps.c    /^int esp_wifi_wps_disable(void)$/;"    f
-esp_wifi_wps_enable    src/esp_supplicant/esp_wps.c    /^int esp_wifi_wps_enable(const esp_wps_config_t *config)$/;"   f
-esp_wifi_wps_start     src/esp_supplicant/esp_wps.c    /^int esp_wifi_wps_start(int timeout_ms)$/;"    f
-esp_wpa2_config_t      include/esp_supplicant/esp_wpa_enterprise.h     /^}esp_wpa2_config_t;$/;"       t       typeref:struct:__anon88
-esp_wps_config_t       include/esp_supplicant/esp_wps.h        /^} esp_wps_config_t;$/;"       t       typeref:struct:__anon90
-event_cb       src/tls/tls.h   /^      void (*event_cb)(void *ctx, enum tls_event ev,$/;"      m       struct:tls_config
-event_cb       src/wps/wps.h   /^      void (*event_cb)(void *ctx, enum wps_event event,$/;"   m       struct:wps_context
-expanded_key_material  src/tls/tlsv1_common.h  /^      size_t expanded_key_material;$/;"       m       struct:tls_cipher_data
-expiration     src/wps/wps_registrar.c /^      struct os_time expiration;$/;"  m       struct:wps_uuid_pin     typeref:struct:wps_uuid_pin::os_time    file:
-ext_data       include/utils/wpabuf.h  /^      u8 *ext_data; \/* pointer to external data; NULL if data follows$/;"    m       struct:wpabuf
-ext_password_alloc     src/utils/ext_password.c        /^struct wpabuf * ext_password_alloc(size_t len)$/;"    f
-ext_password_backend   src/utils/ext_password_i.h      /^struct ext_password_backend {$/;"     s
-ext_password_data      src/utils/ext_password.c        /^struct ext_password_data {$/;"        s       file:
-ext_password_deinit    src/utils/ext_password.c        /^void ext_password_deinit(struct ext_password_data *data)$/;"  f
-ext_password_deinit    src/utils/ext_password.h        27;"    d
-ext_password_free      src/utils/ext_password.c        /^void ext_password_free(struct wpabuf *pw)$/;" f
-ext_password_free      src/utils/ext_password.h        29;"    d
-ext_password_get       src/utils/ext_password.c        /^struct wpabuf * ext_password_get(struct ext_password_data *data,$/;"  f
-ext_password_get       src/utils/ext_password.h        28;"    d
-ext_password_init      src/utils/ext_password.c        /^struct ext_password_data * ext_password_init(const char *backend,$/;" f
-ext_password_init      src/utils/ext_password.h        26;"    d
-ext_reg        src/wps/wps_i.h /^      int ext_reg;$/;"        m       struct:wps_data
-extensions_present     src/tls/x509v3.h        /^      unsigned int extensions_present;$/;"    m       struct:x509_certificate
-extra_cred     src/ap/ap_config.h      /^      u8 *extra_cred;$/;"     m       struct:hostapd_bss_config
-extra_cred     src/wps/wps.h   /^      const u8 *extra_cred;$/;"       m       struct:wps_registrar_config
-extra_cred     src/wps/wps_registrar.c /^      struct wpabuf *extra_cred;$/;"  m       struct:wps_registrar    typeref:struct:wps_registrar::wpabuf    file:
-extra_cred_len src/ap/ap_config.h      /^      size_t extra_cred_len;$/;"      m       struct:hostapd_bss_config
-extra_cred_len src/wps/wps.h   /^      size_t extra_cred_len;$/;"      m       struct:wps_registrar_config
-factory_info   include/esp_supplicant/esp_wps.h        /^    wps_factory_information_t factory_info;$/;"       m       struct:__anon90
-fail   src/wps/wps.h   /^      } fail;$/;"     m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_fail
-fast_aes_128_cbc_decrypt       src/fast_crypto/fast_aes-cbc.c  /^fast_aes_128_cbc_decrypt(const uint8_t *key, const uint8_t *iv, uint8_t *data, size_t data_len)$/;"   f
-fast_aes_128_cbc_encrypt       src/fast_crypto/fast_aes-cbc.c  /^fast_aes_128_cbc_encrypt(const uint8_t *key, const uint8_t *iv, uint8_t *data, size_t data_len)$/;"   f
-fast_aes_unwrap        src/fast_crypto/fast_aes-unwrap.c       /^fast_aes_unwrap(const uint8_t *kek, int n, const uint8_t *cipher, uint8_t *plain)$/;" f
-fast_aes_wrap  src/fast_crypto/fast_aes-wrap.c /^int fast_aes_wrap(const uint8_t *kek, int n, const uint8_t *plain, uint8_t *cipher)$/;"       f
-fast_crypto_cipher     src/fast_crypto/fast_crypto_internal-cipher.c   /^struct fast_crypto_cipher {$/;"       s       file:
-fast_crypto_cipher_decrypt     src/fast_crypto/fast_crypto_internal-cipher.c   /^int  fast_crypto_cipher_decrypt(struct crypto_cipher *ctx, const uint8_t *crypt,$/;"  f
-fast_crypto_cipher_deinit      src/fast_crypto/fast_crypto_internal-cipher.c   /^void  fast_crypto_cipher_deinit(struct crypto_cipher *ctx)$/;"        f
-fast_crypto_cipher_encrypt     src/fast_crypto/fast_crypto_internal-cipher.c   /^int  fast_crypto_cipher_encrypt(struct crypto_cipher *ctx, const uint8_t *plain,$/;"  f
-fast_crypto_cipher_init        src/fast_crypto/fast_crypto_internal-cipher.c   /^struct crypto_cipher *  fast_crypto_cipher_init(enum crypto_cipher_alg alg,$/;"       f
-fast_crypto_hash       src/fast_crypto/fast_crypto_internal.c  /^struct fast_crypto_hash {$/;" s       file:
-fast_crypto_hash_finish        src/fast_crypto/fast_crypto_internal.c  /^int  fast_crypto_hash_finish(struct crypto_hash *ctx, u8 *mac, size_t *len)$/;"       f
-fast_crypto_hash_init  src/fast_crypto/fast_crypto_internal.c  /^struct crypto_hash *  fast_crypto_hash_init(enum crypto_hash_alg alg, const u8 *key,$/;"      f
-fast_crypto_hash_update        src/fast_crypto/fast_crypto_internal.c  /^void  fast_crypto_hash_update(struct crypto_hash *ctx, const u8 *data, size_t len)$/;"        f
-fast_crypto_mod_exp    src/fast_crypto/fast_crypto_internal-modexp.c   /^fast_crypto_mod_exp(const uint8_t *base, size_t base_len,$/;" f
-fast_hmac_sha256       src/fast_crypto/fast_sha256.c   /^fast_hmac_sha256(const uint8_t *key, size_t key_len, const uint8_t *data,$/;" f
-fast_hmac_sha256_vector        src/fast_crypto/fast_sha256.c   /^fast_hmac_sha256_vector(const uint8_t *key, size_t key_len, size_t num_elem,$/;"      f
-fast_mp_montgomery_reduce      src/crypto/libtommath.h /^fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho)$/;"  f
-fast_mp_montgomery_reduce      src/tls/libtommath.h    /^fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho)$/;"  f
-fast_s_mp_mul_digs     src/crypto/libtommath.h /^fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;" f
-fast_s_mp_mul_digs     src/tls/libtommath.h    /^fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;" f
-fast_s_mp_sqr  src/crypto/libtommath.h /^fast_s_mp_sqr (mp_int * a, mp_int * b)$/;"    f
-fast_s_mp_sqr  src/tls/libtommath.h    /^fast_s_mp_sqr (mp_int * a, mp_int * b)$/;"    f
-fast_sha256_prf        src/fast_crypto/fast_sha256.c   /^fast_sha256_prf(const uint8_t *key, size_t key_len, const char *label,$/;"    f
-fast_sha256_vector     src/fast_crypto/fast_sha256-internal.c  /^fast_sha256_vector(size_t num_elem, const uint8_t *addr[], const size_t *len,$/;"     f
-finish_state   src/eap_peer/eap_i.h    /^      u8 finish_state;$/;"    m       struct:eap_sm
-fips_mode      src/tls/tls.h   /^      int fips_mode;$/;"      m       struct:tls_config
-first_sta_seen src/ap/wpa_auth_i.h     /^      Boolean first_sta_seen;$/;"     m       struct:wpa_group
-flags  src/ap/hostapd.h        /^      int flags; \/* HOSTAPD_RATE_ flags *\/$/;"      m       struct:hostapd_rate_data
-flags  src/ap/sta_info.h       /^      u32 flags; \/* Bitfield of WLAN_STA_* *\/$/;"   m       struct:sta_info
-flags  src/eap_peer/eap_config.h       /^      u32 flags;$/;"  m       struct:eap_peer_config
-flags  src/eap_peer/eap_mschapv2.c     /^      u8 flags;$/;"   m       struct:ms_response      file:
-flags  src/eap_peer/eap_mschapv2.c     /^      u8 flags[2];$/;"        m       struct:ms_change_password       file:
-flags  src/tls/tls.h   /^      unsigned int flags;$/;" m       struct:tls_connection_params
-flags  src/wps/wps_registrar.c /^      int flags;$/;"  m       struct:wps_uuid_pin     file:
-fn     src/esp_supplicant/esp_wifi_driver.h    /^    wifi_ipc_fn_t fn;$/;"     m       struct:__anon32
-fn     src/esp_supplicant/esp_wifi_driver.h    /^    wifi_wpa2_fn_t   fn;$/;"  m       struct:__anon31
-for_each_auth  src/ap/wpa_auth.h       /^      int (*for_each_auth)(void *ctx, int (*cb)(struct wpa_authenticator *a,$/;"      m       struct:wpa_auth_callbacks
-for_each_interface     src/ap/hostapd.h        /^      int (*for_each_interface)(struct hapd_interfaces *interfaces,$/;"       m       struct:hapd_interfaces
-for_each_sta   src/ap/wpa_auth.h       /^      int (*for_each_sta)(void *ctx, int (*cb)(struct wpa_state_machine *sm,$/;"      m       struct:wpa_auth_callbacks
-force_new_label        src/eap_peer/eap_peap.c /^      int peap_version, force_peap_version, force_new_label;$/;"      m       struct:eap_peap_data    file:
-force_pbc_overlap      src/wps/wps_registrar.c /^      int force_pbc_overlap;$/;"      m       struct:wps_registrar    file:
-force_peap_version     src/eap_peer/eap_peap.c /^      int peap_version, force_peap_version, force_new_label;$/;"      m       struct:eap_peap_data    file:
-fragm_threshold        src/ap/ap_config.h      /^      int fragm_threshold;$/;"        m       struct:hostapd_config
-fragment_size  src/eap_peer/eap_config.h       /^      int fragment_size;$/;"  m       struct:eap_peer_config
-frame_control  src/common/ieee802_11_defs.h    /^      le16 frame_control;$/;" m       struct:ieee80211_hdr
-frame_control  src/common/ieee802_11_defs.h    /^      le16 frame_control;$/;" m       struct:ieee80211_mgmt
-frame_type     src/ap/wpa_auth.h       /^      u8 frame_type; \/* RSN_REMOTE_FRAME_TYPE_FT_RRB *\/$/;" m       struct:ft_r0kh_r1kh_pull_frame
-frame_type     src/ap/wpa_auth.h       /^      u8 frame_type; \/* RSN_REMOTE_FRAME_TYPE_FT_RRB *\/$/;" m       struct:ft_r0kh_r1kh_push_frame
-frame_type     src/ap/wpa_auth.h       /^      u8 frame_type; \/* RSN_REMOTE_FRAME_TYPE_FT_RRB *\/$/;" m       struct:ft_r0kh_r1kh_resp_frame
-frame_type     src/ap/wpa_auth.h       /^      u8 frame_type; \/* RSN_REMOTE_FRAME_TYPE_FT_RRB *\/$/;" m       struct:ft_rrb_frame
-free   src/eap_peer/eap_i.h    /^      void (*free)(struct eap_method *method);$/;"    m       struct:eap_method
-friendly_name  src/ap/ap_config.h      /^      char *friendly_name;$/;"        m       struct:hostapd_bss_config
-friendly_name  src/wps/wps.h   /^              const char *friendly_name;$/;"  m       struct:wps_event_data::wps_event_er_ap
-friendly_name  src/wps/wps.h   /^      char *friendly_name;$/;"        m       struct:wps_context
-ft_action_req  src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED ft_action_req;$/;"      m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon80
-ft_action_resp src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED ft_action_resp;$/;"     m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-ft_capab       src/common/wpa_common.h /^      u8 ft_capab;$/;"        m       struct:rsn_mdie
-ft_check_msg_2_of_4    src/ap/wpa_auth.c       /^static int ICACHE_FLASH_ATTR ft_check_msg_2_of_4(struct wpa_authenticator *wpa_auth,$/;"      f       file:
-ft_completed   src/ap/wpa_auth_i.h     /^      unsigned int ft_completed:1;$/;"        m       struct:wpa_state_machine
-ft_over_ds     src/ap/ap_config.h      /^      int ft_over_ds;$/;"     m       struct:hostapd_bss_config
-ft_over_ds     src/ap/wpa_auth.h       /^      int ft_over_ds;$/;"     m       struct:wpa_auth_config
-ft_r0kh_r1kh_pull_frame        src/ap/wpa_auth.h       /^struct ft_r0kh_r1kh_pull_frame {$/;"  s
-ft_r0kh_r1kh_push_frame        src/ap/wpa_auth.h       /^struct ft_r0kh_r1kh_push_frame {$/;"  s
-ft_r0kh_r1kh_resp_frame        src/ap/wpa_auth.h       /^struct ft_r0kh_r1kh_resp_frame {$/;"  s
-ft_remote_r0kh src/ap/wpa_auth.h       /^struct ft_remote_r0kh {$/;"   s
-ft_remote_r1kh src/ap/wpa_auth.h       /^struct ft_remote_r1kh {$/;"   s
-ft_rrb_frame   src/ap/wpa_auth.h       /^struct ft_rrb_frame {$/;"     s
-ftie   src/ap/wpa_auth_ie.h    /^      const u8 *ftie;$/;"     m       struct:wpa_eapol_ie_parse
-ftie   src/rsn_supp/wpa_ie.h   /^      const u8 *ftie;$/;"     m       struct:wpa_eapol_ie_parse
-ftie_len       src/ap/wpa_auth_ie.h    /^      size_t ftie_len;$/;"    m       struct:wpa_eapol_ie_parse
-ftie_len       src/rsn_supp/wpa_ie.h   /^      size_t ftie_len;$/;"    m       struct:wpa_eapol_ie_parse
-full_dynamic_vlan      src/ap/hostapd.h        /^      struct full_dynamic_vlan *full_dynamic_vlan;$/;"        m       struct:hostapd_data     typeref:struct:hostapd_data::full_dynamic_vlan
-gEapSm src/esp_supplicant/esp_wpa_enterprise.c /^static struct eap_sm *gEapSm = NULL;$/;"      v       typeref:struct:eap_sm   file:
-gWpaSm src/rsn_supp/wpa.c      /^  struct wpa_sm gWpaSm;$/;"   v       typeref:struct:wpa_sm
-gWpsSm src/esp_supplicant/esp_wps.c    /^struct wps_sm *gWpsSm = NULL;$/;"     v       typeref:struct:wps_sm
-g_wifi_wpa2_sync_sem   src/esp_supplicant/esp_wpa_enterprise.c /^static void *g_wifi_wpa2_sync_sem = NULL;$/;" v       file:
-g_wpa2_api_lock        src/esp_supplicant/esp_wpa_enterprise.c /^static void *g_wpa2_api_lock = NULL;$/;"      v       file:
-g_wpa2_state   src/esp_supplicant/esp_wpa_enterprise.c /^static wpa2_state_t g_wpa2_state = WPA2_STATE_DISABLED;$/;"   v       file:
-g_wpa_anonymous_identity       src/eap_peer/eap.h      /^u8 *g_wpa_anonymous_identity;$/;"     v
-g_wpa_anonymous_identity_len   src/eap_peer/eap.h      /^int g_wpa_anonymous_identity_len;$/;" v
-g_wpa_ca_cert  src/eap_peer/eap.h      /^const u8 *g_wpa_ca_cert;$/;"  v
-g_wpa_ca_cert_len      src/eap_peer/eap.h      /^int g_wpa_ca_cert_len;$/;"    v
-g_wpa_client_cert      src/eap_peer/eap.h      /^const u8 *g_wpa_client_cert;$/;"      v
-g_wpa_client_cert_len  src/eap_peer/eap.h      /^int g_wpa_client_cert_len;$/;"        v
-g_wpa_new_password     src/eap_peer/eap.h      /^u8 *g_wpa_new_password;$/;"   v
-g_wpa_new_password_len src/eap_peer/eap.h      /^int g_wpa_new_password_len;$/;"       v
-g_wpa_password src/eap_peer/eap.h      /^u8 *g_wpa_password;$/;"       v
-g_wpa_password_len     src/eap_peer/eap.h      /^int g_wpa_password_len;$/;"   v
-g_wpa_private_key      src/eap_peer/eap.h      /^const u8 *g_wpa_private_key;$/;"      v
-g_wpa_private_key_len  src/eap_peer/eap.h      /^int g_wpa_private_key_len;$/;"        v
-g_wpa_private_key_passwd       src/eap_peer/eap.h      /^const u8 *g_wpa_private_key_passwd;$/;"       v
-g_wpa_private_key_passwd_len   src/eap_peer/eap.h      /^int g_wpa_private_key_passwd_len;$/;" v
-g_wpa_username src/eap_peer/eap.h      /^u8 *g_wpa_username;$/;"       v
-g_wpa_username_len     src/eap_peer/eap.h      /^int g_wpa_username_len;$/;"   v
-gas_dialog     src/ap/sta_info.h       /^      struct gas_dialog_info *gas_dialog;$/;" m       struct:sta_info typeref:struct:sta_info::gas_dialog_info
-gas_dialog_next        src/ap/sta_info.h       /^      u8 gas_dialog_next;$/;" m       struct:sta_info
-gas_frag_limit src/ap/hostapd.h        /^      size_t gas_frag_limit;$/;"      m       struct:hostapd_data
-gd     src/rsn_supp/wpa.h      /^    struct wpa_gtk_data gd; \/\/used for calllback save param$/;"     m       struct:wpa_sm   typeref:struct:wpa_sm::wpa_gtk_data
-generate_authenticator_response        src/crypto/ms_funcs.c   /^int generate_authenticator_response(const u8 *password, size_t password_len,$/;"      f
-generate_authenticator_response_pwhash src/crypto/ms_funcs.c   /^int generate_authenticator_response_pwhash($/;"       f
-generate_nt_response   src/crypto/ms_funcs.c   /^int generate_nt_response(const u8 *auth_challenge, const u8 *peer_challenge,$/;"      f
-generate_nt_response_pwhash    src/crypto/ms_funcs.c   /^int generate_nt_response_pwhash(const u8 *auth_challenge,$/;" f
-generator      include/crypto/dh_groups.h      /^      const u8 *generator;$/;"        m       struct:dh_group
-generator_len  include/crypto/dh_groups.h      /^      size_t generator_len;$/;"       m       struct:dh_group
-get    src/utils/ext_password_i.h      /^      struct wpabuf * (*get)(void *ctx, const char *name);$/;"        m       struct:ext_password_backend     typeref:struct:ext_password_backend::get
-getKey src/eap_peer/eap_i.h    /^      u8 * (*getKey)(struct eap_sm *sm, void *priv, size_t *len);$/;" m       struct:eap_method
-getSessionId   src/eap_peer/eap_i.h    /^      u8 * (*getSessionId)(struct eap_sm *sm, void *priv, size_t *len);$/;"   m       struct:eap_method
-get_asymetric_start_key        src/crypto/ms_funcs.c   /^int get_asymetric_start_key(const u8 *master_key, u8 *session_key,$/;"        f
-get_eapol      src/ap/wpa_auth.h       /^      int (*get_eapol)(void *ctx, const u8 *addr, wpa_eapol_variable var);$/;"        m       struct:wpa_auth_callbacks
-get_identity   src/eap_peer/eap_i.h    /^      const u8 * (*get_identity)(struct eap_sm *sm, void *priv, size_t *len);$/;"     m       struct:eap_method
-get_master_key src/crypto/ms_funcs.c   /^int get_master_key(const u8 *password_hash_hash, const u8 *nt_response,$/;"   f
-get_msk        src/ap/wpa_auth.h       /^      int (*get_msk)(void *ctx, const u8 *addr, u8 *msk, size_t *len);$/;"    m       struct:wpa_auth_callbacks
-get_ppkey      src/rsn_supp/wpa.h      /^    int (*get_ppkey) (uint8_t *ifx, int *alg, uint8_t *addr, int *key_idx,$/;"        m       struct:wpa_sm
-get_psk        src/ap/wpa_auth.h       /^      const u8 * (*get_psk)(void *ctx, const u8 *addr, const u8 *prev_psk);$/;"       m       struct:wpa_auth_callbacks
-get_seqnum     src/ap/wpa_auth.h       /^      int (*get_seqnum)(void *ctx, const u8 *addr, int idx, u8 *seq);$/;"     m       struct:wpa_auth_callbacks
-get_status     src/eap_peer/eap_i.h    /^      int (*get_status)(struct eap_sm *sm, void *priv, char *buf,$/;" m       struct:eap_method
-gl_disable_time_check  src/esp_supplicant/esp_wpa_enterprise.c /^static bool gl_disable_time_check = true;$/;" v       file:
-global_ctrl_sock       src/ap/hostapd.h        /^      int global_ctrl_sock;$/;"       m       struct:hapd_interfaces
-global_iface_name      src/ap/hostapd.h        /^      char *global_iface_name;$/;"    m       struct:hapd_interfaces
-global_iface_path      src/ap/hostapd.h        /^      char *global_iface_path;$/;"    m       struct:hapd_interfaces
-group  src/ap/ap_config.h      /^      int group;$/;"  m       struct:hostapd_wpa_psk
-group  src/ap/wpa_auth_i.h     /^      struct wpa_group *group;$/;"    m       struct:wpa_authenticator        typeref:struct:wpa_authenticator::wpa_group
-group  src/ap/wpa_auth_i.h     /^      struct wpa_group *group;$/;"    m       struct:wpa_state_machine        typeref:struct:wpa_state_machine::wpa_group
-group  src/crypto/crypto_mbedtls.c     /^    mbedtls_ecp_group group;$/;"      m       struct:crypto_ec        file:
-group_cipher   src/common/wpa_common.h /^      int group_cipher;$/;"   m       struct:wpa_ie_data
-group_cipher   src/rsn_supp/wpa.h      /^    unsigned int group_cipher;$/;"    m       struct:wpa_sm
-gtk    src/ap/wpa_auth_ie.h    /^      const u8 *gtk;$/;"      m       struct:wpa_eapol_ie_parse
-gtk    src/common/wpa_common.h /^      u8 gtk[32];$/;" m       struct:wpa_gtk_data
-gtk    src/rsn_supp/wpa_ie.h   /^      const u8 *gtk;$/;"      m       struct:wpa_eapol_ie_parse
-gtk_len        src/ap/wpa_auth_ie.h    /^      size_t gtk_len;$/;"     m       struct:wpa_eapol_ie_parse
-gtk_len        src/common/wpa_common.h /^      int gtk_len;$/;"        m       struct:wpa_gtk_data
-gtk_len        src/rsn_supp/wpa_ie.h   /^      size_t gtk_len;$/;"     m       struct:wpa_eapol_ie_parse
-h_dest src/rsn_supp/wpa.h      /^    u8 h_dest[ETH_ALEN];$/;"  m       struct:l2_ethhdr
-h_proto        src/rsn_supp/wpa.h      /^    be16 h_proto;$/;" m       struct:l2_ethhdr
-h_source       src/rsn_supp/wpa.h      /^    u8 h_source[ETH_ALEN];$/;"        m       struct:l2_ethhdr
-hapd_interfaces        src/ap/hostapd.h        /^struct hapd_interfaces {$/;"  s
-has_GTK        src/ap/wpa_auth_i.h     /^      Boolean has_GTK;$/;"    m       struct:wpa_state_machine
-has_reauth_data        src/eap_peer/eap_i.h    /^      bool (*has_reauth_data)(struct eap_sm *sm, void *priv);$/;"     m       struct:eap_method
-hash   src/tls/tls.h   /^              const u8 *hash;$/;"     m       struct:tls_event_data::__anon35
-hash   src/tls/tlsv1_common.h  /^      tls_hash hash;$/;"      m       struct:tls_cipher_suite
-hash_alg       src/tls/tlsv1_record.h  /^      enum crypto_hash_alg hash_alg;$/;"      m       struct:tlsv1_record_layer       typeref:enum:tlsv1_record_layer::crypto_hash_alg
-hash_len       src/tls/tls.h   /^              size_t hash_len;$/;"    m       struct:tls_event_data::__anon35
-hash_nt_password_hash  src/crypto/ms_funcs.c   /^int hash_nt_password_hash(const u8 *password_hash, u8 *password_hash_hash)$/;"        f
-hash_size      src/tls/tlsv1_record.h  /^      size_t hash_size;$/;"   m       struct:tlsv1_record_layer
-hex2byte       src/utils/common.c      /^int hex2byte(const char *hex)$/;"     f
-hex2num        src/utils/common.c      /^static int hex2num(char c)$/;"        f       file:
-hexstr2bin     src/utils/common.c      /^int hexstr2bin(const char *hex, u8 *buf, size_t len)$/;"      f
-hmac_md5       src/crypto/md5.c        /^hmac_md5(const u8 *key, size_t key_len, const u8 *data, size_t data_len,$/;"  f
-hmac_md5_non_fips_allow        include/crypto/md5.h    32;"    d
-hmac_md5_vector        src/crypto/md5.c        /^hmac_md5_vector(const u8 *key, size_t key_len, size_t num_elem,$/;"   f
-hmac_md5_vector_non_fips_allow include/crypto/md5.h    31;"    d
-hmac_sha1      src/crypto/sha1.c       /^hmac_sha1(const u8 *key, size_t key_len, const u8 *data, size_t data_len,$/;" f
-hmac_sha1_vector       src/crypto/sha1.c       /^hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,$/;"  f
-hmac_sha256    src/crypto/sha256.c     /^hmac_sha256(const u8 *key, size_t key_len, const u8 *data,$/;"        f
-hmac_sha256_vector     src/crypto/sha256.c     /^hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,$/;"        f
-hnext  src/ap/sta_info.h       /^      struct sta_info *hnext; \/* next entry in hash table list *\/$/;"       m       struct:sta_info typeref:struct:sta_info::sta_info
-host_to_be16   include/utils/common.h  107;"   d
-host_to_be16   include/utils/common.h  66;"    d
-host_to_be16   include/utils/common.h  94;"    d
-host_to_be32   include/utils/common.h  110;"   d
-host_to_be32   include/utils/common.h  69;"    d
-host_to_be32   include/utils/common.h  98;"    d
-host_to_be64   include/utils/common.h  102;"   d
-host_to_be64   include/utils/common.h  114;"   d
-host_to_le16   include/utils/common.h  105;"   d
-host_to_le16   include/utils/common.h  64;"    d
-host_to_le16   include/utils/common.h  92;"    d
-host_to_le32   include/utils/common.h  96;"    d
-host_to_le64   include/utils/common.h  100;"   d
-host_to_le64   include/utils/common.h  112;"   d
-hostap_deinit  src/esp_supplicant/esp_hostap.c /^bool hostap_deinit(void *data)$/;"    f
-hostap_eapol_resend_process    src/ap/wpa_auth.c       /^void hostap_eapol_resend_process(void *timeout_ctx)$/;"       f
-hostap_init    src/esp_supplicant/esp_hostap.c /^void* hostap_init(void)$/;"   f
-hostap_security_policy src/ap/ap_config.h      /^typedef enum hostap_security_policy {$/;"     g
-hostapd_bss_config     src/ap/ap_config.h      /^struct hostapd_bss_config {$/;"       s
-hostapd_config src/ap/ap_config.h      /^struct hostapd_config {$/;"   s
-hostapd_config_defaults        src/ap/ap_config.c      /^struct hostapd_config * hostapd_config_defaults(void)$/;"     f
-hostapd_config_defaults_bss    src/ap/ap_config.c      /^void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)$/;"  f
-hostapd_data   src/ap/hostapd.h        /^struct hostapd_data {$/;"     s
-hostapd_derive_psk     src/ap/ap_config.c      /^static int hostapd_derive_psk(struct hostapd_ssid *ssid)$/;"  f       file:
-hostapd_frame_info     src/ap/hostapd.h        /^struct hostapd_frame_info {$/;"       s
-hostapd_get_psk        src/ap/ap_config.c      /^const u8 * hostapd_get_psk(const struct hostapd_bss_config *conf,$/;" f
-hostapd_hw_mode        src/common/defs.h       /^enum hostapd_hw_mode {$/;"    g
-hostapd_mac_comp       src/ap/ap_config.c      /^int hostapd_mac_comp(const void *a, const void *b)$/;"        f
-hostapd_mac_comp_empty src/ap/ap_config.c      /^int hostapd_mac_comp_empty(const void *a)$/;" f
-hostapd_maclist_found  src/ap/ap_config.c      /^int hostapd_maclist_found(struct mac_acl_entry *list, int num_entries,$/;"    f
-hostapd_probereq_cb    src/ap/hostapd.h        /^struct hostapd_probereq_cb {$/;"      s
-hostapd_rate_data      src/ap/hostapd.h        /^struct hostapd_rate_data {$/;"        s
-hostapd_rate_found     src/ap/ap_config.c      /^int hostapd_rate_found(int *list, int rate)$/;"       f
-hostapd_setup_wpa_psk  src/ap/ap_config.c      /^int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf)$/;"        f
-hostapd_ssid   src/ap/ap_config.h      /^struct hostapd_ssid {$/;"     s
-hostapd_sta_wpa_psk_short      src/ap/ap_config.h      /^struct hostapd_sta_wpa_psk_short {$/;"        s
-hostapd_wep_key_cmp    src/ap/ap_config.c      /^int hostapd_wep_key_cmp(struct hostapd_wep_keys *a, struct hostapd_wep_keys *b)$/;"   f
-hostapd_wep_keys       src/ap/ap_config.h      /^struct hostapd_wep_keys {$/;" s
-hostapd_wpa_psk        src/ap/ap_config.h      /^struct hostapd_wpa_psk {$/;"  s
-hs20   src/ap/ap_config.h      /^      int hs20;$/;"   m       struct:hostapd_bss_config
-hs20_connection_capability     src/ap/ap_config.h      /^      u8 *hs20_connection_capability;$/;"     m       struct:hostapd_bss_config
-hs20_connection_capability_len src/ap/ap_config.h      /^      size_t hs20_connection_capability_len;$/;"      m       struct:hostapd_bss_config
-hs20_oper_friendly_name        src/ap/ap_config.h      /^      struct hostapd_lang_string *hs20_oper_friendly_name;$/;"        m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::hostapd_lang_string
-hs20_oper_friendly_name_count  src/ap/ap_config.h      /^      unsigned int hs20_oper_friendly_name_count;$/;" m       struct:hostapd_bss_config
-hs20_operating_class   src/ap/ap_config.h      /^      u8 *hs20_operating_class;$/;"   m       struct:hostapd_bss_config
-hs20_operating_class_len       src/ap/ap_config.h      /^      u8 hs20_operating_class_len;$/;"        m       struct:hostapd_bss_config
-hs20_wan_metrics       src/ap/ap_config.h      /^      u8 *hs20_wan_metrics;$/;"       m       struct:hostapd_bss_config
-ht_capab       src/ap/ap_config.h      /^      u16 ht_capab;$/;"       m       struct:hostapd_config
-ht_capabilities_info   src/common/ieee802_11_defs.h    /^      le16 ht_capabilities_info;$/;"  m       struct:ieee80211_ht_capabilities
-ht_extended_capabilities       src/common/ieee802_11_defs.h    /^      le16 ht_extended_capabilities;$/;"      m       struct:ieee80211_ht_capabilities
-ht_op_mode_fixed       src/ap/ap_config.h      /^      int ht_op_mode_fixed;$/;"       m       struct:hostapd_config
-ht_param       src/common/ieee802_11_defs.h    /^      u8 ht_param;$/;"        m       struct:ieee80211_ht_operation
-htobe16        port/include/endian.h   102;"   d
-htobe16        port/include/endian.h   87;"    d
-htobe32        port/include/endian.h   103;"   d
-htobe32        port/include/endian.h   88;"    d
-htobe64        port/include/endian.h   104;"   d
-htobe64        port/include/endian.h   89;"    d
-htole16        port/include/endian.h   105;"   d
-htole16        port/include/endian.h   90;"    d
-htole32        port/include/endian.h   106;"   d
-htole32        port/include/endian.h   91;"    d
-htole64        port/include/endian.h   107;"   d
-htole64        port/include/endian.h   92;"    d
-hw_mode        src/ap/ap_config.h      /^      enum hostapd_hw_mode hw_mode; \/* HOSTAPD_MODE_IEEE80211A, .. *\/$/;"   m       struct:hostapd_config   typeref:enum:hostapd_config::hostapd_hw_mode
-ic_cipher      src/esp_supplicant/esp_wifi_driver.h    /^    u_int   ic_cipher;              \/* WIFI_CIPHER_* *\/$/;" m       struct:wifi_cipher
-ic_decap       src/esp_supplicant/esp_wifi_driver.h    /^    int     (*ic_decap)(struct wifi_key *, void *, int);$/;"  m       struct:wifi_cipher
-ic_encap       src/esp_supplicant/esp_wifi_driver.h    /^    int     (*ic_encap)(struct wifi_key *, void *, uint8_t);$/;"      m       struct:wifi_cipher
-ic_header      src/esp_supplicant/esp_wifi_driver.h    /^    u_int   ic_header;              \/* size of privacy header (bytes) *\/$/;"        m       struct:wifi_cipher
-ic_miclen      src/esp_supplicant/esp_wifi_driver.h    /^    u_int   ic_miclen;              \/* size of mic trailer (bytes) *\/$/;"   m       struct:wifi_cipher
-ic_trailer     src/esp_supplicant/esp_wifi_driver.h    /^    u_int   ic_trailer;             \/* size of privacy trailer (bytes) *\/$/;"       m       struct:wifi_cipher
-iconf  src/ap/hostapd.h        /^      struct hostapd_config *iconf;$/;"       m       struct:hostapd_data     typeref:struct:hostapd_data::hostapd_config
-id     include/crypto/dh_groups.h      /^      int id;$/;"     m       struct:dh_group
-id     src/ap/wpa_auth.h       /^      u8 id[FT_R0KH_ID_MAX_LEN];$/;"  m       struct:ft_remote_r0kh
-id     src/ap/wpa_auth.h       /^      u8 id[FT_R1KH_ID_LEN];$/;"      m       struct:ft_remote_r1kh
-id     src/common/wpa_common.h /^      u8 id;$/;"      m       struct:rsn_rdie
-id_len src/ap/wpa_auth.h       /^      size_t id_len;$/;"      m       struct:ft_remote_r0kh
-id_len src/eap_peer/eap_peap.c /^      size_t id_len;$/;"      m       struct:eap_peap_data    file:
-id_len src/eap_peer/eap_tls.c  /^      size_t id_len;$/;"      m       struct:eap_tls_data     file:
-id_len src/eap_peer/eap_ttls.c /^      size_t id_len;$/;"      m       struct:eap_ttls_data    file:
-ident  src/eap_peer/eap_ttls.c /^      u8 ident;$/;"   m       struct:eap_ttls_data    file:
-identifier     src/eap_peer/eap_defs.h /^      u8 identifier;$/;"      m       struct:eap_hdr
-identifier     src/tls/asn1.h  /^      u8 identifier, class, constructed;$/;"  m       struct:asn1_hdr
-identity       src/eap_peer/eap_config.h       /^      u8 *identity;$/;"       m       struct:eap_peer_config
-identity       src/wps/wps.h   /^    char identity[32];$/;"    m       struct:wps_sm
-identity_len   src/eap_peer/eap_config.h       /^      size_t identity_len;$/;"        m       struct:eap_peer_config
-identity_len   src/wps/wps.h   /^    u8 identity_len;$/;"      m       struct:wps_sm
-idx    src/ap/ap_config.h      /^      u8 idx;$/;"     m       struct:hostapd_wep_keys
-ie_data        src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    ie_data[];$/;" m       struct:wifi_appie
-ie_len src/esp_supplicant/esp_wifi_driver.h    /^    uint16_t   ie_len;$/;"    m       struct:wifi_appie
-ieee80211_hdr  src/common/ieee802_11_defs.h    /^struct ieee80211_hdr {$/;"    s
-ieee80211_ht_capabilities      src/common/ieee802_11_defs.h    /^struct ieee80211_ht_capabilities {$/;"        s
-ieee80211_ht_operation src/common/ieee802_11_defs.h    /^struct ieee80211_ht_operation {$/;"   s
-ieee80211_mgmt src/common/ieee802_11_defs.h    /^struct ieee80211_mgmt {$/;"   s
-ieee80211ac    src/ap/ap_config.h      /^      int ieee80211ac;$/;"    m       struct:hostapd_config
-ieee80211d     src/ap/ap_config.h      /^      int ieee80211d;$/;"     m       struct:hostapd_config
-ieee80211n     src/ap/ap_config.h      /^      int ieee80211n;$/;"     m       struct:hostapd_config
-ieee80211w     src/ap/ap_config.h      /^      enum mfp_options ieee80211w;$/;"        m       struct:hostapd_bss_config       typeref:enum:hostapd_bss_config::mfp_options
-ieee80211w     src/ap/wpa_auth.h       /^      enum mfp_options ieee80211w;$/;"        m       struct:wpa_auth_config  typeref:enum:wpa_auth_config::mfp_options
-ieee80211w_kde_add     src/ap/wpa_auth.c       /^static u8 * ieee80211w_kde_add(struct wpa_state_machine *sm, u8 *pos)$/;"     f       file:
-ieee80211w_kde_len     src/ap/wpa_auth.c       /^static int ieee80211w_kde_len(struct wpa_state_machine *sm)$/;"       f       file:
-ieee80211w_set_keys    src/rsn_supp/wpa.c      /^int   ieee80211w_set_keys(struct wpa_sm *sm,$/;"      f
-ieee802_1x     src/ap/ap_config.h      /^      int ieee802_1x; \/* use IEEE 802.1X *\/$/;"     m       struct:hostapd_bss_config
-ieee802_1x_eapol_key   src/common/eapol_common.h       /^struct ieee802_1x_eapol_key {$/;"     s
-ieee802_1x_hdr src/common/eapol_common.h       /^struct ieee802_1x_hdr {$/;"   s
-ieee802_1x_receive     src/ap/ieee802_1x.c     /^void ieee802_1x_receive(struct hostapd_data *hapd, const u8 *sa, const u8 *buf,$/;"   f
-iface  src/ap/hostapd.h        /^      struct hostapd_iface **iface;$/;"       m       struct:hapd_interfaces  typeref:struct:hapd_interfaces::hostapd_iface
-ignore src/eap_peer/eap_i.h    /^      Boolean ignore;$/;"     m       struct:eap_method_ret
-ignore_broadcast_ssid  src/ap/ap_config.h      /^      int ignore_broadcast_ssid;$/;"  m       struct:hostapd_bss_config
-ignore_sel_reg src/wps/wps.h   /^    bool ignore_sel_reg;$/;"  m       struct:wps_sm
-igtk   src/ap/wpa_auth_ie.h    /^      const u8 *igtk;$/;"     m       struct:wpa_eapol_ie_parse
-igtk   src/common/wpa_common.h /^      u8 igtk[WPA_IGTK_LEN];$/;"      m       struct:wpa_igtk_kde
-igtk   src/rsn_supp/wpa_ie.h   /^      const u8 *igtk;$/;"     m       struct:wpa_eapol_ie_parse
-igtk_len       src/ap/wpa_auth_ie.h    /^      size_t igtk_len;$/;"    m       struct:wpa_eapol_ie_parse
-igtk_len       src/rsn_supp/wpa_ie.h   /^      size_t igtk_len;$/;"    m       struct:wpa_eapol_ie_parse
-in     src/crypto/md5_i.h      /^      u8 in[64];$/;"  m       struct:MD5Context
-in_step_loop   src/ap/wpa_auth_i.h     /^      unsigned int in_step_loop:1;$/;"        m       struct:wpa_state_machine
-inactivity_interval    src/common/ieee802_11_defs.h    /^      le32 inactivity_interval;$/;"   m       struct:wmm_tspec_element
-inc_byte_array src/utils/common.c      /^void inc_byte_array(u8 *counter, size_t len)$/;"      f
-include_tls_length     src/eap_peer/eap_tls_common.h   /^      int include_tls_length;$/;"     m       struct:eap_ssl_data
-index  src/ap/wpa_auth_i.h     /^      u32 index;$/;"  m       struct:wpa_state_machine
-init   src/eap_peer/eap_i.h    /^      void * (*init)(struct eap_sm *sm);$/;"  m       struct:eap_method
-init   src/utils/ext_password_i.h      /^      void * (*init)(const char *params);$/;" m       struct:ext_password_backend
-init_for_reauth        src/eap_peer/eap_i.h    /^      void * (*init_for_reauth)(struct eap_sm *sm, void *priv);$/;"   m       struct:eap_method
-init_phase2    src/eap_peer/eap_i.h    /^      int init_phase2;$/;"    m       struct:eap_sm
-initiator      src/ap/wpa_auth_i.h     /^      u8 initiator[ETH_ALEN];$/;"     m       struct:wpa_stsl_negotiation
-inline include/utils/common.h  228;"   d
-inline include/utils/common.h  230;"   d
-install_gtk    src/rsn_supp/wpa.h      /^    struct install_key install_gtk;$/;"       m       struct:wpa_sm   typeref:struct:wpa_sm::install_key
-install_key    src/rsn_supp/wpa.h      /^struct install_key {$/;"      s
-install_ppkey  src/rsn_supp/wpa.h      /^    void (*install_ppkey) (enum wpa_alg alg, u8 *addr, int key_idx, int set_tx,$/;"   m       struct:wpa_sm
-install_ptk    src/rsn_supp/wpa.h      /^    struct install_key install_ptk;$/;"       m       struct:wpa_sm   typeref:struct:wpa_sm::install_key
-int_reg        src/wps/wps_i.h /^      int int_reg;$/;"        m       struct:wps_data
-interface_added        src/ap/hostapd.h        /^      int interface_added; \/* virtual interface added for this BSS *\/$/;"   m       struct:hostapd_data
-ip     src/tls/x509v3.h        /^      u8 *ip; \/* iPAddress *\/$/;"   m       struct:x509_name
-ip_len src/tls/x509v3.h        /^      size_t ip_len; \/* IPv4: 4, IPv6: 16 *\/$/;"    m       struct:x509_name
-ipmk   src/eap_peer/eap_peap.c /^      u8 ipmk[40];$/;"        m       struct:eap_peap_data    file:
-iqmp   src/tls/rsa.c   /^      struct bignum *iqmp; \/* 1 \/ q mod p; CRT coefficient *\/$/;"  m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-isKeyAvailable src/eap_peer/eap_i.h    /^      bool (*isKeyAvailable)(struct eap_sm *sm, void *priv);$/;"      m       struct:eap_method
-is_local       src/tls/tls.h   /^              int is_local;$/;"       m       struct:tls_event_data::__anon36
-is_nil_uuid    src/utils/uuid.c        /^int is_nil_uuid(const u8 *uuid)$/;"   f
-is_selected_pin_registrar      src/wps/wps.c   /^static int is_selected_pin_registrar(struct wps_parse_attr *attr, u8 *bssid)$/;"      f       file:
-is_wnmsleep    src/ap/wpa_auth_i.h     /^      unsigned int is_wnmsleep:1;$/;" m       struct:wpa_state_machine
-is_wps_scan    src/wps/wps.h   /^    bool is_wps_scan;$/;"     m       struct:wps_sm
-is_zero_ether_addr     include/utils/common.h  /^static inline int is_zero_ether_addr(const u8 *a)$/;" f
-issuer src/tls/x509v3.h        /^      struct x509_name issuer;$/;"    m       struct:x509_certificate typeref:struct:x509_certificate::x509_name
-iter_count     src/tls/pkcs5.c /^      unsigned int iter_count;$/;"    m       struct:pkcs5_params     file:
-iv_size        src/tls/tlsv1_record.h  /^      size_t iv_size; \/* also block_size *\/$/;"     m       struct:tlsv1_record_layer
-kck    src/common/wpa_common.h /^      u8 kck[16]; \/* EAPOL-Key Key Confirmation Key (KCK) *\/$/;"    m       struct:wpa_ptk
-kek    src/common/wpa_common.h /^      u8 kek[16]; \/* EAPOL-Key Key Encryption Key (KEK) *\/$/;"      m       struct:wpa_ptk
-key    src/ap/ap_config.h      /^      u8 *key[NUM_WEP_KEYS];$/;"      m       struct:hostapd_wep_keys
-key    src/ap/wpa_auth.h       /^      u8 key[16];$/;" m       struct:ft_remote_r0kh
-key    src/ap/wpa_auth.h       /^      u8 key[16];$/;" m       struct:ft_remote_r1kh
-key    src/crypto/crypto_internal-cipher.c     /^                      struct des3_key_s key;$/;"      m       struct:crypto_cipher::__anon10::__anon13        typeref:struct:crypto_cipher::__anon10::__anon13::des3_key_s    file:
-key    src/crypto/crypto_internal-cipher.c     /^                      u8 key[16];$/;" m       struct:crypto_cipher::__anon10::__anon11        file:
-key    src/crypto/crypto_internal.c    /^      u8 key[64];$/;" m       struct:crypto_hash      file:
-key    src/fast_crypto/fast_crypto_internal-cipher.c   /^            struct des3_key_s key;$/;"        m       struct:fast_crypto_cipher::__anon56::__anon59   typeref:struct:fast_crypto_cipher::__anon56::__anon59::des3_key_s       file:
-key    src/fast_crypto/fast_crypto_internal-cipher.c   /^            uint8_t key[16];$/;"      m       struct:fast_crypto_cipher::__anon56::__anon57   file:
-key    src/fast_crypto/fast_crypto_internal.c  /^      u8 key[64];$/;" m       struct:fast_crypto_hash file:
-key    src/rsn_supp/wpa.h      /^    u8 key[32];$/;"   m       struct:install_key
-key    src/tls/tlsv1_cred.h    /^      struct crypto_private_key *key;$/;"     m       struct:tlsv1_credentials        typeref:struct:tlsv1_credentials::crypto_private_key
-key    src/wps/wps.h   /^      u8 key[64];$/;" m       struct:wps_credential
-key    src/wps/wps.h   /^    char key[64];$/;" m       struct:wps_sm
-key_data       src/eap_peer/eap_peap.c /^      u8 *key_data;$/;"       m       struct:eap_peap_data    file:
-key_data       src/eap_peer/eap_tls.c  /^      u8 *key_data;$/;"       m       struct:eap_tls_data     file:
-key_data       src/eap_peer/eap_ttls.c /^      u8 *key_data;$/;"       m       struct:eap_ttls_data    file:
-key_data_length        src/common/wpa_common.h /^      u8 key_data_length[2]; \/* big endian *\/$/;"   m       struct:wpa_eapol_key
-key_entry_valid        src/rsn_supp/wpa.h      /^    int  key_entry_valid;   \/\/present current avaliable entry for bssid, for pairkey:0,5,10,15,20, gtk: pairkey_no+i (i:1~4)$/;"    m       struct:wpa_sm
-key_exchange   src/tls/tlsv1_common.h  /^      tls_key_exchange key_exchange;$/;"      m       struct:tls_cipher_suite
-key_id src/common/wpa_common.h /^      u8 key_id[8]; \/* Reserved in IEEE 802.11i\/RSN *\/$/;" m       struct:wpa_eapol_key
-key_id src/tls/tls.h   /^      const char *key_id;$/;" m       struct:tls_connection_params
-key_idx        src/rsn_supp/wpa.h      /^    int key_idx;$/;"  m       struct:install_key
-key_idx        src/wps/wps.h   /^      u8 key_idx;$/;" m       struct:wps_credential
-key_index      src/common/eapol_common.h       /^      u8 key_index; \/* key flag in the most significant bit:$/;"     m       struct:ieee802_1x_eapol_key
-key_info       src/common/wpa_common.h /^      u8 key_info[2]; \/* big endian *\/$/;"  m       struct:wpa_eapol_key
-key_info       src/rsn_supp/wpa.h      /^    u16 key_info;     \/\/used for txcallback param    $/;"   m       struct:wpa_sm
-key_install    src/rsn_supp/wpa.h      /^    bool key_install;$/;"     m       struct:wpa_sm
-key_iv src/common/eapol_common.h       /^      u8 key_iv[IEEE8021X_KEY_IV_LEN]; \/* cryptographically random number *\/$/;"    m       struct:ieee802_1x_eapol_key
-key_iv src/common/wpa_common.h /^      u8 key_iv[16];$/;"      m       struct:wpa_eapol_key
-key_len        src/crypto/crypto_internal.c    /^      size_t key_len;$/;"     m       struct:crypto_hash      file:
-key_len        src/fast_crypto/fast_crypto_internal.c  /^      size_t key_len;$/;"     m       struct:fast_crypto_hash file:
-key_len        src/wps/wps.h   /^      size_t key_len;$/;"     m       struct:wps_credential
-key_len        src/wps/wps.h   /^    u8 key_len;$/;"   m       struct:wps_sm
-key_length     src/common/eapol_common.h       /^      u8 key_length[2];$/;"   m       struct:ieee802_1x_eapol_key
-key_length     src/common/wpa_common.h /^      u8 key_length[2]; \/* big endian *\/$/;"        m       struct:wpa_eapol_key
-key_lifetime   src/rsn_supp/wpa_ie.h   /^      const u8 *key_lifetime;$/;"     m       struct:wpa_eapol_ie_parse
-key_material   src/tls/tlsv1_common.h  /^      size_t key_material;$/;"        m       struct:tls_cipher_data
-key_material_len       src/tls/tlsv1_record.h  /^      size_t key_material_len;$/;"    m       struct:tlsv1_record_layer
-key_mgmt       src/common/wpa_common.h /^      int key_mgmt;$/;"       m       struct:wpa_ie_data
-key_mgmt       src/rsn_supp/wpa.h      /^    unsigned int key_mgmt;$/;"        m       struct:wpa_sm
-key_mic        src/common/wpa_common.h /^      u8 key_mic[16];$/;"     m       struct:wpa_eapol_key
-key_nonce      src/common/wpa_common.h /^      u8 key_nonce[WPA_NONCE_LEN];$/;"        m       struct:wpa_eapol_key
-key_prov_auto  src/wps/wps_attr_parse.h        /^      const u8 *key_prov_auto; \/* 1 octet (Bool) *\/$/;"     m       struct:wps_parse_attr
-key_replay     src/ap/wpa_auth_i.h     /^      } key_replay[RSNA_MAX_EAPOL_RETRIES],$/;"       m       struct:wpa_state_machine        typeref:struct:wpa_state_machine::wpa_key_replay_counter
-key_rsc        src/common/wpa_common.h /^      u8 key_rsc[WPA_KEY_RSC_LEN];$/;"        m       struct:wpa_eapol_key
-key_rsc_len    src/common/wpa_common.h /^      int tx, key_rsc_len, keyidx;$/;"        m       struct:wpa_gtk_data
-key_signature  src/common/eapol_common.h       /^      u8 key_signature[IEEE8021X_KEY_SIGN_LEN];$/;"   m       struct:ieee802_1x_eapol_key
-key_usage      src/tls/x509v3.h        /^      unsigned long key_usage;$/;"    m       struct:x509_certificate
-key_wrap_auth  src/wps/wps_attr_parse.h        /^      const u8 *key_wrap_auth; \/* WPS_KWA_LEN (8) octets *\/$/;"     m       struct:wps_parse_attr
-key_wrap_extra src/ap/wpa_auth.h       /^      u8 key_wrap_extra[8];$/;"       m       struct:ft_r0kh_r1kh_pull_frame
-key_wrap_extra src/ap/wpa_auth.h       /^      u8 key_wrap_extra[8];$/;"       m       struct:ft_r0kh_r1kh_push_frame
-key_wrap_extra src/ap/wpa_auth.h       /^      u8 key_wrap_extra[8];$/;"       m       struct:ft_r0kh_r1kh_resp_frame
-keycount       src/ap/wpa_auth_i.h     /^      int keycount;$/;"       m       struct:wpa_state_machine
-keyid  src/common/wpa_common.h /^      u8 keyid[2];$/;"        m       struct:wpa_igtk_kde
-keyidx src/common/wpa_common.h /^      int tx, key_rsc_len, keyidx;$/;"        m       struct:wpa_gtk_data
-keylen src/crypto/crypto_internal-cipher.c     /^                      size_t keylen;$/;"      m       struct:crypto_cipher::__anon10::__anon11        file:
-keylen src/fast_crypto/fast_crypto_internal-cipher.c   /^            size_t keylen;$/;"        m       struct:fast_crypto_cipher::__anon56::__anon57   file:
-keys_cleared   src/rsn_supp/wpa.h      /^    int keys_cleared;$/;"     m       struct:install_key
-keys_set       src/ap/ap_config.h      /^      int keys_set;$/;"       m       struct:hostapd_wep_keys
-keywrapkey     src/wps/wps_i.h /^      u8 keywrapkey[WPS_KEYWRAPKEY_LEN];$/;"  m       struct:wps_data
-l2_ethhdr      src/rsn_supp/wpa.h      /^struct l2_ethhdr {$/;"        s
-lastRespData   src/eap_peer/eap_i.h    /^      struct wpabuf *lastRespData;$/;"        m       struct:eap_sm   typeref:struct:eap_sm::wpabuf
-last_bss       src/ap/ap_config.h      /^      struct hostapd_bss_config *bss, *last_bss;$/;"  m       struct:hostapd_config   typeref:struct:hostapd_config::
-last_msg       src/wps/wps_i.h /^      struct wpabuf *last_msg;$/;"    m       struct:wps_data typeref:struct:wps_data::wpabuf
-last_rx_eapol_key      src/ap/wpa_auth_i.h     /^      u8 *last_rx_eapol_key; \/* starting from IEEE 802.1X header *\/$/;"     m       struct:wpa_state_machine
-last_rx_eapol_key_len  src/ap/wpa_auth_i.h     /^      size_t last_rx_eapol_key_len;$/;"       m       struct:wpa_state_machine
-le16   include/utils/common.h  /^typedef u16 __bitwise le16;$/;"       t
-le16dec        port/include/endian.h   /^le16dec(const void *pp)$/;"   f
-le16enc        port/include/endian.h   /^le16enc(void *pp, uint16_t u)$/;"     f
-le16toh        port/include/endian.h   112;"   d
-le16toh        port/include/endian.h   97;"    d
-le32   include/utils/common.h  /^typedef u32 __bitwise le32;$/;"       t
-le32dec        port/include/endian.h   /^le32dec(const void *pp)$/;"   f
-le32enc        port/include/endian.h   /^le32enc(void *pp, uint32_t u)$/;"     f
-le32toh        port/include/endian.h   113;"   d
-le32toh        port/include/endian.h   98;"    d
-le64   include/utils/common.h  /^typedef u64 __bitwise le64;$/;"       t
-le64dec        port/include/endian.h   /^le64dec(const void *pp)$/;"   f
-le64enc        port/include/endian.h   /^le64enc(void *pp, uint64_t u)$/;"     f
-le64toh        port/include/endian.h   114;"   d
-le64toh        port/include/endian.h   99;"    d
-le_to_host16   include/utils/common.h  104;"   d
-le_to_host16   include/utils/common.h  63;"    d
-le_to_host16   include/utils/common.h  91;"    d
-le_to_host32   include/utils/common.h  108;"   d
-le_to_host32   include/utils/common.h  67;"    d
-le_to_host32   include/utils/common.h  95;"    d
-le_to_host64   include/utils/common.h  111;"   d
-le_to_host64   include/utils/common.h  99;"    d
-len    src/ap/ap_config.h      /^      size_t len[NUM_WEP_KEYS];$/;"   m       struct:hostapd_wep_keys
-len    src/common/wpa_common.h /^      u8 len;$/;"     m       struct:rsn_ie_hdr
-len    src/common/wpa_common.h /^      u8 len;$/;"     m       struct:wpa_ie_hdr
-len    src/eap_peer/eap_config.h       /^      size_t len;$/;" m       struct:wpa_config_blob
-len    src/esp_supplicant/esp_wifi_driver.h    /^    int len;$/;"      m       struct:wifi_ssid
-len    src/esp_supplicant/esp_wpa_enterprise.c /^    int len;$/;"      m       struct:wpa2_rx_param    file:
-len    src/esp_supplicant/esp_wps.c    /^    int len;$/;"      m       struct:wps_rx_param     file:
-len    src/tls/asn1.h  /^      size_t len;$/;" m       struct:asn1_oid
-length src/common/eapol_common.h       /^      be16 length;$/;"        m       struct:ieee802_1x_hdr
-length src/common/ieee802_11_defs.h    /^                                      u8 length;$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-length src/common/ieee802_11_defs.h    /^      u8 length; \/* 6 + 55 = 61 *\/$/;"      m       struct:wmm_tspec_element
-length src/crypto/sha256-internal.c    /^      u64 length;$/;" m       struct:sha256_state     file:
-length src/eap_peer/eap_defs.h /^      be16 length; \/* including code and identifier; network byte order *\/$/;"      m       struct:eap_hdr
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_crypto_binding_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_hdr
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_intermediate_result_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_nak_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_pac_ack_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_pac_type_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_request_action_tlv
-length src/eap_peer/eap_tlv_common.h   /^      be16 length;$/;"        m       struct:eap_tlv_result_tlv
-length src/tls/asn1.h  /^      unsigned int tag, length;$/;"   m       struct:asn1_hdr
-lifetime       src/ap/wpa_auth_ie.h    /^      const u8 *lifetime;$/;" m       struct:wpa_eapol_ie_parse
-lifetime       src/rsn_supp/wpa_ie.h   /^      const u8 *lifetime;$/;" m       struct:wpa_eapol_ie_parse
-lifetime_len   src/ap/wpa_auth_ie.h    /^      size_t lifetime_len;$/;"        m       struct:wpa_eapol_ie_parse
-lifetime_len   src/rsn_supp/wpa_ie.h   /^      size_t lifetime_len;$/;"        m       struct:wpa_eapol_ie_parse
-list   src/wps/wps_registrar.c /^      struct dl_list list;$/;"        m       struct:wps_nfc_pw_token typeref:struct:wps_nfc_pw_token::dl_list        file:
-list   src/wps/wps_registrar.c /^      struct dl_list list;$/;"        m       struct:wps_uuid_pin     typeref:struct:wps_uuid_pin::dl_list    file:
-listen_interval        src/ap/sta_info.h       /^      u16 listen_interval; \/* or beacon_int for APs *\/$/;"  m       struct:sta_info
-listen_interval        src/common/ieee802_11_defs.h    /^                      le16 listen_interval;$/;"       m       struct:ieee80211_mgmt::__anon66::__anon69
-listen_interval        src/common/ieee802_11_defs.h    /^                      le16 listen_interval;$/;"       m       struct:ieee80211_mgmt::__anon66::__anon71
-logger src/ap/wpa_auth.h       /^      void (*logger)(void *ctx, const u8 *addr, logger_level level,$/;"       m       struct:wpa_auth_callbacks
-logger_level   src/ap/wpa_auth.h       /^} logger_level;$/;"   t       typeref:enum:__anon20
-m      src/eap_peer/eap_i.h    /^      const struct eap_method *m;$/;" m       struct:eap_sm   typeref:struct:eap_sm::eap_method
-m1_received    src/wps/wps.h   /^              int m1_received;$/;"    m       struct:wps_event_data::wps_event_er_enrollee
-m2d    src/wps/wps.h   /^      } m2d;$/;"      m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_m2d
-mac_acl_entry  src/ap/ap_config.h      /^struct mac_acl_entry {$/;"    s
-mac_addr       src/ap/wpa_auth_ie.h    /^      const u8 *mac_addr;$/;" m       struct:wpa_eapol_ie_parse
-mac_addr       src/rsn_supp/wpa_ie.h   /^      const u8 *mac_addr;$/;" m       struct:wpa_eapol_ie_parse
-mac_addr       src/wps/wps.h   /^              const u8 *mac_addr;$/;" m       struct:wps_event_data::wps_event_er_ap
-mac_addr       src/wps/wps.h   /^              const u8 *mac_addr;$/;" m       struct:wps_event_data::wps_event_er_enrollee
-mac_addr       src/wps/wps.h   /^      u8 mac_addr[ETH_ALEN];$/;"      m       struct:wps_credential
-mac_addr       src/wps/wps.h   /^      u8 mac_addr[ETH_ALEN];$/;"      m       struct:wps_device_data
-mac_addr       src/wps/wps_attr_parse.h        /^      const u8 *mac_addr; \/* ETH_ALEN (6) octets *\/$/;"     m       struct:wps_parse_attr
-mac_addr_e     src/wps/wps_i.h /^      u8 mac_addr_e[ETH_ALEN];$/;"    m       struct:wps_data
-mac_addr_len   src/ap/wpa_auth_ie.h    /^      size_t mac_addr_len;$/;"        m       struct:wpa_eapol_ie_parse
-mac_addr_len   src/rsn_supp/wpa_ie.h   /^      size_t mac_addr_len;$/;"        m       struct:wpa_eapol_ie_parse
-macaddr        src/ap/ap_config.h      /^typedef u8 macaddr[ETH_ALEN];$/;"     t
-macaddr_acl    src/ap/ap_config.h      /^      } macaddr_acl;$/;"      m       struct:hostapd_bss_config       typeref:enum:hostapd_bss_config::__anon17
-magic  src/utils/wpabuf.c      /^      unsigned int magic;$/;" m       struct:wpabuf_trace     file:
-manufacturer   include/esp_supplicant/esp_wps.h        /^    char manufacturer[WPS_MAX_MANUFACTURER_LEN]; \/*!< Manufacturer, null-terminated string. The default manufcturer is used if the string is empty *\/$/;"   m       struct:__anon89
-manufacturer   src/ap/ap_config.h      /^      char *manufacturer;$/;" m       struct:hostapd_bss_config
-manufacturer   src/wps/wps.h   /^              const char *manufacturer;$/;"   m       struct:wps_event_data::wps_event_er_ap
-manufacturer   src/wps/wps.h   /^              const char *manufacturer;$/;"   m       struct:wps_event_data::wps_event_er_enrollee
-manufacturer   src/wps/wps.h   /^              const u8 *manufacturer;$/;"     m       struct:wps_event_data::wps_event_m2d
-manufacturer   src/wps/wps.h   /^      char *manufacturer;$/;" m       struct:wps_device_data
-manufacturer   src/wps/wps_attr_parse.h        /^      const u8 *manufacturer;$/;"     m       struct:wps_parse_attr
-manufacturer_len       src/wps/wps.h   /^              size_t manufacturer_len;$/;"    m       struct:wps_event_data::wps_event_m2d
-manufacturer_len       src/wps/wps_attr_parse.h        /^      size_t manufacturer_len;$/;"    m       struct:wps_parse_attr
-manufacturer_url       src/ap/ap_config.h      /^      char *manufacturer_url;$/;"     m       struct:hostapd_bss_config
-manufacturer_url       src/wps/wps.h   /^              const char *manufacturer_url;$/;"       m       struct:wps_event_data::wps_event_er_ap
-manufacturer_url       src/wps/wps.h   /^      char *manufacturer_url;$/;"     m       struct:wps_context
-master_key     src/eap_peer/eap_mschapv2.c     /^      u8 master_key[MSCHAPV2_MASTER_KEY_LEN];$/;"     m       struct:eap_mschapv2_data        file:
-master_key     src/eap_peer/eap_ttls.c /^      u8 master_key[MSCHAPV2_MASTER_KEY_LEN]; \/* MSCHAPv2 master key *\/$/;" m       struct:eap_ttls_data    file:
-master_key     src/tls/tls.h   /^      const u8 *master_key; \/* TLS master secret *\/$/;"     m       struct:tls_keys
-master_key_len src/tls/tls.h   /^      size_t master_key_len;$/;"      m       struct:tls_keys
-master_key_valid       src/eap_peer/eap_mschapv2.c     /^      int master_key_valid;$/;"       m       struct:eap_mschapv2_data        file:
-master_secret  src/tls/tlsv1_client_i.h        /^      u8 master_secret[TLS_MASTER_SECRET_LEN];$/;"    m       struct:tlsv1_client
-master_secret  src/tls/tlsv1_server_i.h        /^      u8 master_secret[TLS_MASTER_SECRET_LEN];$/;"    m       struct:tlsv1_server
-max_listen_interval    src/ap/ap_config.h      /^      u16 max_listen_interval;$/;"    m       struct:hostapd_bss_config
-max_num_sta    src/ap/ap_config.h      /^      int max_num_sta; \/* maximum number of STAs in station table *\/$/;"    m       struct:hostapd_bss_config
-maximum_burst_size     src/common/ieee802_11_defs.h    /^      le32 maximum_burst_size;$/;"    m       struct:wmm_tspec_element
-maximum_msdu_size      src/common/ieee802_11_defs.h    /^      le16 maximum_msdu_size;$/;"     m       struct:wmm_tspec_element
-maximum_service_interval       src/common/ieee802_11_defs.h    /^      le32 maximum_service_interval;$/;"      m       struct:wmm_tspec_element
-md4_vector     src/crypto/md4-internal.c       /^int md4_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)$/;"     f
-md5    src/crypto/crypto_internal.c    /^              struct MD5Context md5;$/;"      m       union:crypto_hash::__anon9      typeref:struct:crypto_hash::__anon9::MD5Context file:
-md5    src/fast_crypto/fast_crypto_internal.c  /^              struct MD5Context md5;$/;"      m       union:fast_crypto_hash::__anon61        typeref:struct:fast_crypto_hash::__anon61::MD5Context   file:
-md5_cert       src/tls/tlsv1_common.h  /^      struct crypto_hash *md5_cert;$/;"       m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-md5_client     src/tls/tlsv1_common.h  /^      struct crypto_hash *md5_client;$/;"     m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-md5_server     src/tls/tlsv1_common.h  /^      struct crypto_hash *md5_server;$/;"     m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-md5_vector     src/crypto/md5-internal.c       /^md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)$/;" f
-md5_vector_non_fips_allow      include/crypto/crypto.h 64;"    d
-mdie   src/ap/wpa_auth_ie.h    /^      const u8 *mdie;$/;"     m       struct:wpa_eapol_ie_parse
-mdie   src/rsn_supp/wpa_ie.h   /^      const u8 *mdie;$/;"     m       struct:wpa_eapol_ie_parse
-mdie_len       src/ap/wpa_auth_ie.h    /^      size_t mdie_len;$/;"    m       struct:wpa_eapol_ie_parse
-mdie_len       src/rsn_supp/wpa_ie.h   /^      size_t mdie_len;$/;"    m       struct:wpa_eapol_ie_parse
-mean_data_rate src/common/ieee802_11_defs.h    /^      le32 mean_data_rate;$/;"        m       struct:wmm_tspec_element
-medium_time    src/common/ieee802_11_defs.h    /^      le16 medium_time;$/;"   m       struct:wmm_tspec_element
-method src/eap_peer/eap.h      /^      EapType method;$/;"     m       struct:eap_method_type
-method src/eap_peer/eap_i.h    /^      EapType method; $/;"    m       struct:eap_method
-methodState    src/eap_peer/eap_i.h    /^      EapMethodState methodState;$/;" m       struct:eap_method_ret
-mgmt_frame_prot        src/ap/wpa_auth_i.h     /^      unsigned int mgmt_frame_prot:1;$/;"     m       struct:wpa_state_machine
-mgmt_group_cipher      src/common/wpa_common.h /^      int mgmt_group_cipher;$/;"      m       struct:wpa_ie_data
-mgmt_group_cipher      src/rsn_supp/wpa.h      /^    unsigned int mgmt_group_cipher;$/;"       m       struct:wpa_sm
-mic    src/common/wpa_common.h /^      u8 mic[16];$/;" m       struct:rsn_ftie
-mic_control    src/common/wpa_common.h /^      u8 mic_control[2];$/;"  m       struct:rsn_ftie
-mic_errors_seen        src/rsn_supp/wpa.h      /^    int mic_errors_seen; \/* Michael MIC errors with the current PTK *\/$/;"  m       struct:install_key
-mic_failure_report     src/ap/wpa_auth.h       /^      int (*mic_failure_report)(void *ctx, const u8 *addr);$/;"       m       struct:wpa_auth_callbacks
-minimum_data_rate      src/common/ieee802_11_defs.h    /^      le32 minimum_data_rate;$/;"     m       struct:wmm_tspec_element
-minimum_phy_rate       src/common/ieee802_11_defs.h    /^      le32 minimum_phy_rate;$/;"      m       struct:wmm_tspec_element
-minimum_service_interval       src/common/ieee802_11_defs.h    /^      le32 minimum_service_interval;$/;"      m       struct:wmm_tspec_element
-mobility_domain        src/ap/ap_config.h      /^      u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];$/;" m       struct:hostapd_bss_config
-mobility_domain        src/ap/wpa_auth.h       /^      u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];$/;" m       struct:wpa_auth_config
-mobility_domain        src/common/wpa_common.h /^      u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];$/;" m       struct:rsn_mdie
-model_description      src/ap/ap_config.h      /^      char *model_description;$/;"    m       struct:hostapd_bss_config
-model_description      src/wps/wps.h   /^              const char *model_description;$/;"      m       struct:wps_event_data::wps_event_er_ap
-model_description      src/wps/wps.h   /^      char *model_description;$/;"    m       struct:wps_context
-model_name     include/esp_supplicant/esp_wps.h        /^    char model_name[WPS_MAX_MODEL_NAME_LEN];     \/*!< Model name, null-terminated string. The default model name is used if the string is empty *\/$/;"      m       struct:__anon89
-model_name     src/ap/ap_config.h      /^      char *model_name;$/;"   m       struct:hostapd_bss_config
-model_name     src/wps/wps.h   /^              const char *model_name;$/;"     m       struct:wps_event_data::wps_event_er_ap
-model_name     src/wps/wps.h   /^              const char *model_name;$/;"     m       struct:wps_event_data::wps_event_er_enrollee
-model_name     src/wps/wps.h   /^              const u8 *model_name;$/;"       m       struct:wps_event_data::wps_event_m2d
-model_name     src/wps/wps.h   /^      char *model_name;$/;"   m       struct:wps_device_data
-model_name     src/wps/wps_attr_parse.h        /^      const u8 *model_name;$/;"       m       struct:wps_parse_attr
-model_name_len src/wps/wps.h   /^              size_t model_name_len;$/;"      m       struct:wps_event_data::wps_event_m2d
-model_name_len src/wps/wps_attr_parse.h        /^      size_t model_name_len;$/;"      m       struct:wps_parse_attr
-model_number   include/esp_supplicant/esp_wps.h        /^    char model_number[WPS_MAX_MODEL_NUMBER_LEN]; \/*!< Model number, null-terminated string. The default model number is used if the string is empty *\/$/;"  m       struct:__anon89
-model_number   src/ap/ap_config.h      /^      char *model_number;$/;" m       struct:hostapd_bss_config
-model_number   src/wps/wps.h   /^              const char *model_number;$/;"   m       struct:wps_event_data::wps_event_er_ap
-model_number   src/wps/wps.h   /^              const char *model_number;$/;"   m       struct:wps_event_data::wps_event_er_enrollee
-model_number   src/wps/wps.h   /^              const u8 *model_number;$/;"     m       struct:wps_event_data::wps_event_m2d
-model_number   src/wps/wps.h   /^      char *model_number;$/;" m       struct:wps_device_data
-model_number   src/wps/wps_attr_parse.h        /^      const u8 *model_number;$/;"     m       struct:wps_parse_attr
-model_number_len       src/wps/wps.h   /^              size_t model_number_len;$/;"    m       struct:wps_event_data::wps_event_m2d
-model_number_len       src/wps/wps_attr_parse.h        /^      size_t model_number_len;$/;"    m       struct:wps_parse_attr
-model_url      src/ap/ap_config.h      /^      char *model_url;$/;"    m       struct:hostapd_bss_config
-model_url      src/wps/wps.h   /^              const char *model_url;$/;"      m       struct:wps_event_data::wps_event_er_ap
-model_url      src/wps/wps.h   /^      char *model_url;$/;"    m       struct:wps_context
-mp_2expt       src/crypto/libtommath.h /^mp_2expt (mp_int * a, int b)$/;"      f
-mp_2expt       src/tls/libtommath.h    /^mp_2expt (mp_int * a, int b)$/;"      f
-mp_abs src/crypto/libtommath.h /^mp_abs (mp_int * a, mp_int * b)$/;"   f
-mp_abs src/tls/libtommath.h    /^mp_abs (mp_int * a, mp_int * b)$/;"   f
-mp_add src/crypto/libtommath.h /^mp_add (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_add src/tls/libtommath.h    /^mp_add (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_clamp       src/crypto/libtommath.h /^mp_clamp (mp_int * a)$/;"     f
-mp_clamp       src/tls/libtommath.h    /^mp_clamp (mp_int * a)$/;"     f
-mp_clear       src/crypto/libtommath.h /^mp_clear (mp_int * a)$/;"     f
-mp_clear       src/tls/libtommath.h    /^mp_clear (mp_int * a)$/;"     f
-mp_clear_multi src/crypto/libtommath.h /^mp_clear_multi(mp_int *mp, ...) $/;"  f
-mp_clear_multi src/tls/libtommath.h    /^mp_clear_multi(mp_int *mp, ...) $/;"  f
-mp_cmp src/crypto/libtommath.h /^mp_cmp (mp_int * a, mp_int * b)$/;"   f
-mp_cmp src/tls/libtommath.h    /^mp_cmp (mp_int * a, mp_int * b)$/;"   f
-mp_cmp_d       src/crypto/libtommath.h /^mp_cmp_d(mp_int * a, mp_digit b)$/;"  f
-mp_cmp_d       src/tls/libtommath.h    /^mp_cmp_d(mp_int * a, mp_digit b)$/;"  f
-mp_cmp_mag     src/crypto/libtommath.h /^mp_cmp_mag (mp_int * a, mp_int * b)$/;"       f
-mp_cmp_mag     src/tls/libtommath.h    /^mp_cmp_mag (mp_int * a, mp_int * b)$/;"       f
-mp_copy        src/crypto/libtommath.h /^mp_copy (mp_int * a, mp_int * b)$/;"  f
-mp_copy        src/tls/libtommath.h    /^mp_copy (mp_int * a, mp_int * b)$/;"  f
-mp_count_bits  src/crypto/libtommath.h /^mp_count_bits (mp_int * a)$/;"        f
-mp_count_bits  src/tls/libtommath.h    /^mp_count_bits (mp_int * a)$/;"        f
-mp_digit       src/crypto/libtommath.h /^typedef unsigned long mp_digit;$/;"   t
-mp_digit       src/tls/libtommath.h    /^typedef unsigned long mp_digit;$/;"   t
-mp_div src/crypto/libtommath.h /^mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"   f
-mp_div src/crypto/libtommath.h /^mp_div(mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"    f
-mp_div src/tls/libtommath.h    /^mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"   f
-mp_div src/tls/libtommath.h    /^mp_div(mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"    f
-mp_div_2       src/crypto/libtommath.h /^mp_div_2(mp_int * a, mp_int * b)$/;"  f
-mp_div_2       src/tls/libtommath.h    /^mp_div_2(mp_int * a, mp_int * b)$/;"  f
-mp_div_2d      src/crypto/libtommath.h /^mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d)$/;"     f
-mp_div_2d      src/tls/libtommath.h    /^mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d)$/;"     f
-mp_err src/crypto/libtommath.h /^typedef int           mp_err;$/;"     t
-mp_err src/tls/libtommath.h    /^typedef int           mp_err;$/;"     t
-mp_exch        src/crypto/libtommath.h /^mp_exch (mp_int * a, mp_int * b)$/;"  f
-mp_exch        src/tls/libtommath.h    /^mp_exch (mp_int * a, mp_int * b)$/;"  f
-mp_exptmod     src/crypto/libtommath.h /^mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y)$/;"       f
-mp_exptmod     src/tls/libtommath.h    /^mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y)$/;"       f
-mp_exptmod_fast        src/crypto/libtommath.h /^mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)$/;"     f
-mp_exptmod_fast        src/tls/libtommath.h    /^mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)$/;"     f
-mp_grow        src/crypto/libtommath.h /^mp_grow (mp_int * a, int size)$/;"    f
-mp_grow        src/tls/libtommath.h    /^mp_grow (mp_int * a, int size)$/;"    f
-mp_init        src/crypto/libtommath.h /^mp_init (mp_int * a)$/;"      f
-mp_init        src/tls/libtommath.h    /^mp_init (mp_int * a)$/;"      f
-mp_init_copy   src/crypto/libtommath.h /^mp_init_copy (mp_int * a, mp_int * b)$/;"     f
-mp_init_copy   src/tls/libtommath.h    /^mp_init_copy (mp_int * a, mp_int * b)$/;"     f
-mp_init_multi  src/crypto/libtommath.h /^mp_init_multi(mp_int *mp, ...) $/;"   f
-mp_init_multi  src/tls/libtommath.h    /^mp_init_multi(mp_int *mp, ...) $/;"   f
-mp_init_size   src/crypto/libtommath.h /^mp_init_size (mp_int * a, int size)$/;"       f
-mp_init_size   src/tls/libtommath.h    /^mp_init_size (mp_int * a, int size)$/;"       f
-mp_int src/crypto/libtommath.h /^} mp_int;$/;" t       typeref:struct:__anon8
-mp_int src/tls/libtommath.h    /^} mp_int;$/;" t       typeref:struct:__anon40
-mp_invmod      src/crypto/libtommath.h /^mp_invmod (mp_int * a, mp_int * b, mp_int * c)$/;"    f
-mp_invmod      src/tls/libtommath.h    /^mp_invmod (mp_int * a, mp_int * b, mp_int * c)$/;"    f
-mp_invmod_slow src/crypto/libtommath.h /^mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_invmod_slow src/tls/libtommath.h    /^mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_iseven      src/crypto/libtommath.h 127;"   d
-mp_iseven      src/tls/libtommath.h    129;"   d
-mp_isodd       src/crypto/libtommath.h 128;"   d
-mp_isodd       src/tls/libtommath.h    130;"   d
-mp_iszero      src/crypto/libtommath.h 126;"   d
-mp_iszero      src/tls/libtommath.h    128;"   d
-mp_lshd        src/crypto/libtommath.h /^mp_lshd (mp_int * a, int b)$/;"       f
-mp_lshd        src/tls/libtommath.h    /^mp_lshd (mp_int * a, int b)$/;"       f
-mp_mod src/crypto/libtommath.h /^mp_mod (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_mod src/tls/libtommath.h    /^mp_mod (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_mod_2d      src/crypto/libtommath.h /^mp_mod_2d (mp_int * a, int b, mp_int * c)$/;" f
-mp_mod_2d      src/tls/libtommath.h    /^mp_mod_2d (mp_int * a, int b, mp_int * c)$/;" f
-mp_montgomery_calc_normalization       src/crypto/libtommath.h /^mp_montgomery_calc_normalization (mp_int * a, mp_int * b)$/;" f
-mp_montgomery_calc_normalization       src/tls/libtommath.h    /^mp_montgomery_calc_normalization (mp_int * a, mp_int * b)$/;" f
-mp_montgomery_setup    src/crypto/libtommath.h /^mp_montgomery_setup (mp_int * n, mp_digit * rho)$/;"  f
-mp_montgomery_setup    src/tls/libtommath.h    /^mp_montgomery_setup (mp_int * n, mp_digit * rho)$/;"  f
-mp_mul src/crypto/libtommath.h /^mp_mul (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_mul src/tls/libtommath.h    /^mp_mul (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_mul_2       src/crypto/libtommath.h /^mp_mul_2(mp_int * a, mp_int * b)$/;"  f
-mp_mul_2       src/tls/libtommath.h    /^mp_mul_2(mp_int * a, mp_int * b)$/;"  f
-mp_mul_2d      src/crypto/libtommath.h /^mp_mul_2d (mp_int * a, int b, mp_int * c)$/;" f
-mp_mul_2d      src/tls/libtommath.h    /^mp_mul_2d (mp_int * a, int b, mp_int * c)$/;" f
-mp_mul_d       src/crypto/libtommath.h /^mp_mul_d (mp_int * a, mp_digit b, mp_int * c)$/;"     f
-mp_mul_d       src/tls/libtommath.h    /^mp_mul_d (mp_int * a, mp_digit b, mp_int * c)$/;"     f
-mp_mulmod      src/crypto/libtommath.h /^mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"        f
-mp_mulmod      src/tls/libtommath.h    /^mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)$/;"        f
-mp_read_unsigned_bin   src/crypto/libtommath.h /^mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c)$/;"  f
-mp_read_unsigned_bin   src/tls/libtommath.h    /^mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c)$/;"  f
-mp_reduce      src/crypto/libtommath.h /^mp_reduce (mp_int * x, mp_int * m, mp_int * mu)$/;"   f
-mp_reduce      src/tls/libtommath.h    /^mp_reduce (mp_int * x, mp_int * m, mp_int * mu)$/;"   f
-mp_reduce_2k_l src/crypto/libtommath.h /^mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d)$/;"   f
-mp_reduce_2k_l src/tls/libtommath.h    /^mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d)$/;"   f
-mp_reduce_2k_setup_l   src/crypto/libtommath.h /^mp_reduce_2k_setup_l(mp_int *a, mp_int *d)$/;"        f
-mp_reduce_2k_setup_l   src/tls/libtommath.h    /^mp_reduce_2k_setup_l(mp_int *a, mp_int *d)$/;"        f
-mp_reduce_setup        src/crypto/libtommath.h /^mp_reduce_setup (mp_int * a, mp_int * b)$/;"  f
-mp_reduce_setup        src/tls/libtommath.h    /^mp_reduce_setup (mp_int * a, mp_int * b)$/;"  f
-mp_rshd        src/crypto/libtommath.h /^mp_rshd (mp_int * a, int b)$/;"       f
-mp_rshd        src/tls/libtommath.h    /^mp_rshd (mp_int * a, int b)$/;"       f
-mp_set src/crypto/libtommath.h /^mp_set (mp_int * a, mp_digit b)$/;"   f
-mp_set src/tls/libtommath.h    /^mp_set (mp_int * a, mp_digit b)$/;"   f
-mp_sqr src/crypto/libtommath.h /^mp_sqr (mp_int * a, mp_int * b)$/;"   f
-mp_sqr src/tls/libtommath.h    /^mp_sqr (mp_int * a, mp_int * b)$/;"   f
-mp_sub src/crypto/libtommath.h /^mp_sub (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_sub src/tls/libtommath.h    /^mp_sub (mp_int * a, mp_int * b, mp_int * c)$/;"       f
-mp_to_unsigned_bin     src/crypto/libtommath.h /^mp_to_unsigned_bin (mp_int * a, unsigned char *b)$/;" f
-mp_to_unsigned_bin     src/tls/libtommath.h    /^mp_to_unsigned_bin (mp_int * a, unsigned char *b)$/;" f
-mp_unsigned_bin_size   src/crypto/libtommath.h /^mp_unsigned_bin_size (mp_int * a)$/;" f
-mp_unsigned_bin_size   src/tls/libtommath.h    /^mp_unsigned_bin_size (mp_int * a)$/;" f
-mp_word        src/crypto/libtommath.h /^typedef u64 mp_word;$/;"      t
-mp_word        src/tls/libtommath.h    /^typedef u64 mp_word;$/;"      t
-mp_zero        src/crypto/libtommath.h /^mp_zero (mp_int * a)$/;"      f
-mp_zero        src/tls/libtommath.h    /^mp_zero (mp_int * a)$/;"      f
-ms_change_password     src/eap_peer/eap_mschapv2.c     /^struct ms_change_password {$/;"       s       file:
-ms_length      src/eap_peer/eap_mschapv2.c     /^      u8 ms_length[2];$/;"    m       struct:eap_mschapv2_hdr file:
-ms_response    src/eap_peer/eap_mschapv2.c     /^struct ms_response {$/;"      s       file:
-mschapv2       src/eap_peer/eap_ttls.c /^      u8 *mschapv2;$/;"       m       struct:ttls_parse_avp   file:
-mschapv2_derive_response       src/eap_peer/mschapv2.c /^int mschapv2_derive_response(const u8 *identity, size_t identity_len,$/;"     f
-mschapv2_error src/eap_peer/eap_ttls.c /^      int mschapv2_error;$/;" m       struct:ttls_parse_avp   file:
-mschapv2_id    src/eap_peer/eap_mschapv2.c     /^      u8 mschapv2_id;$/;"     m       struct:eap_mschapv2_hdr file:
-mschapv2_remove_domain src/eap_peer/mschapv2.c /^const u8 * mschapv2_remove_domain(const u8 *username, size_t *len)$/;"        f
-mschapv2_retry src/eap_peer/eap_config.h       /^      int mschapv2_retry;$/;" m       struct:eap_peer_config
-mschapv2_verify_auth_response  src/eap_peer/mschapv2.c /^int mschapv2_verify_auth_response(const u8 *auth_response,$/;"        f
-msg    src/wps/wps.h   /^              int msg;$/;"    m       struct:wps_event_data::wps_event_fail
-msg    src/wps/wps.h   /^      struct wpabuf *msg;$/;" m       struct:upnp_pending_message     typeref:struct:upnp_pending_message::wpabuf
-msg_type       src/wps/wps_attr_parse.h        /^      const u8 *msg_type; \/* 1 octet *\/$/;" m       struct:wps_parse_attr
-mui    src/common/wpa_common.h /^      be16 mui;$/;"   m       struct:rsn_error_kde
-n      src/tls/rsa.c   /^      struct bignum *n; \/* modulus (p * q) *\/$/;"   m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-nak_type       src/eap_peer/eap_tlv_common.h   /^      be16 nak_type;$/;"      m       struct:eap_tlv_nak_tlv
-name   src/eap_peer/eap_config.h       /^      char *name;$/;" m       struct:wpa_config_blob
-name   src/eap_peer/eap_i.h    /^      const char *name;$/;"   m       struct:eap_method
-name   src/utils/ext_password_i.h      /^      const char *name;$/;"   m       struct:ext_password_backend
-network_idx    src/wps/wps_attr_parse.h        /^      const u8 *network_idx; \/* 1 octet *\/$/;"      m       struct:wps_parse_attr
-network_key    src/wps/wps.h   /^      u8 *network_key;$/;"    m       struct:wps_context
-network_key    src/wps/wps_attr_parse.h        /^      const u8 *network_key; \/* <= 64 octets *\/$/;" m       struct:wps_parse_attr
-network_key_idx        src/wps/wps_attr_parse.h        /^      const u8 *network_key_idx; \/* 1 octet *\/$/;"  m       struct:wps_parse_attr
-network_key_len        src/wps/wps.h   /^      size_t network_key_len;$/;"     m       struct:wps_context
-network_key_len        src/wps/wps_attr_parse.h        /^      size_t network_key_len;$/;"     m       struct:wps_parse_attr
-network_key_shareable  src/wps/wps_attr_parse.h        /^      const u8 *network_key_shareable; \/* 1 octet (Bool) *\/$/;"     m       struct:wps_parse_attr
-new_ap_settings        src/wps/wps.h   /^      const struct wps_credential *new_ap_settings;$/;"       m       struct:wps_config       typeref:struct:wps_config::wps_credential
-new_ap_settings        src/wps/wps_i.h /^      struct wps_credential *new_ap_settings;$/;"     m       struct:wps_data typeref:struct:wps_data::wps_credential
-new_chan       src/common/ieee802_11_defs.h    /^                                      u8 new_chan;$/;"        m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-new_password   src/eap_peer/eap_config.h       /^      u8 *new_password;$/;"   m       struct:eap_peer_config
-new_password_encrypted_with_old_nt_password_hash       src/crypto/ms_funcs.c   /^int new_password_encrypted_with_old_nt_password_hash($/;"     f
-new_password_len       src/eap_peer/eap_config.h       /^      size_t new_password_len;$/;"    m       struct:eap_peer_config
-new_psk        src/wps/wps_i.h /^      u8 *new_psk;$/;"        m       struct:wps_data
-new_psk_cb     src/wps/wps.h   /^      int (*new_psk_cb)(void *ctx, const u8 *mac_addr, const u8 *psk,$/;"     m       struct:wps_registrar_config
-new_psk_cb     src/wps/wps_registrar.c /^      int (*new_psk_cb)(void *ctx, const u8 *mac_addr, const u8 *psk,$/;"     m       struct:wps_registrar    file:
-new_psk_len    src/wps/wps_i.h /^      size_t new_psk_len;$/;" m       struct:wps_data
-next   src/ap/ap_config.h      /^      struct hostapd_sta_wpa_psk_short *next;$/;"     m       struct:hostapd_sta_wpa_psk_short        typeref:struct:hostapd_sta_wpa_psk_short::hostapd_sta_wpa_psk_short
-next   src/ap/ap_config.h      /^      struct hostapd_wpa_psk *next;$/;"       m       struct:hostapd_wpa_psk  typeref:struct:hostapd_wpa_psk::hostapd_wpa_psk
-next   src/ap/sta_info.h       /^      struct sta_info *next; \/* next entry in sta list *\/$/;"       m       struct:sta_info typeref:struct:sta_info::sta_info
-next   src/ap/wpa_auth.h       /^      struct ft_remote_r0kh *next;$/;"        m       struct:ft_remote_r0kh   typeref:struct:ft_remote_r0kh::ft_remote_r0kh
-next   src/ap/wpa_auth.h       /^      struct ft_remote_r1kh *next;$/;"        m       struct:ft_remote_r1kh   typeref:struct:ft_remote_r1kh::ft_remote_r1kh
-next   src/ap/wpa_auth_i.h     /^      struct wpa_group *next;$/;"     m       struct:wpa_group        typeref:struct:wpa_group::wpa_group
-next   src/ap/wpa_auth_i.h     /^      struct wpa_stsl_negotiation *next;$/;"  m       struct:wpa_stsl_negotiation     typeref:struct:wpa_stsl_negotiation::wpa_stsl_negotiation
-next   src/eap_peer/eap_config.h       /^      struct wpa_config_blob *next;$/;"       m       struct:wpa_config_blob  typeref:struct:wpa_config_blob::wpa_config_blob
-next   src/eap_peer/eap_i.h    /^      struct eap_method *next;$/;"    m       struct:eap_method       typeref:struct:eap_method::eap_method
-next   src/tls/x509v3.h        /^      struct x509_certificate *next;$/;"      m       struct:x509_certificate typeref:struct:x509_certificate::x509_certificate
-next   src/utils/list.h        /^      struct dl_list *next;$/;"       m       struct:dl_list  typeref:struct:dl_list::dl_list
-next   src/wps/wps.h   /^      struct upnp_pending_message *next;$/;"  m       struct:upnp_pending_message     typeref:struct:upnp_pending_message::upnp_pending_message
-next   src/wps/wps_registrar.c /^      struct wps_pbc_session *next;$/;"       m       struct:wps_pbc_session  typeref:struct:wps_pbc_session::wps_pbc_session file:
-next   src/wps/wps_registrar.c /^      struct wps_registrar_device *next;$/;"  m       struct:wps_registrar_device     typeref:struct:wps_registrar_device::wps_registrar_device       file:
-nfc_pw_token   src/wps/wps_i.h /^      struct wps_nfc_pw_token *nfc_pw_token;$/;"      m       struct:wps_data typeref:struct:wps_data::wps_nfc_pw_token
-nfc_pw_tokens  src/wps/wps_registrar.c /^      struct dl_list nfc_pw_tokens;$/;"       m       struct:wps_registrar    typeref:struct:wps_registrar::dl_list   file:
-noa_duration   src/ap/hostapd.h        /^      int noa_duration;$/;"   m       struct:hostapd_data
-noa_enabled    src/ap/hostapd.h        /^      int noa_enabled;$/;"    m       struct:hostapd_data
-noa_start      src/ap/hostapd.h        /^      int noa_start;$/;"      m       struct:hostapd_data
-nominal_msdu_size      src/common/ieee802_11_defs.h    /^      le16 nominal_msdu_size;$/;"     m       struct:wmm_tspec_element
-nonce  src/ap/wpa_auth.h       /^      u8 nonce[16]; \/* copied from pull *\/$/;"      m       struct:ft_r0kh_r1kh_resp_frame
-nonce  src/ap/wpa_auth.h       /^      u8 nonce[16];$/;"       m       struct:ft_r0kh_r1kh_pull_frame
-nonce  src/ap/wpa_auth_ie.h    /^      const u8 *nonce;$/;"    m       struct:wpa_eapol_ie_parse
-nonce  src/eap_peer/eap_tlv_common.h   /^      u8 nonce[32];$/;"       m       struct:eap_tlv_crypto_binding_tlv
-nonce  src/rsn_supp/wpa_ie.h   /^      const u8 *nonce;$/;"    m       struct:wpa_eapol_ie_parse
-nonce_e        src/wps/wps_i.h /^      u8 nonce_e[WPS_NONCE_LEN];$/;"  m       struct:wps_data
-nonce_len      src/ap/wpa_auth_ie.h    /^      size_t nonce_len;$/;"   m       struct:wpa_eapol_ie_parse
-nonce_len      src/rsn_supp/wpa_ie.h   /^      size_t nonce_len;$/;"   m       struct:wpa_eapol_ie_parse
-nonce_r        src/wps/wps_i.h /^      u8 nonce_r[WPS_NONCE_LEN];$/;"  m       struct:wps_data
-not_after      src/tls/x509v3.h        /^      os_time_t not_after;$/;"        m       struct:x509_certificate
-not_before     src/tls/x509v3.h        /^      os_time_t not_before;$/;"       m       struct:x509_certificate
-nt_challenge_response  src/crypto/ms_funcs.c   /^int nt_challenge_response(const u8 *challenge, const u8 *password,$/;"        f
-nt_password_hash       src/crypto/ms_funcs.c   /^int nt_password_hash(const u8 *password, size_t password_len,$/;"     f
-nt_password_hash_encrypted_with_block  src/crypto/ms_funcs.c   /^void nt_password_hash_encrypted_with_block(const u8 *password_hash,$/;"       f
-nt_response    src/eap_peer/eap_mschapv2.c     /^      u8 nt_response[MSCHAPV2_NT_RESPONSE_LEN];$/;"   m       struct:ms_change_password       file:
-nt_response    src/eap_peer/eap_mschapv2.c     /^      u8 nt_response[MSCHAPV2_NT_RESPONSE_LEN];$/;"   m       struct:ms_response      file:
-num_attr       src/tls/x509v3.h        /^      size_t num_attr;$/;"    m       struct:x509_name
-num_bits_set   src/wps/wps_validate.c  /^static int num_bits_set(u16 val)$/;"  f       file:
-num_bss        src/ap/ap_config.h      /^      size_t num_bss;$/;"     m       struct:hostapd_config
-num_cipher_suites      src/tls/tlsv1_client_i.h        /^      size_t num_cipher_suites;$/;"   m       struct:tlsv1_client
-num_cipher_suites      src/tls/tlsv1_server_i.h        /^      size_t num_cipher_suites;$/;"   m       struct:tlsv1_server
-num_cred       src/wps/wps_attr_parse.h        /^      size_t num_cred;$/;"    m       struct:wps_parse_attr
-num_phase2_eap_types   src/eap_peer/eap_ttls.c /^      size_t num_phase2_eap_types;$/;"        m       struct:eap_ttls_data    file:
-num_phase2_types       src/eap_peer/eap_peap.c /^      size_t num_phase2_types;$/;"    m       struct:eap_peap_data    file:
-num_pmkid      src/common/wpa_common.h /^      size_t num_pmkid;$/;"   m       struct:wpa_ie_data
-num_req_dev_type       src/wps/wps_attr_parse.h        /^      size_t num_req_dev_type;$/;"    m       struct:wps_parse_attr
-num_sec_dev_types      src/wps/wps.h   /^      u8 num_sec_dev_types;$/;"       m       struct:wps_device_data
-num_sta        src/ap/hostapd.h        /^      int num_sta; \/* number of entries in sta_list *\/$/;"  m       struct:hostapd_data
-num_sta_no_p2p src/ap/hostapd.h        /^      int num_sta_no_p2p;$/;" m       struct:hostapd_data
-num_vendor_ext src/wps/wps_attr_parse.h        /^      size_t num_vendor_ext;$/;"      m       struct:wps_parse_attr
-ocsp   src/eap_peer/eap_config.h       /^      int ocsp;$/;"   m       struct:eap_peer_config
-ocsp_stapling_response src/tls/tls.h   /^      const char *ocsp_stapling_response;$/;" m       struct:tls_connection_params
-offsetof       src/utils/list.h        70;"    d
-oid    src/tls/asn1.h  /^      unsigned long oid[ASN1_MAX_OID_LEN];$/;"        m       struct:asn1_oid
-oid    src/tls/x509v3.h        /^      struct asn1_oid oid;$/;"        m       struct:x509_algorithm_identifier        typeref:struct:x509_algorithm_identifier::asn1_oid
-okc    src/ap/wpa_auth.h       /^      int okc;$/;"    m       struct:wpa_auth_config
-old_nt_password_hash_encrypted_with_new_nt_password_hash       src/crypto/ms_funcs.c   /^int old_nt_password_hash_encrypted_with_new_nt_password_hash($/;"     f
-oob_dev_password       src/wps/wps_attr_parse.h        /^      const u8 *oob_dev_password; \/* 38..54 octets *\/$/;"   m       struct:wps_parse_attr
-oob_dev_password_len   src/wps/wps_attr_parse.h        /^      size_t oob_dev_password_len;$/;"        m       struct:wps_parse_attr
-op_code        src/eap_peer/eap_mschapv2.c     /^      u8 op_code;$/;" m       struct:eap_mschapv2_hdr file:
-opcode src/eap_peer/eap_defs.h /^    u8 opcode;$/;"    m       struct:eap_expand
-opensc_engine_path     src/tls/tls.h   /^      const char *opensc_engine_path;$/;"     m       struct:tls_config
-operation_mode src/common/ieee802_11_defs.h    /^      le16 operation_mode;$/;"        m       struct:ieee80211_ht_operation
-os_bzero       port/include/os.h       206;"   d
-os_free        port/include/os.h       202;"   d
-os_get_random  port/os_xtensa.c        /^int os_get_random(unsigned char *buf, size_t len)$/;" f
-os_get_time    port/os_xtensa.c        /^int os_get_time(struct os_time *t)$/;"        f
-os_malloc      port/include/os.h       193;"   d
-os_memcmp      port/include/os.h       229;"   d
-os_memcpy      port/include/os.h       220;"   d
-os_memmove     port/include/os.h       223;"   d
-os_memset      port/include/os.h       226;"   d
-os_random      port/os_xtensa.c        /^unsigned long os_random(void)$/;"     f
-os_realloc     port/include/os.h       196;"   d
-os_snprintf    port/include/os.h       271;"   d
-os_snprintf    port/include/os.h       273;"   d
-os_strcasecmp  port/include/os.h       237;"   d
-os_strcasecmp  port/include/os.h       239;"   d
-os_strchr      port/include/os.h       250;"   d
-os_strcmp      port/include/os.h       253;"   d
-os_strdup      port/include/os.h       212;"   d
-os_strdup      port/include/os.h       214;"   d
-os_strlen      port/include/os.h       233;"   d
-os_strncasecmp port/include/os.h       244;"   d
-os_strncasecmp port/include/os.h       246;"   d
-os_strncmp     port/include/os.h       256;"   d
-os_strncpy     port/include/os.h       259;"   d
-os_strrchr     port/include/os.h       263;"   d
-os_strstr      port/include/os.h       266;"   d
-os_time        port/include/os.h       /^struct os_time {$/;"  s
-os_time_before port/include/os.h       48;"    d
-os_time_sub    port/include/os.h       52;"    d
-os_time_t      port/include/os.h       /^typedef long os_time_t;$/;"   t
-os_version     src/ap/ap_config.h      /^      u8 os_version[4];$/;"   m       struct:hostapd_bss_config
-os_version     src/wps/wps.h   /^      u32 os_version;$/;"     m       struct:wps_device_data
-os_version     src/wps/wps_attr_parse.h        /^      const u8 *os_version; \/* 4 octets *\/$/;"      m       struct:wps_parse_attr
-os_zalloc      port/include/os.h       199;"   d
-oui    src/common/ieee802_11_defs.h    /^      u8 oui[3]; \/* 00:50:f2 *\/$/;" m       struct:wmm_information_element
-oui    src/common/ieee802_11_defs.h    /^      u8 oui[3]; \/* 00:50:f2 *\/$/;" m       struct:wmm_parameter_element
-oui    src/common/ieee802_11_defs.h    /^      u8 oui[3]; \/* 00:50:f2 *\/$/;" m       struct:wmm_tspec_element
-oui    src/common/wpa_common.h /^      u8 oui[4]; \/* 24-bit OUI followed by 8-bit OUI type *\/$/;"    m       struct:wpa_ie_hdr
-oui_subtype    src/common/ieee802_11_defs.h    /^      u8 oui_subtype; \/* 0 *\/$/;"   m       struct:wmm_information_element
-oui_subtype    src/common/ieee802_11_defs.h    /^      u8 oui_subtype; \/* 1 *\/$/;"   m       struct:wmm_parameter_element
-oui_subtype    src/common/ieee802_11_defs.h    /^      u8 oui_subtype; \/* 2 *\/$/;"   m       struct:wmm_tspec_element
-oui_type       src/common/ieee802_11_defs.h    /^      u8 oui_type; \/* 2 *\/$/;"      m       struct:wmm_information_element
-oui_type       src/common/ieee802_11_defs.h    /^      u8 oui_type; \/* 2 *\/$/;"      m       struct:wmm_parameter_element
-oui_type       src/common/ieee802_11_defs.h    /^      u8 oui_type; \/* 2 *\/$/;"      m       struct:wmm_tspec_element
-outbuf src/eap_peer/eap_i.h    /^        struct pbuf *outbuf;$/;"      m       struct:eap_sm   typeref:struct:eap_sm::pbuf
-own_addr       src/ap/hostapd.h        /^      u8 own_addr[ETH_ALEN];$/;"      m       struct:hostapd_data
-own_addr       src/rsn_supp/wpa.h      /^    u8 own_addr[ETH_ALEN];$/;"        m       struct:wpa_sm
-ownaddr        src/eap_peer/eap_i.h    /^      u8 ownaddr[ETH_ALEN];$/;"       m       struct:eap_sm
-ownaddr        src/wps/wps.h   /^    u8 ownaddr[ETH_ALEN];$/;" m       struct:wps_sm
-p      src/tls/rsa.c   /^      struct bignum *p; \/* prime p (factor of n) *\/$/;"     m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-p2p    src/ap/hostapd.h        /^      struct p2p_data *p2p;$/;"       m       struct:hostapd_data     typeref:struct:hostapd_data::p2p_data
-p2p    src/wps/wps.h   /^      int p2p;$/;"    m       struct:wps_device_data
-p2p_beacon_ie  src/ap/hostapd.h        /^      struct wpabuf *p2p_beacon_ie;$/;"       m       struct:hostapd_data     typeref:struct:hostapd_data::wpabuf
-p2p_dev_addr   src/wps/wps.h   /^      const u8 *p2p_dev_addr;$/;"     m       struct:wps_config
-p2p_dev_addr   src/wps/wps_i.h /^      u8 p2p_dev_addr[ETH_ALEN]; \/* P2P Device Address of the client or$/;"  m       struct:wps_data
-p2p_dev_addr   src/wps/wps_registrar.c /^      u8 p2p_dev_addr[ETH_ALEN];$/;"  m       struct:wps_registrar    file:
-p2p_group      src/ap/hostapd.h        /^      struct p2p_group *p2p_group;$/;"        m       struct:hostapd_data     typeref:struct:hostapd_data::p2p_group
-p2p_probe_resp_ie      src/ap/hostapd.h        /^      struct wpabuf *p2p_probe_resp_ie;$/;"   m       struct:hostapd_data     typeref:struct:hostapd_data::wpabuf
-pac_len        src/eap_peer/eap_tlv_common.h   /^      be16 pac_len;$/;"       m       struct:eap_tlv_pac_ack_tlv
-pac_type       src/eap_peer/eap_tlv_common.h   /^      be16 pac_type;$/;"      m       struct:eap_tlv_pac_ack_tlv
-pac_type       src/eap_peer/eap_tlv_common.h   /^      be16 pac_type;$/;"      m       struct:eap_tlv_pac_type_tlv
-packet_type    src/ap/wpa_auth.h       /^      u8 packet_type; \/* FT_PACKET_R0KH_R1KH_PULL *\/$/;"    m       struct:ft_r0kh_r1kh_pull_frame
-packet_type    src/ap/wpa_auth.h       /^      u8 packet_type; \/* FT_PACKET_R0KH_R1KH_PUSH *\/$/;"    m       struct:ft_r0kh_r1kh_push_frame
-packet_type    src/ap/wpa_auth.h       /^      u8 packet_type; \/* FT_PACKET_R0KH_R1KH_RESP *\/$/;"    m       struct:ft_r0kh_r1kh_resp_frame
-packet_type    src/ap/wpa_auth.h       /^      u8 packet_type; \/* FT_PACKET_REQUEST\/FT_PACKET_RESPONSE *\/$/;"       m       struct:ft_rrb_frame
-pad    src/ap/wpa_auth.h       /^      u8 pad[2]; \/* 8-octet boundary for AES key wrap *\/$/;"        m       struct:ft_r0kh_r1kh_resp_frame
-pad    src/ap/wpa_auth.h       /^      u8 pad[4]; \/* 8-octet boundary for AES key wrap *\/$/;"        m       struct:ft_r0kh_r1kh_pull_frame
-pad    src/ap/wpa_auth.h       /^      u8 pad[6]; \/* 8-octet boundary for AES key wrap *\/$/;"        m       struct:ft_r0kh_r1kh_push_frame
-pairwise       src/ap/wpa_auth.h       /^      le16 pairwise;$/;"      m       struct:ft_r0kh_r1kh_push_frame
-pairwise       src/ap/wpa_auth.h       /^      le16 pairwise;$/;"      m       struct:ft_r0kh_r1kh_resp_frame
-pairwise       src/ap/wpa_auth_i.h     /^      int pairwise; \/* Pairwise cipher suite, WPA_CIPHER_* *\/$/;"   m       struct:wpa_state_machine
-pairwise_cipher        src/common/wpa_common.h /^      int pairwise_cipher;$/;"        m       struct:wpa_ie_data
-pairwise_cipher        src/rsn_supp/wpa.h      /^    unsigned int pairwise_cipher;$/;" m       struct:wpa_sm
-pairwise_set   src/ap/wpa_auth_i.h     /^      Boolean pairwise_set;$/;"       m       struct:wpa_state_machine
-param  src/esp_supplicant/esp_wifi_driver.h    /^    void    *param;$/;"       m       struct:__anon31
-part   src/wps/wps.h   /^              int part;$/;"   m       struct:wps_event_data::wps_event_pwd_auth_fail
-partial_input  src/tls/tlsv1_client_i.h        /^      struct wpabuf *partial_input;$/;"       m       struct:tlsv1_client     typeref:struct:tlsv1_client::wpabuf
-passwd_change_challenge        src/eap_peer/eap_mschapv2.c     /^      u8 passwd_change_challenge[PASSWD_CHANGE_CHAL_LEN];$/;" m       struct:eap_mschapv2_data        file:
-passwd_change_challenge_valid  src/eap_peer/eap_mschapv2.c     /^      int passwd_change_challenge_valid;$/;"  m       struct:eap_mschapv2_data        file:
-passwd_change_version  src/eap_peer/eap_mschapv2.c     /^      int passwd_change_version;$/;"  m       struct:eap_mschapv2_data        file:
-password       src/eap_peer/eap_config.h       /^      u8 *password;$/;"       m       struct:eap_peer_config
-password_len   src/eap_peer/eap_config.h       /^      size_t password_len;$/;"        m       struct:eap_peer_config
-path_len_constraint    src/tls/x509v3.h        /^      unsigned long path_len_constraint; \/* pathLenConstraint *\/$/;"        m       struct:x509_certificate
-payload        src/tls/asn1.h  /^      const u8 *payload;$/;"  m       struct:asn1_hdr
-pbc    src/wps/wps.h   /^      int pbc;$/;"    m       struct:wps_config
-pbc    src/wps/wps_i.h /^      int pbc;$/;"    m       struct:wps_data
-pbc    src/wps/wps_registrar.c /^      int pbc;$/;"    m       struct:wps_registrar    file:
-pbc_ignore_start       src/wps/wps_registrar.c /^      struct os_time pbc_ignore_start;$/;"    m       struct:wps_registrar    typeref:struct:wps_registrar::os_time   file:
-pbc_ignore_uuid        src/wps/wps_registrar.c /^      u8 pbc_ignore_uuid[WPS_UUID_LEN];$/;"   m       struct:wps_registrar    file:
-pbc_in_m1      src/wps/wps.h   /^      int pbc_in_m1;$/;"      m       struct:wps_config
-pbc_in_m1      src/wps/wps_i.h /^      int pbc_in_m1;$/;"      m       struct:wps_data
-pbc_sessions   src/wps/wps_registrar.c /^      struct wps_pbc_session *pbc_sessions;$/;"       m       struct:wps_registrar    typeref:struct:wps_registrar::wps_pbc_session   file:
-pbkdf2_sha1    src/crypto/sha1-pbkdf2.c        /^pbkdf2_sha1(const char *passphrase, const char *ssid, size_t ssid_len,$/;"    f
-pbkdf2_sha1_f  src/crypto/sha1-pbkdf2.c        /^pbkdf2_sha1_f(const char *passphrase, const char *ssid,$/;"   f       file:
-pc1    src/crypto/des-internal.c       /^static const u8 pc1[56] = {$/;"       v       file:
-pc2    src/crypto/des-internal.c       /^static const u8 pc2[48] = {$/;"       v       file:
-peak_data_rate src/common/ieee802_11_defs.h    /^      le32 peak_data_rate;$/;"        m       struct:wmm_tspec_element
-peap_done      src/eap_peer/eap_i.h    /^      bool peap_done;$/;"     m       struct:eap_sm
-peap_outer_success     src/eap_peer/eap_peap.c /^      int peap_outer_success; \/* 0 = PEAP terminated on Phase 2 inner$/;"    m       struct:eap_peap_data    file:
-peap_prfplus   src/eap_peer/eap_peap_common.c  /^peap_prfplus(int version, const u8 *key, size_t key_len,$/;"  f
-peap_version   src/eap_peer/eap_peap.c /^      int peap_version, force_peap_version, force_new_label;$/;"      m       struct:eap_peap_data    file:
-peer   src/ap/wpa_auth_i.h     /^      u8 peer[ETH_ALEN];$/;"  m       struct:wpa_stsl_negotiation
-peer_addr      src/wps/wps.h   /^      const u8 *peer_addr;$/;"        m       struct:wps_config
-peer_cert      src/tls/tls.h   /^      } peer_cert;$/;"        m       union:tls_event_data    typeref:struct:tls_event_data::__anon35
-peer_challenge src/eap_peer/eap_mschapv2.c     /^      u8 *peer_challenge;$/;" m       struct:eap_mschapv2_data        file:
-peer_challenge src/eap_peer/eap_mschapv2.c     /^      u8 peer_challenge[MSCHAPV2_CHAL_LEN];$/;"       m       struct:ms_change_password       file:
-peer_challenge src/eap_peer/eap_mschapv2.c     /^      u8 peer_challenge[MSCHAPV2_CHAL_LEN];$/;"       m       struct:ms_response      file:
-peer_dev       src/wps/wps_i.h /^      struct wps_device_data peer_dev;$/;"    m       struct:wps_data typeref:struct:wps_data::wps_device_data
-peer_hash1     src/wps/wps_i.h /^      u8 peer_hash1[WPS_HASH_LEN];$/;"        m       struct:wps_data
-peer_hash2     src/wps/wps_i.h /^      u8 peer_hash2[WPS_HASH_LEN];$/;"        m       struct:wps_data
-peerkey        src/ap/ap_config.h      /^      int peerkey;$/;"        m       struct:hostapd_bss_config
-peerkey        src/ap/wpa_auth.h       /^      int peerkey;$/;"        m       struct:wpa_auth_config
-pem_cert_begin src/tls/tlsv1_cred.c    /^static const char *pem_cert_begin = "-----BEGIN CERTIFICATE-----";$/;"        v       file:
-pem_cert_end   src/tls/tlsv1_cred.c    /^static const char *pem_cert_end = "-----END CERTIFICATE-----";$/;"    v       file:
-pem_dhparams_begin     src/tls/tlsv1_cred.c    /^static const char *pem_dhparams_begin = "-----BEGIN DH PARAMETERS-----";$/;"  v       file:
-pem_dhparams_end       src/tls/tlsv1_cred.c    /^static const char *pem_dhparams_end = "-----END DH PARAMETERS-----";$/;"      v       file:
-pem_key2_begin src/tls/tlsv1_cred.c    /^static const char *pem_key2_begin = "-----BEGIN PRIVATE KEY-----";$/;"        v       file:
-pem_key2_end   src/tls/tlsv1_cred.c    /^static const char *pem_key2_end = "-----END PRIVATE KEY-----";$/;"    v       file:
-pem_key_begin  src/tls/tlsv1_cred.c    /^static const char *pem_key_begin = "-----BEGIN RSA PRIVATE KEY-----";$/;"     v       file:
-pem_key_enc_begin      src/tls/tlsv1_cred.c    /^static const char *pem_key_enc_begin = "-----BEGIN ENCRYPTED PRIVATE KEY-----";$/;"   v       file:
-pem_key_enc_end        src/tls/tlsv1_cred.c    /^static const char *pem_key_enc_end = "-----END ENCRYPTED PRIVATE KEY-----";$/;"       v       file:
-pem_key_end    src/tls/tlsv1_cred.c    /^static const char *pem_key_end = "-----END RSA PRIVATE KEY-----";$/;" v       file:
-pending_1_of_4_timeout src/ap/wpa_auth_i.h     /^      int pending_1_of_4_timeout;$/;" m       struct:wpa_state_machine
-pending_deinit src/ap/wpa_auth_i.h     /^      unsigned int pending_deinit:1;$/;"      m       struct:wpa_state_machine
-pending_phase2_req     src/eap_peer/eap_peap.c /^      struct wpabuf *pending_phase2_req;$/;"  m       struct:eap_peap_data    typeref:struct:eap_peap_data::wpabuf    file:
-pending_phase2_req     src/eap_peer/eap_ttls.c /^      struct wpabuf *pending_phase2_req;$/;"  m       struct:eap_ttls_data    typeref:struct:eap_ttls_data::wpabuf    file:
-phase1 src/eap_peer/eap_config.h       /^      char *phase1;$/;"       m       struct:eap_peer_config
-phase2 src/eap_peer/eap_config.h       /^      char *phase2;$/;"       m       struct:eap_peer_config
-phase2 src/eap_peer/eap_mschapv2.c     /^      int phase2;$/;" m       struct:eap_mschapv2_data        file:
-phase2 src/eap_peer/eap_tls_common.h   /^      int phase2;$/;" m       struct:eap_ssl_data
-phase2_eap_started     src/eap_peer/eap_peap.c /^      int phase2_eap_started;$/;"     m       struct:eap_peap_data    file:
-phase2_eap_success     src/eap_peer/eap_peap.c /^      int phase2_eap_success;$/;"     m       struct:eap_peap_data    file:
-phase2_eap_type        src/eap_peer/eap_ttls.c /^      struct eap_method_type phase2_eap_type;$/;"     m       struct:eap_ttls_data    typeref:struct:eap_ttls_data::eap_method_type   file:
-phase2_eap_types       src/eap_peer/eap_ttls.c /^      struct eap_method_type *phase2_eap_types;$/;"   m       struct:eap_ttls_data    typeref:struct:eap_ttls_data::eap_method_type   file:
-phase2_method  src/eap_peer/eap_peap.c /^      const struct eap_method *phase2_method;$/;"     m       struct:eap_peap_data    typeref:struct:eap_peap_data::eap_method        file:
-phase2_method  src/eap_peer/eap_ttls.c /^      const struct eap_method *phase2_method;$/;"     m       struct:eap_ttls_data    typeref:struct:eap_ttls_data::eap_method        file:
-phase2_priv    src/eap_peer/eap_peap.c /^      void *phase2_priv;$/;"  m       struct:eap_peap_data    file:
-phase2_priv    src/eap_peer/eap_ttls.c /^      void *phase2_priv;$/;"  m       struct:eap_ttls_data    file:
-phase2_start   src/eap_peer/eap_ttls.c /^      int phase2_start;$/;"   m       struct:eap_ttls_data    file:
-phase2_success src/eap_peer/eap_peap.c /^      int phase2_success;$/;" m       struct:eap_peap_data    file:
-phase2_success src/eap_peer/eap_ttls.c /^      int phase2_success;$/;" m       struct:eap_ttls_data    file:
-phase2_type    src/eap_peer/eap_peap.c /^      struct eap_method_type phase2_type;$/;" m       struct:eap_peap_data    typeref:struct:eap_peap_data::eap_method_type   file:
-phase2_type    src/eap_peer/eap_ttls.c /^      } phase2_type;$/;"      m       struct:eap_ttls_data    typeref:enum:eap_ttls_data::phase2_types        file:
-phase2_types   src/eap_peer/eap_peap.c /^      struct eap_method_type *phase2_types;$/;"       m       struct:eap_peap_data    typeref:struct:eap_peap_data::eap_method_type   file:
-phase2_types   src/eap_peer/eap_ttls.c /^      enum phase2_types {$/;" g       struct:eap_ttls_data    file:
-pin    src/eap_peer/eap_config.h       /^      char *pin;$/;"  m       struct:eap_peer_config
-pin    src/tls/tls.h   /^      const char *pin;$/;"    m       struct:tls_connection_params
-pin    src/wps/wps.h   /^      const u8 *pin;$/;"      m       struct:wps_config
-pin    src/wps/wps_registrar.c /^      u8 *pin;$/;"    m       struct:wps_uuid_pin     file:
-pin_len        src/wps/wps.h   /^      size_t pin_len;$/;"     m       struct:wps_config
-pin_len        src/wps/wps_registrar.c /^      size_t pin_len;$/;"     m       struct:wps_uuid_pin     file:
-pin_needed_cb  src/wps/wps.h   /^      void (*pin_needed_cb)(void *ctx, const u8 *uuid_e,$/;"  m       struct:wps_registrar_config
-pin_needed_cb  src/wps/wps_registrar.c /^      void (*pin_needed_cb)(void *ctx, const u8 *uuid_e,$/;"  m       struct:wps_registrar    file:
-pins   src/wps/wps_registrar.c /^      struct dl_list pins;$/;"        m       struct:wps_registrar    typeref:struct:wps_registrar::dl_list   file:
-pkcs11_engine_path     src/tls/tls.h   /^      const char *pkcs11_engine_path;$/;"     m       struct:tls_config
-pkcs11_module_path     src/tls/tls.h   /^      const char *pkcs11_module_path;$/;"     m       struct:tls_config
-pkcs1_decrypt_public_key       src/tls/pkcs1.c /^int pkcs1_decrypt_public_key(struct crypto_rsa_key *key,$/;"  f
-pkcs1_encrypt  src/tls/pkcs1.c /^int pkcs1_encrypt(int block_type, struct crypto_rsa_key *key,$/;"     f
-pkcs1_generate_encryption_block        src/tls/pkcs1.c /^static int pkcs1_generate_encryption_block(u8 block_type, size_t modlen,$/;"  f       file:
-pkcs1_v15_private_key_decrypt  src/tls/pkcs1.c /^int pkcs1_v15_private_key_decrypt(struct crypto_rsa_key *key,$/;"     f
-pkcs5_alg      src/tls/pkcs5.c /^      enum pkcs5_alg {$/;"    g       struct:pkcs5_params     file:
-pkcs5_crypto_init      src/tls/pkcs5.c /^static struct crypto_cipher * pkcs5_crypto_init(struct pkcs5_params *params,$/;"      f       file:
-pkcs5_decrypt  src/tls/pkcs5.c /^u8 * pkcs5_decrypt(const u8 *enc_alg, size_t enc_alg_len,$/;" f
-pkcs5_get_alg  src/tls/pkcs5.c /^static enum pkcs5_alg pkcs5_get_alg(struct asn1_oid *oid)$/;" f       file:
-pkcs5_get_params       src/tls/pkcs5.c /^static int pkcs5_get_params(const u8 *enc_alg, size_t enc_alg_len,$/;"        f       file:
-pkcs5_params   src/tls/pkcs5.c /^struct pkcs5_params {$/;"     s       file:
-pkcs8_enc_key_import   src/tls/pkcs8.c /^pkcs8_enc_key_import(const u8 *buf, size_t len, const char *passwd)$/;"       f
-pkcs8_key_import       src/tls/pkcs8.c /^struct crypto_private_key * pkcs8_key_import(const u8 *buf, size_t len)$/;"   f
-pmk    src/rsn_supp/wpa.h      /^    u8 pmk[PMK_LEN];$/;"      m       struct:wpa_sm
-pmk_len        src/rsn_supp/wpa.h      /^    size_t pmk_len;$/;"       m       struct:wpa_sm
-pmk_r0_name    src/ap/wpa_auth.h       /^      u8 pmk_r0_name[WPA_PMK_NAME_LEN];$/;"   m       struct:ft_r0kh_r1kh_pull_frame
-pmk_r0_name    src/ap/wpa_auth.h       /^      u8 pmk_r0_name[WPA_PMK_NAME_LEN];$/;"   m       struct:ft_r0kh_r1kh_push_frame
-pmk_r1 src/ap/wpa_auth.h       /^      u8 pmk_r1[PMK_LEN];$/;" m       struct:ft_r0kh_r1kh_push_frame
-pmk_r1 src/ap/wpa_auth.h       /^      u8 pmk_r1[PMK_LEN];$/;" m       struct:ft_r0kh_r1kh_resp_frame
-pmk_r1_name    src/ap/wpa_auth.h       /^      u8 pmk_r1_name[WPA_PMK_NAME_LEN];$/;"   m       struct:ft_r0kh_r1kh_push_frame
-pmk_r1_name    src/ap/wpa_auth.h       /^      u8 pmk_r1_name[WPA_PMK_NAME_LEN];$/;"   m       struct:ft_r0kh_r1kh_resp_frame
-pmk_r1_name    src/ap/wpa_auth_i.h     /^      u8 pmk_r1_name[WPA_PMK_NAME_LEN]; \/* PMKR1Name derived from FT Auth$/;"        m       struct:wpa_state_machine
-pmk_r1_name_valid      src/ap/wpa_auth_i.h     /^      unsigned int pmk_r1_name_valid:1;$/;"   m       struct:wpa_state_machine
-pmk_r1_push    src/ap/ap_config.h      /^      int pmk_r1_push;$/;"    m       struct:hostapd_bss_config
-pmk_r1_push    src/ap/wpa_auth.h       /^      int pmk_r1_push;$/;"    m       struct:wpa_auth_config
-pmkid  src/ap/wpa_auth_ie.h    /^      const u8 *pmkid;$/;"    m       struct:wpa_eapol_ie_parse
-pmkid  src/common/wpa_common.h /^      const u8 *pmkid;$/;"    m       struct:wpa_ie_data
-pmkid  src/rsn_supp/wpa_ie.h   /^      const u8 *pmkid;$/;"    m       struct:wpa_eapol_ie_parse
-pn     src/common/wpa_common.h /^      u8 pn[6];$/;"   m       struct:wpa_igtk_kde
-pp_michael_mic_failure src/rsn_supp/wpa.c      /^pp_michael_mic_failure(u16 isunicast)$/;"     f
-preamble       src/ap/ap_config.h      /^      } preamble;$/;" m       struct:hostapd_config   typeref:enum:hostapd_config::__anon19
-prev   src/utils/list.h        /^      struct dl_list *prev;$/;"       m       struct:dl_list  typeref:struct:dl_list::dl_list
-prev_challenge src/eap_peer/eap_mschapv2.c     /^      struct wpabuf *prev_challenge;$/;"      m       struct:eap_mschapv2_data        typeref:struct:eap_mschapv2_data::wpabuf        file:
-prev_cipher_suite      src/tls/tlsv1_client_i.h        /^      u16 prev_cipher_suite;$/;"      m       struct:tlsv1_client
-prev_error     src/eap_peer/eap_mschapv2.c     /^      int prev_error;$/;"     m       struct:eap_mschapv2_data        file:
-prev_key_replay        src/ap/wpa_auth_i.h     /^              prev_key_replay[RSNA_MAX_EAPOL_RETRIES];$/;"    m       struct:wpa_state_machine        typeref:struct:wpa_state_machine::wpa_key_replay_counter
-pri_dev_type   src/wps/wps.h   /^              const u8 *pri_dev_type;$/;"     m       struct:wps_event_data::wps_event_er_ap
-pri_dev_type   src/wps/wps.h   /^              const u8 *pri_dev_type;$/;"     m       struct:wps_event_data::wps_event_er_enrollee
-pri_dev_type   src/wps/wps.h   /^      u8 pri_dev_type[WPS_DEV_TYPE_LEN];$/;"  m       struct:wps_device_data
-primary_dev_type       src/wps/wps.h   /^              const u8 *primary_dev_type; \/* 8 octets *\/$/;"        m       struct:wps_event_data::wps_event_m2d
-primary_dev_type       src/wps/wps_attr_parse.h        /^      const u8 *primary_dev_type; \/* 8 octets *\/$/;"        m       struct:wps_parse_attr
-prime  include/crypto/dh_groups.h      /^      const u8 *prime;$/;"    m       struct:dh_group
-prime_len      include/crypto/dh_groups.h      /^      size_t prime_len;$/;"   m       struct:dh_group
-priv   src/utils/ext_password.c        /^      void *priv;$/;" m       struct:ext_password_data        file:
-private_key    src/eap_peer/eap_config.h       /^      u8 *private_key;$/;"    m       struct:eap_peer_config
-private_key    src/tls/rsa.c   /^      int private_key; \/* whether private key is set *\/$/;" m       struct:crypto_rsa_key   file:
-private_key    src/tls/tls.h   /^      const char *private_key;$/;"    m       struct:tls_connection_params
-private_key2   src/eap_peer/eap_config.h       /^      u8 *private_key2;$/;"   m       struct:eap_peer_config
-private_key2_password  src/eap_peer/eap_config.h       /^      u8 *private_key2_password;$/;"  m       struct:eap_peer_config
-private_key_blob       src/tls/tls.h   /^      const u8 *private_key_blob;$/;" m       struct:tls_connection_params
-private_key_blob_len   src/tls/tls.h   /^      size_t private_key_blob_len;$/;"        m       struct:tls_connection_params
-private_key_passwd     src/eap_peer/eap_config.h       /^      const u8 *private_key_passwd;$/;"       m       struct:eap_peer_config
-private_key_passwd     src/tls/tls.h   /^      const char *private_key_passwd;$/;"     m       struct:tls_connection_params
-probe_req      src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED probe_req;$/;"  m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon74
-probe_resp     src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED probe_resp;$/;" m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon75
-process        src/eap_peer/eap_i.h    /^      struct wpabuf * (*process)(struct eap_sm *sm, void *priv,$/;"   m       struct:eap_method       typeref:struct:eap_method::process
-proto  src/common/wpa_common.h /^      int proto;$/;"  m       struct:wpa_ie_data
-proto  src/rsn_supp/wpa.h      /^    unsigned int proto;$/;"   m       struct:wpa_sm
-psk    src/ap/ap_config.h      /^      u8 psk[PMK_LEN];$/;"    m       struct:hostapd_sta_wpa_psk_short
-psk    src/ap/ap_config.h      /^      u8 psk[PMK_LEN];$/;"    m       struct:hostapd_wpa_psk
-psk    src/wps/wps.h   /^      u8 psk[32];$/;" m       struct:wps_context
-psk1   src/wps/wps_i.h /^      u8 psk1[WPS_PSK_LEN];$/;"       m       struct:wps_data
-psk2   src/wps/wps_i.h /^      u8 psk2[WPS_PSK_LEN];$/;"       m       struct:wps_data
-psk_set        src/wps/wps.h   /^      int psk_set;$/;"        m       struct:wps_context
-ptk    src/rsn_supp/wpa.h      /^    struct wpa_ptk ptk, tptk;$/;"     m       struct:wpa_sm   typeref:struct:wpa_sm::wpa_ptk
-ptk_set        src/rsn_supp/wpa.h      /^    int ptk_set, tptk_set;$/;"        m       struct:wpa_sm
-pubkey_hash    src/wps/wps_registrar.c /^      u8 pubkey_hash[WPS_OOB_PUBKEY_HASH_LEN];$/;"    m       struct:wps_nfc_pw_token file:
-public_key     src/tls/x509v3.h        /^      u8 *public_key;$/;"     m       struct:x509_certificate
-public_key     src/wps/wps_attr_parse.h        /^      const u8 *public_key;$/;"       m       struct:wps_parse_attr
-public_key_alg src/tls/x509v3.h        /^      struct x509_algorithm_identifier public_key_alg;$/;"    m       struct:x509_certificate typeref:struct:x509_certificate::x509_algorithm_identifier
-public_key_len src/tls/x509v3.h        /^      size_t public_key_len;$/;"      m       struct:x509_certificate
-public_key_len src/wps/wps_attr_parse.h        /^      size_t public_key_len;$/;"      m       struct:wps_parse_attr
-pw_id  src/wps/wps_registrar.c /^      u16 pw_id;$/;"  m       struct:wps_nfc_pw_token file:
-pwd_auth_fail  src/wps/wps.h   /^      } pwd_auth_fail;$/;"    m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_pwd_auth_fail
-q      src/tls/rsa.c   /^      struct bignum *q; \/* prime q (factor of n) *\/$/;"     m       struct:crypto_rsa_key   typeref:struct:crypto_rsa_key::bignum   file:
-qos_info       src/common/ieee802_11_defs.h    /^      u8 qos_info; \/* AP\/STA specif QoS info *\/$/;"        m       struct:wmm_parameter_element
-qos_info       src/common/ieee802_11_defs.h    /^      u8 qos_info; \/* AP\/STA specific QoS info *\/$/;"      m       struct:wmm_information_element
-r0_key_holder  src/ap/wpa_auth.h       /^      u8 r0_key_holder[FT_R0KH_ID_MAX_LEN];$/;"       m       struct:wpa_auth_config
-r0_key_holder_len      src/ap/wpa_auth.h       /^      size_t r0_key_holder_len;$/;"   m       struct:wpa_auth_config
-r0_key_lifetime        src/ap/ap_config.h      /^      u32 r0_key_lifetime;$/;"        m       struct:hostapd_bss_config
-r0_key_lifetime        src/ap/wpa_auth.h       /^      u32 r0_key_lifetime;$/;"        m       struct:wpa_auth_config
-r0kh_id        src/ap/wpa_auth_i.h     /^      u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; \/* R0KH-ID from FT Auth Request *\/$/;"        m       struct:wpa_state_machine
-r0kh_id_len    src/ap/wpa_auth_i.h     /^      size_t r0kh_id_len;$/;" m       struct:wpa_state_machine
-r0kh_list      src/ap/ap_config.h      /^      struct ft_remote_r0kh *r0kh_list;$/;"   m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::ft_remote_r0kh
-r0kh_list      src/ap/wpa_auth.h       /^      struct ft_remote_r0kh *r0kh_list;$/;"   m       struct:wpa_auth_config  typeref:struct:wpa_auth_config::ft_remote_r0kh
-r1_key_holder  src/ap/ap_config.h      /^      u8 r1_key_holder[FT_R1KH_ID_LEN];$/;"   m       struct:hostapd_bss_config
-r1_key_holder  src/ap/wpa_auth.h       /^      u8 r1_key_holder[FT_R1KH_ID_LEN];$/;"   m       struct:wpa_auth_config
-r1kh_id        src/ap/wpa_auth.h       /^      u8 r1kh_id[FT_R1KH_ID_LEN]; \/* copied from pull *\/$/;"        m       struct:ft_r0kh_r1kh_resp_frame
-r1kh_id        src/ap/wpa_auth.h       /^      u8 r1kh_id[FT_R1KH_ID_LEN];$/;" m       struct:ft_r0kh_r1kh_pull_frame
-r1kh_id        src/ap/wpa_auth.h       /^      u8 r1kh_id[FT_R1KH_ID_LEN];$/;" m       struct:ft_r0kh_r1kh_push_frame
-r1kh_list      src/ap/ap_config.h      /^      struct ft_remote_r1kh *r1kh_list;$/;"   m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::ft_remote_r1kh
-r1kh_list      src/ap/wpa_auth.h       /^      struct ft_remote_r1kh *r1kh_list;$/;"   m       struct:wpa_auth_config  typeref:struct:wpa_auth_config::ft_remote_r1kh
-r_hash1        src/wps/wps_attr_parse.h        /^      const u8 *r_hash1; \/* WPS_HASH_LEN (32) octets *\/$/;" m       struct:wps_parse_attr
-r_hash2        src/wps/wps_attr_parse.h        /^      const u8 *r_hash2; \/* WPS_HASH_LEN (32) octets *\/$/;" m       struct:wps_parse_attr
-r_snonce1      src/wps/wps_attr_parse.h        /^      const u8 *r_snonce1; \/* WPS_SECRET_NONCE_LEN (16) octets *\/$/;"       m       struct:wps_parse_attr
-r_snonce2      src/wps/wps_attr_parse.h        /^      const u8 *r_snonce2; \/* WPS_SECRET_NONCE_LEN (16) octets *\/$/;"       m       struct:wps_parse_attr
-random_add_randomness  include/crypto/random.h 23;"    d
-random_deinit  include/crypto/random.h 22;"    d
-random_get_bytes       include/crypto/random.h 24;"    d
-random_init    include/crypto/random.h 21;"    d
-random_mark_pool_ready include/crypto/random.h 26;"    d
-random_pool_ready      include/crypto/random.h 25;"    d
-rate   src/ap/hostapd.h        /^      int rate; \/* rate in 100 kbps *\/$/;"  m       struct:hostapd_rate_data
-rc4    src/crypto/crypto_internal-cipher.c     /^              } rc4;$/;"      m       union:crypto_cipher::__anon10   typeref:struct:crypto_cipher::__anon10::__anon11        file:
-rc4    src/fast_crypto/fast_crypto_internal-cipher.c   /^        } rc4;$/;"    m       union:fast_crypto_cipher::__anon56      typeref:struct:fast_crypto_cipher::__anon56::__anon57   file:
-rc4_skip       src/crypto/rc4.c        /^rc4_skip(const u8 *key, size_t keylen, size_t skip,$/;"       f
-rcon   src/crypto/aes-internal.c       /^const u32 rcon[] \/* ICACHE_RODATA_ATTR *\/ = {$/;"   v
-rcons  src/crypto/aes-internal.c       /^const u8 rcons[] \/* ICACHE_RODATA_ATTR *\/ = {$/;"   v
-read_cbc       src/tls/tlsv1_record.h  /^      struct crypto_cipher *read_cbc;$/;"     m       struct:tlsv1_record_layer       typeref:struct:tlsv1_record_layer::crypto_cipher
-read_cipher_suite      src/tls/tlsv1_record.h  /^      u16 read_cipher_suite;$/;"      m       struct:tlsv1_record_layer
-read_iv        src/tls/tlsv1_record.h  /^      u8 read_iv[TLS_MAX_IV_LEN];$/;" m       struct:tlsv1_record_layer
-read_key       src/tls/tlsv1_record.h  /^      u8 read_key[TLS_MAX_WRITE_KEY_LEN];$/;" m       struct:tlsv1_record_layer
-read_mac_secret        src/tls/tlsv1_record.h  /^      u8 read_mac_secret[TLS_MAX_WRITE_MAC_SECRET_LEN];$/;"   m       struct:tlsv1_record_layer
-read_seq_num   src/tls/tlsv1_record.h  /^      u8 read_seq_num[TLS_SEQ_NUM_LEN];$/;"   m       struct:tlsv1_record_layer
-ready_for_tnc  src/eap_peer/eap_ttls.c /^      int ready_for_tnc;$/;"  m       struct:eap_ttls_data    file:
-reason src/tls/tls.h   /^              enum tls_fail_reason reason;$/;"        m       struct:tls_event_data::__anon34 typeref:enum:tls_event_data::__anon34::tls_fail_reason
-reason_code    src/common/ieee802_11_defs.h    /^                      le16 reason_code;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon68
-reason_code    src/common/ieee802_11_defs.h    /^                      le16 reason_code;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon72
-reason_txt     src/tls/tls.h   /^              const char *reason_txt;$/;"     m       struct:tls_event_data::__anon34
-reassoc_deadline       src/rsn_supp/wpa_ie.h   /^      const u8 *reassoc_deadline;$/;" m       struct:wpa_eapol_ie_parse
-reassoc_req    src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED reassoc_req;$/;"        m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon71
-reassoc_resp   src/common/ieee802_11_defs.h    /^              } STRUCT_PACKED assoc_resp, reassoc_resp;$/;"   m       union:ieee80211_mgmt::__anon66  typeref:struct:ieee80211_mgmt::__anon66::__anon70
-reassociation_deadline src/ap/ap_config.h      /^      u32 reassociation_deadline;$/;" m       struct:hostapd_bss_config
-reassociation_deadline src/ap/wpa_auth.h       /^      u32 reassociation_deadline;$/;" m       struct:wpa_auth_config
-reauth src/eap_peer/eap_peap.c /^      int reauth; \/* reauthentication *\/$/;"        m       struct:eap_peap_data    file:
-reauth src/eap_peer/eap_ttls.c /^      int reauth; \/* reauthentication *\/$/;"        m       struct:eap_ttls_data    file:
-received_version       src/eap_peer/eap_tlv_common.h   /^      u8 received_version;$/;"        m       struct:eap_tlv_crypto_binding_tlv
-reg_success_cb src/wps/wps.h   /^      void (*reg_success_cb)(void *ctx, const u8 *mac_addr,$/;"       m       struct:wps_registrar_config
-reg_success_cb src/wps/wps_registrar.c /^      void (*reg_success_cb)(void *ctx, const u8 *mac_addr,$/;"       m       struct:wps_registrar    file:
-registrar      src/wps/wps.h   /^      int registrar;$/;"      m       struct:wps_config
-registrar      src/wps/wps.h   /^      struct wps_registrar *registrar;$/;"    m       struct:wps_context      typeref:struct:wps_context::wps_registrar
-registrar      src/wps/wps_i.h /^      int registrar;$/;"      m       struct:wps_data
-registrar_nonce        src/wps/wps_attr_parse.h        /^      const u8 *registrar_nonce; \/* WPS_NONCE_LEN (16) octets *\/$/;"        m       struct:wps_parse_attr
-reject_4way_hs_for_entropy     src/ap/wpa_auth_i.h     /^      Boolean reject_4way_hs_for_entropy;$/;" m       struct:wpa_group
-reload_config  src/ap/hostapd.h        /^      int (*reload_config)(struct hostapd_iface *iface);$/;"  m       struct:hapd_interfaces
-renew_snonce   src/rsn_supp/wpa.h      /^    int renew_snonce;$/;"     m       struct:wpa_sm
-replay_counter src/common/eapol_common.h       /^      u8 replay_counter[IEEE8021X_REPLAY_COUNTER_LEN];$/;"    m       struct:ieee802_1x_eapol_key
-replay_counter src/common/wpa_common.h /^      u8 replay_counter[WPA_REPLAY_COUNTER_LEN];$/;"  m       struct:wpa_eapol_key
-req_dev_type   src/wps/wps_attr_parse.h        /^      const u8 *req_dev_type[MAX_REQ_DEV_TYPE_COUNT];$/;"     m       struct:wps_parse_attr
-req_replay_counter     src/ap/wpa_auth_i.h     /^      u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN];$/;"      m       struct:wpa_state_machine
-req_replay_counter_used        src/ap/wpa_auth_i.h     /^      int req_replay_counter_used;$/;"        m       struct:wpa_state_machine
-request_counter        src/rsn_supp/wpa.h      /^    u8 request_counter[WPA_REPLAY_COUNTER_LEN];$/;"   m       struct:wpa_sm
-request_to_enroll      src/wps/wps_attr_parse.h        /^      const u8 *request_to_enroll; \/* 1 octet (Bool) *\/$/;" m       struct:wps_parse_attr
-request_type   src/wps/wps_attr_parse.h        /^      const u8 *request_type; \/* 1 octet *\/$/;"     m       struct:wps_parse_attr
-request_type   src/wps/wps_i.h /^      u8 request_type;$/;"    m       struct:wps_data
-require_ht     src/ap/ap_config.h      /^      int require_ht;$/;"     m       struct:hostapd_config
-require_vht    src/ap/ap_config.h      /^      int require_vht;$/;"    m       struct:hostapd_config
-resend_eapol   src/ap/wpa_auth_i.h     /^      ETSTimer resend_eapol;$/;"      m       struct:wpa_state_machine
-resend_eapol_handle    src/ap/wpa_auth.c       /^void resend_eapol_handle(void *timeout_ctx)$/;"       f
-reserved       src/common/ieee802_11_defs.h    /^      u8 reserved; \/* 0 *\/$/;"      m       struct:wmm_parameter_element
-reserved       src/eap_peer/eap_mschapv2.c     /^      u8 reserved[8];$/;"     m       struct:ms_change_password       file:
-reserved       src/eap_peer/eap_mschapv2.c     /^      u8 reserved[8];$/;"     m       struct:ms_response      file:
-reserved       src/eap_peer/eap_tlv_common.h   /^      u8 reserved;$/;"        m       struct:eap_tlv_crypto_binding_tlv
-response_type  src/wps/wps_attr_parse.h        /^      const u8 *response_type; \/* 1 octet *\/$/;"    m       struct:wps_parse_attr
-result src/eap_peer/eap_tlv_common.h   /^      be16 result;$/;"        m       struct:eap_tlv_pac_ack_tlv
-resuming       src/eap_peer/eap_peap.c /^      int resuming; \/* starting a resumed session *\/$/;"    m       struct:eap_peap_data    file:
-resuming       src/eap_peer/eap_ttls.c /^      int resuming; \/* starting a resumed session *\/$/;"    m       struct:eap_ttls_data    file:
-ret    src/esp_supplicant/esp_wps.c    /^    int ret; \/* return value *\/$/;" m       struct:__anon33 file:
-rf_bands       src/wps/wps.h   /^      u8 rf_bands;$/;"        m       struct:wps_device_data
-rf_bands       src/wps/wps_attr_parse.h        /^      const u8 *rf_bands; \/* 1 octet *\/$/;" m       struct:wps_parse_attr
-rid    src/tls/x509v3.h        /^      struct asn1_oid rid; \/* registeredID *\/$/;"   m       struct:x509_name        typeref:struct:x509_name::asn1_oid
-rijndaelDecrypt        src/crypto/aes-internal-dec.c   /^static void  rijndaelDecrypt(const u32 rk[\/*44*\/], int Nr, const u8 ct[16],$/;"     f       file:
-rijndaelEncrypt        src/crypto/aes-internal-enc.c   /^void  rijndaelEncrypt(const u32 rk[], int Nr, const u8 pt[16], u8 ct[16])$/;" f
-rijndaelKeySetupDec    src/crypto/aes-internal-dec.c   /^static int  rijndaelKeySetupDec(u32 rk[], const u8 cipherKey[], int keyBits)$/;"      f       file:
-rijndaelKeySetupEnc    src/crypto/aes-internal.c       /^int rijndaelKeySetupEnc(u32 rk[], const u8 cipherKey[], int keyBits)$/;"      f
-rl     src/tls/tlsv1_client_i.h        /^      struct tlsv1_record_layer rl;$/;"       m       struct:tlsv1_client     typeref:struct:tlsv1_client::tlsv1_record_layer
-rl     src/tls/tlsv1_server_i.h        /^      struct tlsv1_record_layer rl;$/;"       m       struct:tlsv1_server     typeref:struct:tlsv1_server::tlsv1_record_layer
-rol    src/crypto/sha1-internal.c      132;"   d       file:
-rotate_bits    src/tls/asn1.c  /^static u8 rotate_bits(u8 octet)$/;"   f       file:
-rotr   src/crypto/aes_i.h      /^static inline u32 rotr(u32 val, int bits)$/;" f
-rsn    src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    *rsn;$/;"      m       struct:wps_scan_ie
-rsn_cipher_put_suites  src/common/wpa_common.c /^int rsn_cipher_put_suites(u8 *pos, int ciphers)$/;"   f
-rsn_enabled    src/rsn_supp/wpa.h      /^    int rsn_enabled; \/* Whether RSN is enabled in configuration *\/$/;"      m       struct:wpa_sm
-rsn_error_kde  src/common/wpa_common.h /^struct rsn_error_kde {$/;"    s
-rsn_ftie       src/common/wpa_common.h /^struct rsn_ftie {$/;" s
-rsn_ie src/ap/wpa_auth_ie.h    /^      const u8 *rsn_ie;$/;"   m       struct:wpa_eapol_ie_parse
-rsn_ie src/rsn_supp/wpa_ie.h   /^      const u8 *rsn_ie;$/;"   m       struct:wpa_eapol_ie_parse
-rsn_ie_hdr     src/common/wpa_common.h /^struct rsn_ie_hdr {$/;"       s
-rsn_ie_len     src/ap/wpa_auth_ie.h    /^      size_t rsn_ie_len;$/;"  m       struct:wpa_eapol_ie_parse
-rsn_ie_len     src/rsn_supp/wpa_ie.h   /^      size_t rsn_ie_len;$/;"  m       struct:wpa_eapol_ie_parse
-rsn_key_mgmt_to_bitfield       src/common/wpa_common.c /^static int rsn_key_mgmt_to_bitfield(const u8 *s)$/;"  f       file:
-rsn_mdie       src/common/wpa_common.h /^struct rsn_mdie {$/;" s
-rsn_pairwise   src/ap/ap_config.h      /^      int rsn_pairwise;$/;"   m       struct:hostapd_bss_config
-rsn_pairwise   src/ap/wpa_auth.h       /^      int rsn_pairwise;$/;"   m       struct:wpa_auth_config
-rsn_pmkid      src/common/wpa_common.c /^void rsn_pmkid(const u8 *pmk, size_t pmk_len, const u8 *aa, const u8 *spa,$/;"        f
-rsn_preauth    src/ap/ap_config.h      /^      int rsn_preauth;$/;"    m       struct:hostapd_bss_config
-rsn_preauth    src/ap/wpa_auth.h       /^      int rsn_preauth;$/;"    m       struct:wpa_auth_config
-rsn_preauth_interfaces src/ap/ap_config.h      /^      char *rsn_preauth_interfaces;$/;"       m       struct:hostapd_bss_config
-rsn_rdie       src/common/wpa_common.h /^struct rsn_rdie {$/;" s
-rsn_selector_to_bitfield       src/common/wpa_common.c /^static int rsn_selector_to_bitfield(const u8 *s)$/;"  f       file:
-rsn_testing    src/ap/wpa_auth_ie.c    /^int rsn_testing = 0;$/;"      v
-rts_threshold  src/ap/ap_config.h      /^      int rts_threshold;$/;"  m       struct:hostapd_config
-rx_eapol_key_secure    src/ap/wpa_auth_i.h     /^      unsigned int rx_eapol_key_secure:1;$/;" m       struct:wpa_state_machine
-rx_mic_key     src/common/wpa_common.h /^                      u8 rx_mic_key[8];$/;"   m       struct:wpa_ptk::__anon62::__anon63
-rx_replay_counter      src/rsn_supp/wpa.h      /^    u8 rx_replay_counter[WPA_REPLAY_COUNTER_LEN];$/;" m       struct:wpa_sm
-rx_replay_counter_set  src/rsn_supp/wpa.h      /^    int rx_replay_counter_set;$/;"    m       struct:wpa_sm
-s16    include/utils/common.h  /^typedef int16_t s16;$/;"      t
-s1kh_id        src/ap/wpa_auth.h       /^      u8 s1kh_id[ETH_ALEN]; \/* copied from pull *\/$/;"      m       struct:ft_r0kh_r1kh_resp_frame
-s1kh_id        src/ap/wpa_auth.h       /^      u8 s1kh_id[ETH_ALEN];$/;"       m       struct:ft_r0kh_r1kh_pull_frame
-s1kh_id        src/ap/wpa_auth.h       /^      u8 s1kh_id[ETH_ALEN];$/;"       m       struct:ft_r0kh_r1kh_push_frame
-s32    include/utils/common.h  /^typedef int32_t s32;$/;"      t
-s64    include/utils/common.h  /^typedef int64_t s64;$/;"      t
-s8     include/utils/common.h  /^typedef int8_t s8;$/;"        t
-s_factory_info src/esp_supplicant/esp_wps.c    /^static wps_factory_information_t *s_factory_info = NULL;$/;"  v       file:
-s_mp_add       src/crypto/libtommath.h /^s_mp_add (mp_int * a, mp_int * b, mp_int * c)$/;"     f
-s_mp_add       src/tls/libtommath.h    /^s_mp_add (mp_int * a, mp_int * b, mp_int * c)$/;"     f
-s_mp_exptmod   src/crypto/libtommath.h /^s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)$/;"        f
-s_mp_exptmod   src/tls/libtommath.h    /^s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode)$/;"        f
-s_mp_mul       src/crypto/libtommath.h 132;"   d
-s_mp_mul       src/tls/libtommath.h    134;"   d
-s_mp_mul_digs  src/crypto/libtommath.h /^s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;"      f
-s_mp_mul_digs  src/tls/libtommath.h    /^s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;"      f
-s_mp_mul_high_digs     src/crypto/libtommath.h /^s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;" f
-s_mp_mul_high_digs     src/tls/libtommath.h    /^s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs)$/;" f
-s_mp_sqr       src/crypto/libtommath.h /^s_mp_sqr (mp_int * a, mp_int * b)$/;" f
-s_mp_sqr       src/tls/libtommath.h    /^s_mp_sqr (mp_int * a, mp_int * b)$/;" f
-s_mp_sub       src/crypto/libtommath.h /^s_mp_sub (mp_int * a, mp_int * b, mp_int * c)$/;"     f
-s_mp_sub       src/tls/libtommath.h    /^s_mp_sub (mp_int * a, mp_int * b, mp_int * c)$/;"     f
-s_sm_table     src/ap/wpa_auth.c       /^static void *s_sm_table[WPA_SM_MAX_INDEX];$/;"        v       file:
-s_sm_valid_bitmap      src/ap/wpa_auth.c       /^static u32 s_sm_valid_bitmap = 0;$/;" v       file:
-s_wps_api_lock src/esp_supplicant/esp_wps.c    /^static void *s_wps_api_lock = NULL;  \/* Used in WPS public API only, never be freed *\/$/;"  v       file:
-s_wps_api_sem  src/esp_supplicant/esp_wps.c    /^static void *s_wps_api_sem = NULL;   \/* Sync semaphore used between WPS publi API caller task and WPS task *\/$/;"   v       file:
-s_wps_data_lock        src/esp_supplicant/esp_wps.c    /^static void *s_wps_data_lock = NULL;$/;"      v       file:
-s_wps_enabled  src/esp_supplicant/esp_wps.c    /^static bool s_wps_enabled = false;$/;"        v       file:
-s_wps_sig_cnt  src/esp_supplicant/esp_wps.c    /^static uint8_t s_wps_sig_cnt[SIG_WPS_NUM] = {0};$/;"  v       file:
-s_wps_task_create_sem  src/esp_supplicant/esp_wps.c    /^static void *s_wps_task_create_sem = NULL;$/;"        v       file:
-sa     src/common/ieee802_11_defs.h    /^      u8 sa[6];$/;"   m       struct:ieee80211_mgmt
-sa     src/esp_supplicant/esp_wpa_enterprise.c /^    u8 sa[WPA_ADDR_LEN];$/;"  m       struct:wpa2_rx_param    file:
-sa     src/esp_supplicant/esp_wps.c    /^    u8 sa[WPS_ADDR_LEN];$/;"  m       struct:wps_rx_param     file:
-sa_query_count src/ap/sta_info.h       /^      int sa_query_count; \/* number of pending SA Query requests;$/;"        m       struct:sta_info
-sa_query_req   src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED sa_query_req;$/;"       m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon82
-sa_query_resp  src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED sa_query_resp;$/;"      m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon83
-sa_query_start src/ap/sta_info.h       /^      struct os_time sa_query_start;$/;"      m       struct:sta_info typeref:struct:sta_info::os_time
-sa_query_timed_out     src/ap/sta_info.h       /^      int sa_query_timed_out;$/;"     m       struct:sta_info
-sa_query_trans_id      src/ap/sta_info.h       /^      u8 *sa_query_trans_id; \/* buffer of WLAN_SA_QUERY_TR_ID_LEN *$/;"      m       struct:sta_info
-sae_send_confirm       src/ap/sta_info.h       /^      u16 sae_send_confirm;$/;"       m       struct:sta_info
-sae_state      src/ap/sta_info.h       /^      enum { SAE_INIT, SAE_COMMIT, SAE_CONFIRM } sae_state;$/;"       m       struct:sta_info typeref:enum:sta_info::__anon16
-salt   src/tls/pkcs5.c /^      u8 salt[8];$/;" m       struct:pkcs5_params     file:
-salt_len       src/tls/pkcs5.c /^      size_t salt_len;$/;"    m       struct:pkcs5_params     file:
-scan_cnt       src/wps/wps.h   /^    u8 scan_cnt;$/;"  m       struct:wps_sm
-search_tag     src/tls/tlsv1_cred.c    /^static const u8 * search_tag(const char *tag, const u8 *buf, size_t len)$/;"  f       file:
-sec    port/include/os.h       /^      os_time_t sec;$/;"      m       struct:os_time
-sec_dev_type   src/wps/wps.h   /^      u8 sec_dev_type[WPS_SEC_DEVICE_TYPES][WPS_DEV_TYPE_LEN];$/;"    m       struct:wps_device_data
-sec_dev_type_list      src/wps/wps_attr_parse.h        /^      const u8 *sec_dev_type_list; \/* <= 128 octets *\/$/;"  m       struct:wps_parse_attr
-sec_dev_type_list_len  src/wps/wps_attr_parse.h        /^      size_t sec_dev_type_list_len;$/;"       m       struct:wps_parse_attr
-secondary_channel      src/ap/ap_config.h      /^      int secondary_channel;$/;"      m       struct:hostapd_config
-secpolicy      src/ap/ap_config.h      /^} secpolicy;$/;"      t       typeref:enum:hostap_security_policy
-sel_reg        src/wps/wps.h   /^              int sel_reg;$/;"        m       struct:wps_event_data::wps_event_er_set_selected_registrar
-sel_reg_config_methods src/wps/wps.h   /^              u16 sel_reg_config_methods;$/;" m       struct:wps_event_data::wps_event_er_set_selected_registrar
-sel_reg_config_methods src/wps/wps_attr_parse.h        /^      const u8 *sel_reg_config_methods; \/* 2 octets *\/$/;"  m       struct:wps_parse_attr
-sel_reg_config_methods_override        src/wps/wps_registrar.c /^      int sel_reg_config_methods_override;$/;"        m       struct:wps_registrar    file:
-sel_reg_dev_password_id_override       src/wps/wps_registrar.c /^      int sel_reg_dev_password_id_override;$/;"       m       struct:wps_registrar    file:
-sel_reg_union  src/wps/wps_registrar.c /^      int sel_reg_union;$/;"  m       struct:wps_registrar    file:
-selected_registrar     src/wps/wps_attr_parse.h        /^      const u8 *selected_registrar; \/* 1 octet (Bool) *\/$/;"        m       struct:wps_parse_attr
-selected_registrar     src/wps/wps_registrar.c /^      int selected_registrar;$/;"     m       struct:wps_registrar    file:
-send_eapol     src/ap/wpa_auth.h       /^      int (*send_eapol)(void *ctx, const u8 *addr, const u8 *data,$/;"        m       struct:wpa_auth_callbacks
-send_ether     src/ap/wpa_auth.h       /^      int (*send_ether)(void *ctx, const u8 *dst, u16 proto, const u8 *data,$/;"      m       struct:wpa_auth_callbacks
-send_ft_action src/ap/wpa_auth.h       /^      int (*send_ft_action)(void *ctx, const u8 *dst,$/;"     m       struct:wpa_auth_callbacks
-send_probe_response    src/ap/ap_config.h      /^      u8 send_probe_response;$/;"     m       struct:hostapd_config
-sendto src/rsn_supp/wpa.h      /^    void (* sendto) (void *buffer, uint16_t len);$/;" m       struct:wpa_sm
-seq    src/rsn_supp/wpa.h      /^    u8 seq[10];$/;"   m       struct:install_key
-seq_ctrl       src/common/ieee802_11_defs.h    /^      le16 seq_ctrl;$/;"      m       struct:ieee80211_hdr
-seq_ctrl       src/common/ieee802_11_defs.h    /^      le16 seq_ctrl;$/;"      m       struct:ieee80211_mgmt
-serial_number  src/ap/ap_config.h      /^      char *serial_number;$/;"        m       struct:hostapd_bss_config
-serial_number  src/tls/x509v3.h        /^      unsigned long serial_number;$/;"        m       struct:x509_certificate
-serial_number  src/wps/wps.h   /^              const char *serial_number;$/;"  m       struct:wps_event_data::wps_event_er_ap
-serial_number  src/wps/wps.h   /^              const char *serial_number;$/;"  m       struct:wps_event_data::wps_event_er_enrollee
-serial_number  src/wps/wps.h   /^              const u8 *serial_number;$/;"    m       struct:wps_event_data::wps_event_m2d
-serial_number  src/wps/wps.h   /^      char *serial_number;$/;"        m       struct:wps_device_data
-serial_number  src/wps/wps_attr_parse.h        /^      const u8 *serial_number;$/;"    m       struct:wps_parse_attr
-serial_number_len      src/wps/wps.h   /^              size_t serial_number_len;$/;"   m       struct:wps_event_data::wps_event_m2d
-serial_number_len      src/wps/wps_attr_parse.h        /^      size_t serial_number_len;$/;"   m       struct:wps_parse_attr
-server src/tls/tls_internal.c  /^      int server;$/;" m       struct:tls_global       file:
-server src/tls/tls_internal.c  /^      struct tlsv1_server *server;$/;"        m       struct:tls_connection   typeref:struct:tls_connection::tlsv1_server     file:
-server_cred    src/tls/tls_internal.c  /^      struct tlsv1_credentials *server_cred;$/;"      m       struct:tls_global       typeref:struct:tls_global::tlsv1_credentials    file:
-server_random  src/tls/tls.h   /^      const u8 *server_random;$/;"    m       struct:tls_keys
-server_random  src/tls/tlsv1_client_i.h        /^      u8 server_random[TLS_RANDOM_LEN];$/;"   m       struct:tlsv1_client
-server_random  src/tls/tlsv1_server_i.h        /^      u8 server_random[TLS_RANDOM_LEN];$/;"   m       struct:tlsv1_server
-server_random_len      src/tls/tls.h   /^      size_t server_random_len;$/;"   m       struct:tls_keys
-server_rsa_key src/tls/tlsv1_client_i.h        /^      struct crypto_public_key *server_rsa_key;$/;"   m       struct:tlsv1_client     typeref:struct:tlsv1_client::crypto_public_key
-service_start_time     src/common/ieee802_11_defs.h    /^      le32 service_start_time;$/;"    m       struct:wmm_tspec_element
-session_id     src/eap_peer/eap_peap.c /^      u8 *session_id;$/;"     m       struct:eap_peap_data    file:
-session_id     src/eap_peer/eap_tls.c  /^      u8 *session_id;$/;"     m       struct:eap_tls_data     file:
-session_id     src/eap_peer/eap_ttls.c /^      u8 *session_id;$/;"     m       struct:eap_ttls_data    file:
-session_id     src/tls/tlsv1_client_i.h        /^      u8 session_id[TLS_SESSION_ID_MAX_LEN];$/;"      m       struct:tlsv1_client
-session_id     src/tls/tlsv1_server_i.h        /^      u8 session_id[TLS_SESSION_ID_MAX_LEN];$/;"      m       struct:tlsv1_server
-session_id_len src/tls/tlsv1_client_i.h        /^      size_t session_id_len;$/;"      m       struct:tlsv1_client
-session_id_len src/tls/tlsv1_server_i.h        /^      size_t session_id_len;$/;"      m       struct:tlsv1_server
-session_resumed        src/tls/tlsv1_client_i.h        /^      unsigned int session_resumed:1;$/;"     m       struct:tlsv1_client
-session_ticket src/tls/tlsv1_server_i.h        /^      u8 *session_ticket;$/;" m       struct:tlsv1_server
-session_ticket_cb      src/tls/tlsv1_client_i.h        /^      tlsv1_client_session_ticket_cb session_ticket_cb;$/;"   m       struct:tlsv1_client
-session_ticket_cb      src/tls/tlsv1_server_i.h        /^      tlsv1_server_session_ticket_cb session_ticket_cb;$/;"   m       struct:tlsv1_server
-session_ticket_cb_ctx  src/tls/tlsv1_client_i.h        /^      void *session_ticket_cb_ctx;$/;"        m       struct:tlsv1_client
-session_ticket_cb_ctx  src/tls/tlsv1_server_i.h        /^      void *session_ticket_cb_ctx;$/;"        m       struct:tlsv1_server
-session_ticket_included        src/tls/tlsv1_client_i.h        /^      unsigned int session_ticket_included:1;$/;"     m       struct:tlsv1_client
-session_ticket_len     src/tls/tlsv1_server_i.h        /^      size_t session_ticket_len;$/;"  m       struct:tlsv1_server
-set_assoc_ie   src/rsn_supp/wpa.c      /^set_assoc_ie(u8 * assoc_buf)$/;"      f
-set_eapol      src/ap/wpa_auth.h       /^      void (*set_eapol)(void *ctx, const u8 *addr, wpa_eapol_variable var,$/;"        m       struct:wpa_auth_callbacks
-set_ie_cb      src/wps/wps.h   /^      int (*set_ie_cb)(void *ctx, struct wpabuf *beacon_ie,$/;"       m       struct:wps_registrar_config
-set_ie_cb      src/wps/wps_registrar.c /^      int (*set_ie_cb)(void *ctx, struct wpabuf *beacon_ie,$/;"       m       struct:wps_registrar    file:
-set_key        src/ap/wpa_auth.h       /^      int (*set_key)(void *ctx, int vlan_id, enum wpa_alg alg,$/;"    m       struct:wpa_auth_callbacks
-set_sel_reg    src/wps/wps.h   /^      } set_sel_reg;$/;"      m       union:wps_event_data    typeref:struct:wps_event_data::wps_event_er_set_selected_registrar
-set_sel_reg_cb src/wps/wps.h   /^      void (*set_sel_reg_cb)(void *ctx, int sel_reg, u16 dev_passwd_id,$/;"   m       struct:wps_registrar_config
-set_sel_reg_cb src/wps/wps_registrar.c /^      void (*set_sel_reg_cb)(void *ctx, int sel_reg, u16 dev_passwd_id,$/;"   m       struct:wps_registrar    file:
-set_tx src/rsn_supp/wpa.h      /^    int set_tx;$/;"   m       struct:install_key
-settings_delay_time    src/wps/wps_attr_parse.h        /^      const u8 *settings_delay_time; \/* 1 octet *\/$/;"      m       struct:wps_parse_attr
-sha1   src/crypto/crypto_internal.c    /^              struct SHA1Context sha1;$/;"    m       union:crypto_hash::__anon9      typeref:struct:crypto_hash::__anon9::SHA1Context        file:
-sha1   src/fast_crypto/fast_crypto_internal.c  /^              struct SHA1Context sha1;$/;"    m       union:fast_crypto_hash::__anon61        typeref:struct:fast_crypto_hash::__anon61::SHA1Context  file:
-sha1_cert      src/tls/tlsv1_common.h  /^      struct crypto_hash *sha1_cert;$/;"      m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha1_client    src/tls/tlsv1_common.h  /^      struct crypto_hash *sha1_client;$/;"    m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha1_prf       src/crypto/sha1.c       /^sha1_prf(const u8 *key, size_t key_len, const char *label,$/;"        f
-sha1_server    src/tls/tlsv1_common.h  /^      struct crypto_hash *sha1_server;$/;"    m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha1_vector    src/crypto/sha1-internal.c      /^sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)$/;"        f
-sha256 src/crypto/crypto_internal.c    /^              struct sha256_state sha256;$/;" m       union:crypto_hash::__anon9      typeref:struct:crypto_hash::__anon9::sha256_state       file:
-sha256 src/fast_crypto/fast_crypto_internal.c  /^                mbedtls_sha256_context sha256;$/;"    m       union:fast_crypto_hash::__anon61        file:
-sha256_cert    src/tls/tlsv1_common.h  /^      struct crypto_hash *sha256_cert;$/;"    m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha256_client  src/tls/tlsv1_common.h  /^      struct crypto_hash *sha256_client;$/;"  m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha256_compress        src/crypto/sha256-internal.c    /^sha256_compress(struct sha256_state *md, unsigned char *buf)$/;"      f       file:
-sha256_done    src/crypto/sha256-internal.c    /^sha256_done(struct sha256_state *md, unsigned char *out)$/;"  f       file:
-sha256_init    src/crypto/sha256-internal.c    /^sha256_init(struct sha256_state *md)$/;"      f       file:
-sha256_prf     src/crypto/sha256.c     /^sha256_prf(const u8 *key, size_t key_len, const char *label,$/;"      f
-sha256_process src/crypto/sha256-internal.c    /^sha256_process(struct sha256_state *md, const unsigned char *in,$/;"  f       file:
-sha256_server  src/tls/tlsv1_common.h  /^      struct crypto_hash *sha256_server;$/;"  m       struct:tls_verify_hash  typeref:struct:tls_verify_hash::crypto_hash
-sha256_state   src/crypto/sha256-internal.c    /^struct sha256_state {$/;"     s       file:
-sha256_vector  src/crypto/sha256-internal.c    /^sha256_vector(size_t num_elem, const u8 *addr[], const size_t *len,$/;"       f
-sign   src/crypto/libtommath.h /^    int used, alloc, sign;$/;"        m       struct:__anon8
-sign   src/tls/libtommath.h    /^    int used, alloc, sign;$/;"        m       struct:__anon40
-sign_value     src/tls/x509v3.h        /^      u8 *sign_value;$/;"     m       struct:x509_certificate
-sign_value_len src/tls/x509v3.h        /^      size_t sign_value_len;$/;"      m       struct:x509_certificate
-signature      src/tls/x509v3.h        /^      struct x509_algorithm_identifier signature;$/;" m       struct:x509_certificate typeref:struct:x509_certificate::x509_algorithm_identifier
-signature_alg  src/tls/x509v3.h        /^      struct x509_algorithm_identifier signature_alg;$/;"     m       struct:x509_certificate typeref:struct:x509_certificate::x509_algorithm_identifier
-size   include/utils/wpabuf.h  /^      size_t size; \/* total size of the allocated buffer *\/$/;"     m       struct:wpabuf
-skip_cred_build        src/ap/ap_config.h      /^      int skip_cred_build;$/;"        m       struct:hostapd_bss_config
-skip_cred_build        src/wps/wps.h   /^      int skip_cred_build;$/;"        m       struct:wps_registrar_config
-skip_cred_build        src/wps/wps_registrar.c /^      int skip_cred_build;$/;"        m       struct:wps_registrar    file:
-smk    src/ap/wpa_auth_ie.h    /^      const u8 *smk;$/;"      m       struct:wpa_eapol_ie_parse
-smk    src/rsn_supp/wpa_ie.h   /^      const u8 *smk;$/;"      m       struct:wpa_eapol_ie_parse
-smk_len        src/ap/wpa_auth_ie.h    /^      size_t smk_len;$/;"     m       struct:wpa_eapol_ie_parse
-smk_len        src/rsn_supp/wpa_ie.h   /^      size_t smk_len;$/;"     m       struct:wpa_eapol_ie_parse
-snonce src/common/wpa_common.h /^      u8 snonce[WPA_NONCE_LEN];$/;"   m       struct:rsn_ftie
-snonce src/rsn_supp/wpa.h      /^    u8 snonce[WPA_NONCE_LEN];$/;"     m       struct:wpa_sm
-snonce src/wps/wps_i.h /^      u8 snonce[2 * WPS_SECRET_NONCE_LEN];$/;"        m       struct:wps_data
-soh    src/eap_peer/eap_peap.c /^      int soh; \/* Whether IF-TNCCS-SOH (Statement of Health; Microsoft NAP)$/;"      m       struct:eap_peap_data    file:
-ssi_signal     src/ap/hostapd.h        /^      int ssi_signal; \/* dBm *\/$/;" m       struct:hostapd_frame_info
-ssid   src/ap/ap_config.h      /^      struct hostapd_ssid ssid;$/;"   m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::hostapd_ssid
-ssid   src/ap/ap_config.h      /^      u8 ssid[HOSTAPD_MAX_SSID_LEN];$/;"      m       struct:hostapd_ssid
-ssid   src/ap/sta_info.h       /^      struct hostapd_ssid *ssid; \/* SSID selection based on (Re)AssocReq *\/$/;"     m       struct:sta_info typeref:struct:sta_info::hostapd_ssid
-ssid   src/ap/wpa_auth.h       /^      u8 ssid[SSID_LEN];$/;"  m       struct:wpa_auth_config
-ssid   src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    *ssid;$/;"     m       struct:wps_scan_ie
-ssid   src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t ssid[32];$/;"     m       struct:wifi_ssid
-ssid   src/wps/wps.h   /^      u8 ssid[32];$/;"        m       struct:wps_context
-ssid   src/wps/wps.h   /^      u8 ssid[32];$/;"        m       struct:wps_credential
-ssid   src/wps/wps.h   /^    u8 ssid[32];$/;"  m       struct:wps_sm
-ssid   src/wps/wps_attr_parse.h        /^      const u8 *ssid; \/* <= 32 octets *\/$/;"        m       struct:wps_parse_attr
-ssid_len       src/ap/ap_config.h      /^      size_t ssid_len;$/;"    m       struct:hostapd_ssid
-ssid_len       src/ap/wpa_auth.h       /^      size_t ssid_len;$/;"    m       struct:wpa_auth_config
-ssid_len       src/wps/wps.h   /^      size_t ssid_len;$/;"    m       struct:wps_context
-ssid_len       src/wps/wps.h   /^      size_t ssid_len;$/;"    m       struct:wps_credential
-ssid_len       src/wps/wps.h   /^    u8 ssid_len;$/;"  m       struct:wps_sm
-ssid_len       src/wps/wps_attr_parse.h        /^      size_t ssid_len;$/;"    m       struct:wps_parse_attr
-ssid_set       src/ap/ap_config.h      /^      unsigned int ssid_set:1;$/;"    m       struct:hostapd_ssid
-ssl    src/eap_peer/eap_peap.c /^      struct eap_ssl_data ssl;$/;"    m       struct:eap_peap_data    typeref:struct:eap_peap_data::eap_ssl_data      file:
-ssl    src/eap_peer/eap_tls.c  /^      struct eap_ssl_data ssl;$/;"    m       struct:eap_tls_data     typeref:struct:eap_tls_data::eap_ssl_data       file:
-ssl    src/eap_peer/eap_ttls.c /^      struct eap_ssl_data ssl;$/;"    m       struct:eap_ttls_data    typeref:struct:eap_ttls_data::eap_ssl_data      file:
-ssl_ctx        src/eap_peer/eap_i.h    /^      void *ssl_ctx;$/;"      m       struct:eap_sm
-ssl_ctx        src/eap_peer/eap_tls.c  /^      void *ssl_ctx;$/;"      m       struct:eap_tls_data     file:
-ssl_ctx        src/eap_peer/eap_tls_common.h   /^      void *ssl_ctx;$/;"      m       struct:eap_ssl_data
-st_cb  src/wps/wps.h   /^    wps_st_cb_t st_cb;$/;"    m       struct:wps_sm
-sta_addr       src/common/ieee802_11_defs.h    /^                                      u8 sta_addr[ETH_ALEN];$/;"      m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon80
-sta_addr       src/common/ieee802_11_defs.h    /^                                      u8 sta_addr[ETH_ALEN];$/;"      m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-sta_info       src/ap/sta_info.h       /^struct sta_info {$/;" s
-started        src/ap/wpa_auth_i.h     /^      unsigned int started:1;$/;"     m       struct:wpa_state_machine
-state  src/crypto/md4-internal.c       /^      u32 state[4];$/;"       m       struct:MD4Context       file:
-state  src/crypto/sha1_i.h     /^      u32 state[5];$/;"       m       struct:SHA1Context
-state  src/crypto/sha256-internal.c    /^      u32 state[8], curlen;$/;"       m       struct:sha256_state     file:
-state  src/tls/tlsv1_client_i.h        /^      } state;$/;"    m       struct:tlsv1_client     typeref:enum:tlsv1_client::__anon43
-state  src/tls/tlsv1_server_i.h        /^      } state;$/;"    m       struct:tlsv1_server     typeref:enum:tlsv1_server::__anon39
-state  src/wps/wps.h   /^              } state;$/;"    m       struct:wps_event_data::wps_event_er_set_selected_registrar      typeref:enum:wps_event_data::wps_event_er_set_selected_registrar::__anon54
-state  src/wps/wps_i.h /^      } state;$/;"    m       struct:wps_data typeref:enum:wps_data::__anon53
-static_wep_only        src/wps/wps.h   /^      int static_wep_only;$/;"        m       struct:wps_registrar_config
-static_wep_only        src/wps/wps_registrar.c /^      int static_wep_only;$/;"        m       struct:wps_registrar    file:
-status src/eap_peer/eap_tlv_common.h   /^      be16 status;$/;"        m       struct:eap_tlv_intermediate_result_tlv
-status src/eap_peer/eap_tlv_common.h   /^      be16 status;$/;"        m       struct:eap_tlv_result_tlv
-status_code    src/common/ieee802_11_defs.h    /^                                      le16 status_code;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-status_code    src/common/ieee802_11_defs.h    /^                                      u8 status_code;$/;"     m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon78
-status_code    src/common/ieee802_11_defs.h    /^                      le16 status_code;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon67
-status_code    src/common/ieee802_11_defs.h    /^                      le16 status_code;$/;"   m       struct:ieee80211_mgmt::__anon66::__anon70
-status_code    src/common/wpa_common.h /^      le16 status_code;$/;"   m       struct:rsn_rdie
-stbc_param     src/common/ieee802_11_defs.h    /^      le16 stbc_param;$/;"    m       struct:ieee80211_ht_operation
-subject        src/tls/tls.h   /^              const char *subject;$/;"        m       struct:tls_event_data::__anon34
-subject        src/tls/tls.h   /^              const char *subject;$/;"        m       struct:tls_event_data::__anon35
-subject        src/tls/x509v3.h        /^      struct x509_name subject;$/;"   m       struct:x509_certificate typeref:struct:x509_certificate::x509_name
-subject_match  src/tls/tls.h   /^      const char *subject_match;$/;"  m       struct:tls_connection_params
-subtype        src/eap_peer/eap_tlv_common.h   /^      u8 subtype;$/;" m       struct:eap_tlv_crypto_binding_tlv
-success        src/eap_peer/eap_mschapv2.c     /^      int success;$/;"        m       struct:eap_mschapv2_data        file:
-suite  src/tls/tlsv1_common.h  /^      u16 suite;$/;"  m       struct:tls_cipher_suite
-sup_pmk_r1_name        src/ap/wpa_auth_i.h     /^      u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; \/* PMKR1Name from EAPOL-Key$/;"  m       struct:wpa_state_machine
-supported_mcs_set      src/common/ieee802_11_defs.h    /^      u8 supported_mcs_set[16];$/;"   m       struct:ieee80211_ht_capabilities
-supported_rates        src/ap/ap_config.h      /^      int *supported_rates;$/;"       m       struct:hostapd_config
-supported_rates        src/ap/sta_info.h       /^      u8 supported_rates[WLAN_SUPP_RATES_MAX];$/;"    m       struct:sta_info
-supported_rates_len    src/ap/sta_info.h       /^      int supported_rates_len;$/;"    m       struct:sta_info
-surplus_bandwidth_allowance    src/common/ieee802_11_defs.h    /^      le16 surplus_bandwidth_allowance;$/;"   m       struct:wmm_tspec_element
-suspension_interval    src/common/ieee802_11_defs.h    /^      le32 suspension_interval;$/;"   m       struct:wmm_tspec_element
-switch_count   src/common/ieee802_11_defs.h    /^                                      u8 switch_count;$/;"    m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-switch_mode    src/common/ieee802_11_defs.h    /^                                      u8 switch_mode;$/;"     m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon79
-tag    src/tls/asn1.h  /^      unsigned int tag, length;$/;"   m       struct:asn1_hdr
-target_ap_addr src/common/ieee802_11_defs.h    /^                                      u8 target_ap_addr[ETH_ALEN];$/;"        m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon80
-target_ap_addr src/common/ieee802_11_defs.h    /^                                      u8 target_ap_addr[ETH_ALEN];$/;"        m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-tbs_cert_len   src/tls/x509v3.h        /^      size_t tbs_cert_len;$/;"        m       struct:x509_certificate
-tbs_cert_start src/tls/x509v3.h        /^      const u8 *tbs_cert_start;$/;"   m       struct:x509_certificate
-timeout_next   src/ap/sta_info.h       /^      } timeout_next;$/;"     m       struct:sta_info typeref:enum:sta_info::__anon15
-timestamp      src/ap/wpa_auth.h       /^      u8 timestamp[4]; \/* current time in seconds since unix epoch, little$/;"       m       struct:ft_r0kh_r1kh_push_frame
-timestamp      src/common/ieee802_11_defs.h    /^                      u8 timestamp[8];$/;"    m       struct:ieee80211_mgmt::__anon66::__anon73
-timestamp      src/common/ieee802_11_defs.h    /^                      u8 timestamp[8];$/;"    m       struct:ieee80211_mgmt::__anon66::__anon75
-timestamp      src/wps/wps_registrar.c /^      struct os_time timestamp;$/;"   m       struct:wps_pbc_session  typeref:struct:wps_pbc_session::os_time file:
-tk1    src/common/wpa_common.h /^      u8 tk1[16]; \/* Temporal Key 1 (TK1) *\/$/;"    m       struct:wpa_ptk
-tk2    src/common/wpa_common.h /^              u8 tk2[16]; \/* Temporal Key 2 (TK2) *\/$/;"    m       union:wpa_ptk::__anon62
-tls_alert      src/tls/tlsv1_client.c  /^void tls_alert(struct tlsv1_client *conn, u8 level, u8 description)$/;"       f
-tls_capabilities       src/tls/tls_internal.c  /^unsigned int tls_capabilities(void *tls_ctx)$/;"      f
-tls_cipher     src/tls/tlsv1_common.h  /^} tls_cipher;$/;"     t       typeref:enum:__anon50
-tls_cipher_data        src/tls/tlsv1_common.h  /^struct tls_cipher_data {$/;"  s
-tls_cipher_suite       src/tls/tlsv1_common.h  /^struct tls_cipher_suite {$/;" s
-tls_cipher_suites      src/tls/tlsv1_common.c  /^static const struct tls_cipher_suite tls_cipher_suites[] = {$/;"      v       typeref:struct:tls_cipher_suite file:
-tls_cipher_type        src/tls/tlsv1_common.h  /^} tls_cipher_type;$/;"        t       typeref:enum:__anon52
-tls_ciphers    src/tls/tlsv1_common.c  /^static const struct tls_cipher_data tls_ciphers[] = {$/;"     v       typeref:struct:tls_cipher_data  file:
-tls_client_cert_chain_der_len  src/tls/tlsv1_client_write.c    /^static size_t tls_client_cert_chain_der_len(struct tlsv1_client *conn)$/;"    f       file:
-tls_config     src/tls/tls.h   /^struct tls_config {$/;"       s
-tls_connection src/tls/tls_internal.c  /^struct tls_connection {$/;"   s       file:
-tls_connection_client_hello_ext        src/tls/tls_internal.c  /^int tls_connection_client_hello_ext(void *tls_ctx, struct tls_connection *conn,$/;"   f
-tls_connection_decrypt src/tls/tls_internal.c  /^struct wpabuf * tls_connection_decrypt(void *tls_ctx,$/;"     f
-tls_connection_decrypt2        src/tls/tls_internal.c  /^struct wpabuf * tls_connection_decrypt2(void *tls_ctx,$/;"    f
-tls_connection_deinit  src/tls/tls_internal.c  /^void tls_connection_deinit(void *tls_ctx, struct tls_connection *conn)$/;"    f
-tls_connection_enable_workaround       src/tls/tls_internal.c  /^int tls_connection_enable_workaround(void *tls_ctx,$/;"       f
-tls_connection_encrypt src/tls/tls_internal.c  /^struct wpabuf * tls_connection_encrypt(void *tls_ctx,$/;"     f
-tls_connection_established     src/tls/tls_internal.c  /^int tls_connection_established(void *tls_ctx, struct tls_connection *conn)$/;"        f
-tls_connection_get_failed      src/tls/tls_internal.c  /^int tls_connection_get_failed(void *tls_ctx, struct tls_connection *conn)$/;" f
-tls_connection_get_keyblock_size       src/tls/tls_internal.c  /^int tls_connection_get_keyblock_size(void *tls_ctx,$/;"       f
-tls_connection_get_keys        src/tls/tls_internal.c  /^int tls_connection_get_keys(void *tls_ctx, struct tls_connection *conn,$/;"   f
-tls_connection_get_read_alerts src/tls/tls_internal.c  /^int tls_connection_get_read_alerts(void *tls_ctx, struct tls_connection *conn)$/;"    f
-tls_connection_get_write_alerts        src/tls/tls_internal.c  /^int tls_connection_get_write_alerts(void *tls_ctx,$/;"        f
-tls_connection_handshake       src/tls/tls_internal.c  /^struct wpabuf * tls_connection_handshake(void *tls_ctx,$/;"   f
-tls_connection_handshake2      src/tls/tls_internal.c  /^struct wpabuf * tls_connection_handshake2(void *tls_ctx,$/;"  f
-tls_connection_init    src/tls/tls_internal.c  /^struct tls_connection * tls_connection_init(void *tls_ctx)$/;"        f
-tls_connection_params  src/tls/tls.h   /^struct tls_connection_params {$/;"    s
-tls_connection_prf     src/tls/tls_internal.c  /^int tls_connection_prf(void *tls_ctx, struct tls_connection *conn,$/;"        f
-tls_connection_resumed src/tls/tls_internal.c  /^int tls_connection_resumed(void *tls_ctx, struct tls_connection *conn)$/;"    f
-tls_connection_server_handshake        src/tls/tls_internal.c  /^struct wpabuf * tls_connection_server_handshake(void *tls_ctx,$/;"    f
-tls_connection_set_cipher_list src/tls/tls_internal.c  /^int tls_connection_set_cipher_list(void *tls_ctx, struct tls_connection *conn,$/;"    f
-tls_connection_set_params      src/tls/tls_internal.c  /^int tls_connection_set_params(void *tls_ctx, struct tls_connection *conn,$/;" f
-tls_connection_set_session_ticket_cb   src/tls/tls_internal.c  /^int tls_connection_set_session_ticket_cb(void *tls_ctx,$/;"   f
-tls_connection_set_verify      src/tls/tls_internal.c  /^int tls_connection_set_verify(void *tls_ctx, struct tls_connection *conn,$/;" f
-tls_connection_shutdown        src/tls/tls_internal.c  /^int tls_connection_shutdown(void *tls_ctx, struct tls_connection *conn)$/;"   f
-tls_deinit     src/tls/tls_internal.c  /^void tls_deinit(void *ssl_ctx)$/;"    f
-tls_derive_keys        src/tls/tlsv1_client.c  /^int tls_derive_keys(struct tlsv1_client *conn,$/;"    f
-tls_derive_pre_master_secret   src/tls/tlsv1_client.c  /^int tls_derive_pre_master_secret(u8 *pre_master_secret)$/;"   f
-tls_event      src/tls/tls.h   /^enum tls_event {$/;"  g
-tls_event_data src/tls/tls.h   /^union tls_event_data {$/;"    u
-tls_fail_reason        src/tls/tls.h   /^enum tls_fail_reason {$/;"    g
-tls_get_cipher src/tls/tls_internal.c  /^int tls_get_cipher(void *tls_ctx, struct tls_connection *conn,$/;"    f
-tls_get_cipher_data    src/tls/tlsv1_common.c  /^const struct tls_cipher_data * tls_get_cipher_data(tls_cipher cipher)$/;"     f
-tls_get_cipher_suite   src/tls/tlsv1_common.c  /^const struct tls_cipher_suite * tls_get_cipher_suite(u16 suite)$/;"   f
-tls_get_errors src/tls/tls_internal.c  /^int tls_get_errors(void *tls_ctx)$/;" f
-tls_global     src/tls/tls_internal.c  /^struct tls_global {$/;"       s       file:
-tls_global_set_params  src/tls/tls_internal.c  /^int tls_global_set_params(void *tls_ctx,$/;"  f
-tls_global_set_verify  src/tls/tls_internal.c  /^int tls_global_set_verify(void *tls_ctx, int check_crl)$/;"   f
-tls_hash       src/tls/tlsv1_common.h  /^} tls_hash;$/;"       t       typeref:enum:__anon51
-tls_in src/eap_peer/eap_tls_common.h   /^      struct wpabuf *tls_in;$/;"      m       struct:eap_ssl_data     typeref:struct:eap_ssl_data::wpabuf
-tls_in_left    src/eap_peer/eap_tls_common.h   /^      size_t tls_in_left;$/;" m       struct:eap_ssl_data
-tls_in_total   src/eap_peer/eap_tls_common.h   /^      size_t tls_in_total;$/;"        m       struct:eap_ssl_data
-tls_init       src/tls/tls_internal.c  /^void * tls_init(void)$/;"     f
-tls_key_exchange       src/tls/tlsv1_common.h  /^} tls_key_exchange;$/;"       t       typeref:enum:__anon49
-tls_keys       src/tls/tls.h   /^struct tls_keys {$/;" s
-tls_out        src/eap_peer/eap_tls_common.h   /^      struct wpabuf *tls_out;$/;"     m       struct:eap_ssl_data     typeref:struct:eap_ssl_data::wpabuf
-tls_out_limit  src/eap_peer/eap_tls_common.h   /^      size_t tls_out_limit;$/;"       m       struct:eap_ssl_data
-tls_out_pos    src/eap_peer/eap_tls_common.h   /^      size_t tls_out_pos;$/;" m       struct:eap_ssl_data
-tls_parse_cert src/tls/tlsv1_common.c  /^int tls_parse_cert(const u8 *buf, size_t len, struct crypto_public_key **pk)$/;"      f
-tls_prf        src/tls/tlsv1_common.c  /^int tls_prf(u16 ver, const u8 *secret, size_t secret_len, const char *label,$/;"      f
-tls_prf_sha1_md5       src/tls/tls_internal.c  /^int tls_prf_sha1_md5(const u8 *secret, size_t secret_len, const char *label,$/;"      f
-tls_process_application_data   src/tls/tlsv1_client_read.c     /^static int tls_process_application_data(struct tlsv1_client *conn, u8 ct,$/;" f       file:
-tls_process_certificate        src/tls/tlsv1_client_read.c     /^static int tls_process_certificate(struct tlsv1_client *conn, u8 ct,$/;"      f       file:
-tls_process_certificate        src/tls/tlsv1_server_read.c     /^static int tls_process_certificate(struct tlsv1_server *conn, u8 ct,$/;"      f       file:
-tls_process_certificate_request        src/tls/tlsv1_client_read.c     /^static int tls_process_certificate_request(struct tlsv1_client *conn, u8 ct,$/;"      f       file:
-tls_process_certificate_verify src/tls/tlsv1_server_read.c     /^static int tls_process_certificate_verify(struct tlsv1_server *conn, u8 ct,$/;"       f       file:
-tls_process_change_cipher_spec src/tls/tlsv1_server_read.c     /^static int tls_process_change_cipher_spec(struct tlsv1_server *conn,$/;"      f       file:
-tls_process_client_finished    src/tls/tlsv1_server_read.c     /^static int tls_process_client_finished(struct tlsv1_server *conn, u8 ct,$/;"  f       file:
-tls_process_client_hello       src/tls/tlsv1_server_read.c     /^static int tls_process_client_hello(struct tlsv1_server *conn, u8 ct,$/;"     f       file:
-tls_process_client_key_exchange        src/tls/tlsv1_server_read.c     /^static int tls_process_client_key_exchange(struct tlsv1_server *conn, u8 ct,$/;"      f       file:
-tls_process_client_key_exchange_dh_anon        src/tls/tlsv1_server_read.c     /^static int tls_process_client_key_exchange_dh_anon($/;"       f       file:
-tls_process_client_key_exchange_rsa    src/tls/tlsv1_server_read.c     /^static int tls_process_client_key_exchange_rsa($/;"   f       file:
-tls_process_server_change_cipher_spec  src/tls/tlsv1_client_read.c     /^static int tls_process_server_change_cipher_spec(struct tlsv1_client *conn,$/;"       f       file:
-tls_process_server_finished    src/tls/tlsv1_client_read.c     /^static int tls_process_server_finished(struct tlsv1_client *conn, u8 ct,$/;"  f       file:
-tls_process_server_hello       src/tls/tlsv1_client_read.c     /^static int tls_process_server_hello(struct tlsv1_client *conn, u8 ct,$/;"     f       file:
-tls_process_server_hello_done  src/tls/tlsv1_client_read.c     /^static int tls_process_server_hello_done(struct tlsv1_client *conn, u8 ct,$/;"        f       file:
-tls_process_server_key_exchange        src/tls/tlsv1_client_read.c     /^static int tls_process_server_key_exchange(struct tlsv1_client *conn, u8 ct,$/;"      f       file:
-tls_ref_count  src/tls/tls_internal.c  /^static int tls_ref_count = 0;$/;"     v       file:
-tls_send_change_cipher_spec    src/tls/tlsv1_client_write.c    /^static u8 * tls_send_change_cipher_spec(struct tlsv1_client *conn,$/;"        f       file:
-tls_send_change_cipher_spec    src/tls/tlsv1_server_write.c    /^static u8 * tls_send_change_cipher_spec(struct tlsv1_server *conn,$/;"        f       file:
-tls_send_client_hello  src/tls/tlsv1_client_write.c    /^u8 * tls_send_client_hello(struct tlsv1_client *conn, size_t *out_len)$/;"    f
-tls_send_client_key_exchange   src/tls/tlsv1_client_write.c    /^static u8 * tls_send_client_key_exchange(struct tlsv1_client *conn,$/;"       f       file:
-tls_send_server_hello  src/tls/tlsv1_server_write.c    /^static u8 * tls_send_server_hello(struct tlsv1_server *conn, size_t *out_len)$/;"     f       file:
-tls_server_cert_chain_der_len  src/tls/tlsv1_server_write.c    /^static size_t tls_server_cert_chain_der_len(struct tlsv1_server *conn)$/;"    f       file:
-tls_server_key_exchange_allowed        src/tls/tlsv1_common.c  /^int tls_server_key_exchange_allowed(tls_cipher cipher)$/;"    f
-tls_session_ticket_cb  src/tls/tls.h   /^typedef int (*tls_session_ticket_cb)$/;"      t
-tls_verify_hash        src/tls/tlsv1_common.h  /^struct tls_verify_hash {$/;"  s
-tls_verify_hash_add    src/tls/tlsv1_common.c  /^void tls_verify_hash_add(struct tls_verify_hash *verify, const u8 *buf,$/;"   f
-tls_verify_hash_free   src/tls/tlsv1_common.c  /^void tls_verify_hash_free(struct tls_verify_hash *verify)$/;" f
-tls_verify_hash_init   src/tls/tlsv1_common.c  /^int tls_verify_hash_init(struct tls_verify_hash *verify)$/;"  f
-tls_version    src/tls/tlsv1_record.h  /^      u16 tls_version;$/;"    m       struct:tlsv1_record_layer
-tls_version_ok src/tls/tlsv1_common.c  /^int tls_version_ok(u16 ver)$/;"       f
-tls_version_str        src/tls/tlsv1_common.c  /^const char * tls_version_str(u16 ver)$/;"     f
-tls_write_client_certificate   src/tls/tlsv1_client_write.c    /^static int tls_write_client_certificate(struct tlsv1_client *conn,$/;"        f       file:
-tls_write_client_certificate_verify    src/tls/tlsv1_client_write.c    /^static int tls_write_client_certificate_verify(struct tlsv1_client *conn,$/;" f       file:
-tls_write_client_change_cipher_spec    src/tls/tlsv1_client_write.c    /^static int tls_write_client_change_cipher_spec(struct tlsv1_client *conn,$/;" f       file:
-tls_write_client_finished      src/tls/tlsv1_client_write.c    /^static int tls_write_client_finished(struct tlsv1_client *conn,$/;"   f       file:
-tls_write_client_key_exchange  src/tls/tlsv1_client_write.c    /^static int tls_write_client_key_exchange(struct tlsv1_client *conn,$/;"       f       file:
-tls_write_server_certificate   src/tls/tlsv1_server_write.c    /^static int tls_write_server_certificate(struct tlsv1_server *conn,$/;"        f       file:
-tls_write_server_certificate_request   src/tls/tlsv1_server_write.c    /^static int tls_write_server_certificate_request(struct tlsv1_server *conn,$/;"        f       file:
-tls_write_server_change_cipher_spec    src/tls/tlsv1_server_write.c    /^static int tls_write_server_change_cipher_spec(struct tlsv1_server *conn,$/;" f       file:
-tls_write_server_finished      src/tls/tlsv1_server_write.c    /^static int tls_write_server_finished(struct tlsv1_server *conn,$/;"   f       file:
-tls_write_server_hello src/tls/tlsv1_server_write.c    /^static int tls_write_server_hello(struct tlsv1_server *conn,$/;"      f       file:
-tls_write_server_hello_done    src/tls/tlsv1_server_write.c    /^static int tls_write_server_hello_done(struct tlsv1_server *conn,$/;" f       file:
-tls_write_server_key_exchange  src/tls/tlsv1_server_write.c    /^static int tls_write_server_key_exchange(struct tlsv1_server *conn,$/;"       f       file:
-tlsv1_add_cert src/tls/tlsv1_cred.c    /^static int tlsv1_add_cert(struct x509_certificate **chain,$/;"        f       file:
-tlsv1_add_cert_der     src/tls/tlsv1_cred.c    /^static int tlsv1_add_cert_der(struct x509_certificate **chain,$/;"    f       file:
-tlsv1_client   src/tls/tlsv1_client_i.h        /^struct tlsv1_client {$/;"     s
-tlsv1_client_decrypt   src/tls/tlsv1_client.c  /^struct wpabuf * tlsv1_client_decrypt(struct tlsv1_client *conn,$/;"   f
-tlsv1_client_deinit    src/tls/tlsv1_client.c  /^void tlsv1_client_deinit(struct tlsv1_client *conn)$/;"       f
-tlsv1_client_encrypt   src/tls/tlsv1_client.c  /^int tlsv1_client_encrypt(struct tlsv1_client *conn,$/;"       f
-tlsv1_client_established       src/tls/tlsv1_client.c  /^int tlsv1_client_established(struct tlsv1_client *conn)$/;"   f
-tlsv1_client_free_dh   src/tls/tlsv1_client.c  /^void tlsv1_client_free_dh(struct tlsv1_client *conn)$/;"      f
-tlsv1_client_get_cipher        src/tls/tlsv1_client.c  /^int tlsv1_client_get_cipher(struct tlsv1_client *conn, char *buf,$/;" f
-tlsv1_client_get_keyblock_size src/tls/tlsv1_client.c  /^int tlsv1_client_get_keyblock_size(struct tlsv1_client *conn)$/;"     f
-tlsv1_client_get_keys  src/tls/tlsv1_client.c  /^int tlsv1_client_get_keys(struct tlsv1_client *conn, struct tls_keys *keys)$/;"       f
-tlsv1_client_global_deinit     src/tls/tlsv1_client.c  /^void tlsv1_client_global_deinit(void)$/;"     f
-tlsv1_client_global_init       src/tls/tlsv1_client.c  /^int tlsv1_client_global_init(void)$/;"        f
-tlsv1_client_handshake src/tls/tlsv1_client.c  /^u8 * tlsv1_client_handshake(struct tlsv1_client *conn,$/;"    f
-tlsv1_client_handshake_write   src/tls/tlsv1_client_write.c    /^u8 * tlsv1_client_handshake_write(struct tlsv1_client *conn, size_t *out_len,$/;"     f
-tlsv1_client_hello_ext src/tls/tlsv1_client.c  /^int tlsv1_client_hello_ext(struct tlsv1_client *conn, int ext_type,$/;"       f
-tlsv1_client_init      src/tls/tlsv1_client.c  /^struct tlsv1_client * tlsv1_client_init(void)$/;"     f
-tlsv1_client_prf       src/tls/tlsv1_client.c  /^int tlsv1_client_prf(struct tlsv1_client *conn, const char *label,$/;"        f
-tlsv1_client_process_handshake src/tls/tlsv1_client_read.c     /^int tlsv1_client_process_handshake(struct tlsv1_client *conn, u8 ct,$/;"      f
-tlsv1_client_resumed   src/tls/tlsv1_client.c  /^int tlsv1_client_resumed(struct tlsv1_client *conn)$/;"       f
-tlsv1_client_send_alert        src/tls/tlsv1_client_write.c    /^u8 * tlsv1_client_send_alert(struct tlsv1_client *conn, u8 level,$/;" f
-tlsv1_client_session_ticket_cb src/tls/tlsv1_client.h  /^typedef int (*tlsv1_client_session_ticket_cb)$/;"     t
-tlsv1_client_set_cipher_list   src/tls/tlsv1_client.c  /^int tlsv1_client_set_cipher_list(struct tlsv1_client *conn, u8 *ciphers)$/;"  f
-tlsv1_client_set_cred  src/tls/tlsv1_client.c  /^int tlsv1_client_set_cred(struct tlsv1_client *conn,$/;"      f
-tlsv1_client_set_session_ticket_cb     src/tls/tlsv1_client.c  /^void tlsv1_client_set_session_ticket_cb(struct tlsv1_client *conn,$/;"        f
-tlsv1_client_set_time_checks   src/tls/tlsv1_client.c  /^void tlsv1_client_set_time_checks(struct tlsv1_client *conn, int enabled)$/;" f
-tlsv1_client_shutdown  src/tls/tlsv1_client.c  /^int tlsv1_client_shutdown(struct tlsv1_client *conn)$/;"      f
-tlsv1_cred_alloc       src/tls/tlsv1_cred.c    /^struct tlsv1_credentials * tlsv1_cred_alloc(void)$/;" f
-tlsv1_cred_free        src/tls/tlsv1_cred.c    /^void tlsv1_cred_free(struct tlsv1_credentials *cred)$/;"      f
-tlsv1_credentials      src/tls/tlsv1_cred.h    /^struct tlsv1_credentials {$/;"        s
-tlsv1_key_x_anon_dh    src/tls/tlsv1_client_write.c    /^static int tlsv1_key_x_anon_dh(struct tlsv1_client *conn, u8 **pos, u8 *end)$/;"      f       file:
-tlsv1_key_x_rsa        src/tls/tlsv1_client_write.c    /^static int tlsv1_key_x_rsa(struct tlsv1_client *conn, u8 **pos, u8 *end)$/;"  f       file:
-tlsv1_process_diffie_hellman   src/tls/tlsv1_client_read.c     /^static int tlsv1_process_diffie_hellman(struct tlsv1_client *conn,$/;"        f       file:
-tlsv1_record_change_read_cipher        src/tls/tlsv1_record.c  /^int tlsv1_record_change_read_cipher(struct tlsv1_record_layer *rl)$/;"        f
-tlsv1_record_change_write_cipher       src/tls/tlsv1_record.c  /^int tlsv1_record_change_write_cipher(struct tlsv1_record_layer *rl)$/;"       f
-tlsv1_record_layer     src/tls/tlsv1_record.h  /^struct tlsv1_record_layer {$/;"       s
-tlsv1_record_receive   src/tls/tlsv1_record.c  /^int tlsv1_record_receive(struct tlsv1_record_layer *rl,$/;"   f
-tlsv1_record_send      src/tls/tlsv1_record.c  /^int tlsv1_record_send(struct tlsv1_record_layer *rl, u8 content_type, u8 *buf,$/;"    f
-tlsv1_record_set_cipher_suite  src/tls/tlsv1_record.c  /^int tlsv1_record_set_cipher_suite(struct tlsv1_record_layer *rl,$/;"  f
-tlsv1_server   src/tls/tlsv1_server_i.h        /^struct tlsv1_server {$/;"     s
-tlsv1_server_alert     src/tls/tlsv1_server.c  /^void tlsv1_server_alert(struct tlsv1_server *conn, u8 level, u8 description)$/;"      f
-tlsv1_server_clear_data        src/tls/tlsv1_server.c  /^static void tlsv1_server_clear_data(struct tlsv1_server *conn)$/;"    f       file:
-tlsv1_server_decrypt   src/tls/tlsv1_server.c  /^int tlsv1_server_decrypt(struct tlsv1_server *conn,$/;"       f
-tlsv1_server_deinit    src/tls/tlsv1_server.c  /^void tlsv1_server_deinit(struct tlsv1_server *conn)$/;"       f
-tlsv1_server_derive_keys       src/tls/tlsv1_server.c  /^int tlsv1_server_derive_keys(struct tlsv1_server *conn,$/;"   f
-tlsv1_server_encrypt   src/tls/tlsv1_server.c  /^int tlsv1_server_encrypt(struct tlsv1_server *conn,$/;"       f
-tlsv1_server_established       src/tls/tlsv1_server.c  /^int tlsv1_server_established(struct tlsv1_server *conn)$/;"   f
-tlsv1_server_get_cipher        src/tls/tlsv1_server.c  /^int tlsv1_server_get_cipher(struct tlsv1_server *conn, char *buf,$/;" f
-tlsv1_server_get_keyblock_size src/tls/tlsv1_server.c  /^int tlsv1_server_get_keyblock_size(struct tlsv1_server *conn)$/;"     f
-tlsv1_server_get_keys  src/tls/tlsv1_server.c  /^int tlsv1_server_get_keys(struct tlsv1_server *conn, struct tls_keys *keys)$/;"       f
-tlsv1_server_global_deinit     src/tls/tlsv1_server.c  /^void tlsv1_server_global_deinit(void)$/;"     f
-tlsv1_server_global_init       src/tls/tlsv1_server.c  /^int tlsv1_server_global_init(void)$/;"        f
-tlsv1_server_handshake src/tls/tlsv1_server.c  /^u8 * tlsv1_server_handshake(struct tlsv1_server *conn,$/;"    f
-tlsv1_server_handshake_write   src/tls/tlsv1_server_write.c    /^u8 * tlsv1_server_handshake_write(struct tlsv1_server *conn, size_t *out_len)$/;"     f
-tlsv1_server_init      src/tls/tlsv1_server.c  /^struct tlsv1_server * tlsv1_server_init(struct tlsv1_credentials *cred)$/;"   f
-tlsv1_server_prf       src/tls/tlsv1_server.c  /^int tlsv1_server_prf(struct tlsv1_server *conn, const char *label,$/;"        f
-tlsv1_server_process_handshake src/tls/tlsv1_server_read.c     /^int tlsv1_server_process_handshake(struct tlsv1_server *conn, u8 ct,$/;"      f
-tlsv1_server_resumed   src/tls/tlsv1_server.c  /^int tlsv1_server_resumed(struct tlsv1_server *conn)$/;"       f
-tlsv1_server_send_alert        src/tls/tlsv1_server_write.c    /^u8 * tlsv1_server_send_alert(struct tlsv1_server *conn, u8 level,$/;" f
-tlsv1_server_session_ticket_cb src/tls/tlsv1_server.h  /^typedef int (*tlsv1_server_session_ticket_cb)$/;"     t
-tlsv1_server_set_cipher_list   src/tls/tlsv1_server.c  /^int tlsv1_server_set_cipher_list(struct tlsv1_server *conn, u8 *ciphers)$/;"  f
-tlsv1_server_set_session_ticket_cb     src/tls/tlsv1_server.c  /^void tlsv1_server_set_session_ticket_cb(struct tlsv1_server *conn,$/;"        f
-tlsv1_server_set_verify        src/tls/tlsv1_server.c  /^int tlsv1_server_set_verify(struct tlsv1_server *conn, int verify_peer)$/;"   f
-tlsv1_server_shutdown  src/tls/tlsv1_server.c  /^int tlsv1_server_shutdown(struct tlsv1_server *conn)$/;"      f
-tlsv1_set_ca_cert      src/tls/tlsv1_cred.c    /^int tlsv1_set_ca_cert(struct tlsv1_credentials *cred, const char *cert,$/;"   f
-tlsv1_set_cert src/tls/tlsv1_cred.c    /^int tlsv1_set_cert(struct tlsv1_credentials *cred, const char *cert,$/;"      f
-tlsv1_set_cert_chain   src/tls/tlsv1_cred.c    /^static int tlsv1_set_cert_chain(struct x509_certificate **chain,$/;"  f       file:
-tlsv1_set_dhparams     src/tls/tlsv1_cred.c    /^int tlsv1_set_dhparams(struct tlsv1_credentials *cred, const char *dh_file,$/;"       f
-tlsv1_set_dhparams_blob        src/tls/tlsv1_cred.c    /^static int tlsv1_set_dhparams_blob(struct tlsv1_credentials *cred,$/;"        f       file:
-tlsv1_set_dhparams_der src/tls/tlsv1_cred.c    /^static int tlsv1_set_dhparams_der(struct tlsv1_credentials *cred,$/;" f       file:
-tlsv1_set_key  src/tls/tlsv1_cred.c    /^static int tlsv1_set_key(struct tlsv1_credentials *cred,$/;"  f       file:
-tlsv1_set_key_enc_pem  src/tls/tlsv1_cred.c    /^static struct crypto_private_key * tlsv1_set_key_enc_pem(const u8 *key,$/;"   f       file:
-tlsv1_set_key_pem      src/tls/tlsv1_cred.c    /^static struct crypto_private_key * tlsv1_set_key_pem(const u8 *key, size_t len)$/;"   f       file:
-tlsv1_set_private_key  src/tls/tlsv1_cred.c    /^int tlsv1_set_private_key(struct tlsv1_credentials *cred,$/;" f
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type; \/* PAC_TYPE_PAC_TYPE *\/$/;"    m       struct:eap_tlv_pac_type_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_crypto_binding_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_hdr
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_intermediate_result_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_nak_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_pac_ack_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_request_action_tlv
-tlv_type       src/eap_peer/eap_tlv_common.h   /^      be16 tlv_type;$/;"      m       struct:eap_tlv_result_tlv
-tmp_eap_user   src/ap/hostapd.h        /^      struct hostapd_eap_user tmp_eap_user;$/;"       m       struct:hostapd_data     typeref:struct:hostapd_data::hostapd_eap_user
-tnc_started    src/eap_peer/eap_ttls.c /^      int tnc_started;$/;"    m       struct:eap_ttls_data    file:
-totrot src/crypto/des-internal.c       /^static const u8 totrot[16] = {$/;"    v       file:
-tptk   src/rsn_supp/wpa.h      /^    struct wpa_ptk ptk, tptk;$/;"     m       struct:wpa_sm   typeref:struct:wpa_sm::
-tptk_set       src/rsn_supp/wpa.h      /^    int ptk_set, tptk_set;$/;"        m       struct:wpa_sm
-trans_id       src/common/ieee802_11_defs.h    /^                                      u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];$/;"       m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon82
-trans_id       src/common/ieee802_11_defs.h    /^                                      u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN];$/;"       m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon83
-trusted_certs  src/tls/tlsv1_cred.h    /^      struct x509_certificate *trusted_certs;$/;"     m       struct:tlsv1_credentials        typeref:struct:tlsv1_credentials::x509_certificate
-ts_info        src/common/ieee802_11_defs.h    /^      u8 ts_info[3];$/;"      m       struct:wmm_tspec_element
-ttls_avp       src/eap_peer/eap_ttls.h /^struct ttls_avp {$/;" s
-ttls_avp_vendor        src/eap_peer/eap_ttls.h /^struct ttls_avp_vendor {$/;"  s
-ttls_parse_avp src/eap_peer/eap_ttls.c /^struct ttls_parse_avp {$/;"   s       file:
-ttls_version   src/eap_peer/eap_ttls.c /^      int ttls_version;$/;"   m       struct:eap_ttls_data    file:
-tx     src/common/wpa_common.h /^      int tx, key_rsc_len, keyidx;$/;"        m       struct:wpa_gtk_data
-tx_bf_capability_info  src/common/ieee802_11_defs.h    /^      le32 tx_bf_capability_info;$/;" m       struct:ieee80211_ht_capabilities
-tx_mic_key     src/common/wpa_common.h /^                      u8 tx_mic_key[8];$/;"   m       struct:wpa_ptk::__anon62::__anon63
-tx_status      src/ap/wpa_auth.h       /^      int tx_status;$/;"      m       struct:wpa_auth_config
-txcb_flags     src/rsn_supp/wpa.h      /^    u16 txcb_flags;$/;"       m       struct:wpa_sm
-txop_limit     src/common/ieee802_11_defs.h    /^      le16 txop_limit;$/;"    m       struct:wmm_ac_parameter
-type   src/common/eapol_common.h       /^      u8 type;$/;"    m       struct:ieee802_1x_eapol_key
-type   src/common/eapol_common.h       /^      u8 type;$/;"    m       struct:ieee802_1x_hdr
-type   src/common/wpa_common.h /^      u8 type;$/;"    m       struct:wpa_eapol_key
-type   src/tls/tls.h   /^              const char *type;$/;"   m       struct:tls_event_data::__anon36
-type   src/tls/tlsv1_common.h  /^      tls_cipher_type type;$/;"       m       struct:tls_cipher_data
-type   src/tls/x509v3.h        /^      } type;$/;"     m       struct:x509_name_attr   typeref:enum:x509_name_attr::x509_name_attr_type
-type   src/wps/wps.h   /^      enum wps_msg_type type;$/;"     m       struct:upnp_pending_message     typeref:enum:upnp_pending_message::wps_msg_type
-u      src/common/ieee802_11_defs.h    /^                      } u;$/;"        m       struct:ieee80211_mgmt::__anon66::__anon76       typeref:union:ieee80211_mgmt::__anon66::__anon76::__anon77
-u      src/common/ieee802_11_defs.h    /^      } u;$/;"        m       struct:ieee80211_mgmt   typeref:union:ieee80211_mgmt::__anon66
-u      src/common/wpa_common.h /^      } u;$/;"        m       struct:wpa_ptk  typeref:union:wpa_ptk::__anon62
-u      src/crypto/crypto_internal-cipher.c     /^      } u;$/;"        m       struct:crypto_cipher    typeref:union:crypto_cipher::__anon10   file:
-u      src/crypto/crypto_internal.c    /^      } u;$/;"        m       struct:crypto_hash      typeref:union:crypto_hash::__anon9      file:
-u      src/fast_crypto/fast_crypto_internal-cipher.c   /^    } u;$/;"  m       struct:fast_crypto_cipher       typeref:union:fast_crypto_cipher::__anon56      file:
-u      src/fast_crypto/fast_crypto_internal.c  /^      } u;$/;"        m       struct:fast_crypto_hash typeref:union:fast_crypto_hash::__anon61        file:
-u16    include/utils/common.h  /^typedef uint16_t u16;$/;"     t
-u32    include/utils/common.h  /^typedef uint32_t u32;$/;"     t
-u64    include/utils/common.h  /^typedef uint64_t u64;$/;"     t
-u8     include/utils/common.h  /^typedef uint8_t u8;$/;"       t
-uint16_t       port/include/endian.h   /^typedef       __uint16_t      uint16_t;$/;"   t
-uint32_t       port/include/endian.h   /^typedef       __uint32_t      uint32_t;$/;"   t
-uint64_t       port/include/endian.h   /^typedef       __uint64_t      uint64_t;$/;"   t
-uint8_t        port/include/endian.h   /^typedef       __uint8_t       uint8_t;$/;"    t
-upc    src/ap/ap_config.h      /^      char *upc;$/;"  m       struct:hostapd_bss_config
-upc    src/wps/wps.h   /^              const char *upc;$/;"    m       struct:wps_event_data::wps_event_er_ap
-upc    src/wps/wps.h   /^      char *upc;$/;"  m       struct:wps_context
-update_snonce  src/ap/wpa_auth_i.h     /^      unsigned int update_snonce:1;$/;"       m       struct:wpa_state_machine
-upnp_iface     src/ap/ap_config.h      /^      char *upnp_iface;$/;"   m       struct:hostapd_bss_config
-upnp_pending_message   src/wps/wps.h   /^struct upnp_pending_message {$/;"     s
-uri    src/tls/x509v3.h        /^      char *uri; \/* uniformResourceIdentifier *\/$/;"        m       struct:x509_name
-use_cred       src/wps/wps_i.h /^      struct wps_credential *use_cred;$/;"    m       struct:wps_data typeref:struct:wps_data::wps_credential
-use_psk_key    src/wps/wps.h   /^      int use_psk_key;$/;"    m       struct:wps_config
-use_psk_key    src/wps/wps_i.h /^      int use_psk_key;$/;"    m       struct:wps_data
-use_session_ticket     src/tls/tlsv1_client_i.h        /^      unsigned int use_session_ticket:1;$/;"  m       struct:tlsv1_client
-use_session_ticket     src/tls/tlsv1_server_i.h        /^      int use_session_ticket;$/;"     m       struct:tlsv1_server
-usec   port/include/os.h       /^      os_time_t usec;$/;"     m       struct:os_time
-used   include/utils/wpabuf.h  /^      size_t used; \/* length of data in the buffer *\/$/;"   m       struct:wpabuf
-used   src/crypto/libtommath.h /^    int used, alloc, sign;$/;"        m       struct:__anon8
-used   src/tls/libtommath.h    /^    int used, alloc, sign;$/;"        m       struct:__anon40
-used_bytes     src/crypto/crypto_internal-cipher.c     /^                      size_t used_bytes;$/;"  m       struct:crypto_cipher::__anon10::__anon11        file:
-used_bytes     src/fast_crypto/fast_crypto_internal-cipher.c   /^            size_t used_bytes;$/;"    m       struct:fast_crypto_cipher::__anon56::__anon57   file:
-utf8_ssid      src/ap/ap_config.h      /^      unsigned int utf8_ssid:1;$/;"   m       struct:hostapd_ssid
-utf8_to_ucs2   src/crypto/ms_funcs.c   /^static int utf8_to_ucs2(const u8 *utf8_string, size_t utf8_string_len,$/;"    f       file:
-uuid   src/ap/ap_config.h      /^      u8 uuid[16];$/;"        m       struct:hostapd_bss_config
-uuid   src/wps/wps.h   /^              const u8 *uuid;$/;"     m       struct:wps_event_data::wps_event_er_ap
-uuid   src/wps/wps.h   /^              const u8 *uuid;$/;"     m       struct:wps_event_data::wps_event_er_ap_settings
-uuid   src/wps/wps.h   /^              const u8 *uuid;$/;"     m       struct:wps_event_data::wps_event_er_enrollee
-uuid   src/wps/wps.h   /^              const u8 *uuid;$/;"     m       struct:wps_event_data::wps_event_er_set_selected_registrar
-uuid   src/wps/wps.h   /^      u8 uuid[16];$/;"        m       struct:wps_context
-uuid   src/wps/wps.h   /^    u8 uuid[16];$/;"  m       struct:wps_sm
-uuid   src/wps/wps_registrar.c /^      u8 uuid[WPS_UUID_LEN];$/;"      m       struct:wps_registrar_device     file:
-uuid   src/wps/wps_registrar.c /^      u8 uuid[WPS_UUID_LEN];$/;"      m       struct:wps_uuid_pin     file:
-uuid_bin2str   src/utils/uuid.c        /^int uuid_bin2str(const u8 *bin, char *str, size_t max_len)$/;"        f
-uuid_e src/wps/wps_attr_parse.h        /^      const u8 *uuid_e; \/* WPS_UUID_LEN (16) octets *\/$/;"  m       struct:wps_parse_attr
-uuid_e src/wps/wps_i.h /^      u8 uuid_e[WPS_UUID_LEN];$/;"    m       struct:wps_data
-uuid_e src/wps/wps_registrar.c /^      u8 uuid_e[WPS_UUID_LEN];$/;"    m       struct:wps_pbc_session  file:
-uuid_gen_mac_addr      src/wps/wps_common.c    /^void uuid_gen_mac_addr(const u8 *mac_addr, u8 *uuid)$/;"      f
-uuid_r src/wps/wps_attr_parse.h        /^      const u8 *uuid_r; \/* WPS_UUID_LEN (16) octets *\/$/;"  m       struct:wps_parse_attr
-uuid_r src/wps/wps_i.h /^      u8 uuid_r[WPS_UUID_LEN];$/;"    m       struct:wps_data
-uuid_str2bin   src/utils/uuid.c        /^int uuid_str2bin(const char *str, u8 *bin)$/;"        f
-valid  src/ap/wpa_auth_i.h     /^              Boolean valid;$/;"      m       struct:wpa_state_machine::wpa_key_replay_counter
-valid_config_methods   src/wps/wps_validate.c  /^static int valid_config_methods(u16 val, int wps2)$/;"        f       file:
-value  src/tls/x509v3.h        /^      char *value;$/;"        m       struct:x509_name_attr
-variable       src/common/ieee802_11_defs.h    /^                                      u8 variable[0]; \/* FT Request *\/$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon80
-variable       src/common/ieee802_11_defs.h    /^                                      u8 variable[0]; \/* FT Request *\/$/;"  m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon81
-variable       src/common/ieee802_11_defs.h    /^                                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon78
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon67
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon69
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon70
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon71
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon73
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon74
-variable       src/common/ieee802_11_defs.h    /^                      u8 variable[0];$/;"     m       struct:ieee80211_mgmt::__anon66::__anon75
-vendor src/eap_peer/eap.h      /^      int vendor;$/;" m       struct:eap_method_type
-vendor src/eap_peer/eap_i.h    /^      int vendor;$/;" m       struct:eap_method
-vendor_ext     src/wps/wps.h   /^      struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];$/;"       m       struct:wps_device_data  typeref:struct:wps_device_data::wpabuf
-vendor_ext     src/wps/wps_attr_parse.h        /^      const u8 *vendor_ext[MAX_WPS_PARSE_VENDOR_EXT];$/;"     m       struct:wps_parse_attr
-vendor_ext_len src/wps/wps_attr_parse.h        /^      size_t vendor_ext_len[MAX_WPS_PARSE_VENDOR_EXT];$/;"    m       struct:wps_parse_attr
-vendor_ext_m1  src/wps/wps.h   /^      struct wpabuf *vendor_ext_m1;$/;"       m       struct:wps_device_data  typeref:struct:wps_device_data::wpabuf
-vendor_id      src/eap_peer/eap_defs.h /^    u8 vendor_id[3];$/;"      m       struct:eap_expand
-vendor_id      src/eap_peer/eap_tlv_common.h   /^      be32 vendor_id;$/;"     m       struct:eap_tlv_nak_tlv
-vendor_id      src/eap_peer/eap_ttls.h /^      be32 vendor_id;$/;"     m       struct:ttls_avp_vendor
-vendor_type    src/eap_peer/eap_defs.h /^    be32 vendor_type;$/;"     m       struct:eap_expand
-verify src/tls/tlsv1_client_i.h        /^      struct tls_verify_hash verify;$/;"      m       struct:tlsv1_client     typeref:struct:tlsv1_client::tls_verify_hash
-verify src/tls/tlsv1_server_i.h        /^      struct tls_verify_hash verify;$/;"      m       struct:tlsv1_server     typeref:struct:tlsv1_server::tls_verify_hash
-verify_peer    src/tls/tlsv1_server_i.h        /^      int verify_peer;$/;"    m       struct:tlsv1_server
-version        src/common/eapol_common.h       /^      u8 version;$/;" m       struct:ieee802_1x_hdr
-version        src/common/ieee802_11_defs.h    /^      u8 version; \/* 1 *\/$/;"       m       struct:wmm_tspec_element
-version        src/common/ieee802_11_defs.h    /^      u8 version; \/* 1 for WMM version 1.0 *\/$/;"   m       struct:wmm_information_element
-version        src/common/ieee802_11_defs.h    /^      u8 version; \/* 1 for WMM version 1.0 *\/$/;"   m       struct:wmm_parameter_element
-version        src/common/wpa_common.h /^      u8 version[2]; \/* little endian *\/$/;"        m       struct:rsn_ie_hdr
-version        src/common/wpa_common.h /^      u8 version[2]; \/* little endian *\/$/;"        m       struct:wpa_ie_hdr
-version        src/eap_peer/eap_tlv_common.h   /^      u8 version;$/;" m       struct:eap_tlv_crypto_binding_tlv
-version        src/tls/x509v3.h        /^      enum { X509_CERT_V1 = 0, X509_CERT_V2 = 1, X509_CERT_V3 = 2 } version;$/;"      m       struct:x509_certificate typeref:enum:x509_certificate::__anon41
-version        src/wps/wps_attr_parse.h        /^      const u8 *version; \/* 1 octet *\/$/;"  m       struct:wps_parse_attr
-version2       src/wps/wps_attr_parse.h        /^      const u8 *version2; \/* 1 octet *\/$/;" m       struct:wps_parse_attr
-vht_capab      src/ap/ap_config.h      /^      u32 vht_capab;$/;"      m       struct:hostapd_config
-vht_oper_centr_freq_seg0_idx   src/ap/ap_config.h      /^      u8 vht_oper_centr_freq_seg0_idx;$/;"    m       struct:hostapd_config
-vht_oper_centr_freq_seg1_idx   src/ap/ap_config.h      /^      u8 vht_oper_centr_freq_seg1_idx;$/;"    m       struct:hostapd_config
-vht_oper_chwidth       src/ap/ap_config.h      /^      u8 vht_oper_chwidth;$/;"        m       struct:hostapd_config
-vlan_id        src/ap/ap_config.h      /^      int vlan_id;$/;"        m       struct:mac_acl_entry
-vlan_id        src/ap/wpa_auth_i.h     /^      int vlan_id;$/;"        m       struct:wpa_group
-wep    src/ap/ap_config.h      /^      struct hostapd_wep_keys wep;$/;"        m       struct:hostapd_ssid     typeref:struct:hostapd_ssid::hostapd_wep_keys
-wep_rekeying_period    src/ap/ap_config.h      /^      int wep_rekeying_period;$/;"    m       struct:hostapd_bss_config
-wifi_appie     src/esp_supplicant/esp_wifi_driver.h    /^struct wifi_appie {$/;"       s
-wifi_cipher    src/esp_supplicant/esp_wifi_driver.h    /^struct wifi_cipher {$/;"      s
-wifi_ipc_config_t      src/esp_supplicant/esp_wifi_driver.h    /^} wifi_ipc_config_t;$/;"      t       typeref:struct:__anon32
-wifi_ipc_fn_t  src/esp_supplicant/esp_wifi_driver.h    /^typedef int (*wifi_ipc_fn_t)(void *);$/;"     t
-wifi_key       src/esp_supplicant/esp_wifi_driver.h    /^struct wifi_key {$/;" s
-wifi_key_alg   src/common/defs.h       /^enum wifi_key_alg {$/;"       g
-wifi_keyix     src/esp_supplicant/esp_wifi_driver.h    /^typedef uint16_t wifi_keyix;       \/* h\/w key index *\/$/;" t
-wifi_set_wps_cb        src/esp_supplicant/esp_wps.c    /^wifi_set_wps_cb(wps_st_cb_t cb)$/;"   f
-wifi_ssid      src/esp_supplicant/esp_wifi_driver.h    /^struct wifi_ssid {$/;"        s
-wifi_sta_get_enterprise_disable_time_check     src/esp_supplicant/esp_wpa_enterprise.c /^bool wifi_sta_get_enterprise_disable_time_check(void)$/;"     f
-wifi_station_wps_deinit        src/esp_supplicant/esp_wps.c    /^wifi_station_wps_deinit(void)$/;"     f
-wifi_station_wps_eapol_start_handle    src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_eapol_start_handle(void)$/;"    f
-wifi_station_wps_eapol_start_handle_internal   src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_eapol_start_handle_internal(void)$/;"   f
-wifi_station_wps_init  src/esp_supplicant/esp_wps.c    /^wifi_station_wps_init(void)$/;"       f
-wifi_station_wps_msg_timeout   src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_msg_timeout(void)$/;"   f
-wifi_station_wps_msg_timeout_internal  src/esp_supplicant/esp_wps.c    /^wifi_station_wps_msg_timeout_internal(void)$/;"       f
-wifi_station_wps_start src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wifi_station_wps_start)(void);$/;" m       struct:wps_funcs
-wifi_station_wps_start src/esp_supplicant/esp_wps.c    /^int wifi_station_wps_start(void)$/;"  f
-wifi_station_wps_success       src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_success(void)$/;"       f
-wifi_station_wps_success_internal      src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_success_internal(void)$/;"      f
-wifi_station_wps_timeout       src/esp_supplicant/esp_wps.c    /^void wifi_station_wps_timeout(void)$/;"       f
-wifi_station_wps_timeout_internal      src/esp_supplicant/esp_wps.c    /^wifi_station_wps_timeout_internal(void)$/;"   f
-wifi_tx_cb_t   src/esp_supplicant/esp_wifi_driver.h    /^typedef void(* wifi_tx_cb_t)(void *);$/;"     t
-wifi_wpa2_fn_t src/esp_supplicant/esp_wifi_driver.h    /^typedef esp_err_t (*wifi_wpa2_fn_t)(void *);$/;"      t
-wifi_wpa2_param_t      src/esp_supplicant/esp_wifi_driver.h    /^}wifi_wpa2_param_t;$/;"       t       typeref:struct:__anon31
-wifi_wps_disable_internal      src/esp_supplicant/esp_wps.c    /^int wifi_wps_disable_internal(void)$/;"       f
-wifi_wps_enable_internal       src/esp_supplicant/esp_wps.c    /^int wifi_wps_enable_internal(const esp_wps_config_t *config)$/;"      f
-wifi_wps_scan  src/esp_supplicant/esp_wps.c    /^void wifi_wps_scan(void)$/;"  f
-wifi_wps_scan_done     src/esp_supplicant/esp_wps.c    /^wifi_wps_scan_done(void *arg, STATUS status)$/;"      f
-wifi_wps_scan_internal src/esp_supplicant/esp_wps.c    /^wifi_wps_scan_internal(void)$/;"      f
-wildcard_uuid  src/wps/wps_registrar.c /^      int wildcard_uuid;$/;"  m       struct:wps_uuid_pin     file:
-wk_cipher      src/esp_supplicant/esp_wifi_driver.h    /^    const struct wifi_cipher *wk_cipher;$/;"  m       struct:wifi_key typeref:struct:wifi_key::wifi_cipher
-wk_keyix       src/esp_supplicant/esp_wifi_driver.h    /^    wifi_keyix wk_keyix;       \/* h\/w key index *\/$/;"     m       struct:wifi_key
-wk_keyrsc      src/esp_supplicant/esp_wifi_driver.h    /^    uint64_t        wk_keyrsc[WIFI_TID_SIZE];$/;"     m       struct:wifi_key
-wk_keytsc      src/esp_supplicant/esp_wifi_driver.h    /^    uint64_t        wk_keytsc;      \/* key transmit sequence counter *\/$/;" m       struct:wifi_key
-wmm_ac_parameter       src/common/ieee802_11_defs.h    /^struct wmm_ac_parameter {$/;" s
-wmm_action     src/common/ieee802_11_defs.h    /^                              } STRUCT_PACKED wmm_action;$/;" m       union:ieee80211_mgmt::__anon66::__anon76::__anon77      typeref:struct:ieee80211_mgmt::__anon66::__anon76::__anon77::__anon78
-wmm_enabled    src/ap/ap_config.h      /^      int wmm_enabled;$/;"    m       struct:hostapd_bss_config
-wmm_enabled    src/ap/wpa_auth.h       /^      int wmm_enabled;$/;"    m       struct:wpa_auth_config
-wmm_information_element        src/common/ieee802_11_defs.h    /^struct wmm_information_element {$/;"  s
-wmm_parameter_element  src/common/ieee802_11_defs.h    /^struct wmm_parameter_element {$/;"    s
-wmm_tspec_element      src/common/ieee802_11_defs.h    /^struct wmm_tspec_element {$/;"        s
-wmm_uapsd      src/ap/ap_config.h      /^      int wmm_uapsd;$/;"      m       struct:hostapd_bss_config
-wmm_uapsd      src/ap/wpa_auth.h       /^      int wmm_uapsd;$/;"      m       struct:wpa_auth_config
-workaround     src/eap_peer/eap_i.h    /^      unsigned int workaround;$/;"    m       struct:eap_sm
-wpa    src/ap/ap_config.h      /^      int wpa; \/* bitfield of WPA_PROTO_WPA, WPA_PROTO_RSN *\/$/;"   m       struct:hostapd_bss_config
-wpa    src/ap/wpa_auth.h       /^      int wpa;$/;"    m       struct:wpa_auth_config
-wpa    src/ap/wpa_auth_i.h     /^      } wpa;$/;"      m       struct:wpa_state_machine        typeref:enum:wpa_state_machine::__anon26
-wpa    src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    *wpa;$/;"      m       struct:wps_scan_ie
-wpa2Task       src/esp_supplicant/esp_wpa_enterprise.c /^void wpa2Task(void *pvParameters )$/;"        f
-wpa2_api_lock  src/esp_supplicant/esp_wpa_enterprise.c /^static void wpa2_api_lock(void)$/;"   f       file:
-wpa2_api_unlock        src/esp_supplicant/esp_wpa_enterprise.c /^static void wpa2_api_unlock(void)$/;" f       file:
-wpa2_deinit    src/esp_supplicant/esp_wifi_driver.h    /^    void (*wpa2_deinit)(void);$/;"    m       struct:wpa2_funcs
-wpa2_ent_eap_state_t   src/esp_supplicant/esp_wifi_driver.h    /^} wpa2_ent_eap_state_t;$/;"   t       typeref:enum:__anon30
-wpa2_funcs     src/esp_supplicant/esp_wifi_driver.h    /^struct wpa2_funcs {$/;"       s
-wpa2_get_state src/esp_supplicant/esp_wifi_driver.h    /^    u8   (*wpa2_get_state)(void);$/;" m       struct:wpa2_funcs
-wpa2_init      src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wpa2_init)(void);$/;"      m       struct:wpa2_funcs
-wpa2_is_disabled       src/esp_supplicant/esp_wpa_enterprise.c /^static bool inline wpa2_is_disabled(void)$/;" f       file:
-wpa2_is_enabled        src/esp_supplicant/esp_wpa_enterprise.c /^static bool inline wpa2_is_enabled(void)$/;"  f       file:
-wpa2_machine_start     src/esp_supplicant/esp_wpa_enterprise.c /^uint8_t wpa2_machine_start = 0;$/;"   v
-wpa2_post      src/esp_supplicant/esp_wpa_enterprise.c /^ETS_STATUS wpa2_post(ETSSignal sig, ETSParam par)$/;" f
-wpa2_rx_param  src/esp_supplicant/esp_wpa_enterprise.c /^struct wpa2_rx_param {$/;"    s       file:
-wpa2_sendto_wrapper    src/esp_supplicant/esp_wpa_enterprise.c /^static void wpa2_sendto_wrapper(void *buffer, uint16_t len)$/;"       f       file:
-wpa2_set_eap_state     src/esp_supplicant/esp_wpa_enterprise.c /^static void wpa2_set_eap_state(wpa2_ent_eap_state_t state)$/;"        f       file:
-wpa2_set_state src/esp_supplicant/esp_wpa_enterprise.c /^static void inline wpa2_set_state(wpa2_state_t state)$/;"     f       file:
-wpa2_sig_cnt   src/eap_peer/eap_i.h    /^      u8 wpa2_sig_cnt[SIG_WPA2_MAX];$/;"      m       struct:eap_sm
-wpa2_sm_alloc_eapol    src/esp_supplicant/esp_wpa_enterprise.c /^u8 *wpa2_sm_alloc_eapol(struct eap_sm *sm, u8 type,$/;"       f
-wpa2_sm_ether_send     src/esp_supplicant/esp_wpa_enterprise.c /^static inline int wpa2_sm_ether_send(struct eap_sm *sm, const u8 *dest, u16 proto,$/;"        f       file:
-wpa2_sm_free_eapol     src/esp_supplicant/esp_wpa_enterprise.c /^void wpa2_sm_free_eapol(u8 *buffer)$/;"       f
-wpa2_sm_rx_eapol       src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wpa2_sm_rx_eapol)(u8 *src_addr, u8 *buf, u32 len, u8 *bssid);$/;"  m       struct:wpa2_funcs
-wpa2_sm_rx_eapol       src/esp_supplicant/esp_wpa_enterprise.c /^static int wpa2_sm_rx_eapol(u8 *src_addr, u8 *buf, u32 len, uint8_t *bssid)$/;"       f       file:
-wpa2_sm_rx_eapol_internal      src/esp_supplicant/esp_wpa_enterprise.c /^static int wpa2_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len, uint8_t *bssid)$/;"      f       file:
-wpa2_start     src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wpa2_start)(void);$/;"     m       struct:wpa2_funcs
-wpa2_start_eapol       src/esp_supplicant/esp_wpa_enterprise.c /^static int wpa2_start_eapol(void)$/;" f       file:
-wpa2_start_eapol_internal      src/esp_supplicant/esp_wpa_enterprise.c /^static int wpa2_start_eapol_internal(void)$/;"        f       file:
-wpa2_state_t   src/eap_peer/eap_i.h    /^}wpa2_state_t;$/;"    t       typeref:enum:__anon3
-wpa2_task_delete       src/esp_supplicant/esp_wpa_enterprise.c /^static inline void wpa2_task_delete(void *arg)$/;"    f       file:
-wpa2_task_hdl  src/esp_supplicant/esp_wpa_enterprise.c /^static void *wpa2_task_hdl = NULL;$/;"        v       file:
-wpa_add_kde    src/ap/wpa_auth_ie.c    /^u8 * wpa_add_kde(u8 *pos, u32 kde, const u8 *data, size_t data_len,$/;"       f
-wpa_alg        src/common/defs.h       /^enum wpa_alg {$/;"    g
-wpa_ap_deinit  src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_ap_deinit)(void* data);$/;"    m       struct:wpa_funcs
-wpa_ap_get_wpa_ie      src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t* (*wpa_ap_get_wpa_ie)(uint8_t *len);$/;"  m       struct:wpa_funcs
-wpa_ap_get_wpa_ie      src/esp_supplicant/esp_wpa_main.c       /^uint8_t  *wpa_ap_get_wpa_ie(uint8_t *ie_len)$/;"      f
-wpa_ap_init    src/esp_supplicant/esp_wifi_driver.h    /^    void* (*wpa_ap_init)(void);$/;"   m       struct:wpa_funcs
-wpa_ap_join    src/ap/wpa_auth.c       /^bool wpa_ap_join(void** sm, uint8_t *bssid, uint8_t *wpa_ie, uint8_t wpa_ie_len)$/;"  f
-wpa_ap_join    src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_ap_join)(void** sm, u8 *bssid, u8 *wpa_ie, u8 wpa_ie_len);$/;" m       struct:wpa_funcs
-wpa_ap_remove  src/ap/wpa_auth.c       /^bool wpa_ap_remove(void* sm)$/;"      f
-wpa_ap_remove  src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_ap_remove)(void* sm);$/;"      m       struct:wpa_funcs
-wpa_ap_rx_eapol        src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_ap_rx_eapol)(void* hapd_data, void *sm, u8 *data, size_t data_len);$/;"        m       struct:wpa_funcs
-wpa_ap_rx_eapol        src/esp_supplicant/esp_wpa_main.c       /^bool  wpa_ap_rx_eapol(void *hapd_data, void *sm_data, u8 *data, size_t data_len)$/;"  f
-wpa_attach     src/esp_supplicant/esp_wpa_main.c       /^void  wpa_attach(void)$/;"    f
-wpa_auth       src/ap/hostapd.h        /^      struct wpa_authenticator *wpa_auth;$/;" m       struct:hostapd_data     typeref:struct:hostapd_data::wpa_authenticator
-wpa_auth       src/ap/wpa_auth_i.h     /^      struct wpa_authenticator *wpa_auth;$/;" m       struct:wpa_state_machine        typeref:struct:wpa_state_machine::wpa_authenticator
-wpa_auth_add_sm        src/ap/wpa_auth.c       /^static void wpa_auth_add_sm(struct wpa_state_machine *sm)$/;" f       file:
-wpa_auth_callbacks     src/ap/wpa_auth.h       /^struct wpa_auth_callbacks {$/;"       s
-wpa_auth_config        src/ap/wpa_auth.h       /^struct wpa_auth_config {$/;"  s
-wpa_auth_del_sm        src/ap/wpa_auth.c       /^static void wpa_auth_del_sm(struct wpa_state_machine *sm)$/;" f       file:
-wpa_auth_for_each_sta  src/ap/wpa_auth.c       /^int wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth,$/;"     f
-wpa_auth_gen_wpa_ie    src/ap/wpa_auth_ie.c    /^int wpa_auth_gen_wpa_ie(struct wpa_authenticator *wpa_auth)$/;"       f
-wpa_auth_get_eapol     src/ap/wpa_auth.c       /^static inline int wpa_auth_get_eapol(struct wpa_authenticator *wpa_auth,$/;"  f       file:
-wpa_auth_get_msk       src/ap/wpa_auth.c       /^static inline int wpa_auth_get_msk(struct wpa_authenticator *wpa_auth,$/;"    f       file:
-wpa_auth_get_psk       src/ap/wpa_auth.c       /^static inline const u8 * wpa_auth_get_psk(struct wpa_authenticator *wpa_auth,$/;"     f       file:
-wpa_auth_get_seqnum    src/ap/wpa_auth.c       /^static inline int wpa_auth_get_seqnum(struct wpa_authenticator *wpa_auth,$/;" f       file:
-wpa_auth_get_sm        src/ap/wpa_auth.c       /^static struct wpa_state_machine * wpa_auth_get_sm(u32 index)$/;"      f       file:
-wpa_auth_logger        include/utils/wpa_debug.h       161;"   d
-wpa_auth_mic_failure_report    src/ap/wpa_auth.c       /^static inline int wpa_auth_mic_failure_report($/;"    f       file:
-wpa_auth_send_eapol    src/ap/wpa_auth.c       /^wpa_auth_send_eapol(struct wpa_authenticator *wpa_auth, const u8 *addr,$/;"   f       file:
-wpa_auth_set_eapol     src/ap/wpa_auth.c       /^static inline void wpa_auth_set_eapol(struct wpa_authenticator *wpa_auth,$/;" f       file:
-wpa_auth_set_key       src/ap/wpa_auth.c       /^static inline int wpa_auth_set_key(struct wpa_authenticator *wpa_auth,$/;"    f       file:
-wpa_auth_sm_event      src/ap/wpa_auth.c       /^int wpa_auth_sm_event(struct wpa_state_machine *sm, wpa_event event)$/;"      f
-wpa_auth_sta_associated        src/ap/wpa_auth.c       /^int wpa_auth_sta_associated(struct wpa_authenticator *wpa_auth,$/;"   f
-wpa_auth_sta_deinit    src/ap/wpa_auth.c       /^void wpa_auth_sta_deinit(struct wpa_state_machine *sm)$/;"    f
-wpa_auth_sta_init      src/ap/wpa_auth.c       /^wpa_auth_sta_init(struct wpa_authenticator *wpa_auth, const u8 *addr)$/;"     f
-wpa_auth_sta_no_wpa    src/ap/wpa_auth.c       /^void wpa_auth_sta_no_wpa(struct wpa_state_machine *sm)$/;"    f
-wpa_auth_uses_mfp      src/ap/wpa_auth_ie.c    /^int wpa_auth_uses_mfp(struct wpa_state_machine *sm)$/;"       f
-wpa_auth_vlogger       include/utils/wpa_debug.h       162;"   d
-wpa_authenticator      src/ap/wpa_auth_i.h     /^struct wpa_authenticator {$/;"        s
-wpa_cipher     src/common/defs.h       /^enum wpa_cipher {$/;" g
-wpa_cipher_key_len     src/common/wpa_common.c /^int wpa_cipher_key_len(int cipher)$/;"        f
-wpa_cipher_put_suites  src/common/wpa_common.c /^int wpa_cipher_put_suites(u8 *pos, int ciphers)$/;"   f
-wpa_cipher_to_alg      src/common/wpa_common.c /^int wpa_cipher_to_alg(int cipher)$/;" f
-wpa_cipher_to_suite    src/common/wpa_common.c /^u32 wpa_cipher_to_suite(int proto, int cipher)$/;"    f
-wpa_cipher_txt src/common/wpa_common.c /^const char * wpa_cipher_txt(int cipher)$/;"   f
-wpa_compare_rsn_ie     src/common/wpa_common.c /^int wpa_compare_rsn_ie(int ft_initial_assoc,$/;"      f
-wpa_config_assoc_ie    src/esp_supplicant/esp_wpa_main.c       /^void  wpa_config_assoc_ie(u8 proto, u8 *assoc_buf, u32 assoc_wpa_ie_len)$/;"  f
-wpa_config_blob        src/eap_peer/eap_config.h       /^struct wpa_config_blob {$/;"  s
-wpa_config_bss src/esp_supplicant/esp_wpa_main.c       /^void  wpa_config_bss(uint8_t *bssid)$/;"      f
-wpa_config_parse_string        src/utils/common.c      /^char * wpa_config_parse_string(const char *value, size_t *len)$/;"    f
-wpa_config_profile     src/esp_supplicant/esp_wpa_main.c       /^void  wpa_config_profile()$/;"        f
-wpa_deattach   src/esp_supplicant/esp_wpa_main.c       /^bool  wpa_deattach(void)$/;"  f
-wpa_deauthenticate     src/esp_supplicant/esp_wpa_main.c       /^void  wpa_deauthenticate(u8 reason_code)$/;"  f
-wpa_deauthenticate     src/rsn_supp/wpa.h      /^    void (*wpa_deauthenticate)(u8 reason_code);$/;"   m       struct:wpa_sm
-wpa_debug_print_timestamp      src/utils/wpa_debug.c   /^void  wpa_debug_print_timestamp(void)$/;"     f
-wpa_derive_ptk src/ap/wpa_auth.c       /^static int wpa_derive_ptk(struct wpa_state_machine *sm, const u8 *pmk,$/;"    f       file:
-wpa_derive_ptk src/rsn_supp/wpa.c      /^int   wpa_derive_ptk(struct wpa_sm *sm, const unsigned char *src_addr,$/;"    f
-wpa_dump_mem   src/utils/wpa_debug.c   /^void  wpa_dump_mem(char* desc, uint8_t *addr, uint16_t len)$/;"       f
-wpa_eapol_ie_parse     src/ap/wpa_auth_ie.h    /^struct wpa_eapol_ie_parse {$/;"       s
-wpa_eapol_ie_parse     src/rsn_supp/wpa_ie.h   /^struct wpa_eapol_ie_parse {$/;"       s
-wpa_eapol_key  src/common/wpa_common.h /^struct wpa_eapol_key {$/;"    s
-wpa_eapol_key_dump     src/rsn_supp/wpa.c      /^  void   wpa_eapol_key_dump(int level, const struct wpa_eapol_key *key)$/;"   f
-wpa_eapol_key_mic      src/common/wpa_common.c /^int wpa_eapol_key_mic(const u8 *key, int ver, const u8 *buf, size_t len,$/;"  f
-wpa_eapol_key_send     src/rsn_supp/wpa.c      /^void   wpa_eapol_key_send(struct wpa_sm *sm, const u8 *kck,$/;"       f
-wpa_eapol_variable     src/ap/wpa_auth.h       /^} wpa_eapol_variable;$/;"     t       typeref:enum:__anon21
-wpa_event      src/ap/wpa_auth.h       /^} wpa_event;$/;"      t       typeref:enum:__anon23
-wpa_free_sta_sm        src/ap/wpa_auth.c       /^static void wpa_free_sta_sm(struct wpa_state_machine *sm)$/;" f       file:
-wpa_funcs      src/esp_supplicant/esp_wifi_driver.h    /^struct wpa_funcs {$/;"        s
-wpa_gen_wpa_ie src/rsn_supp/wpa_ie.c   /^int  wpa_gen_wpa_ie(struct wpa_sm *sm, u8 *wpa_ie, size_t wpa_ie_len)$/;"     f
-wpa_gen_wpa_ie_rsn     src/rsn_supp/wpa_ie.c   /^static int  wpa_gen_wpa_ie_rsn(u8 *rsn_ie, size_t rsn_ie_len,$/;"     f       file:
-wpa_gen_wpa_ie_wpa     src/rsn_supp/wpa_ie.c   /^static int  wpa_gen_wpa_ie_wpa(u8 *wpa_ie, size_t wpa_ie_len,$/;"     f       file:
-wpa_get_key    src/esp_supplicant/esp_wpa_main.c       /^int  wpa_get_key(uint8_t *ifx, int *alg, u8 *addr, int *key_idx,$/;"  f
-wpa_get_ntp_timestamp  src/utils/common.c      /^void wpa_get_ntp_timestamp(u8 *buf)$/;"       f
-wpa_gmk_rekey  src/ap/ap_config.h      /^      int wpa_gmk_rekey;$/;"  m       struct:hostapd_bss_config
-wpa_gmk_rekey  src/ap/wpa_auth.h       /^      int wpa_gmk_rekey;$/;"  m       struct:wpa_auth_config
-wpa_gmk_to_gtk src/ap/wpa_auth.c       /^static int wpa_gmk_to_gtk(const u8 *gmk, const char *label, const u8 *addr,$/;"       f       file:
-wpa_group      src/ap/ap_config.h      /^      int wpa_group;$/;"      m       struct:hostapd_bss_config
-wpa_group      src/ap/wpa_auth.h       /^      int wpa_group;$/;"      m       struct:wpa_auth_config
-wpa_group      src/ap/wpa_auth_i.h     /^struct wpa_group {$/;"        s
-wpa_group_config_group_keys    src/ap/wpa_auth.c       /^static int wpa_group_config_group_keys(struct wpa_authenticator *wpa_auth,$/;"        f       file:
-wpa_group_ensure_init  src/ap/wpa_auth.c       /^static void wpa_group_ensure_init(struct wpa_authenticator *wpa_auth,$/;"     f       file:
-wpa_group_gtk_init     src/ap/wpa_auth.c       /^static void wpa_group_gtk_init(struct wpa_authenticator *wpa_auth,$/;"        f       file:
-wpa_group_init src/ap/wpa_auth.c       /^static struct wpa_group * wpa_group_init(struct wpa_authenticator *wpa_auth,$/;"      f       file:
-wpa_group_init_gmk_and_counter src/ap/wpa_auth.c       /^static int wpa_group_init_gmk_and_counter(struct wpa_authenticator *wpa_auth,$/;"     f       file:
-wpa_group_rekey        src/ap/ap_config.h      /^      int wpa_group_rekey;$/;"        m       struct:hostapd_bss_config
-wpa_group_rekey        src/ap/wpa_auth.h       /^      int wpa_group_rekey;$/;"        m       struct:wpa_auth_config
-wpa_group_setkeys      src/ap/wpa_auth.c       /^static void wpa_group_setkeys(struct wpa_authenticator *wpa_auth,$/;" f       file:
-wpa_group_setkeysdone  src/ap/wpa_auth.c       /^static int wpa_group_setkeysdone(struct wpa_authenticator *wpa_auth,$/;"      f       file:
-wpa_group_sm_step      src/ap/wpa_auth.c       /^static void wpa_group_sm_step(struct wpa_authenticator *wpa_auth,$/;" f       file:
-wpa_group_state        src/ap/wpa_auth_i.h     /^      } wpa_group_state;$/;"  m       struct:wpa_group        typeref:enum:wpa_group::__anon27
-wpa_group_update_sta   src/ap/wpa_auth.c       /^static int wpa_group_update_sta(struct wpa_state_machine *sm, void *ctx)$/;"  f       file:
-wpa_gtk_data   src/common/wpa_common.h /^struct wpa_gtk_data {$/;"     s
-wpa_gtk_update src/ap/wpa_auth.c       /^static int wpa_gtk_update(struct wpa_authenticator *wpa_auth,$/;"     f       file:
-wpa_hexdump    include/utils/wpa_debug.h       153;"   d
-wpa_hexdump    src/utils/wpa_debug.c   /^void  wpa_hexdump(int level, const char *title, const u8 *buf, size_t len)$/;"        f
-wpa_hexdump_ascii      include/utils/wpa_debug.h       /^static inline void wpa_hexdump_ascii(int level, const char *title, const u8 *buf, size_t len)$/;"     f
-wpa_hexdump_ascii      include/utils/wpa_debug.h       157;"   d
-wpa_hexdump_ascii_key  include/utils/wpa_debug.h       /^static inline void wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf, size_t len)$/;" f
-wpa_hexdump_ascii_key  include/utils/wpa_debug.h       158;"   d
-wpa_hexdump_buf        include/utils/wpa_debug.h       /^static inline void wpa_hexdump_buf(int level, const char *title,$/;"  f
-wpa_hexdump_buf        include/utils/wpa_debug.h       154;"   d
-wpa_hexdump_buf_key    include/utils/wpa_debug.h       /^static inline void wpa_hexdump_buf_key(int level, const char *title,$/;"      f
-wpa_hexdump_buf_key    include/utils/wpa_debug.h       156;"   d
-wpa_hexdump_key        include/utils/wpa_debug.h       155;"   d
-wpa_hexdump_key        src/utils/wpa_debug.c   /^void  wpa_hexdump_key(int level, const char *title, const u8 *buf, size_t len)$/;"    f
-wpa_hook_deinit        src/esp_supplicant/esp_wpa_main.c       /^bool  wpa_hook_deinit(void)$/;"       f
-wpa_ie src/ap/wpa_auth_i.h     /^      u8 *wpa_ie;$/;" m       struct:wpa_authenticator
-wpa_ie src/ap/wpa_auth_i.h     /^      u8 *wpa_ie;$/;" m       struct:wpa_state_machine
-wpa_ie src/ap/wpa_auth_ie.h    /^      const u8 *wpa_ie;$/;"   m       struct:wpa_eapol_ie_parse
-wpa_ie src/rsn_supp/wpa_ie.h   /^      const u8 *wpa_ie;$/;"   m       struct:wpa_eapol_ie_parse
-wpa_ie_data    src/common/wpa_common.h /^struct wpa_ie_data {$/;"      s
-wpa_ie_hdr     src/common/wpa_common.h /^struct wpa_ie_hdr {$/;"       s
-wpa_ie_len     src/ap/wpa_auth_i.h     /^      size_t wpa_ie_len;$/;"  m       struct:wpa_authenticator
-wpa_ie_len     src/ap/wpa_auth_i.h     /^      size_t wpa_ie_len;$/;"  m       struct:wpa_state_machine
-wpa_ie_len     src/ap/wpa_auth_ie.h    /^      size_t wpa_ie_len;$/;"  m       struct:wpa_eapol_ie_parse
-wpa_ie_len     src/rsn_supp/wpa_ie.h   /^      size_t wpa_ie_len;$/;"  m       struct:wpa_eapol_ie_parse
-wpa_igtk_kde   src/common/wpa_common.h /^struct wpa_igtk_kde {$/;"     s
-wpa_init       src/ap/wpa_auth.c       /^struct wpa_authenticator * wpa_init(const u8 *addr,$/;"       f
-wpa_install_key        src/esp_supplicant/esp_wpa_main.c       /^void  wpa_install_key(enum wpa_alg alg, u8 *addr, int key_idx, int set_tx,$/;"        f
-wpa_key_mgmt   src/ap/ap_config.h      /^      int wpa_key_mgmt;$/;"   m       struct:hostapd_bss_config
-wpa_key_mgmt   src/ap/wpa_auth.h       /^      int wpa_key_mgmt;$/;"   m       struct:wpa_auth_config
-wpa_key_mgmt   src/ap/wpa_auth_i.h     /^      int wpa_key_mgmt; \/* the selected WPA_KEY_MGMT_* *\/$/;"       m       struct:wpa_state_machine
-wpa_key_mgmt   src/common/defs.h       /^enum wpa_key_mgmt {$/;"       g
-wpa_key_mgmt_ft        src/common/defs.h       /^static inline int wpa_key_mgmt_ft(int akm)$/;"        f
-wpa_key_mgmt_sha256    src/common/defs.h       /^static inline int wpa_key_mgmt_sha256(int akm)$/;"    f
-wpa_key_mgmt_to_bitfield       src/common/wpa_common.c /^static int wpa_key_mgmt_to_bitfield(const u8 *s)$/;"  f       file:
-wpa_key_mgmt_wpa_ieee8021x     src/common/defs.h       /^static inline int wpa_key_mgmt_wpa_ieee8021x(int akm)$/;"     f
-wpa_key_mgmt_wpa_psk   src/common/defs.h       /^static inline int wpa_key_mgmt_wpa_psk(int akm)$/;"   f
-wpa_key_replay_counter src/ap/wpa_auth_i.h     /^      struct wpa_key_replay_counter {$/;"     s       struct:wpa_state_machine
-wpa_msg_cb_func        include/utils/wpa_debug.h       /^typedef void (*wpa_msg_cb_func)(void *ctx, int level, const char *txt,$/;"    t
-wpa_neg_complete       src/esp_supplicant/esp_wpa_main.c       /^void  wpa_neg_complete()$/;"  f
-wpa_neg_complete       src/rsn_supp/wpa.h      /^    void (*wpa_neg_complete)();$/;"   m       struct:wpa_sm
-wpa_pairwise   src/ap/ap_config.h      /^      int wpa_pairwise;$/;"   m       struct:hostapd_bss_config
-wpa_pairwise   src/ap/wpa_auth.h       /^      int wpa_pairwise;$/;"   m       struct:wpa_auth_config
-wpa_parse_generic      src/ap/wpa_auth_ie.c    /^static int wpa_parse_generic(const u8 *pos, const u8 *end,$/;"        f       file:
-wpa_parse_generic      src/rsn_supp/wpa_ie.c   /^static int  wpa_parse_generic(const u8 *pos, const u8 *end,$/;"       f       file:
-wpa_parse_kde_ies      src/ap/wpa_auth_ie.c    /^int wpa_parse_kde_ies(const u8 *buf, size_t len, struct wpa_eapol_ie_parse *ie)$/;"   f
-wpa_parse_wpa_ie       src/rsn_supp/wpa_ie.c   /^int  wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len,$/;"        f
-wpa_parse_wpa_ie_rsn   src/common/wpa_common.c /^int wpa_parse_wpa_ie_rsn(const u8 *rsn_ie, size_t rsn_ie_len,$/;"     f
-wpa_parse_wpa_ie_wpa   src/common/wpa_common.c /^int wpa_parse_wpa_ie_wpa(const u8 *wpa_ie, size_t wpa_ie_len,$/;"     f
-wpa_passphrase src/ap/ap_config.h      /^      char *wpa_passphrase;$/;"       m       struct:hostapd_ssid
-wpa_pmk_to_ptk src/common/wpa_common.c /^void wpa_pmk_to_ptk(const u8 *pmk, size_t pmk_len, const char *label,$/;"     f
-wpa_printf     include/utils/wpa_debug.h       152;"   d
-wpa_printf     include/utils/wpa_debug.h       76;"    d
-wpa_psk        src/ap/ap_config.h      /^      struct hostapd_wpa_psk *wpa_psk;$/;"    m       struct:hostapd_ssid     typeref:struct:hostapd_ssid::hostapd_wpa_psk
-wpa_psk_radius src/ap/ap_config.h      /^      } wpa_psk_radius;$/;"   m       struct:hostapd_bss_config       typeref:enum:hostapd_bss_config::__anon18
-wpa_ptk        src/common/wpa_common.h /^struct wpa_ptk {$/;"  s
-wpa_ptk_group_state    src/ap/wpa_auth_i.h     /^      } wpa_ptk_group_state;$/;"      m       struct:wpa_state_machine        typeref:enum:wpa_state_machine::__anon25
-wpa_ptk_rekey  src/ap/ap_config.h      /^      int wpa_ptk_rekey;$/;"  m       struct:hostapd_bss_config
-wpa_ptk_rekey  src/ap/wpa_auth.h       /^      int wpa_ptk_rekey;$/;"  m       struct:wpa_auth_config
-wpa_ptk_rekey  src/rsn_supp/wpa.h      /^    int wpa_ptk_rekey;$/;"    m       struct:wpa_sm
-wpa_ptk_state  src/ap/wpa_auth_i.h     /^      } wpa_ptk_state;$/;"    m       struct:wpa_state_machine        typeref:enum:wpa_state_machine::__anon24
-wpa_receive    src/ap/wpa_auth.c       /^void wpa_receive(struct wpa_authenticator *wpa_auth, struct wpa_state_machine *sm, u8 *data, size_t data_len)$/;"     f
-wpa_receive_error_report       src/ap/wpa_auth.c       /^static int wpa_receive_error_report(struct wpa_authenticator *wpa_auth,$/;"   f       file:
-wpa_register   src/rsn_supp/wpa.c      /^void   wpa_register(char * payload, WPA_SEND_FUNC snd_func,$/;"       f
-wpa_rekey_gtk  src/ap/wpa_auth.c       /^static void wpa_rekey_gtk(void *eloop_ctx, void *timeout_ctx)$/;"     f       file:
-wpa_rekey_ptk  src/ap/wpa_auth.c       /^static void wpa_rekey_ptk(void *eloop_ctx, void *timeout_ctx)$/;"     f       file:
-wpa_remove_ptk src/ap/wpa_auth.c       /^void wpa_remove_ptk(struct wpa_state_machine *sm)$/;" f
-wpa_replay_counter_mark_invalid        src/ap/wpa_auth.c       /^static void wpa_replay_counter_mark_invalid(struct wpa_key_replay_counter *ctr,$/;"   f       file:
-wpa_replay_counter_valid       src/ap/wpa_auth.c       /^static int wpa_replay_counter_valid(struct wpa_key_replay_counter *ctr,$/;"   f       file:
-wpa_report_ie_mismatch src/rsn_supp/wpa.c      /^void wpa_report_ie_mismatch(struct wpa_sm *sm,$/;"    f
-wpa_request_new_ptk    src/ap/wpa_auth.c       /^static void wpa_request_new_ptk(struct wpa_state_machine *sm)$/;"     f       file:
-wpa_selector_to_bitfield       src/common/wpa_common.c /^static int wpa_selector_to_bitfield(const u8 *s)$/;"  f       file:
-wpa_send_eapol src/ap/wpa_auth.c       /^static void wpa_send_eapol(struct wpa_authenticator *wpa_auth,$/;"    f       file:
-wpa_send_eapol_timeout src/ap/wpa_auth.c       /^static void wpa_send_eapol_timeout(void *eloop_ctx, void *timeout_ctx)$/;"    f       file:
-wpa_sendto_wrapper     src/esp_supplicant/esp_wpa_main.c       /^void  wpa_sendto_wrapper(void *buffer, u16 len)$/;"   f
-wpa_set_bss    src/rsn_supp/wpa.c      /^wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher, char *passphrase, u8 *ssid, size_t ssid_len)$/;" f
-wpa_set_passphrase     src/rsn_supp/wpa.c      /^wpa_set_passphrase(char * passphrase, u8 *ssid, size_t ssid_len)$/;"  f
-wpa_set_pmk    src/rsn_supp/wpa.c      /^void wpa_set_pmk(uint8_t *pmk)$/;"    f
-wpa_set_profile        src/rsn_supp/wpa.c      /^void wpa_set_profile(u32 wpa_proto, u8 auth_mode)$/;" f
-wpa_set_wnmsleep       src/ap/wpa_auth.c       /^void wpa_set_wnmsleep(struct wpa_state_machine *sm, int flag)$/;"     f
-wpa_sm src/ap/sta_info.h       /^      struct wpa_state_machine *wpa_sm;$/;"   m       struct:sta_info typeref:struct:sta_info::wpa_state_machine
-wpa_sm src/rsn_supp/wpa.h      /^struct wpa_sm {$/;"   s
-wpa_sm_alloc_eapol     src/esp_supplicant/esp_wpas_glue.c      /^u8   *wpa_sm_alloc_eapol(struct wpa_sm *sm, u8 type,$/;"      f
-wpa_sm_cancel_auth_timeout     src/rsn_supp/wpa.c      /^static inline void   wpa_sm_cancel_auth_timeout(struct wpa_sm *sm)$/;"        f       file:
-wpa_sm_deauthenticate  src/esp_supplicant/esp_wpas_glue.c      /^void  wpa_sm_deauthenticate(struct wpa_sm *sm, u8 reason_code)$/;"    f
-wpa_sm_disassociate    src/esp_supplicant/esp_wpas_glue.c      /^void  wpa_sm_disassociate(struct wpa_sm *sm, int reason_code)$/;"     f
-wpa_sm_ether_send      src/rsn_supp/wpa.c      /^static inline int   wpa_sm_ether_send( struct wpa_sm *sm, const u8 *dest, u16 proto,$/;"      f       file:
-wpa_sm_free_eapol      src/esp_supplicant/esp_wpas_glue.c      /^void  wpa_sm_free_eapol(u8 *buffer)$/;"       f
-wpa_sm_get_beacon_ie   src/esp_supplicant/esp_wpas_glue.c      /^int  wpa_sm_get_beacon_ie(struct wpa_sm *sm)$/;"      f
-wpa_sm_get_bssid       src/rsn_supp/wpa.c      /^static inline int   wpa_sm_get_bssid(struct wpa_sm *sm, u8 *bssid)$/;"        f       file:
-wpa_sm_get_key src/rsn_supp/wpa.c      /^wpa_sm_get_key(uint8_t *ifx, int *alg, u8 *addr, int *key_idx, u8 *key, size_t key_len, int key_entry_valid)$/;"      f
-wpa_sm_get_state       src/rsn_supp/wpa.c      /^static inline enum wpa_states   wpa_sm_get_state(struct wpa_sm *sm)$/;"       f       file:
-wpa_sm_key_request     src/rsn_supp/wpa.c      /^void   wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise)$/;"     f
-wpa_sm_mlme_setprotection      src/esp_supplicant/esp_wpas_glue.c      /^int  wpa_sm_mlme_setprotection(struct wpa_sm *sm, const u8 *addr,$/;" f
-wpa_sm_rekey_ptk       src/rsn_supp/wpa.c      /^  void   wpa_sm_rekey_ptk(void *eloop_ctx, void *timeout_ctx)$/;"     f
-wpa_sm_rx_eapol        src/rsn_supp/wpa.c      /^int   wpa_sm_rx_eapol(u8 *src_addr, u8 *buf, u32 len)$/;"     f
-wpa_sm_set_key src/rsn_supp/wpa.c      /^wpa_sm_set_key(struct install_key *key_sm, enum wpa_alg alg,$/;"      f
-wpa_sm_set_seq src/rsn_supp/wpa.c      /^  void   wpa_sm_set_seq(struct wpa_sm *sm, struct wpa_eapol_key *key, u8 isptk)$/;"   f
-wpa_sm_set_state       src/rsn_supp/wpa.c      /^void wpa_sm_set_state(enum wpa_states state)$/;"      f
-wpa_sm_step    src/ap/wpa_auth.c       /^static int wpa_sm_step(struct wpa_state_machine *sm)$/;"      f       file:
-wpa_snprintf_hex       src/utils/wpa_debug.c   /^int  wpa_snprintf_hex(char *buf, size_t buf_size, const u8 *data, size_t len)$/;"     f
-wpa_snprintf_hex_uppercase     src/utils/wpa_debug.c   /^int  wpa_snprintf_hex_uppercase(char *buf, size_t buf_size, const u8 *data, size_t len)$/;"   f
-wpa_sta_connect        src/esp_supplicant/esp_wifi_driver.h    /^    void (*wpa_sta_connect)(uint8_t *bssid);$/;"      m       struct:wpa_funcs
-wpa_sta_connect        src/esp_supplicant/esp_wpa_main.c       /^void  wpa_sta_connect(uint8_t *bssid)$/;"     f
-wpa_sta_deinit src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_sta_deinit)(void);$/;" m       struct:wpa_funcs
-wpa_sta_disconnect     src/ap/wpa_auth.c       /^static void wpa_sta_disconnect(struct wpa_authenticator *wpa_auth,$/;"        f       file:
-wpa_sta_in_4way_handshake      src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wpa_sta_in_4way_handshake)(void);$/;"      m       struct:wpa_funcs
-wpa_sta_in_4way_handshake      src/rsn_supp/wpa.c      /^bool wpa_sta_in_4way_handshake(void)$/;"      f
-wpa_sta_init   src/esp_supplicant/esp_wifi_driver.h    /^    void (*wpa_sta_init)(void);$/;"   m       struct:wpa_funcs
-wpa_sta_rx_eapol       src/esp_supplicant/esp_wifi_driver.h    /^    int (*wpa_sta_rx_eapol)(u8 *src_addr, u8 *buf, u32 len);$/;"      m       struct:wpa_funcs
-wpa_state      src/rsn_supp/wpa.h      /^    enum wpa_states wpa_state;$/;"    m       struct:wpa_sm   typeref:enum:wpa_sm::wpa_states
-wpa_state_machine      src/ap/wpa_auth_i.h     /^struct wpa_state_machine {$/;"        s
-wpa_states     src/common/defs.h       /^enum wpa_states {$/;" g
-wpa_strdup_tchar       include/utils/common.h  308;"   d
-wpa_strict_rekey       src/ap/ap_config.h      /^      int wpa_strict_rekey;$/;"       m       struct:hostapd_bss_config
-wpa_strict_rekey       src/ap/wpa_auth.h       /^      int wpa_strict_rekey;$/;"       m       struct:wpa_auth_config
-wpa_stsl_negotiation   src/ap/wpa_auth_i.h     /^struct wpa_stsl_negotiation {$/;"     s
-wpa_supplicant_check_group_cipher      src/rsn_supp/wpa.c      /^int   wpa_supplicant_check_group_cipher(int group_cipher,$/;" f
-wpa_supplicant_clr_countermeasures     src/rsn_supp/wpa.c      /^void wpa_supplicant_clr_countermeasures(u16 *pisunicast)$/;"  f
-wpa_supplicant_decrypt_key_data        src/rsn_supp/wpa.c      /^  int   wpa_supplicant_decrypt_key_data(struct wpa_sm *sm,$/;"        f
-wpa_supplicant_get_pmk src/rsn_supp/wpa.c      /^int   wpa_supplicant_get_pmk(struct wpa_sm *sm)$/;"   f
-wpa_supplicant_gtk_in_use      src/rsn_supp/wpa.c      /^bool wpa_supplicant_gtk_in_use(struct wpa_sm *sm, struct wpa_gtk_data *gd)$/;"        f
-wpa_supplicant_gtk_tx_bit_workaround   src/rsn_supp/wpa.c      /^int wpa_supplicant_gtk_tx_bit_workaround(const struct wpa_sm *sm,$/;" f
-wpa_supplicant_install_gtk     src/rsn_supp/wpa.c      /^int   wpa_supplicant_install_gtk(struct wpa_sm *sm,$/;"       f
-wpa_supplicant_install_ptk     src/rsn_supp/wpa.c      /^int   wpa_supplicant_install_ptk(struct wpa_sm *sm)$/;"       f
-wpa_supplicant_key_neg_complete        src/rsn_supp/wpa.c      /^void   wpa_supplicant_key_neg_complete(struct wpa_sm *sm,$/;" f
-wpa_supplicant_pairwise_gtk    src/rsn_supp/wpa.c      /^int wpa_supplicant_pairwise_gtk(struct wpa_sm *sm,$/;"        f
-wpa_supplicant_parse_ies       src/rsn_supp/wpa_ie.c   /^int  wpa_supplicant_parse_ies(const u8 *buf, size_t len,$/;"  f
-wpa_supplicant_process_1_of_2  src/rsn_supp/wpa.c      /^  void   wpa_supplicant_process_1_of_2(struct wpa_sm *sm,$/;" f
-wpa_supplicant_process_1_of_2_rsn      src/rsn_supp/wpa.c      /^  int   wpa_supplicant_process_1_of_2_rsn(struct wpa_sm *sm,$/;"      f
-wpa_supplicant_process_1_of_2_wpa      src/rsn_supp/wpa.c      /^  int   wpa_supplicant_process_1_of_2_wpa(struct wpa_sm *sm,$/;"      f
-wpa_supplicant_process_1_of_4  src/rsn_supp/wpa.c      /^void   wpa_supplicant_process_1_of_4(struct wpa_sm *sm,$/;"   f
-wpa_supplicant_process_3_of_4  src/rsn_supp/wpa.c      /^  void   wpa_supplicant_process_3_of_4(struct wpa_sm *sm,$/;" f
-wpa_supplicant_send_2_of_2     src/rsn_supp/wpa.c      /^  int   wpa_supplicant_send_2_of_2(struct wpa_sm *sm,$/;"     f
-wpa_supplicant_send_2_of_2_txcallback  src/rsn_supp/wpa.c      /^  int   wpa_supplicant_send_2_of_2_txcallback(struct wpa_sm *sm)$/;"  f
-wpa_supplicant_send_2_of_4     src/rsn_supp/wpa.c      /^int   wpa_supplicant_send_2_of_4(struct wpa_sm *sm, const unsigned char *dst,$/;"     f
-wpa_supplicant_send_4_of_4     src/rsn_supp/wpa.c      /^  int   wpa_supplicant_send_4_of_4(struct wpa_sm *sm, const unsigned char *dst,$/;"   f
-wpa_supplicant_send_4_of_4_txcallback  src/rsn_supp/wpa.c      /^  int   wpa_supplicant_send_4_of_4_txcallback(struct wpa_sm *sm)$/;"  f
-wpa_supplicant_stop_countermeasures    src/rsn_supp/wpa.c      /^void wpa_supplicant_stop_countermeasures(u16 *pisunicast)$/;" f
-wpa_supplicant_validate_ie     src/rsn_supp/wpa.c      /^  int   wpa_supplicant_validate_ie(struct wpa_sm *sm,$/;"     f
-wpa_supplicant_verify_eapol_key_mic    src/rsn_supp/wpa.c      /^   int   wpa_supplicant_verify_eapol_key_mic(struct wpa_sm *sm,$/;"   f
-wpa_swap_16    include/utils/common.h  /^static inline unsigned short wpa_swap_16(unsigned short v)$/;"        f
-wpa_swap_32    include/utils/common.h  /^static inline unsigned int wpa_swap_32(unsigned int v)$/;"    f
-wpa_unicode2ascii_inplace      include/utils/common.h  307;"   d
-wpa_use_aes_cmac       src/ap/wpa_auth.c       /^static int wpa_use_aes_cmac(struct wpa_state_machine *sm)$/;" f       file:
-wpa_validate_wpa_ie    src/ap/wpa_auth_ie.c    /^int wpa_validate_wpa_ie(struct wpa_authenticator *wpa_auth,$/;"       f
-wpa_verify_key_mic     src/ap/wpa_auth.c       /^static int wpa_verify_key_mic(struct wpa_ptk *PTK, u8 *data, size_t data_len)$/;"     f       file:
-wpa_wnmsleep_gtk_subelem       src/ap/wpa_auth.c       /^int wpa_wnmsleep_gtk_subelem(struct wpa_state_machine *sm, u8 *pos)$/;"       f
-wpa_wnmsleep_igtk_subelem      src/ap/wpa_auth.c       /^int wpa_wnmsleep_igtk_subelem(struct wpa_state_machine *sm, u8 *pos)$/;"      f
-wpa_wnmsleep_rekey_gtk src/ap/wpa_auth.c       /^void wpa_wnmsleep_rekey_gtk(struct wpa_state_machine *sm)$/;" f
-wpa_write_rsn_ie       src/ap/wpa_auth_ie.c    /^int wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,$/;"   f
-wpa_write_wpa_ie       src/ap/wpa_auth_ie.c    /^static int wpa_write_wpa_ie(struct wpa_auth_config *conf, u8 *buf, size_t len)$/;"    f       file:
-wpabuf include/utils/wpabuf.h  /^struct wpabuf {$/;"   s
-wpabuf_alloc   src/utils/wpabuf.c      /^struct wpabuf * wpabuf_alloc(size_t len)$/;"  f
-wpabuf_alloc_copy      src/utils/wpabuf.c      /^struct wpabuf * wpabuf_alloc_copy(const void *data, size_t len)$/;"   f
-wpabuf_alloc_ext_data  src/utils/wpabuf.c      /^struct wpabuf * wpabuf_alloc_ext_data(u8 *data, size_t len)$/;"       f
-wpabuf_concat  src/utils/wpabuf.c      /^struct wpabuf * wpabuf_concat(struct wpabuf *a, struct wpabuf *b)$/;" f
-wpabuf_dup     src/utils/wpabuf.c      /^struct wpabuf * wpabuf_dup(const struct wpabuf *src)$/;"      f
-wpabuf_free    src/utils/wpabuf.c      /^void wpabuf_free(struct wpabuf *buf)$/;"      f
-wpabuf_get_trace       src/utils/wpabuf.c      /^static struct wpabuf_trace * wpabuf_get_trace(const struct wpabuf *buf)$/;"   f       file:
-wpabuf_head    include/utils/wpabuf.h  /^static inline const void * wpabuf_head(const struct wpabuf *buf)$/;"  f
-wpabuf_head_u8 include/utils/wpabuf.h  /^static inline const u8 * wpabuf_head_u8(const struct wpabuf *buf)$/;" f
-wpabuf_len     include/utils/wpabuf.h  /^static inline size_t wpabuf_len(const struct wpabuf *buf)$/;" f
-wpabuf_mhead   include/utils/wpabuf.h  /^static inline void * wpabuf_mhead(struct wpabuf *buf)$/;"     f
-wpabuf_mhead_u8        include/utils/wpabuf.h  /^static inline u8 * wpabuf_mhead_u8(struct wpabuf *buf)$/;"    f
-wpabuf_overflow        src/utils/wpabuf.c      /^static void wpabuf_overflow(const struct wpabuf *buf, size_t len)$/;" f       file:
-wpabuf_printf  src/utils/wpabuf.c      /^void wpabuf_printf(struct wpabuf *buf, char *fmt, ...)$/;"    f
-wpabuf_put     src/utils/wpabuf.c      /^void * wpabuf_put(struct wpabuf *buf, size_t len)$/;" f
-wpabuf_put_be16        include/utils/wpabuf.h  /^static inline void wpabuf_put_be16(struct wpabuf *buf, u16 data)$/;"  f
-wpabuf_put_be24        include/utils/wpabuf.h  /^static inline void wpabuf_put_be24(struct wpabuf *buf, u32 data)$/;"  f
-wpabuf_put_be32        include/utils/wpabuf.h  /^static inline void wpabuf_put_be32(struct wpabuf *buf, u32 data)$/;"  f
-wpabuf_put_buf include/utils/wpabuf.h  /^static inline void wpabuf_put_buf(struct wpabuf *dst,$/;"     f
-wpabuf_put_data        include/utils/wpabuf.h  /^static inline void wpabuf_put_data(struct wpabuf *buf, const void *data,$/;"  f
-wpabuf_put_le16        include/utils/wpabuf.h  /^static inline void wpabuf_put_le16(struct wpabuf *buf, u16 data)$/;"  f
-wpabuf_put_le32        include/utils/wpabuf.h  /^static inline void wpabuf_put_le32(struct wpabuf *buf, u32 data)$/;"  f
-wpabuf_put_str include/utils/wpabuf.h  /^static inline void wpabuf_put_str(struct wpabuf *dst, const char *str)$/;"    f
-wpabuf_put_u8  include/utils/wpabuf.h  /^static inline void wpabuf_put_u8(struct wpabuf *buf, u8 data)$/;"     f
-wpabuf_resize  src/utils/wpabuf.c      /^int wpabuf_resize(struct wpabuf **_buf, size_t add_len)$/;"   f
-wpabuf_set     include/utils/wpabuf.h  /^static inline void wpabuf_set(struct wpabuf *buf, const void *data, size_t len)$/;"   f
-wpabuf_size    include/utils/wpabuf.h  /^static inline size_t wpabuf_size(const struct wpabuf *buf)$/;"        f
-wpabuf_tailroom        include/utils/wpabuf.h  /^static inline size_t wpabuf_tailroom(const struct wpabuf *buf)$/;"    f
-wpabuf_trace   src/utils/wpabuf.c      /^struct wpabuf_trace {$/;"     s       file:
-wpabuf_zeropad src/utils/wpabuf.c      /^struct wpabuf * wpabuf_zeropad(struct wpabuf *buf, size_t len)$/;"    f
-wps    src/esp_supplicant/esp_wifi_driver.h    /^    uint8_t    *wps;$/;"      m       struct:wps_scan_ie
-wps    src/wps/wps.h   /^      struct wps_context *wps;$/;"    m       struct:wps_config       typeref:struct:wps_config::wps_context
-wps    src/wps/wps.h   /^    struct wps_data *wps;$/;" m       struct:wps_sm   typeref:struct:wps_sm::wps_data
-wps    src/wps/wps_i.h /^      struct wps_context *wps;$/;"    m       struct:wps_data typeref:struct:wps_data::wps_context
-wps    src/wps/wps_registrar.c /^      struct wps_context *wps;$/;"    m       struct:wps_registrar    typeref:struct:wps_registrar::wps_context       file:
-wpsTask        src/esp_supplicant/esp_wps.c    /^void wpsTask(void *pvParameters )$/;" f
-wps_add_discard_ap     src/esp_supplicant/esp_wps.c    /^void wps_add_discard_ap(u8 *bssid)$/;"        f
-wps_ap_priority_compar src/wps/wps.c   /^int wps_ap_priority_compar(const struct wpabuf *wps_a,$/;"    f
-wps_assoc_state        src/wps/wps_defs.h      /^enum wps_assoc_state {$/;"    g
-wps_attr_text  src/wps/wps.c   /^int wps_attr_text(struct wpabuf *data, char *buf, char *end)$/;"      f
-wps_attribute  src/wps/wps_defs.h      /^enum wps_attribute {$/;"      g
-wps_authorized_macs    src/wps/wps_registrar.c /^const u8 * wps_authorized_macs(struct wps_registrar *reg, size_t *count)$/;"  f
-wps_build_ap_cred      src/wps/wps_registrar.c /^static struct wpabuf * wps_build_ap_cred(struct wps_data *wps)$/;"    f       file:
-wps_build_ap_settings  src/wps/wps_enrollee.c  /^static int wps_build_ap_settings(struct wps_data *wps, struct wpabuf *plain)$/;"      f       file:
-wps_build_ap_settings  src/wps/wps_registrar.c /^static int wps_build_ap_settings(struct wps_data *wps, struct wpabuf *msg)$/;"        f       file:
-wps_build_ap_setup_locked      src/wps/wps_registrar.c /^static int wps_build_ap_setup_locked(struct wps_context *wps,$/;"     f       file:
-wps_build_assoc_req_ie src/wps/wps.c   /^struct wpabuf * wps_build_assoc_req_ie(enum wps_request_type req_type)$/;"    f
-wps_build_assoc_resp_ie        src/wps/wps.c   /^struct wpabuf * wps_build_assoc_resp_ie(void)$/;"     f
-wps_build_assoc_state  src/wps/wps_attr_build.c        /^int wps_build_assoc_state(struct wps_data *wps, struct wpabuf *msg)$/;"       f
-wps_build_auth_type_flags      src/wps/wps_attr_build.c        /^int wps_build_auth_type_flags(struct wps_data *wps, struct wpabuf *msg)$/;"   f
-wps_build_authenticator        src/wps/wps_attr_build.c        /^int wps_build_authenticator(struct wps_data *wps, struct wpabuf *msg)$/;"     f
-wps_build_config_error src/wps/wps_attr_build.c        /^int wps_build_config_error(struct wpabuf *msg, u16 err)$/;"   f
-wps_build_config_methods       src/wps/wps_attr_build.c        /^int wps_build_config_methods(struct wpabuf *msg, u16 methods)$/;"     f
-wps_build_config_methods_r     src/wps/wps_registrar.c /^static int wps_build_config_methods_r(struct wps_registrar *reg,$/;"  f       file:
-wps_build_conn_type_flags      src/wps/wps_attr_build.c        /^int wps_build_conn_type_flags(struct wps_data *wps, struct wpabuf *msg)$/;"   f
-wps_build_cred src/wps/wps_registrar.c /^int wps_build_cred(struct wps_data *wps, struct wpabuf *msg)$/;"      f
-wps_build_cred_auth_type       src/wps/wps_enrollee.c  /^static int wps_build_cred_auth_type(struct wps_data *wps, struct wpabuf *msg)$/;"     f       file:
-wps_build_cred_auth_type       src/wps/wps_registrar.c /^static int wps_build_cred_auth_type(struct wpabuf *msg,$/;"   f       file:
-wps_build_cred_encr_type       src/wps/wps_enrollee.c  /^static int wps_build_cred_encr_type(struct wps_data *wps, struct wpabuf *msg)$/;"     f       file:
-wps_build_cred_encr_type       src/wps/wps_registrar.c /^static int wps_build_cred_encr_type(struct wpabuf *msg,$/;"   f       file:
-wps_build_cred_mac_addr        src/wps/wps_enrollee.c  /^static int wps_build_cred_mac_addr(struct wps_data *wps, struct wpabuf *msg)$/;"      f       file:
-wps_build_cred_mac_addr        src/wps/wps_registrar.c /^static int wps_build_cred_mac_addr(struct wpabuf *msg,$/;"    f       file:
-wps_build_cred_network_idx     src/wps/wps_registrar.c /^static int wps_build_cred_network_idx(struct wpabuf *msg,$/;" f       file:
-wps_build_cred_network_key     src/wps/wps_enrollee.c  /^static int wps_build_cred_network_key(struct wps_data *wps, struct wpabuf *msg)$/;"   f       file:
-wps_build_cred_network_key     src/wps/wps_registrar.c /^static int wps_build_cred_network_key(struct wpabuf *msg,$/;" f       file:
-wps_build_cred_ssid    src/wps/wps_enrollee.c  /^static int wps_build_cred_ssid(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_cred_ssid    src/wps/wps_registrar.c /^static int wps_build_cred_ssid(struct wpabuf *msg,$/;"        f       file:
-wps_build_credential   src/wps/wps_registrar.c /^static int wps_build_credential(struct wpabuf *msg,$/;"       f       file:
-wps_build_credential_wrap      src/wps/wps_registrar.c /^int wps_build_credential_wrap(struct wpabuf *msg,$/;" f
-wps_build_dev_name     src/wps/wps_dev_attr.c  /^int wps_build_dev_name(struct wps_device_data *dev, struct wpabuf *msg)$/;"   f
-wps_build_dev_password_id      src/wps/wps_attr_build.c        /^int wps_build_dev_password_id(struct wpabuf *msg, u16 id)$/;" f
-wps_build_device_attrs src/wps/wps_dev_attr.c  /^int wps_build_device_attrs(struct wps_device_data *dev, struct wpabuf *msg)$/;"       f
-wps_build_e_hash       src/wps/wps_enrollee.c  /^static int wps_build_e_hash(struct wps_data *wps, struct wpabuf *msg)$/;"     f       file:
-wps_build_e_snonce1    src/wps/wps_enrollee.c  /^static int wps_build_e_snonce1(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_e_snonce2    src/wps/wps_enrollee.c  /^static int wps_build_e_snonce2(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_encr_settings        src/wps/wps_attr_build.c        /^int wps_build_encr_settings(struct wps_data *wps, struct wpabuf *msg,$/;"     f
-wps_build_encr_type_flags      src/wps/wps_attr_build.c        /^int wps_build_encr_type_flags(struct wps_data *wps, struct wpabuf *msg)$/;"   f
-wps_build_enrollee_nonce       src/wps/wps_attr_build.c        /^int wps_build_enrollee_nonce(struct wps_data *wps, struct wpabuf *msg)$/;"    f
-wps_build_ic_appie_wps_ar      src/esp_supplicant/esp_wps.c    /^wps_build_ic_appie_wps_ar(void)$/;"   f       file:
-wps_build_ic_appie_wps_pr      src/esp_supplicant/esp_wps.c    /^wps_build_ic_appie_wps_pr(void)$/;"   f       file:
-wps_build_key_wrap_auth        src/wps/wps_attr_build.c        /^int wps_build_key_wrap_auth(struct wps_data *wps, struct wpabuf *msg)$/;"     f
-wps_build_m1   src/wps/wps_enrollee.c  /^static struct wpabuf * wps_build_m1(struct wps_data *wps)$/;" f       file:
-wps_build_m2   src/wps/wps_registrar.c /^static struct wpabuf * wps_build_m2(struct wps_data *wps)$/;" f       file:
-wps_build_m2d  src/wps/wps_registrar.c /^static struct wpabuf * wps_build_m2d(struct wps_data *wps)$/;"        f       file:
-wps_build_m3   src/wps/wps_enrollee.c  /^static struct wpabuf * wps_build_m3(struct wps_data *wps)$/;" f       file:
-wps_build_m4   src/wps/wps_registrar.c /^static struct wpabuf * wps_build_m4(struct wps_data *wps)$/;" f       file:
-wps_build_m5   src/wps/wps_enrollee.c  /^static struct wpabuf * wps_build_m5(struct wps_data *wps)$/;" f       file:
-wps_build_m6   src/wps/wps_registrar.c /^static struct wpabuf * wps_build_m6(struct wps_data *wps)$/;" f       file:
-wps_build_m7   src/wps/wps_enrollee.c  /^static struct wpabuf * wps_build_m7(struct wps_data *wps)$/;" f       file:
-wps_build_m8   src/wps/wps_registrar.c /^static struct wpabuf * wps_build_m8(struct wps_data *wps)$/;" f       file:
-wps_build_mac_addr     src/wps/wps_enrollee.c  /^static int wps_build_mac_addr(struct wps_data *wps, struct wpabuf *msg) {$/;" f       file:
-wps_build_manufacturer src/wps/wps_dev_attr.c  /^int wps_build_manufacturer(struct wps_device_data *dev, struct wpabuf *msg)$/;"       f
-wps_build_model_name   src/wps/wps_dev_attr.c  /^int wps_build_model_name(struct wps_device_data *dev, struct wpabuf *msg)$/;" f
-wps_build_model_number src/wps/wps_dev_attr.c  /^int wps_build_model_number(struct wps_device_data *dev, struct wpabuf *msg)$/;"       f
-wps_build_msg_type     src/wps/wps_attr_build.c        /^int wps_build_msg_type(struct wpabuf *msg, enum wps_msg_type msg_type)$/;"    f
-wps_build_nfc_pw_token src/wps/wps_common.c    /^struct wpabuf * wps_build_nfc_pw_token(u16 dev_pw_id,$/;"     f
-wps_build_oob_dev_pw   src/wps/wps_attr_build.c        /^int wps_build_oob_dev_pw(struct wpabuf *msg, u16 dev_pw_id,$/;"       f
-wps_build_os_version   src/wps/wps_dev_attr.c  /^int wps_build_os_version(struct wps_device_data *dev, struct wpabuf *msg)$/;" f
-wps_build_primary_dev_type     src/wps/wps_dev_attr.c  /^int wps_build_primary_dev_type(struct wps_device_data *dev, struct wpabuf *msg)$/;"   f
-wps_build_probe_config_methods src/wps/wps_registrar.c /^static int wps_build_probe_config_methods(struct wps_registrar *reg,$/;"      f       file:
-wps_build_probe_req_ie src/wps/wps.c   /^struct wpabuf * wps_build_probe_req_ie(u16 pw_id, struct wps_device_data *dev,$/;"    f
-wps_build_public_key   src/wps/wps_attr_build.c        /^int wps_build_public_key(struct wps_data *wps, struct wpabuf *msg, wps_key_mode_t mode)$/;"   f
-wps_build_r_hash       src/wps/wps_registrar.c /^static int wps_build_r_hash(struct wps_data *wps, struct wpabuf *msg)$/;"     f       file:
-wps_build_r_snonce1    src/wps/wps_registrar.c /^static int wps_build_r_snonce1(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_r_snonce2    src/wps/wps_registrar.c /^static int wps_build_r_snonce2(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_registrar_nonce      src/wps/wps_attr_build.c        /^int wps_build_registrar_nonce(struct wps_data *wps, struct wpabuf *msg)$/;"   f
-wps_build_req_dev_type src/wps/wps_dev_attr.c  /^int wps_build_req_dev_type(struct wps_device_data *dev, struct wpabuf *msg,$/;"       f
-wps_build_req_type     src/wps/wps_attr_build.c        /^int wps_build_req_type(struct wpabuf *msg, enum wps_request_type type)$/;"    f
-wps_build_resp_type    src/wps/wps_attr_build.c        /^int wps_build_resp_type(struct wpabuf *msg, enum wps_response_type type)$/;"  f
-wps_build_rf_bands     src/wps/wps_dev_attr.c  /^int wps_build_rf_bands(struct wps_device_data *dev, struct wpabuf *msg)$/;"   f
-wps_build_secondary_dev_type   src/wps/wps_dev_attr.c  /^int wps_build_secondary_dev_type(struct wps_device_data *dev,$/;"     f
-wps_build_sel_pbc_reg_uuid_e   src/wps/wps_registrar.c /^static int wps_build_sel_pbc_reg_uuid_e(struct wps_registrar *reg,$/;"        f       file:
-wps_build_sel_reg_config_methods       src/wps/wps_registrar.c /^static int wps_build_sel_reg_config_methods(struct wps_registrar *reg,$/;"    f       file:
-wps_build_sel_reg_dev_password_id      src/wps/wps_registrar.c /^static int wps_build_sel_reg_dev_password_id(struct wps_registrar *reg,$/;"   f       file:
-wps_build_selected_registrar   src/wps/wps_registrar.c /^static int wps_build_selected_registrar(struct wps_registrar *reg,$/;"        f       file:
-wps_build_serial_number        src/wps/wps_dev_attr.c  /^static int wps_build_serial_number(struct wps_device_data *dev,$/;"   f       file:
-wps_build_uuid_e       src/wps/wps_attr_build.c        /^int wps_build_uuid_e(struct wpabuf *msg, const u8 *uuid)$/;"  f
-wps_build_uuid_r       src/wps/wps_registrar.c /^static int wps_build_uuid_r(struct wps_data *wps, struct wpabuf *msg)$/;"     f       file:
-wps_build_vendor_ext   src/wps/wps_dev_attr.c  /^int wps_build_vendor_ext(struct wps_device_data *dev, struct wpabuf *msg)$/;" f
-wps_build_vendor_ext_m1        src/wps/wps_dev_attr.c  /^int wps_build_vendor_ext_m1(struct wps_device_data *dev, struct wpabuf *msg)$/;"      f
-wps_build_version      src/wps/wps_attr_build.c        /^int wps_build_version(struct wpabuf *msg)$/;" f
-wps_build_wfa_ext      src/wps/wps_attr_build.c        /^int wps_build_wfa_ext(struct wpabuf *msg, int req_to_enroll,$/;"      f
-wps_build_wps_state    src/wps/wps_enrollee.c  /^static int wps_build_wps_state(struct wps_data *wps, struct wpabuf *msg)$/;"  f       file:
-wps_build_wps_state    src/wps/wps_registrar.c /^static int wps_build_wps_state(struct wps_context *wps, struct wpabuf *msg)$/;"       f       file:
-wps_build_wsc_ack      src/wps/wps_common.c    /^struct wpabuf * wps_build_wsc_ack(struct wps_data *wps)$/;"   f
-wps_build_wsc_done     src/wps/wps_enrollee.c  /^static struct wpabuf * wps_build_wsc_done(struct wps_data *wps)$/;"   f       file:
-wps_build_wsc_nack     src/wps/wps_common.c    /^struct wpabuf * wps_build_wsc_nack(struct wps_data *wps)$/;"  f
-wps_calc_key_mode      src/wps/wps_i.h /^typedef enum wps_calc_key_mode {$/;"  g
-wps_cb_new_psk src/wps/wps_registrar.c /^static int wps_cb_new_psk(struct wps_registrar *reg, const u8 *mac_addr,$/;"  f       file:
-wps_cb_pin_needed      src/wps/wps_registrar.c /^static void wps_cb_pin_needed(struct wps_registrar *reg, const u8 *uuid_e,$/;"        f       file:
-wps_cb_reg_success     src/wps/wps_registrar.c /^static void wps_cb_reg_success(struct wps_registrar *reg, const u8 *mac_addr,$/;"     f       file:
-wps_cb_set_ie  src/wps/wps_registrar.c /^static int wps_cb_set_ie(struct wps_registrar *reg, struct wpabuf *beacon_ie,$/;"     f       file:
-wps_cb_set_sel_reg     src/wps/wps_registrar.c /^static void wps_cb_set_sel_reg(struct wps_registrar *reg)$/;" f       file:
-wps_cb_status  src/wps/wps.h   /^enum wps_cb_status {$/;"      g
-wps_cfg        src/wps/wps.h   /^    struct wps_config *wps_cfg;$/;"   m       struct:wps_sm   typeref:struct:wps_sm::wps_config
-wps_check_wifi_mode    src/esp_supplicant/esp_wps.c    /^int wps_check_wifi_mode(void)$/;"     f
-wps_config     src/wps/wps.h   /^struct wps_config {$/;"       s
-wps_config_error       src/wps/wps_defs.h      /^enum wps_config_error {$/;"   g
-wps_config_methods_str2bin     src/wps/wps_common.c    /^u16 wps_config_methods_str2bin(const char *str)$/;"   f
-wps_context    src/wps/wps.h   /^struct wps_context {$/;"      s
-wps_cred_processing    src/ap/ap_config.h      /^      int wps_cred_processing;$/;"    m       struct:hostapd_bss_config
-wps_cred_update        src/wps/wps_registrar.c /^static void wps_cred_update(struct wps_credential *dst,$/;"   f       file:
-wps_credential src/wps/wps.h   /^struct wps_credential {$/;"   s
-wps_ctx        src/wps/wps.h   /^    struct wps_context *wps_ctx;$/;"  m       struct:wps_sm   typeref:struct:wps_sm::wps_context
-wps_data       src/wps/wps_i.h /^struct wps_data {$/;" s
-wps_decrypt_encr_settings      src/wps/wps_common.c    /^struct wpabuf * wps_decrypt_encr_settings(struct wps_data *wps, const u8 *encr,$/;"   f
-wps_deinit     src/esp_supplicant/esp_wps.c    /^void wps_deinit(void)$/;"     f
-wps_delete_timer       src/esp_supplicant/esp_wps.c    /^int wps_delete_timer(void)$/;"        f
-wps_derive_keys        src/wps/wps_common.c    /^int wps_derive_keys(struct wps_data *wps)$/;" f
-wps_derive_psk src/wps/wps_common.c    /^void wps_derive_psk(struct wps_data *wps, const u8 *dev_passwd,$/;"   f
-wps_dev_categ  src/wps/wps_defs.h      /^enum wps_dev_categ {$/;"      g
-wps_dev_deinit src/esp_supplicant/esp_wps.c    /^int wps_dev_deinit(struct wps_device_data *dev)$/;"   f
-wps_dev_init   src/esp_supplicant/esp_wps.c    /^int wps_dev_init(void)$/;"    f
-wps_dev_password_id    src/wps/wps_defs.h      /^enum wps_dev_password_id {$/;"        g
-wps_dev_subcateg       src/wps/wps_defs.h      /^enum wps_dev_subcateg {$/;"   g
-wps_dev_type_bin2str   src/wps/wps_common.c    /^char * wps_dev_type_bin2str(const u8 dev_type[WPS_DEV_TYPE_LEN], char *buf,$/;"       f
-wps_dev_type_str2bin   src/wps/wps_common.c    /^int wps_dev_type_str2bin(const char *str, u8 dev_type[WPS_DEV_TYPE_LEN])$/;"  f
-wps_device_clone_data  src/wps/wps_registrar.c /^static void wps_device_clone_data(struct wps_device_data *dst,$/;"    f       file:
-wps_device_data        src/wps/wps.h   /^struct wps_device_data {$/;"  s
-wps_device_data_dup    src/wps/wps_dev_attr.c  /^void wps_device_data_dup(struct wps_device_data *dst,$/;"     f
-wps_device_data_free   src/wps/wps_dev_attr.c  /^void wps_device_data_free(struct wps_device_data *dev)$/;"    f
-wps_device_get src/wps/wps_registrar.c /^static struct wps_registrar_device * wps_device_get(struct wps_registrar *reg,$/;"    f       file:
-wps_device_store       src/wps/wps_registrar.c /^int wps_device_store(struct wps_registrar *reg,$/;"   f
-wps_eapol_start_timer  src/wps/wps.h   /^    ETSTimer wps_eapol_start_timer;$/;"       m       struct:wps_sm
-wps_enrollee_get_msg   src/wps/wps_enrollee.c  /^struct wpabuf * wps_enrollee_get_msg(struct wps_data *wps,$/;"        f
-wps_enrollee_process_msg       src/wps/wps_enrollee.c  /^enum wps_process_res wps_enrollee_process_msg(struct wps_data *wps,$/;"       f
-wps_enrollee_process_msg_frag  src/esp_supplicant/esp_wps.c    /^int wps_enrollee_process_msg_frag(struct wpabuf **buf, int tot_len, u8 *frag_data, int frag_len, u8 flag)$/;" f
-wps_error_indication   src/wps/wps_defs.h      /^enum wps_error_indication {$/;"       g
-wps_event      src/wps/wps.h   /^enum wps_event {$/;"  g
-wps_event_data src/wps/wps.h   /^union wps_event_data {$/;"    u
-wps_event_er_ap        src/wps/wps.h   /^      struct wps_event_er_ap {$/;"    s       union:wps_event_data
-wps_event_er_ap_settings       src/wps/wps.h   /^      struct wps_event_er_ap_settings {$/;"   s       union:wps_event_data
-wps_event_er_enrollee  src/wps/wps.h   /^      struct wps_event_er_enrollee {$/;"      s       union:wps_event_data
-wps_event_er_set_selected_registrar    src/wps/wps.h   /^      struct wps_event_er_set_selected_registrar {$/;"        s       union:wps_event_data
-wps_event_fail src/wps/wps.h   /^      struct wps_event_fail {$/;"     s       union:wps_event_data
-wps_event_m2d  src/wps/wps.h   /^      struct wps_event_m2d {$/;"      s       union:wps_event_data
-wps_event_pwd_auth_fail        src/wps/wps.h   /^      struct wps_event_pwd_auth_fail {$/;"    s       union:wps_event_data
-wps_factory_information_t      include/esp_supplicant/esp_wps.h        /^} wps_factory_information_t;$/;"      t       typeref:struct:__anon89
-wps_fail_event src/wps/wps_common.c    /^void wps_fail_event(struct wps_context *wps, enum wps_msg_type msg,$/;"       f
-wps_finish     src/esp_supplicant/esp_wps.c    /^int wps_finish(void)$/;"      f
-wps_free_devices       src/wps/wps_registrar.c /^static void wps_free_devices(struct wps_registrar_device *dev)$/;"    f       file:
-wps_free_nfc_pw_tokens src/wps/wps_registrar.c /^static void wps_free_nfc_pw_tokens(struct dl_list *tokens, u16 pw_id)$/;"     f       file:
-wps_free_nfc_pw_tokens src/wps/wps_registrar.c 70;"    d       file:
-wps_free_pbc_sessions  src/wps/wps_registrar.c /^static void wps_free_pbc_sessions(struct wps_pbc_session *pbc)$/;"    f       file:
-wps_free_pending_msgs  src/wps/wps.c   /^void wps_free_pending_msgs(struct upnp_pending_message *msgs)$/;"     f
-wps_free_pin   src/wps/wps_registrar.c /^static void wps_free_pin(struct wps_uuid_pin *pin)$/;"        f       file:
-wps_free_pins  src/wps/wps_registrar.c /^static void wps_free_pins(struct dl_list *pins)$/;"   f       file:
-wps_funcs      src/esp_supplicant/esp_wifi_driver.h    /^struct wps_funcs {$/;"        s
-wps_generate_pin       src/wps/wps_common.c    /^unsigned int wps_generate_pin(void)$/;"       f
-wps_get_dev_password   src/wps/wps_registrar.c /^static int wps_get_dev_password(struct wps_data *wps)$/;"     f       file:
-wps_get_msg    src/wps/wps.c   /^struct wpabuf * wps_get_msg(struct wps_data *wps, enum wsc_op_code *op_code)$/;"      f
-wps_get_nfc_pw_token   src/wps/wps_registrar.c /^static struct wps_nfc_pw_token * wps_get_nfc_pw_token(struct dl_list *tokens,$/;"     f       file:
-wps_get_oob_cred       src/wps/wps_common.c    /^struct wpabuf * wps_get_oob_cred(struct wps_context *wps)$/;" f
-wps_get_status src/esp_supplicant/esp_wps.c    /^int wps_get_status(void)$/;"  f
-wps_get_type   src/esp_supplicant/esp_wps.c    /^int wps_get_type(void)$/;"    f
-wps_get_uuid_e src/wps/wps.c   /^const u8 * wps_get_uuid_e(const struct wpabuf *msg)$/;"       f
-wps_ie_encapsulate     src/wps/wps_attr_build.c        /^struct wpabuf * wps_ie_encapsulate(struct wpabuf *data)$/;"   f
-wps_init       src/esp_supplicant/esp_wps.c    /^struct wps_data *wps_init(void)$/;"   f
-wps_ioctl_param_t      src/esp_supplicant/esp_wps.c    /^} wps_ioctl_param_t;$/;"      t       typeref:struct:__anon33 file:
-wps_is_20      src/wps/wps.c   /^int wps_is_20(const struct wpabuf *msg)$/;"   f
-wps_is_addr_authorized src/wps/wps.c   /^int wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr,$/;"      f
-wps_is_selected_pbc_registrar  src/wps/wps.c   /^int wps_is_selected_pbc_registrar(const struct wpabuf *msg, u8 *bssid)$/;"    f
-wps_is_selected_pin_registrar  src/wps/wps.c   /^int wps_is_selected_pin_registrar(const struct wpabuf *msg, u8 *bssid)$/;"    f
-wps_kdf        src/wps/wps_common.c    /^void wps_kdf(const u8 *key, const u8 *label_prefix, size_t label_prefix_len,$/;"      f
-wps_key_mode_t src/wps/wps_i.h /^} wps_key_mode_t;$/;" t       typeref:enum:wps_calc_key_mode
-wps_key_save   src/esp_supplicant/esp_wps.c    /^wps_key_save(char *key, u8 key_len)$/;"       f
-wps_msg_flag   src/wps/wps_defs.h      /^enum wps_msg_flag {$/;"       g
-wps_msg_timeout_timer  src/wps/wps.h   /^    ETSTimer wps_msg_timeout_timer;$/;"       m       struct:wps_sm
-wps_msg_type   src/wps/wps_defs.h      /^enum wps_msg_type {$/;"       g
-wps_nfc_dev_pw src/ap/ap_config.h      /^      struct wpabuf *wps_nfc_dev_pw;$/;"      m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::wpabuf
-wps_nfc_dev_pw_id      src/ap/ap_config.h      /^      int wps_nfc_dev_pw_id;$/;"      m       struct:hostapd_bss_config
-wps_nfc_dh_privkey     src/ap/ap_config.h      /^      struct wpabuf *wps_nfc_dh_privkey;$/;"  m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::wpabuf
-wps_nfc_dh_pubkey      src/ap/ap_config.h      /^      struct wpabuf *wps_nfc_dh_pubkey;$/;"   m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::wpabuf
-wps_nfc_pw_token       src/wps/wps_registrar.c /^struct wps_nfc_pw_token {$/;" s       file:
-wps_nfc_token_gen      src/wps/wps_common.c    /^struct wpabuf * wps_nfc_token_gen(int ndef, int *id, struct wpabuf **pubkey,$/;"      f
-wps_oob_use_cred       src/wps/wps_common.c    /^int wps_oob_use_cred(struct wps_context *wps, struct wps_parse_attr *attr)$/;"        f
-wps_parse_attr src/wps/wps_attr_parse.h        /^struct wps_parse_attr {$/;"   s
-wps_parse_msg  src/wps/wps_attr_parse.c        /^int wps_parse_msg(const struct wpabuf *msg, struct wps_parse_attr *attr)$/;"  f
-wps_parse_scan_result  src/esp_supplicant/esp_wifi_driver.h    /^    bool (*wps_parse_scan_result)(struct wps_scan_ie *scan);$/;"      m       struct:wps_funcs
-wps_parse_scan_result  src/esp_supplicant/esp_wps.c    /^wps_parse_scan_result(struct wps_scan_ie *scan)$/;"   f       file:
-wps_parse_vendor_ext   src/wps/wps_attr_parse.c        /^static int wps_parse_vendor_ext(struct wps_parse_attr *attr, const u8 *pos,$/;"       f       file:
-wps_parse_vendor_ext_wfa       src/wps/wps_attr_parse.c        /^static int wps_parse_vendor_ext_wfa(struct wps_parse_attr *attr, const u8 *pos,$/;"   f       file:
-wps_pbc_overlap_event  src/wps/wps_common.c    /^void wps_pbc_overlap_event(struct wps_context *wps)$/;"       f
-wps_pbc_session        src/wps/wps_registrar.c /^struct wps_pbc_session {$/;"  s       file:
-wps_pbc_timeout_event  src/wps/wps_common.c    /^void wps_pbc_timeout_event(struct wps_context *wps)$/;"       f
-wps_pin_checksum       src/wps/wps_common.c    /^unsigned int wps_pin_checksum(unsigned int pin)$/;"   f
-wps_pin_requests       src/ap/ap_config.h      /^      char *wps_pin_requests;$/;"     m       struct:hostapd_bss_config
-wps_pin_revealed       src/wps/wps_i.h /^      int wps_pin_revealed;$/;"       m       struct:wps_data
-wps_pin_str_valid      src/wps/wps_common.c    /^int wps_pin_str_valid(const char *pin)$/;"    f
-wps_pin_valid  src/wps/wps_common.c    /^unsigned int wps_pin_valid(unsigned int pin)$/;"      f
-wps_post       src/esp_supplicant/esp_wps.c    /^ETS_STATUS wps_post(ETSSignal sig, ETSParam par)$/;"  f
-wps_post_block src/esp_supplicant/esp_wps.c    /^int wps_post_block(ETSSignal sig, void *arg)$/;"      f
-wps_process_ap_settings        src/wps/wps_attr_process.c      /^int wps_process_ap_settings(struct wps_parse_attr *attr,$/;"  f
-wps_process_ap_settings_e      src/wps/wps_enrollee.c  /^static int wps_process_ap_settings_e(struct wps_data *wps,$/;"        f       file:
-wps_process_ap_settings_r      src/wps/wps_registrar.c /^static int wps_process_ap_settings_r(struct wps_data *wps,$/;"        f       file:
-wps_process_assoc_state        src/wps/wps_registrar.c /^static int wps_process_assoc_state(struct wps_data *wps, const u8 *assoc)$/;" f       file:
-wps_process_auth_type_flags    src/wps/wps_registrar.c /^static int wps_process_auth_type_flags(struct wps_data *wps, const u8 *auth)$/;"      f       file:
-wps_process_authenticator      src/wps/wps_attr_process.c      /^int wps_process_authenticator(struct wps_data *wps, const u8 *authenticator,$/;"      f
-wps_process_config_error       src/wps/wps_registrar.c /^static int wps_process_config_error(struct wps_data *wps, const u8 *err)$/;"  f       file:
-wps_process_config_methods     src/wps/wps_registrar.c /^static int wps_process_config_methods(struct wps_data *wps, const u8 *methods)$/;"    f       file:
-wps_process_conn_type_flags    src/wps/wps_registrar.c /^static int wps_process_conn_type_flags(struct wps_data *wps, const u8 *conn)$/;"      f       file:
-wps_process_cred       src/wps/wps_attr_process.c      /^int wps_process_cred(struct wps_parse_attr *attr,$/;" f
-wps_process_cred_802_1x_enabled        src/wps/wps_attr_process.c      /^static int wps_process_cred_802_1x_enabled(struct wps_credential *cred,$/;"   f       file:
-wps_process_cred_ap_channel    src/wps/wps_attr_process.c      /^static int wps_process_cred_ap_channel(struct wps_credential *cred,$/;"       f       file:
-wps_process_cred_auth_type     src/wps/wps_attr_process.c      /^static int wps_process_cred_auth_type(struct wps_credential *cred,$/;"        f       file:
-wps_process_cred_e     src/wps/wps_enrollee.c  /^static int wps_process_cred_e(struct wps_data *wps, const u8 *cred,$/;"       f       file:
-wps_process_cred_eap_identity  src/wps/wps_attr_process.c      /^static int wps_process_cred_eap_identity(struct wps_credential *cred,$/;"     f       file:
-wps_process_cred_eap_type      src/wps/wps_attr_process.c      /^static int wps_process_cred_eap_type(struct wps_credential *cred,$/;" f       file:
-wps_process_cred_encr_type     src/wps/wps_attr_process.c      /^static int wps_process_cred_encr_type(struct wps_credential *cred,$/;"        f       file:
-wps_process_cred_key_prov_auto src/wps/wps_attr_process.c      /^static int wps_process_cred_key_prov_auto(struct wps_credential *cred,$/;"    f       file:
-wps_process_cred_mac_addr      src/wps/wps_attr_process.c      /^static int wps_process_cred_mac_addr(struct wps_credential *cred,$/;" f       file:
-wps_process_cred_network_idx   src/wps/wps_attr_process.c      /^static int wps_process_cred_network_idx(struct wps_credential *cred,$/;"      f       file:
-wps_process_cred_network_key   src/wps/wps_attr_process.c      /^static int wps_process_cred_network_key(struct wps_credential *cred,$/;"      f       file:
-wps_process_cred_network_key_idx       src/wps/wps_attr_process.c      /^static int wps_process_cred_network_key_idx(struct wps_credential *cred,$/;"  f       file:
-wps_process_cred_ssid  src/wps/wps_attr_process.c      /^static int wps_process_cred_ssid(struct wps_credential *cred, const u8 *ssid,$/;"     f       file:
-wps_process_creds      src/wps/wps_enrollee.c  /^static int wps_process_creds(struct wps_data *wps, const u8 *cred[],$/;"      f       file:
-wps_process_dev_name   src/wps/wps_dev_attr.c  /^static int wps_process_dev_name(struct wps_device_data *dev, const u8 *str,$/;"       f       file:
-wps_process_dev_password_id    src/wps/wps_registrar.c /^static int wps_process_dev_password_id(struct wps_data *wps, const u8 *pw_id)$/;"     f       file:
-wps_process_device_attrs       src/wps/wps_dev_attr.c  /^int wps_process_device_attrs(struct wps_device_data *dev,$/;" f
-wps_process_e_hash1    src/wps/wps_registrar.c /^static int wps_process_e_hash1(struct wps_data *wps, const u8 *e_hash1)$/;"   f       file:
-wps_process_e_hash2    src/wps/wps_registrar.c /^static int wps_process_e_hash2(struct wps_data *wps, const u8 *e_hash2)$/;"   f       file:
-wps_process_e_snonce1  src/wps/wps_registrar.c /^static int wps_process_e_snonce1(struct wps_data *wps, const u8 *e_snonce1)$/;"       f       file:
-wps_process_e_snonce2  src/wps/wps_registrar.c /^static int wps_process_e_snonce2(struct wps_data *wps, const u8 *e_snonce2)$/;"       f       file:
-wps_process_encr_type_flags    src/wps/wps_registrar.c /^static int wps_process_encr_type_flags(struct wps_data *wps, const u8 *encr)$/;"      f       file:
-wps_process_enrollee_nonce     src/wps/wps_enrollee.c  /^static int wps_process_enrollee_nonce(struct wps_data *wps, const u8 *e_nonce)$/;"    f       file:
-wps_process_enrollee_nonce     src/wps/wps_registrar.c /^static int wps_process_enrollee_nonce(struct wps_data *wps, const u8 *e_nonce)$/;"    f       file:
-wps_process_key_wrap_auth      src/wps/wps_attr_process.c      /^int wps_process_key_wrap_auth(struct wps_data *wps, struct wpabuf *msg,$/;"   f
-wps_process_m1 src/wps/wps_registrar.c /^static enum wps_process_res wps_process_m1(struct wps_data *wps,$/;"  f       file:
-wps_process_m2 src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_m2(struct wps_data *wps,$/;"  f       file:
-wps_process_m2d        src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_m2d(struct wps_data *wps,$/;" f       file:
-wps_process_m3 src/wps/wps_registrar.c /^static enum wps_process_res wps_process_m3(struct wps_data *wps,$/;"  f       file:
-wps_process_m4 src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_m4(struct wps_data *wps,$/;"  f       file:
-wps_process_m5 src/wps/wps_registrar.c /^static enum wps_process_res wps_process_m5(struct wps_data *wps,$/;"  f       file:
-wps_process_m6 src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_m6(struct wps_data *wps,$/;"  f       file:
-wps_process_m7 src/wps/wps_registrar.c /^static enum wps_process_res wps_process_m7(struct wps_data *wps,$/;"  f       file:
-wps_process_m8 src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_m8(struct wps_data *wps,$/;"  f       file:
-wps_process_mac_addr   src/wps/wps_registrar.c /^static int wps_process_mac_addr(struct wps_data *wps, const u8 *mac_addr)$/;" f       file:
-wps_process_manufacturer       src/wps/wps_dev_attr.c  /^static int wps_process_manufacturer(struct wps_device_data *dev, const u8 *str,$/;"   f       file:
-wps_process_model_name src/wps/wps_dev_attr.c  /^static int wps_process_model_name(struct wps_device_data *dev, const u8 *str,$/;"     f       file:
-wps_process_model_number       src/wps/wps_dev_attr.c  /^static int wps_process_model_number(struct wps_device_data *dev, const u8 *str,$/;"   f       file:
-wps_process_msg        src/wps/wps.c   /^enum wps_process_res wps_process_msg(struct wps_data *wps,$/;"        f
-wps_process_os_version src/wps/wps_dev_attr.c  /^int wps_process_os_version(struct wps_device_data *dev, const u8 *ver)$/;"    f
-wps_process_primary_dev_type   src/wps/wps_dev_attr.c  /^static int wps_process_primary_dev_type(struct wps_device_data *dev,$/;"      f       file:
-wps_process_pubkey     src/wps/wps_enrollee.c  /^static int wps_process_pubkey(struct wps_data *wps, const u8 *pk,$/;" f       file:
-wps_process_pubkey     src/wps/wps_registrar.c /^static int wps_process_pubkey(struct wps_data *wps, const u8 *pk,$/;" f       file:
-wps_process_r_hash1    src/wps/wps_enrollee.c  /^static int wps_process_r_hash1(struct wps_data *wps, const u8 *r_hash1)$/;"   f       file:
-wps_process_r_hash2    src/wps/wps_enrollee.c  /^static int wps_process_r_hash2(struct wps_data *wps, const u8 *r_hash2)$/;"   f       file:
-wps_process_r_snonce1  src/wps/wps_enrollee.c  /^static int wps_process_r_snonce1(struct wps_data *wps, const u8 *r_snonce1)$/;"       f       file:
-wps_process_r_snonce2  src/wps/wps_enrollee.c  /^static int wps_process_r_snonce2(struct wps_data *wps, const u8 *r_snonce2)$/;"       f       file:
-wps_process_registrar_nonce    src/wps/wps_enrollee.c  /^static int wps_process_registrar_nonce(struct wps_data *wps, const u8 *r_nonce)$/;"   f       file:
-wps_process_registrar_nonce    src/wps/wps_registrar.c /^static int wps_process_registrar_nonce(struct wps_data *wps, const u8 *r_nonce)$/;"   f       file:
-wps_process_res        src/wps/wps.h   /^enum wps_process_res {$/;"    g
-wps_process_rf_bands   src/wps/wps_dev_attr.c  /^int wps_process_rf_bands(struct wps_device_data *dev, const u8 *bands)$/;"    f
-wps_process_serial_number      src/wps/wps_dev_attr.c  /^static int wps_process_serial_number(struct wps_device_data *dev,$/;" f       file:
-wps_process_uuid_e     src/wps/wps_registrar.c /^static int wps_process_uuid_e(struct wps_data *wps, const u8 *uuid_e)$/;"     f       file:
-wps_process_uuid_r     src/wps/wps_enrollee.c  /^static int wps_process_uuid_r(struct wps_data *wps, const u8 *uuid_r)$/;"     f       file:
-wps_process_wps_mX_req src/esp_supplicant/esp_wps.c    /^int wps_process_wps_mX_req(u8 *ubuf, int len, enum wps_process_res *res)$/;"  f
-wps_process_wps_state  src/wps/wps_registrar.c /^static int wps_process_wps_state(struct wps_data *wps, const u8 *state)$/;"   f       file:
-wps_process_wsc_ack    src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_wsc_ack(struct wps_data *wps,$/;"     f       file:
-wps_process_wsc_ack    src/wps/wps_registrar.c /^static enum wps_process_res wps_process_wsc_ack(struct wps_data *wps,$/;"     f       file:
-wps_process_wsc_done   src/wps/wps_registrar.c /^static enum wps_process_res wps_process_wsc_done(struct wps_data *wps,$/;"    f       file:
-wps_process_wsc_msg    src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_wsc_msg(struct wps_data *wps,$/;"     f       file:
-wps_process_wsc_msg    src/wps/wps_registrar.c /^static enum wps_process_res wps_process_wsc_msg(struct wps_data *wps,$/;"     f       file:
-wps_process_wsc_nack   src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_wsc_nack(struct wps_data *wps,$/;"    f       file:
-wps_process_wsc_nack   src/wps/wps_registrar.c /^static enum wps_process_res wps_process_wsc_nack(struct wps_data *wps,$/;"    f       file:
-wps_process_wsc_start  src/wps/wps_enrollee.c  /^static enum wps_process_res wps_process_wsc_start(struct wps_data *wps,$/;"   f       file:
-wps_pwd_auth_fail_event        src/wps/wps_common.c    /^void wps_pwd_auth_fail_event(struct wps_context *wps, int enrollee, int part)$/;"     f
-wps_registrar  src/wps/wps_registrar.c /^struct wps_registrar {$/;"    s       file:
-wps_registrar_add_authorized_mac       src/wps/wps_registrar.c /^static void wps_registrar_add_authorized_mac(struct wps_registrar *reg,$/;"   f       file:
-wps_registrar_add_nfc_password_token   src/wps/wps_registrar.c /^int wps_registrar_add_nfc_password_token(struct wps_registrar *reg,$/;"       f
-wps_registrar_add_nfc_pw_token src/wps/wps_registrar.c /^int wps_registrar_add_nfc_pw_token(struct wps_registrar *reg,$/;"     f
-wps_registrar_add_pbc_session  src/wps/wps_registrar.c /^static void wps_registrar_add_pbc_session(struct wps_registrar *reg,$/;"      f       file:
-wps_registrar_add_pin  src/wps/wps_registrar.c /^int wps_registrar_add_pin(struct wps_registrar *reg, const u8 *addr,$/;"      f
-wps_registrar_button_pushed    src/wps/wps_registrar.c /^int wps_registrar_button_pushed(struct wps_registrar *reg,$/;"        f
-wps_registrar_complete src/wps/wps_registrar.c /^void wps_registrar_complete(struct wps_registrar *registrar, const u8 *uuid_e,$/;"    f
-wps_registrar_config   src/wps/wps.h   /^struct wps_registrar_config {$/;"     s
-wps_registrar_config_ap        src/wps/wps_registrar.c /^int wps_registrar_config_ap(struct wps_registrar *reg,$/;"    f
-wps_registrar_deinit   src/wps/wps_registrar.c /^void wps_registrar_deinit(struct wps_registrar *reg)$/;"      f
-wps_registrar_device   src/wps/wps_registrar.c /^struct wps_registrar_device {$/;"     s       file:
-wps_registrar_expire_pins      src/wps/wps_registrar.c /^static void wps_registrar_expire_pins(struct wps_registrar *reg)$/;"  f       file:
-wps_registrar_free_pending_m2  src/wps/wps_registrar.c /^static void wps_registrar_free_pending_m2(struct wps_context *wps)$/;"        f       file:
-wps_registrar_get_info src/wps/wps_registrar.c /^int wps_registrar_get_info(struct wps_registrar *reg, const u8 *addr,$/;"     f
-wps_registrar_get_msg  src/wps/wps_registrar.c /^struct wpabuf * wps_registrar_get_msg(struct wps_data *wps,$/;"       f
-wps_registrar_get_pin  src/wps/wps_registrar.c /^static const u8 * wps_registrar_get_pin(struct wps_registrar *reg,$/;"        f       file:
-wps_registrar_init     src/wps/wps_registrar.c /^struct wps_registrar * wps_registrar_init(struct wps_context *wps,$/;"        f
-wps_registrar_invalidate_pin   src/wps/wps_registrar.c /^int wps_registrar_invalidate_pin(struct wps_registrar *reg, const u8 *uuid)$/;"       f
-wps_registrar_invalidate_unused        src/wps/wps_registrar.c /^static void wps_registrar_invalidate_unused(struct wps_registrar *reg)$/;"    f       file:
-wps_registrar_invalidate_wildcard_pin  src/wps/wps_registrar.c /^static int wps_registrar_invalidate_wildcard_pin(struct wps_registrar *reg,$/;"       f       file:
-wps_registrar_p2p_dev_addr_match       src/wps/wps_registrar.c /^static int wps_registrar_p2p_dev_addr_match(struct wps_data *wps)$/;" f       file:
-wps_registrar_pbc_completed    src/wps/wps_registrar.c /^static void wps_registrar_pbc_completed(struct wps_registrar *reg)$/;"        f       file:
-wps_registrar_pbc_overlap      src/wps/wps_registrar.c /^int wps_registrar_pbc_overlap(struct wps_registrar *reg,$/;"  f
-wps_registrar_pbc_timeout      src/wps/wps_registrar.c /^static void wps_registrar_pbc_timeout(void *eloop_ctx)$/;"    f       file:
-wps_registrar_pin_completed    src/wps/wps_registrar.c /^static void wps_registrar_pin_completed(struct wps_registrar *reg)$/;"        f       file:
-wps_registrar_probe_req_rx     src/wps/wps_registrar.c /^void wps_registrar_probe_req_rx(struct wps_registrar *reg, const u8 *addr,$/;"        f
-wps_registrar_process_msg      src/wps/wps_registrar.c /^enum wps_process_res wps_registrar_process_msg(struct wps_data *wps,$/;"      f
-wps_registrar_remove_authorized_mac    src/wps/wps_registrar.c /^static void wps_registrar_remove_authorized_mac(struct wps_registrar *reg,$/;"        f       file:
-wps_registrar_remove_nfc_pw_token      src/wps/wps_registrar.c /^void wps_registrar_remove_nfc_pw_token(struct wps_registrar *reg,$/;" f
-wps_registrar_remove_pbc_session       src/wps/wps_registrar.c /^static void wps_registrar_remove_pbc_session(struct wps_registrar *reg,$/;"   f       file:
-wps_registrar_remove_pin       src/wps/wps_registrar.c /^static void wps_registrar_remove_pin(struct wps_registrar *reg,$/;"   f       file:
-wps_registrar_sel_reg_add      src/wps/wps_registrar.c /^static void wps_registrar_sel_reg_add(struct wps_registrar *reg,$/;"  f       file:
-wps_registrar_sel_reg_union    src/wps/wps_registrar.c /^static void wps_registrar_sel_reg_union(struct wps_registrar *reg)$/;"        f       file:
-wps_registrar_selected_registrar_changed       src/wps/wps_registrar.c /^void wps_registrar_selected_registrar_changed(struct wps_registrar *reg)$/;"  f
-wps_registrar_skip_overlap     src/wps/wps_registrar.c /^static int wps_registrar_skip_overlap(struct wps_data *wps)$/;"       f       file:
-wps_registrar_stop_pbc src/wps/wps_registrar.c /^static void wps_registrar_stop_pbc(struct wps_registrar *reg)$/;"     f       file:
-wps_registrar_unlock_pin       src/wps/wps_registrar.c /^int wps_registrar_unlock_pin(struct wps_registrar *reg, const u8 *uuid)$/;"   f
-wps_registrar_update_ie        src/wps/wps_registrar.c /^int wps_registrar_update_ie(struct wps_registrar *reg)$/;"    f
-wps_registrar_wps_cancel       src/wps/wps_registrar.c /^int wps_registrar_wps_cancel(struct wps_registrar *reg)$/;"   f
-wps_remove_nfc_pw_token        src/wps/wps_registrar.c /^static void wps_remove_nfc_pw_token(struct wps_nfc_pw_token *token)$/;"       f       file:
-wps_remove_pin src/wps/wps_registrar.c /^static void wps_remove_pin(struct wps_uuid_pin *pin)$/;"      f       file:
-wps_request_type       src/wps/wps_defs.h      /^enum wps_request_type {$/;"   g
-wps_response_type      src/wps/wps_defs.h      /^enum wps_response_type {$/;"  g
-wps_rx_param   src/esp_supplicant/esp_wps.c    /^struct wps_rx_param {$/;"     s       file:
-wps_scan_ie    src/esp_supplicant/esp_wifi_driver.h    /^struct wps_scan_ie {$/;"      s
-wps_scan_timer src/wps/wps.h   /^    ETSTimer wps_scan_timer;$/;"      m       struct:wps_sm
-wps_send_eap_identity_rsp      src/esp_supplicant/esp_wps.c    /^int wps_send_eap_identity_rsp(u8 id)$/;"      f
-wps_send_frag_ack      src/esp_supplicant/esp_wps.c    /^int wps_send_frag_ack(u8 id)$/;"      f
-wps_send_wps_mX_rsp    src/esp_supplicant/esp_wps.c    /^int wps_send_wps_mX_rsp(u8 id)$/;"    f
-wps_sendto_wrapper     src/esp_supplicant/esp_wps.c    /^static void wps_sendto_wrapper(void *buffer, uint16_t len)$/;"        f       file:
-wps_set_attr   src/wps/wps_attr_parse.c        /^static int wps_set_attr(struct wps_parse_attr *attr, u16 type,$/;"    f       file:
-wps_set_default_factory        src/esp_supplicant/esp_wps.c    /^int wps_set_default_factory(void)$/;" f
-wps_set_factory_info   src/esp_supplicant/esp_wps.c    /^int wps_set_factory_info(const esp_wps_config_t *config)$/;"  f
-wps_set_ie     src/wps/wps_registrar.c /^static int wps_set_ie(struct wps_registrar *reg)$/;"  f       file:
-wps_set_pushbutton     src/wps/wps_registrar.c /^static void wps_set_pushbutton(u16 *methods, u16 conf_methods)$/;"    f       file:
-wps_set_status src/esp_supplicant/esp_wps.c    /^int wps_set_status(uint32_t status)$/;"       f
-wps_set_type   src/esp_supplicant/esp_wps.c    /^int wps_set_type(uint32_t type)$/;"   f
-wps_set_vendor_ext_wfa_subelem src/wps/wps_attr_parse.c        /^static int wps_set_vendor_ext_wfa_subelem(struct wps_parse_attr *attr,$/;"    f       file:
-wps_sig_cnt    src/wps/wps.h   /^    u8 wps_sig_cnt[SIG_WPS_NUM];$/;"  m       struct:wps_sm
-wps_sig_type   src/wps/wps.h   /^enum wps_sig_type {$/;"       g
-wps_sm src/wps/wps.h   /^struct wps_sm {$/;"   s
-wps_sm_alloc_eapol     src/esp_supplicant/esp_wps.c    /^u8 *wps_sm_alloc_eapol(struct wps_sm *sm, u8 type,$/;"        f
-wps_sm_ether_send      src/esp_supplicant/esp_wps.c    /^static inline int wps_sm_ether_send(struct wps_sm *sm, const u8 *dest, u16 proto,$/;" f       file:
-wps_sm_free_eapol      src/esp_supplicant/esp_wps.c    /^void wps_sm_free_eapol(u8 *buffer)$/;"        f
-wps_sm_get     src/esp_supplicant/esp_wps.c    /^wps_sm_get(void)$/;"  f
-wps_sm_rx_eapol        src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wps_sm_rx_eapol)(u8 *src_addr, u8 *buf, u32 len);$/;"      m       struct:wps_funcs
-wps_sm_rx_eapol        src/esp_supplicant/esp_wps.c    /^int wps_sm_rx_eapol(u8 *src_addr, u8 *buf, u32 len)$/;"       f
-wps_sm_rx_eapol_internal       src/esp_supplicant/esp_wps.c    /^int wps_sm_rx_eapol_internal(u8 *src_addr, u8 *buf, u32 len)$/;"      f
-wps_ssid_save  src/esp_supplicant/esp_wps.c    /^wps_ssid_save(u8 *ssid, u8 ssid_len)$/;"      f
-wps_st_cb_t    src/wps/wps.h   /^typedef void (*wps_st_cb_t)(int status);$/;"  t
-wps_sta_cred_cb        src/wps/wps_registrar.c /^static void wps_sta_cred_cb(struct wps_data *wps)$/;" f       file:
-wps_start      src/esp_supplicant/esp_wps.c    /^uint8_t wps_start = 0;$/;"    v
-wps_start_msg_timer    src/esp_supplicant/esp_wps.c    /^int wps_start_msg_timer(void)$/;"     f
-wps_start_pending      src/esp_supplicant/esp_wifi_driver.h    /^    int  (*wps_start_pending)(void);$/;"      m       struct:wps_funcs
-wps_start_pending      src/esp_supplicant/esp_wps.c    /^int wps_start_pending(void)$/;"       f
-wps_state      src/wps/wps.h   /^              u8 wps_state;$/;"       m       struct:wps_event_data::wps_event_er_ap
-wps_state      src/wps/wps.h   /^      enum wps_state wps_state;$/;"   m       struct:wps_context      typeref:enum:wps_context::wps_state
-wps_state      src/wps/wps_attr_parse.h        /^      const u8 *wps_state; \/* 1 octet *\/$/;"        m       struct:wps_parse_attr
-wps_state      src/wps/wps_defs.h      /^enum wps_state {$/;"  g
-wps_station_wps_register_cb    src/esp_supplicant/esp_wps.c    /^wps_station_wps_register_cb(wps_st_cb_t cb)$/;"       f
-wps_status     src/esp_supplicant/esp_wifi_driver.h    /^typedef enum wps_status {$/;" g
-wps_stop_process       src/esp_supplicant/esp_wps.c    /^int wps_stop_process(system_event_sta_wps_fail_reason_t reason_code)$/;"      f
-wps_success_cb_timer   src/wps/wps.h   /^    ETSTimer wps_success_cb_timer;$/;"        m       struct:wps_sm
-wps_success_event      src/wps/wps_common.c    /^void wps_success_event(struct wps_context *wps)$/;"   f
-wps_task_deinit        src/esp_supplicant/esp_wps.c    /^int wps_task_deinit(void)$/;" f
-wps_task_hdl   src/esp_supplicant/esp_wps.c    /^static void *wps_task_hdl = NULL;$/;" v       file:
-wps_task_init  src/esp_supplicant/esp_wps.c    /^int wps_task_init(void)$/;"   f
-wps_testing_dummy_cred src/esp_supplicant/esp_wps.c    /^int wps_testing_dummy_cred = 0;$/;"   v
-wps_timeout_timer      src/wps/wps.h   /^    ETSTimer wps_timeout_timer;$/;"   m       struct:wps_sm
-wps_txStart    src/esp_supplicant/esp_wps.c    /^int wps_txStart(void)$/;"     f
-wps_type       include/esp_supplicant/esp_wps.h        /^    wps_type_t wps_type;$/;"  m       struct:__anon90
-wps_type       include/esp_supplicant/esp_wps.h        /^typedef enum wps_type {$/;"   g
-wps_type_t     include/esp_supplicant/esp_wps.h        /^} wps_type_t;$/;"     t       typeref:enum:wps_type
-wps_upnp       src/ap/hostapd.h        /^      struct upnp_wps_device_sm *wps_upnp;$/;"        m       struct:hostapd_data     typeref:struct:hostapd_data::upnp_wps_device_sm
-wps_uuid_pin   src/wps/wps_registrar.c /^struct wps_uuid_pin {$/;"     s       file:
-wps_validate_ap_config_methods src/wps/wps_validate.c  /^static int wps_validate_ap_config_methods(const u8 *config_methods, int wps2,$/;"     f       file:
-wps_validate_ap_setup_locked   src/wps/wps_validate.c  /^static int wps_validate_ap_setup_locked(const u8 *ap_setup_locked,$/;"        f       file:
-wps_validate_assoc_req src/wps/wps.h   /^static inline int wps_validate_assoc_req(const struct wpabuf *wps_ie)$/;"     f
-wps_validate_assoc_req src/wps/wps_validate.c  /^int wps_validate_assoc_req(const struct wpabuf *wps_ie)$/;"   f
-wps_validate_assoc_resp        src/wps/wps.h   /^static inline int wps_validate_assoc_resp(const struct wpabuf *wps_ie)$/;"    f
-wps_validate_assoc_resp        src/wps/wps_validate.c  /^int wps_validate_assoc_resp(const struct wpabuf *wps_ie)$/;"  f
-wps_validate_assoc_state       src/wps/wps_validate.c  /^static int wps_validate_assoc_state(const u8 *assoc_state, int mandatory)$/;" f       file:
-wps_validate_auth_type src/wps/wps_validate.c  /^static int wps_validate_auth_type(const u8 *type, int mandatory)$/;"  f       file:
-wps_validate_auth_type_flags   src/wps/wps_validate.c  /^static int wps_validate_auth_type_flags(const u8 *flags, int mandatory)$/;"   f       file:
-wps_validate_authenticator     src/wps/wps_validate.c  /^static int wps_validate_authenticator(const u8 *authenticator, int mandatory)$/;"     f       file:
-wps_validate_authorized_macs   src/wps/wps_validate.c  /^static int wps_validate_authorized_macs(const u8 *authorized_macs, size_t len,$/;"    f       file:
-wps_validate_beacon    src/wps/wps.h   /^static inline int wps_validate_beacon(const struct wpabuf *wps_ie){$/;"       f
-wps_validate_beacon    src/wps/wps_validate.c  /^int wps_validate_beacon(const struct wpabuf *wps_ie)$/;"      f
-wps_validate_beacon_probe_resp src/wps/wps.h   /^static inline int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie,$/;"     f
-wps_validate_beacon_probe_resp src/wps/wps_validate.c  /^int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe,$/;"        f
-wps_validate_config_error      src/wps/wps_validate.c  /^static int wps_validate_config_error(const u8 *config_error, int mandatory)$/;"       f       file:
-wps_validate_config_methods    src/wps/wps_validate.c  /^static int wps_validate_config_methods(const u8 *config_methods, int wps2,$/;"        f       file:
-wps_validate_conn_type_flags   src/wps/wps_validate.c  /^static int wps_validate_conn_type_flags(const u8 *flags, int mandatory)$/;"   f       file:
-wps_validate_cred      src/wps/wps_validate.c  /^static int wps_validate_cred(const u8 *cred, size_t len)$/;"  f       file:
-wps_validate_credential        src/wps/wps_validate.c  /^static int wps_validate_credential(const u8 *cred[], size_t len[], size_t num,$/;"    f       file:
-wps_validate_dev_name  src/wps/wps_validate.c  /^static int wps_validate_dev_name(const u8 *dev_name, size_t len,$/;"  f       file:
-wps_validate_dev_password_id   src/wps/wps_validate.c  /^static int wps_validate_dev_password_id(const u8 *dev_password_id,$/;"        f       file:
-wps_validate_e_hash1   src/wps/wps_validate.c  /^static int wps_validate_e_hash1(const u8 *hash, int mandatory)$/;"    f       file:
-wps_validate_e_hash2   src/wps/wps_validate.c  /^static int wps_validate_e_hash2(const u8 *hash, int mandatory)$/;"    f       file:
-wps_validate_e_snonce1 src/wps/wps_validate.c  /^static int wps_validate_e_snonce1(const u8 *nonce, int mandatory)$/;" f       file:
-wps_validate_e_snonce2 src/wps/wps_validate.c  /^static int wps_validate_e_snonce2(const u8 *nonce, int mandatory)$/;" f       file:
-wps_validate_encr_settings     src/wps/wps_validate.c  /^static int wps_validate_encr_settings(const u8 *encr_settings, size_t len,$/;"        f       file:
-wps_validate_encr_type src/wps/wps_validate.c  /^static int wps_validate_encr_type(const u8 *type, int mandatory)$/;"  f       file:
-wps_validate_encr_type_flags   src/wps/wps_validate.c  /^static int wps_validate_encr_type_flags(const u8 *flags, int mandatory)$/;"   f       file:
-wps_validate_enrollee_nonce    src/wps/wps_validate.c  /^static int wps_validate_enrollee_nonce(const u8 *enrollee_nonce, int mandatory)$/;"   f       file:
-wps_validate_key_wrap_auth     src/wps/wps_validate.c  /^static int wps_validate_key_wrap_auth(const u8 *auth, int mandatory)$/;"      f       file:
-wps_validate_m1        src/wps/wps.h   /^static inline int wps_validate_m1(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m1        src/wps/wps_validate.c  /^int wps_validate_m1(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m2        src/wps/wps.h   /^static inline int wps_validate_m2(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m2        src/wps/wps_validate.c  /^int wps_validate_m2(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m2d       src/wps/wps.h   /^static inline int wps_validate_m2d(const struct wpabuf *tlvs)$/;"     f
-wps_validate_m2d       src/wps/wps_validate.c  /^int wps_validate_m2d(const struct wpabuf *tlvs)$/;"   f
-wps_validate_m3        src/wps/wps.h   /^static inline int wps_validate_m3(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m3        src/wps/wps_validate.c  /^int wps_validate_m3(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m4        src/wps/wps.h   /^static inline int wps_validate_m4(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m4        src/wps/wps_validate.c  /^int wps_validate_m4(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m4_encr   src/wps/wps.h   /^static inline int wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2)$/;"       f
-wps_validate_m4_encr   src/wps/wps_validate.c  /^int wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2)$/;"     f
-wps_validate_m5        src/wps/wps.h   /^static inline int wps_validate_m5(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m5        src/wps/wps_validate.c  /^int wps_validate_m5(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m5_encr   src/wps/wps.h   /^static inline int wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2)$/;"       f
-wps_validate_m5_encr   src/wps/wps_validate.c  /^int wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2)$/;"     f
-wps_validate_m6        src/wps/wps.h   /^static inline int wps_validate_m6(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m6        src/wps/wps_validate.c  /^int wps_validate_m6(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m6_encr   src/wps/wps.h   /^static inline int wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2)$/;"       f
-wps_validate_m6_encr   src/wps/wps_validate.c  /^int wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2)$/;"     f
-wps_validate_m7        src/wps/wps.h   /^static inline int wps_validate_m7(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m7        src/wps/wps_validate.c  /^int wps_validate_m7(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m7_encr   src/wps/wps.h   /^static inline int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap,$/;" f
-wps_validate_m7_encr   src/wps/wps_validate.c  /^int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, int wps2)$/;"     f
-wps_validate_m8        src/wps/wps.h   /^static inline int wps_validate_m8(const struct wpabuf *tlvs)$/;"      f
-wps_validate_m8        src/wps/wps_validate.c  /^int wps_validate_m8(const struct wpabuf *tlvs)$/;"    f
-wps_validate_m8_encr   src/wps/wps.h   /^static inline int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap,$/;" f
-wps_validate_m8_encr   src/wps/wps_validate.c  /^int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, int wps2)$/;"     f
-wps_validate_mac_addr  src/wps/wps_validate.c  /^static int wps_validate_mac_addr(const u8 *mac_addr, int mandatory)$/;"       f       file:
-wps_validate_manufacturer      src/wps/wps_validate.c  /^static int wps_validate_manufacturer(const u8 *manufacturer, size_t len,$/;"  f       file:
-wps_validate_model_name        src/wps/wps_validate.c  /^static int wps_validate_model_name(const u8 *model_name, size_t len,$/;"      f       file:
-wps_validate_model_number      src/wps/wps_validate.c  /^static int wps_validate_model_number(const u8 *model_number, size_t len,$/;"  f       file:
-wps_validate_msg_type  src/wps/wps_validate.c  /^static int wps_validate_msg_type(const u8 *msg_type, int mandatory)$/;"       f       file:
-wps_validate_network_idx       src/wps/wps_validate.c  /^static int wps_validate_network_idx(const u8 *idx, int mandatory)$/;" f       file:
-wps_validate_network_key       src/wps/wps_validate.c  /^static int wps_validate_network_key(const u8 *key, size_t key_len,$/;"        f       file:
-wps_validate_network_key_index src/wps/wps_validate.c  /^static int wps_validate_network_key_index(const u8 *idx, int mandatory)$/;"   f       file:
-wps_validate_network_key_shareable     src/wps/wps_validate.c  /^static int wps_validate_network_key_shareable(const u8 *val, int mandatory)$/;"       f       file:
-wps_validate_os_version        src/wps/wps_validate.c  /^static int wps_validate_os_version(const u8 *os_version, int mandatory)$/;"   f       file:
-wps_validate_primary_dev_type  src/wps/wps_validate.c  /^static int wps_validate_primary_dev_type(const u8 *primary_dev_type,$/;"      f       file:
-wps_validate_probe_req src/wps/wps.h   /^static inline int wps_validate_probe_req(const struct wpabuf *wps_ie,$/;"     f
-wps_validate_probe_req src/wps/wps_validate.c  /^int wps_validate_probe_req(const struct wpabuf *wps_ie, const u8 *addr)$/;"   f
-wps_validate_public_key        src/wps/wps_validate.c  /^static int wps_validate_public_key(const u8 *public_key, size_t len,$/;"      f       file:
-wps_validate_r_hash1   src/wps/wps_validate.c  /^static int wps_validate_r_hash1(const u8 *hash, int mandatory)$/;"    f       file:
-wps_validate_r_hash2   src/wps/wps_validate.c  /^static int wps_validate_r_hash2(const u8 *hash, int mandatory)$/;"    f       file:
-wps_validate_r_snonce1 src/wps/wps_validate.c  /^static int wps_validate_r_snonce1(const u8 *nonce, int mandatory)$/;" f       file:
-wps_validate_r_snonce2 src/wps/wps_validate.c  /^static int wps_validate_r_snonce2(const u8 *nonce, int mandatory)$/;" f       file:
-wps_validate_registrar_nonce   src/wps/wps_validate.c  /^static int wps_validate_registrar_nonce(const u8 *registrar_nonce,$/;"        f       file:
-wps_validate_req_dev_type      src/wps/wps_validate.c  /^static int wps_validate_req_dev_type(const u8 *req_dev_type[], size_t num,$/;"        f       file:
-wps_validate_request_to_enroll src/wps/wps_validate.c  /^static int wps_validate_request_to_enroll(const u8 *request_to_enroll,$/;"    f       file:
-wps_validate_request_type      src/wps/wps_validate.c  /^static int wps_validate_request_type(const u8 *request_type, int mandatory)$/;"       f       file:
-wps_validate_response_type     src/wps/wps_validate.c  /^static int wps_validate_response_type(const u8 *response_type, int mandatory)$/;"     f       file:
-wps_validate_rf_bands  src/wps/wps_validate.c  /^static int wps_validate_rf_bands(const u8 *rf_bands, int mandatory)$/;"       f       file:
-wps_validate_sel_reg_config_methods    src/wps/wps_validate.c  /^static int wps_validate_sel_reg_config_methods(const u8 *config_methods,$/;"  f       file:
-wps_validate_selected_registrar        src/wps/wps_validate.c  /^static int wps_validate_selected_registrar(const u8 *selected_registrar,$/;"  f       file:
-wps_validate_serial_number     src/wps/wps_validate.c  /^static int wps_validate_serial_number(const u8 *serial_number, size_t len,$/;"        f       file:
-wps_validate_settings_delay_time       src/wps/wps_validate.c  /^static int wps_validate_settings_delay_time(const u8 *delay, int mandatory)$/;"       f       file:
-wps_validate_ssid      src/wps/wps_validate.c  /^static int wps_validate_ssid(const u8 *ssid, size_t ssid_len, int mandatory)$/;"      f       file:
-wps_validate_upnp_set_selected_registrar       src/wps/wps.h   /^static inline int wps_validate_upnp_set_selected_registrar($/;"       f
-wps_validate_upnp_set_selected_registrar       src/wps/wps_validate.c  /^int wps_validate_upnp_set_selected_registrar(const struct wpabuf *tlvs)$/;"   f
-wps_validate_uuid_e    src/wps/wps_validate.c  /^static int wps_validate_uuid_e(const u8 *uuid_e, int mandatory)$/;"   f       file:
-wps_validate_uuid_r    src/wps/wps_validate.c  /^static int wps_validate_uuid_r(const u8 *uuid_r, int mandatory)$/;"   f       file:
-wps_validate_version   src/wps/wps_validate.c  /^static int wps_validate_version(const u8 *version, int mandatory)$/;" f       file:
-wps_validate_version2  src/wps/wps_validate.c  /^static int wps_validate_version2(const u8 *version2, int mandatory)$/;"       f       file:
-wps_validate_wps_state src/wps/wps_validate.c  /^static int wps_validate_wps_state(const u8 *wps_state, int mandatory)$/;"     f       file:
-wps_validate_wsc_ack   src/wps/wps.h   /^static inline int wps_validate_wsc_ack(const struct wpabuf *tlvs)$/;" f
-wps_validate_wsc_ack   src/wps/wps_validate.c  /^int wps_validate_wsc_ack(const struct wpabuf *tlvs)$/;"       f
-wps_validate_wsc_done  src/wps/wps.h   /^static inline int wps_validate_wsc_done(const struct wpabuf *tlvs)$/;"        f
-wps_validate_wsc_done  src/wps/wps_validate.c  /^int wps_validate_wsc_done(const struct wpabuf *tlvs)$/;"      f
-wps_validate_wsc_nack  src/wps/wps.h   /^static inline int wps_validate_wsc_nack(const struct wpabuf *tlvs)$/;"        f
-wps_validate_wsc_nack  src/wps/wps_validate.c  /^int wps_validate_wsc_nack(const struct wpabuf *tlvs)$/;"      f
-wps_vendor_ext src/ap/ap_config.h      /^      struct wpabuf *wps_vendor_ext[MAX_WPS_VENDOR_EXTENSIONS];$/;"   m       struct:hostapd_bss_config       typeref:struct:hostapd_bss_config::wpabuf
-wps_version_number     src/esp_supplicant/esp_wps.c    /^int wps_version_number = 0x20;$/;"    v
-wps_workaround_cred_key        src/wps/wps_attr_process.c      /^static int wps_workaround_cred_key(struct wps_credential *cred)$/;"   f       file:
-write_cbc      src/tls/tlsv1_record.h  /^      struct crypto_cipher *write_cbc;$/;"    m       struct:tlsv1_record_layer       typeref:struct:tlsv1_record_layer::crypto_cipher
-write_cipher_suite     src/tls/tlsv1_record.h  /^      u16 write_cipher_suite;$/;"     m       struct:tlsv1_record_layer
-write_iv       src/tls/tlsv1_record.h  /^      u8 write_iv[TLS_MAX_IV_LEN];$/;"        m       struct:tlsv1_record_layer
-write_key      src/tls/tlsv1_record.h  /^      u8 write_key[TLS_MAX_WRITE_KEY_LEN];$/;"        m       struct:tlsv1_record_layer
-write_mac_secret       src/tls/tlsv1_record.h  /^      u8 write_mac_secret[TLS_MAX_WRITE_MAC_SECRET_LEN];$/;"  m       struct:tlsv1_record_layer
-write_seq_num  src/tls/tlsv1_record.h  /^      u8 write_seq_num[TLS_SEQ_NUM_LEN];$/;"  m       struct:tlsv1_record_layer
-wsc_op_code    src/wps/wps.h   /^enum wsc_op_code {$/;"        g
-x509_algorithm_identifier      src/tls/x509v3.h        /^struct x509_algorithm_identifier {$/;"        s
-x509_certificate       src/tls/x509v3.h        /^struct x509_certificate {$/;" s
-x509_certificate_chain_free    src/tls/x509v3.c        /^void x509_certificate_chain_free(struct x509_certificate *cert)$/;"   f
-x509_certificate_chain_validate        src/tls/x509v3.c        /^int x509_certificate_chain_validate(struct x509_certificate *trusted,$/;"     f
-x509_certificate_check_signature       src/tls/x509v3.c        /^int x509_certificate_check_signature(struct x509_certificate *issuer,$/;"     f
-x509_certificate_free  src/tls/x509v3.c        /^void x509_certificate_free(struct x509_certificate *cert)$/;" f
-x509_certificate_get_subject   src/tls/x509v3.c        /^x509_certificate_get_subject(struct x509_certificate *chain,$/;"      f
-x509_certificate_parse src/tls/x509v3.c        /^struct x509_certificate * x509_certificate_parse(const u8 *buf, size_t len)$/;"       f
-x509_certificate_self_signed   src/tls/x509v3.c        /^int x509_certificate_self_signed(struct x509_certificate *cert)$/;"   f
-x509_digest_oid        src/tls/x509v3.c        /^static int x509_digest_oid(struct asn1_oid *oid)$/;"  f       file:
-x509_free_name src/tls/x509v3.c        /^static void x509_free_name(struct x509_name *name)$/;"        f       file:
-x509_id_ce_oid src/tls/x509v3.c        /^static int x509_id_ce_oid(struct asn1_oid *oid)$/;"   f       file:
-x509_name      src/tls/x509v3.h        /^struct x509_name {$/;"        s
-x509_name_attr src/tls/x509v3.h        /^struct x509_name_attr {$/;"   s
-x509_name_attr_str     src/tls/x509v3.c        /^static char * x509_name_attr_str(enum x509_name_attr_type type)$/;"   f       file:
-x509_name_attr_type    src/tls/x509v3.h        /^      enum x509_name_attr_type {$/;"  g       struct:x509_name_attr
-x509_name_compare      src/tls/x509v3.c        /^int x509_name_compare(struct x509_name *a, struct x509_name *b)$/;"   f
-x509_name_string       src/tls/x509v3.c        /^void x509_name_string(struct x509_name *name, char *buf, size_t len)$/;"      f
-x509_parse_algorithm_identifier        src/tls/x509v3.c        /^static int x509_parse_algorithm_identifier($/;"       f       file:
-x509_parse_alt_name_dns        src/tls/x509v3.c        /^static int x509_parse_alt_name_dns(struct x509_name *name,$/;"        f       file:
-x509_parse_alt_name_ip src/tls/x509v3.c        /^static int x509_parse_alt_name_ip(struct x509_name *name,$/;" f       file:
-x509_parse_alt_name_rfc8222    src/tls/x509v3.c        /^static int x509_parse_alt_name_rfc8222(struct x509_name *name,$/;"    f       file:
-x509_parse_alt_name_rid        src/tls/x509v3.c        /^static int x509_parse_alt_name_rid(struct x509_name *name,$/;"        f       file:
-x509_parse_alt_name_uri        src/tls/x509v3.c        /^static int x509_parse_alt_name_uri(struct x509_name *name,$/;"        f       file:
-x509_parse_ext_alt_name        src/tls/x509v3.c        /^static int x509_parse_ext_alt_name(struct x509_name *name,$/;"        f       file:
-x509_parse_ext_basic_constraints       src/tls/x509v3.c        /^static int x509_parse_ext_basic_constraints(struct x509_certificate *cert,$/;"        f       file:
-x509_parse_ext_issuer_alt_name src/tls/x509v3.c        /^static int x509_parse_ext_issuer_alt_name(struct x509_certificate *cert,$/;"  f       file:
-x509_parse_ext_key_usage       src/tls/x509v3.c        /^static int x509_parse_ext_key_usage(struct x509_certificate *cert,$/;"        f       file:
-x509_parse_ext_subject_alt_name        src/tls/x509v3.c        /^static int x509_parse_ext_subject_alt_name(struct x509_certificate *cert,$/;" f       file:
-x509_parse_extension   src/tls/x509v3.c        /^static int x509_parse_extension(struct x509_certificate *cert,$/;"    f       file:
-x509_parse_extension_data      src/tls/x509v3.c        /^static int x509_parse_extension_data(struct x509_certificate *cert,$/;"       f       file:
-x509_parse_extensions  src/tls/x509v3.c        /^static int x509_parse_extensions(struct x509_certificate *cert,$/;"   f       file:
-x509_parse_name        src/tls/x509v3.c        /^static int x509_parse_name(const u8 *buf, size_t len, struct x509_name *name,$/;"     f       file:
-x509_parse_public_key  src/tls/x509v3.c        /^static int x509_parse_public_key(const u8 *buf, size_t len,$/;"       f       file:
-x509_parse_tbs_certificate     src/tls/x509v3.c        /^static int x509_parse_tbs_certificate(const u8 *buf, size_t len,$/;"  f       file:
-x509_parse_time        src/tls/x509v3.c        /^static int x509_parse_time(const u8 *buf, size_t len, u8 asn1_tag,$/;"        f       file:
-x509_parse_validity    src/tls/x509v3.c        /^static int x509_parse_validity(const u8 *buf, size_t len,$/;" f       file:
-x509_pkcs_oid  src/tls/x509v3.c        /^static int x509_pkcs_oid(struct asn1_oid *oid)$/;"    f       file:
-x509_rsadsi_oid        src/tls/x509v3.c        /^static int x509_rsadsi_oid(struct asn1_oid *oid)$/;"  f       file:
-x509_sha1_oid  src/tls/x509v3.c        /^static int x509_sha1_oid(struct asn1_oid *oid)$/;"    f       file:
-x509_sha256_oid        src/tls/x509v3.c        /^static int x509_sha256_oid(struct asn1_oid *oid)$/;"  f       file:
-x509_str_compare       src/tls/x509v3.c        /^static int x509_str_compare(const char *a, const char *b)$/;" f       file:
-x509_str_strip_whitespace      src/tls/x509v3.c        /^static void x509_str_strip_whitespace(char *a)$/;"    f       file:
-x509_valid_issuer      src/tls/x509v3.c        /^static int x509_valid_issuer(const struct x509_certificate *cert)$/;" f       file:
-x509_whitespace        src/tls/x509v3.c        /^static int x509_whitespace(char c)$/;"        f       file:
-xWpa2Queue     src/esp_supplicant/esp_wpa_enterprise.c /^static void *xWpa2Queue = NULL;$/;"   v       file:
-xWpsQueue      src/esp_supplicant/esp_wps.c    /^static void *xWpsQueue = NULL;$/;"    v       file:
-xxkey  src/ap/wpa_auth_i.h     /^      u8 xxkey[PMK_LEN]; \/* PSK or the second 256 bits of MSK *\/$/;"        m       struct:wpa_state_machine
-xxkey_len      src/ap/wpa_auth_i.h     /^      size_t xxkey_len;$/;"   m       struct:wpa_state_machine
index d9bf17dc2f9323424a75a7ef6116ca052f02e88d..af2957fff77b4c4c2f92e222ff8c66ef76755ef4 100644 (file)
@@ -59,6 +59,20 @@ INPUT = \
     ../../components/bt/host/bluedroid/api/include/api/esp_hf_client_api.h \
     ## NimBLE related Bluetooth APIs
     ../../components/bt/host/nimble/esp-hci/include/esp_nimble_hci.h \
+    ## ESP BLE Mesh APIs
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_common_api.h \
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_local_data_operation_api.h \
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_low_power_api.h \
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_networking_api.h \
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_provisioning_api.h \
+    ../../components/bt/esp_ble_mesh/api/core/include/esp_ble_mesh_proxy_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_config_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_generic_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_health_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_lighting_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_sensor_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/models/include/esp_ble_mesh_time_scene_model_api.h \
+    ../../components/bt/esp_ble_mesh/api/esp_ble_mesh_defs.h \
     ##
     ## Ethernet - API Reference
     ##
index 40341bb1dd687eb0775a371a0cde9bf29cc4b3ef..ceedadf829f30ab0f66ade7a30c71d3d4cf7a352 100644 (file)
Binary files a/docs/_static/mesh-events-delivery.png and b/docs/_static/mesh-events-delivery.png differ
index 299a8b95297a213c21f29e01f715204815178345..b5ae9efdf3c7d808a0872bbc68bcbe17489053f9 100644 (file)
@@ -51,9 +51,9 @@ An application interfaces with ESP-MESH via **ESP-MESH Events**. Since ESP-MESH
 
     ESP-MESH System Events Delivery
 
-The :cpp:type:`mesh_event_id_t` defines all possible ESP-MESH system events and can indicate events such as the connection/disconnection of parent/child. Before ESP-MESH system events can be used, the application must register a **Mesh Event Callback** via :cpp:func:`esp_mesh_set_config`. The callback is used to receive events from the ESP-MESH stack as well as the LwIP Stack and should contain handlers for each event relevant to the application.
+The :cpp:type:`mesh_event_id_t` defines all possible ESP-MESH events and can indicate events such as the connection/disconnection of parent/child. Before ESP-MESH events can be used, the application must register a **Mesh Events handler** via :cpp:func:`esp_event_handler_register` to the default event task. Should contain handlers for each event relevant to the application.
 
-Typical use cases of system events include using events such as :cpp:enumerator:`MESH_EVENT_PARENT_CONNECTED` and :cpp:enumerator:`MESH_EVENT_CHILD_CONNECTED` to indicate when a node can begin transmitting data upstream and downstream respectively. Likewise, :cpp:enumerator:`MESH_EVENT_ROOT_GOT_IP` and :cpp:enumerator:`MESH_EVENT_ROOT_LOST_IP` can be used to indicate when the root node can and cannot transmit data to the external IP network.
+Typical use cases of mesh events include using events such as :cpp:enumerator:`MESH_EVENT_PARENT_CONNECTED` and :cpp:enumerator:`MESH_EVENT_CHILD_CONNECTED` to indicate when a node can begin transmitting data upstream and downstream respectively. Likewise, :cpp:enumerator:`IP_EVENT_STA_GOT_IP` and :cpp:enumerator:`IP_EVENT_STA_LOST_IP` can be used to indicate when the root node can and cannot transmit data to the external IP network.
 
 .. warning::
     When using ESP-MESH under self-organized mode, users must ensure that no calls to Wi-Fi API are made. This is due to the fact that the self-organizing mode will internally make Wi-Fi API calls to connect/disconnect/scan etc. **Any Wi-Fi calls from the application (including calls from callbacks and handlers of Wi-Fi events) may interfere with ESP-MESH's self-organizing behavior**. Therefore, user's should not call Wi-Fi APIs after :cpp:func:`esp_mesh_start` is called, and before :cpp:func:`esp_mesh_stop` is called.
@@ -81,8 +81,6 @@ The following code snippet demonstrates how to initialize LwIP for ESP-MESH appl
      */
     ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
     ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA));
-    /* do not specify system event callback, use NULL instead. */
-    ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL));
 
 .. note::
 
@@ -108,12 +106,15 @@ The prerequisites for starting ESP-MESH is to initialize LwIP and Wi-Fi, The fol
      */
     ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
     ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA));
-    /* do not specify system event callback, use NULL instead. */
-    ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL));
+
+    /*  event initialization */
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
 
     /*  Wi-Fi initialization */
     wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT();
     ESP_ERROR_CHECK(esp_wifi_init(&config));
+    /*  register IP events handler */
+    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL));
     ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_FLASH));
     ESP_ERROR_CHECK(esp_wifi_start());
 
@@ -134,6 +135,8 @@ The following code snippet demonstrates how to initialize ESP-MESH
 
     /*  mesh initialization */
     ESP_ERROR_CHECK(esp_mesh_init());
+    /*  register mesh events handler */
+    ESP_ERROR_CHECK(esp_event_handler_register(MESH_EVENT, ESP_EVENT_ANY_ID, &mesh_event_handler, NULL));
 
 .. _mesh-configuring-mesh:
 
@@ -149,9 +152,6 @@ ESP-MESH is configured via :cpp:func:`esp_mesh_set_config` which receives its ar
 +==================+=====================================+
 | Channel          | Range from 1 to 14                  |
 +------------------+-------------------------------------+
-| Event Callback   | Callback for Mesh Events,           |
-|                  | see :cpp:type:`mesh_event_cb_t`     |
-+------------------+-------------------------------------+
 | Mesh ID          | ID of ESP-MESH Network,             |
 |                  | see :cpp:type:`mesh_addr_t`         |
 +------------------+-------------------------------------+
@@ -173,8 +173,6 @@ The following code snippet demonstrates how to configure ESP-MESH.
     mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT();
     /* mesh ID */
     memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
-    /* mesh event callback */
-    cfg.event_cb = &mesh_event_handler;
     /* channel (must match the router's channel) */
     cfg.channel = CONFIG_MESH_CHANNEL;
     /* router */
index fb6c060ecab9aaa40669af09d3ce6009d5463938..0cf035aeee1096dab4ce3d34b7449cf56529164e 100644 (file)
@@ -19,11 +19,7 @@ Initialization
 
         wifi_prov_mgr_config_t config = {
             .scheme = wifi_prov_scheme_ble,
-            .scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM,
-            .app_event_handler = {
-                .event_cb = prov_event_handler,
-                .user_data = NULL
-            }
+            .scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM
         };
 
         ESP_ERR_CHECK( wifi_prov_mgr_init(config) );
@@ -44,53 +40,51 @@ The configuration structure ``wifi_prov_mgr_config_t`` has a few fields to speci
         * ``WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BT`` - Free only classic BT. Used when main application requires BLE. In this case freeing happens right when the manager is initialized.
         * ``WIFI_PROV_EVENT_HANDLER_NONE`` - Don't use any scheme specific handler. Used when provisioning scheme is not BLE (i.e. SoftAP or Console), or when main application wants to handle the memory reclaiming on its own, or needs both BLE and classic BT to function.
 
-    * `app_event_handler` : Application specific event handler which can be used to execute specific calls depending on the state of the provisioning service. This is to be set to a function of the form ``void app_event_handler(void *user_data, wifi_prov_cb_event_t event, void *event_data)`` along with any user data to be made available at the time of handling. This can also be set to ``WIFI_PROV_EVENT_HANDLER_NONE`` if not used. See definition of ``wifi_prov_cb_event_t`` for the list of events that are generated by the provisioning service. Following is a snippet showing a typical application specific provisioning event handler along with usage of the ``event_data`` parameter :
+    * `app_event_handler` (Deprecated) : It is now recommended to catch ``WIFI_PROV_EVENT``s that are emitted to the default event loop handler. See definition of ``wifi_prov_cb_event_t`` for the list of events that are generated by the provisioning service. Here is an excerpt showing some of the provisioning events:
 
     .. highlight:: c
 
     ::
 
-        void prov_event_handler(void *user_data,
-                                wifi_prov_cb_event_t event,
-                                void *event_data)
+        static void event_handler(void* arg, esp_event_base_t event_base,
+                                  int event_id, void* event_data)
         {
-            switch (event) {
-                case WIFI_PROV_INIT:
-                    ESP_LOGI(TAG, "Manager initialized");
-                    break;
-                case WIFI_PROV_START:
-                    ESP_LOGI(TAG, "Provisioning started");
-                    break;
-                case WIFI_PROV_CRED_RECV: {
-                    wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)event_data;
-                    ESP_LOGI(TAG, "Received Wi-Fi credentials"
-                            "\n\tSSID     : %s\n\tPassword : %s",
-                            (const char *) wifi_sta_cfg->ssid,
-                            (const char *) wifi_sta_cfg->password);
-                    break;
-                }
-                case WIFI_PROV_CRED_FAIL: {
-                    wifi_prov_sta_fail_reason_t *reason = (wifi_prov_sta_fail_reason_t *)event_data;
-                    ESP_LOGE(TAG, "Provisioning failed : %s",
-                            (*reason == WIFI_PROV_STA_AUTH_ERROR) ?
-                            "Wi-Fi AP password incorrect" :
-                            "Wi-Fi AP not found");
-                    break;
+            if (event_base == WIFI_PROV_EVENT) {
+                switch (event_id) {
+                    case WIFI_PROV_START:
+                        ESP_LOGI(TAG, "Provisioning started");
+                        break;
+                    case WIFI_PROV_CRED_RECV: {
+                        wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)event_data;
+                        ESP_LOGI(TAG, "Received Wi-Fi credentials"
+                                 "\n\tSSID     : %s\n\tPassword : %s",
+                                 (const char *) wifi_sta_cfg->ssid,
+                                 (const char *) wifi_sta_cfg->password);
+                        break;
+                    }
+                    case WIFI_PROV_CRED_FAIL: {
+                        wifi_prov_sta_fail_reason_t *reason = (wifi_prov_sta_fail_reason_t *)event_data;
+                        ESP_LOGE(TAG, "Provisioning failed!\n\tReason : %s"
+                                 "\n\tPlease reset to factory and retry provisioning",
+                                 (*reason == WIFI_PROV_STA_AUTH_ERROR) ?
+                                 "Wi-Fi station authentication failed" : "Wi-Fi access-point not found");
+                        break;
+                    }
+                    case WIFI_PROV_CRED_SUCCESS:
+                        ESP_LOGI(TAG, "Provisioning successful");
+                        break;
+                    case WIFI_PROV_END:
+                        /* De-initialize manager once provisioning is finished */
+                        wifi_prov_mgr_deinit();
+                        break;
+                    default:
+                        break;
                 }
-                case WIFI_PROV_CRED_SUCCESS:
-                    ESP_LOGI(TAG, "Provisioning successful");
-                    break;
-                case WIFI_PROV_END:
-                    ESP_LOGI(TAG, "Provisioning stopped");
-                    break;
-                case WIFI_PROV_DEINIT:
-                    ESP_LOGI(TAG, "Manager de-initialized");
-                    break;
-                default:
-                    break;
             }
         }
 
+The manager can be de-initialized at any moment by making a call to :cpp:func:`wifi_prov_mgr_deinit()`.
+
 .. _wifi-prov-check-state:
 
 Check Provisioning State
@@ -114,30 +108,6 @@ If provisioning state needs to be reset, any of the following approaches may be
         ESP_ERR_CHECK( wifi_prov_mgr_is_provisioned(&provisioned) );
 
 
-Event Loop Handling
-^^^^^^^^^^^^^^^^^^^
-
-Presently Wi-Fi provisioning manager cannot directly catch external system events, hence it is necessary to explicitly call :cpp:func:`wifi_prov_mgr_event_handler()` from inside the global event loop handler. See the following snippet :
-
-    .. highlight:: c
-
-    ::
-
-        static esp_err_t global_event_loop_handler(void *ctx, system_event_t *event)
-        {
-            /* Pass event information to provisioning manager so that it can
-             * maintain its internal state depending upon the system event */
-            wifi_prov_mgr_event_handler(ctx, event);
-
-            /* Event handling logic for main application */
-            switch (event->event_id) {
-                .....
-                .....
-                .....
-            }
-            return ESP_OK;
-        }
-
 Start Provisioning Service
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -194,21 +164,18 @@ There are two ways for making this possible. The simpler way is to use a blockin
         wifi_prov_mgr_deinit();
 
 
-The other way is to use the application specific event handler which is to be configured during initialization, as explained above in :ref:`wifi-prov-mgr-init`.
+The other way is to use the default event loop handler to catch ``WIFI_PROV_EVENT``s and call :cpp:func:`wifi_prov_mgr_deinit()` when event ID is ``WIFI_PROV_END``:
 
     .. highlight:: c
 
     ::
 
-        void prov_event_handler(void *user_data, wifi_prov_cb_event_t event, void *event_data)
+        static void event_handler(void* arg, esp_event_base_t event_base,
+                                  int event_id, void* event_data)
         {
-            switch (event) {
-                case WIFI_PROV_END:
-                    // De-initialize manager once provisioning is finished
-                    wifi_prov_mgr_deinit();
-                    break;
-                default:
-                    break;
+            if (event_base == WIFI_PROV_EVENT && event_id == WIFI_PROV_END) {
+                /* De-initialize manager once provisioning is finished */
+                wifi_prov_mgr_deinit();
             }
         }
 
index 95d5ccc79db1b91f1bb291cb4131fa6a9591a299..a10b9b03bc4085f850250227acf3e48894cce224 100644 (file)
@@ -127,7 +127,7 @@ The following drivers will hold the ``ESP_PM_APB_FREQ_MAX`` lock while the drive
 - **SPI slave**: between calls to :cpp:func:`spi_slave_initialize` and :cpp:func:`spi_slave_free`.
 - **Ethernet**: between calls to :cpp:func:`esp_eth_enable` and :cpp:func:`esp_eth_disable`.
 - **WiFi**: between calls to :cpp:func:`esp_wifi_start` and :cpp:func:`esp_wifi_stop`. If modem sleep is enabled, the lock will be released for the periods of time when radio is disabled.
-- **Bluetooth**: between calls to :cpp:func:`esp_bt_controller_enable` and :cpp:func:`esp_bt_controller_disable`. If Bluetooth modem sleep is enabled, the ``ESP_PM_APB_FREQ_MAX`` lock will be released for the periods of time when radio is disabled. However the ``ESP_PM_NO_LIGHT_SLEEP`` lock will still be held.
+- **Bluetooth**: between calls to :cpp:func:`esp_bt_controller_enable` and :cpp:func:`esp_bt_controller_disable`. If Bluetooth modem sleep is enabled, the ``ESP_PM_APB_FREQ_MAX`` lock will be released for the periods of time when radio is disabled. However the ``ESP_PM_NO_LIGHT_SLEEP`` lock will still be held, unless :ref:`CONFIG_BTDM_LOW_POWER_CLOCK` option is set to "External 32kHz crystal".
 - **CAN**: between calls to :cpp:func:`can_driver_install` and :cpp:func:`can_driver_uninstall`.
 
 The following peripheral drivers are not aware of DFS yet. Applications need to acquire/release locks themselves, when necessary:
index 4123756b8cd2dd533c02e827f3f401f7725be2d1..5cf017bdca23d92528f340a5fe2d88c62d5607ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a5122336e2e6a32b9676c66590f4f0ecf2539710..06c876fd647d8fadb72174452522090888320ad9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 2e7c938460d0194e2572fa74abb71175ca410483..4fa715f0c85c85546ec039af151cbc396dd11ba6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9e43333eb966fcdadab9ae6710d1ac81dcf47b66..eba953c4ec20cf7d95a6484329ebba3274793570 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 88b728bbabd0515d3c20ef0d00b712b8922c04d0..efcb6766a7a69cfb428ddeabc5d1c9c877c65161 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 8f8449eca41b1437d2e76aaece97e11c4d46e9b1..f0e2e77c97391164fdc877f049f01ddf65f1a541 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index e629cf3054e16852c2bad059a4cff9f363bdc8c2..f1f9635526e256d6062550d69a1753ba8ca305c9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index da08884e352605eaa38ee897ab2eab86bf474988..919e69f777f322f5e5acd9d78516441a3d2f3c38 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3abe85dc01695edaed6a1ff1a192688f91b79eb5..e2ae583bf828ce39f27f58bdb1239d376f5837b6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 5afaca813b5161b1e85cc50833d7ee854ecb34b8..e6b03ed59046f01a1aeff3534657dc81bfdb3ce4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 5f668718f3dfaf8d48f4ddf56d0fb27057887830..754b0115fa683690c8d11ecffcc0943758009071 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 87bc7399a4833c31f25511282042375bd5a5dd0a..bdc083a2157d345e9cdb4364c7f0ea5a2bca70be 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9518e74b42835478c6ae0b6813027e822a8d2873..705ad8d4881016dafb84d07044e62a52fc00995b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9e43333eb966fcdadab9ae6710d1ac81dcf47b66..eba953c4ec20cf7d95a6484329ebba3274793570 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d15ee3adc1d1a788c3a42cf7acf1c345d59461c5..8116935c2ccb7dfaa84196eee49ce0effe22daf1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 11dd05cb37eb8690afb262abe1dc1e45d0be510a..da4d7c20bf4dbba0c14ab290fed5b918a592e9b8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index f7c4eacf6b14467407835850d03e6aaf916cde54..d9d4a9e4e958b71a3c18f907165fe1e2cf0554d8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index fd2852de8218fadc6d971633b413440fcb6b85f8..53a10d38d1f6388592c5e579306e79b39c1c41bf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 70a28162f7f1fc1ea61e2f3ae7fdc00443db58fc..6f34a1b271dd75e53ec892e1230b61369aaa5467 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index e2e85ba43d36ac1b586bfdd77e03c6988b3b1c7e..e46efc8ecacf15f74146f4899fd7b3e044def98d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 57e89605c9a44f95358f9fb287740987f85bc0da..0e0775acaf44995f001b6fce22269853018c3ee4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index c5a2d3ad1bb4a651985c70e39b0dc7295bba2748..2df3ec5b7a0e7214a350287c7ed0b50598cd2468 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index bcb548520f13063e1ccaab175b2e56f3b0ea810f..6b856c30f4ccda2b43a8854ece9e15f5cbc54f18 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3337277340f027a902e3b245dc9f352a41e7160d..fa3c948dc4847f36e5290a519516dc26c5ac9118 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 87bc00e1d06d57c6cf10abe5b1f4dcd37a11e203..612c292b2c7802013103f8375a9bfb98e44581f5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 4c51d04af73b7b8aff31247664d05e9f34e8a9dd..192d730671908a2dae0dcd5f49b0fcb968a46e6c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index b00fc1e04bbf552bc655d3a54ae0357ae3a60024..09ebd400754abf3681655dd3e2d3901585ef1744 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index a9d3d8bc8ba141462e36e56ecf8161e2f9b1e33e..89e0c2a4162ba45d1e87d51e7840e0cdf4ebf0e7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 9dac3c241c264ae0eaec0f208c02cba6d3457e81..f98ba0eb1de9ea6e23f01d2db2713fcfbc40aa4a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 6f4771239f554a04a695edbf510f70e4c2b6b2f8..95a8ca80c06c579bcfea40935ec4e6114a2e3fec 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index c9a2bb795b05b01bd3443463b3b18f35cc632deb..930baaf150754dc390720df7493f82ce52cbd1b4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 3a3135062e671e617cb7934591011e46aed95219..2fcc0060632ebf993ec9d13afe7c935ed8a97b9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 99f4facff502b2d25c3387844fe4703c30f08d14..198b4bb75bb2d64086e11fe752ff45c9eb099ab1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index b4dec616a6feaef20a3ab0fb31bd97ebbafff34f..ef48c01fdecb32f647a4b162837d770cedbc3e2a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 889f706f7824e01d040590fa700cf5765acc43c0..3c9f9632fff84309363b65bccdf4abd5c291ef34 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index d9822a3772a731b6bc86ec780d8b7fb9005d8362..70cfa272fee98b1d57b84455da4691e390ca9c28 100644 (file)
@@ -55,23 +55,12 @@ inline static bool iperf_is_tcp_server(void)
 
 int iperf_get_socket_error_code(int sockfd)
 {
-    uint32_t optlen = sizeof(int);
-    int result;
-    int err;
-
-    err = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &result, &optlen);
-    if (err == -1) {
-        ESP_LOGE(TAG, "getsockopt failed: ret=%d", err);
-        return -1;
-    }
-
-    return result;
+    return errno;
 }
 
 int iperf_show_socket_error_reason(const char *str, int sockfd)
 {
-    int err = iperf_get_socket_error_code(sockfd);
-
+    int err = errno;
     if (err != 0) {
         ESP_LOGW(TAG, "%s error, error code: %d, reason: %s", str, err, strerror(err));
     }
index ee0742e3549f002e2a4542d888c4c35e33a7e061..cdb2635addd87de7c0115530432d9ff034d0c353 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index 4c51d04af73b7b8aff31247664d05e9f34e8a9dd..192d730671908a2dae0dcd5f49b0fcb968a46e6c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index b00fc1e04bbf552bc655d3a54ae0357ae3a60024..09ebd400754abf3681655dd3e2d3901585ef1744 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017-2018 Espressif Systems (Shanghai) PTE LTD
+// Copyright 2017-2019 Espressif Systems (Shanghai) PTE LTD
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
index bfa7b68d4c2af0734c0353565932835b76f39bb8..4b531f9787f8304a2523d8447bdfeb34846a7080 100644 (file)
@@ -20,6 +20,12 @@ This example aims at understanding BLE service discovery, connection and charact
 
 To test this demo, use any BLE GATT server app that advertises support for the Alert Notification service (0x1811) and includes it in the GATT database.
 
+A Python based utility `blecent_test.py` is also provided (which will run as a BLE GATT server) and can be used to test this example.   
+
+Note :
+
+* Make sure to run `python -m pip install --user -r $IDF_PATH/requirements.txt -r $IDF_PATH/tools/ble/requirements.txt` to install the dependency packages needed.
+* Currently this Python utility is only supported on Linux (BLE communication is via BLuez + DBus).
 
 ## How to use example
 
@@ -45,7 +51,8 @@ See the Getting Started Guide for full steps to configure and use ESP-IDF to bui
 
 ## Example Output
 
-There is this console output on successful connection:
+This is the console output on successful connection:
+
 ```
 I (202) BTDM_INIT: BT controller compile version [0b60040]
 I (202) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
@@ -71,7 +78,8 @@ Write complete; status=0 conn_handle=0 attr_handle=47
 Subscribe complete; status=0 conn_handle=0 attr_handle=43
 ```
 
-There is this console output on failure (or peripheral does not support New Alert Service category):
+This is the console output on failure (or peripheral does not support New Alert Service category):
+
 ```
 I (180) BTDM_INIT: BT controller compile version [8e87ec7]
 I (180) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
@@ -92,3 +100,60 @@ Error: Peer doesn't support the Supported New Alert Category characteristic
 GAP procedure initiated: terminate connection; conn_handle=0 hci_reason=19
 disconnect; reason=534
 ```
+
+## Running Python Utility
+
+```
+python blecent_test.py
+```
+
+## Python Utility Output
+
+This is this output seen on the python side on successful connection:
+
+```
+discovering adapter...
+bluetooth adapter discovered
+powering on adapter...
+bluetooth adapter powered on
+Advertising started
+GATT Data created
+GATT Application registered
+Advertising data created
+Advertisement registered
+Read Request received
+       SupportedNewAlertCategoryCharacteristic
+       Value:   [dbus.Byte(2)]
+Write Request received
+       AlertNotificationControlPointCharacteristic
+       Current value:   [dbus.Byte(0)]
+       New value:       [dbus.Byte(99), dbus.Byte(100)]
+
+Notify Started
+New value on write:     [dbus.Byte(1), dbus.Byte(0)]
+       Value on read:   [dbus.Byte(1), dbus.Byte(0)]
+
+Notify Stopped
+
+exiting from test...
+GATT Data removed
+GATT Application unregistered
+Advertising data removed
+Advertisement unregistered
+Stop Advertising status:  True
+disconnecting device...
+device disconnected
+powering off adapter...
+bluetooth adapter powered off
+Service discovery passed
+       Service Discovery Status: 0
+Read passed
+       SupportedNewAlertCategoryCharacteristic
+       Read Status: 0
+Write passed
+       AlertNotificationControlPointCharacteristic
+       Write Status: 0
+Subscribe passed
+       ClientCharacteristicConfigurationDescriptor
+       Subscribe Status: 0
+```
diff --git a/examples/bluetooth/nimble/blecent/blecent_test.py b/examples/bluetooth/nimble/blecent/blecent_test.py
new file mode 100644 (file)
index 0000000..d1d7929
--- /dev/null
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+
+from __future__ import print_function
+import os
+import sys
+import re
+import uuid
+import subprocess
+
+try:
+    # This environment variable is expected on the host machine
+    test_fw_path = os.getenv("TEST_FW_PATH")
+    if test_fw_path and test_fw_path not in sys.path:
+        sys.path.insert(0, test_fw_path)
+    import IDF
+except ImportError as e:
+    print(e)
+    print("\nCheck your IDF_PATH\nOR")
+    print("Try `export TEST_FW_PATH=$IDF_PATH/tools/tiny-test-fw` for resolving the issue\nOR")
+    print("Try `pip install -r $IDF_PATH/tools/tiny-test-fw/requirements.txt` for resolving the issue")
+    import IDF
+
+try:
+    import lib_ble_client
+except ImportError:
+    lib_ble_client_path = os.getenv("IDF_PATH") + "/tools/ble"
+    if lib_ble_client_path and lib_ble_client_path not in sys.path:
+        sys.path.insert(0, lib_ble_client_path)
+    import lib_ble_client
+
+
+import Utility
+
+# When running on local machine execute the following before running this script
+# > make app bootloader
+# > make print_flash_cmd | tail -n 1 > build/download.config
+# > export TEST_FW_PATH=~/esp/esp-idf/tools/tiny-test-fw
+
+
+@IDF.idf_example_test(env_tag="Example_WIFI_BT")
+def test_example_app_ble_central(env, extra_data):
+    """
+        Steps:
+            1. Discover Bluetooth Adapter and Power On
+    """
+
+    interface = 'hci0'
+    adv_host_name = "BleCentTestApp"
+    adv_iface_index = 0
+    adv_type = 'peripheral'
+    adv_uuid = '1811'
+
+    # Acquire DUT
+    dut = env.get_dut("blecent", "examples/bluetooth/nimble/blecent")
+
+    # Get binary file
+    binary_file = os.path.join(dut.app.binary_path, "blecent.bin")
+    bin_size = os.path.getsize(binary_file)
+    IDF.log_performance("blecent_bin_size", "{}KB".format(bin_size // 1024))
+
+    # Upload binary and start testing
+    Utility.console_log("Starting blecent example test app")
+    dut.start_app()
+
+    subprocess.check_output(['rm','-rf','/var/lib/bluetooth/*'])
+    device_addr = ':'.join(re.findall('..', '%012x' % uuid.getnode()))
+
+    # Get BLE client module
+    ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface)
+    if not ble_client_obj:
+        raise RuntimeError("Get DBus-Bluez object failed !!")
+
+    # Discover Bluetooth Adapter and power on
+    is_adapter_set = ble_client_obj.set_adapter()
+    if not is_adapter_set:
+        raise RuntimeError("Adapter Power On failed !!")
+
+    # Write device address to dut
+    dut.expect("BLE Host Task Started", timeout=60)
+    dut.write(device_addr + "\n")
+
+    '''
+    Blecent application run:
+        Create GATT data
+        Register GATT Application
+        Create Advertising data
+        Register advertisement
+        Start advertising
+    '''
+    ble_client_obj.start_advertising(adv_host_name, adv_iface_index, adv_type, adv_uuid)
+
+    # Call disconnect to perform cleanup operations before exiting application
+    ble_client_obj.disconnect()
+
+    # Check dut responses
+    dut.expect("Connection established", timeout=30)
+
+    dut.expect("Service discovery complete; status=0", timeout=30)
+    print("Service discovery passed\n\tService Discovery Status: 0")
+
+    dut.expect("GATT procedure initiated: read;", timeout=30)
+    dut.expect("Read complete; status=0", timeout=30)
+    print("Read passed\n\tSupportedNewAlertCategoryCharacteristic\n\tRead Status: 0")
+
+    dut.expect("GATT procedure initiated: write;", timeout=30)
+    dut.expect("Write complete; status=0", timeout=30)
+    print("Write passed\n\tAlertNotificationControlPointCharacteristic\n\tWrite Status: 0")
+
+    dut.expect("GATT procedure initiated: write;", timeout=30)
+    dut.expect("Subscribe complete; status=0", timeout=30)
+    print("Subscribe passed\n\tClientCharacteristicConfigurationDescriptor\n\tSubscribe Status: 0")
+
+
+if __name__ == '__main__':
+    test_example_app_ble_central()
index 29a773d96b1bed633d7042ae193975c8a7f2a3c7..af4b0581f625e653f8e50816214f4e9405083857 100644 (file)
@@ -10,6 +10,13 @@ This example aims at understanding notification subscriptions and sending notifi
 
 To test this demo, any BLE scanner app can be used.
 
+A Python based utility `blehr_test.py` is also provided (which will run as a BLE GATT Client) and can be used to test this example.   
+
+Note :
+
+* Make sure to run `python -m pip install --user -r $IDF_PATH/requirements.txt -r $IDF_PATH/tools/ble/requirements.txt` to install the dependency packages needed.
+* Currently this Python utility is only supported on Linux (BLE communication is via BLuez + DBus).
+
 
 ## How to use example
 
@@ -59,3 +66,50 @@ GATT procedure initiated: notify; att_handle=3
 
 ```
 
+## Running Python Utility
+
+```
+python blehr_test.py
+```
+
+## Python Utility Output
+
+This is this output seen on the python side on successful connection:
+
+```
+discovering adapter...
+bluetooth adapter discovered
+powering on adapter...
+bluetooth adapter powered on
+
+Started Discovery
+
+Connecting to device...
+
+Connected to device
+
+Services
+
+[dbus.String(u'00001801-0000-1000-8000-00805f9b34fb', variant_level=1), dbus.String(u'0000180d-0000-1000-8000-00805f9b34fb', variant_level=1), dbus.String(u'0000180a-0000-1000-8000-00805f9b34fb', variant_level=1)]
+
+Subscribe to notifications: On
+dbus.Array([dbus.Byte(6), dbus.Byte(90)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(91)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(92)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(93)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(94)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(95)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(96)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(97)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(98)], signature=dbus.Signature('y'), variant_level=1)
+dbus.Array([dbus.Byte(6), dbus.Byte(99)], signature=dbus.Signature('y'), variant_level=1)
+
+Subscribe to notifications: Off
+Success: blehr example test passed
+
+exiting from test...
+disconnecting device...
+device disconnected
+powering off adapter...
+bluetooth adapter powered off
+```
diff --git a/examples/bluetooth/nimble/blehr/blehr_test.py b/examples/bluetooth/nimble/blehr/blehr_test.py
new file mode 100644 (file)
index 0000000..81f21ee
--- /dev/null
@@ -0,0 +1,149 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+
+from __future__ import print_function
+import os
+import sys
+import re
+from threading import Thread
+import subprocess
+
+try:
+    # This environment variable is expected on the host machine
+    test_fw_path = os.getenv("TEST_FW_PATH")
+    if test_fw_path and test_fw_path not in sys.path:
+        sys.path.insert(0, test_fw_path)
+    import IDF
+except ImportError as e:
+    print(e)
+    print("\nCheck your IDF_PATH\nOR")
+    print("Try `export TEST_FW_PATH=$IDF_PATH/tools/tiny-test-fw` for resolving the issue\nOR")
+    print("Try `pip install -r $IDF_PATH/tools/tiny-test-fw/requirements.txt` for resolving the issue\n")
+    import IDF
+
+try:
+    import lib_ble_client
+except ImportError:
+    lib_ble_client_path = os.getenv("IDF_PATH") + "/tools/ble"
+    if lib_ble_client_path and lib_ble_client_path not in sys.path:
+        sys.path.insert(0, lib_ble_client_path)
+    import lib_ble_client
+
+
+import Utility
+
+# When running on local machine execute the following before running this script
+# > make app bootloader
+# > make print_flash_cmd | tail -n 1 > build/download.config
+# > export TEST_FW_PATH=~/esp/esp-idf/tools/tiny-test-fw
+
+
+def blehr_client_task(dut_addr, dut):
+    interface = 'hci0'
+    ble_devname = 'blehr_sensor_1.0'
+    hr_srv_uuid = '180d'
+    hr_char_uuid = '2a37'
+
+    # Get BLE client module
+    ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface, devname=ble_devname, devaddr=dut_addr)
+    if not ble_client_obj:
+        raise RuntimeError("Failed to get DBus-Bluez object")
+
+    # Discover Bluetooth Adapter and power on
+    is_adapter_set = ble_client_obj.set_adapter()
+    if not is_adapter_set:
+        raise RuntimeError("Adapter Power On failed !!")
+
+    # Connect BLE Device
+    is_connected = ble_client_obj.connect()
+    if not is_connected:
+        Utility.console_log("Connection to device ", ble_devname, "failed !!")
+        # Call disconnect to perform cleanup operations before exiting application
+        ble_client_obj.disconnect()
+        return
+
+    # Read Services
+    services_ret = ble_client_obj.get_services()
+    if services_ret:
+        print("\nServices\n")
+        print(services_ret)
+    else:
+        print("Failure: Read Services failed")
+        ble_client_obj.disconnect()
+        return
+
+    '''
+    Blehr application run:
+        Start Notifications
+        Retrieve updated value
+        Stop Notifications
+    '''
+    blehr_ret = ble_client_obj.hr_update_simulation(hr_srv_uuid, hr_char_uuid)
+    if blehr_ret:
+        print("Success: blehr example test passed")
+    else:
+        print("Failure: blehr example test failed")
+
+    # Call disconnect to perform cleanup operations before exiting application
+    ble_client_obj.disconnect()
+
+
+@IDF.idf_example_test(env_tag="Example_WIFI_BT")
+def test_example_app_ble_hr(env, extra_data):
+    """
+        Steps:
+            1. Discover Bluetooth Adapter and Power On
+            2. Connect BLE Device
+            3. Start Notifications
+            4. Updated value is retrieved
+            5. Stop Notifications
+    """
+    try:
+        # Acquire DUT
+        dut = env.get_dut("blehr", "examples/bluetooth/nimble/blehr")
+
+        # Get binary file
+        binary_file = os.path.join(dut.app.binary_path, "blehr.bin")
+        bin_size = os.path.getsize(binary_file)
+        IDF.log_performance("blehr_bin_size", "{}KB".format(bin_size // 1024))
+        IDF.check_performance("blehr_bin_size", bin_size // 1024)
+
+        # Upload binary and start testing
+        Utility.console_log("Starting blehr simple example test app")
+        dut.start_app()
+
+        subprocess.check_output(['rm','-rf','/var/lib/bluetooth/*'])
+
+        # Get device address from dut
+        dut_addr = dut.expect(re.compile(r"Device Address: ([a-fA-F0-9:]+)"), timeout=30)[0]
+
+        # Starting a py-client in a separate thread
+        thread1 = Thread(target=blehr_client_task, args=(dut_addr,dut,))
+        thread1.start()
+        thread1.join()
+
+        # Check dut responses
+        dut.expect("subscribe event; cur_notify=1", timeout=30)
+        dut.expect("GATT procedure initiated: notify;", timeout=30)
+        dut.expect("subscribe event; cur_notify=0", timeout=30)
+        dut.expect("disconnect;", timeout=30)
+
+    except Exception as e:
+        sys.exit(e)
+
+
+if __name__ == '__main__':
+    test_example_app_ble_hr()
index 5630bd0efa2e18ff5bbd7baa4b7bd7ec0b606f64..6f0d96e8a5149153d8b7f6715b3cd1c08dc0ed50 100644 (file)
@@ -12,6 +12,12 @@ It also demonstrates security features of NimBLE stack. SMP parameters like I/O
 
 To test this demo, any BLE scanner app can be used.
 
+A Python based utility `bleprph_test.py` is also provided (which will run as a BLE GATT Client) and can be used to test this example.   
+
+Note :
+
+* Make sure to run `python -m pip install --user -r $IDF_PATH/requirements.txt -r $IDF_PATH/tools/ble/requirements.txt` to install the dependency packages needed.
+* Currently this Python utility is only supported on Linux (BLE communication is via BLuez + DBus).
 
 ## How to use example
 
@@ -73,3 +79,72 @@ peer_ota_addr_type=1 peer_ota_addr=xx:xx:xx:xx:xx:xx peer_id_addr_type=1 peer_id
 
 ```
 
+## Running Python Utility
+
+```
+python bleprph_test.py
+```
+
+## Python Utility Output
+
+This is this output seen on the python side on successful connection:
+
+```
+discovering adapter...
+bluetooth adapter discovered
+powering on adapter...
+bluetooth adapter powered on
+
+Started Discovery
+
+Connecting to device...
+
+Connected to device
+
+Services
+
+[dbus.String(u'00001801-0000-1000-8000-00805f9b34fb', variant_level=1), dbus.String(u'59462f12-9543-9999-12c8-58b459a2712d', variant_level=1)]
+
+Characteristics retrieved
+
+       Characteristic:  /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service000a/char000b
+       Characteristic UUID:  5c3a659e-897e-45e1-b016-007107c96df6
+       Value:  dbus.Array([dbus.Byte(45), dbus.Byte(244), dbus.Byte(81), dbus.Byte(88)], signature=dbus.Signature('y'))
+       Properties: :  dbus.Array([dbus.String(u'read')], signature=dbus.Signature('s'), variant_level=1)
+
+       Characteristic:  /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service000a/char000d
+       Characteristic UUID:  5c3a659e-897e-45e1-b016-007107c96df7
+       Value:  dbus.Array([dbus.Byte(0)], signature=dbus.Signature('y'))
+       Properties: :  dbus.Array([dbus.String(u'read'), dbus.String(u'write')], signature=dbus.Signature('s'), variant_level=1)
+
+       Characteristic:  /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service0006/char0007
+       Characteristic UUID:  00002a05-0000-1000-8000-00805f9b34fb
+       Value:  None
+       Properties: :  dbus.Array([dbus.String(u'indicate')], signature=dbus.Signature('s'), variant_level=1)
+
+Characteristics after write operation
+
+       Characteristic: /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service000a/char000b
+       Characteristic UUID:  5c3a659e-897e-45e1-b016-007107c96df6
+       Value: dbus.Array([dbus.Byte(45), dbus.Byte(244), dbus.Byte(81), dbus.Byte(88)], signature=dbus.Signature('y'))
+       Properties: :  dbus.Array([dbus.String(u'read')], signature=dbus.Signature('s'), variant_level=1)
+
+       Characteristic: /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service000a/char000d
+       Characteristic UUID:  5c3a659e-897e-45e1-b016-007107c96df7
+       Value: dbus.Array([dbus.Byte(65)], signature=dbus.Signature('y'))
+       Properties: :  dbus.Array([dbus.String(u'read'), dbus.String(u'write')], signature=dbus.Signature('s'), variant_level=1)
+
+       Characteristic: /org/bluez/hci0/dev_xx_xx_xx_xx_xx_xx/service0006/char0007
+       Characteristic UUID:  00002a05-0000-1000-8000-00805f9b34fb
+       Value: None
+       Properties: :  dbus.Array([dbus.String(u'indicate')], signature=dbus.Signature('s'), variant_level=1)
+
+exiting from test...
+disconnecting device...
+device disconnected
+powering off adapter...
+bluetooth adapter powered off
+```
+
+## Note
+* NVS support is not yet integrated to bonding. So, for now, bonding is not persistent across reboot.
diff --git a/examples/bluetooth/nimble/bleprph/bleprph_test.py b/examples/bluetooth/nimble/bleprph/bleprph_test.py
new file mode 100644 (file)
index 0000000..3e29f66
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+
+from __future__ import print_function
+import os
+import sys
+import re
+from threading import Thread
+import subprocess
+
+try:
+    # This environment variable is expected on the host machine
+    test_fw_path = os.getenv("TEST_FW_PATH")
+    if test_fw_path and test_fw_path not in sys.path:
+        sys.path.insert(0, test_fw_path)
+    import IDF
+except ImportError as e:
+    print(e)
+    print("Try `export TEST_FW_PATH=$IDF_PATH/tools/tiny-test-fw` for resolving the issue")
+    print("Try `pip install -r $IDF_PATH/tools/tiny-test-fw/requirements.txt` for resolving the issue")
+    import IDF
+
+try:
+    import lib_ble_client
+except ImportError:
+    lib_ble_client_path = os.getenv("IDF_PATH") + "/tools/ble"
+    if lib_ble_client_path and lib_ble_client_path not in sys.path:
+        sys.path.insert(0, lib_ble_client_path)
+    import lib_ble_client
+
+
+import Utility
+
+# When running on local machine execute the following before running this script
+# > make app bootloader
+# > make print_flash_cmd | tail -n 1 > build/download.config
+# > export TEST_FW_PATH=~/esp/esp-idf/tools/tiny-test-fw
+
+
+def bleprph_client_task(dut_addr, dut):
+    interface = 'hci0'
+    ble_devname = 'nimble-bleprph'
+    srv_uuid = '2f12'
+
+    # Get BLE client module
+    ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface, devname=ble_devname, devaddr=dut_addr)
+    if not ble_client_obj:
+        raise RuntimeError("Failed to get DBus-Bluez object")
+
+    # Discover Bluetooth Adapter and power on
+    is_adapter_set = ble_client_obj.set_adapter()
+    if not is_adapter_set:
+        raise RuntimeError("Adapter Power On failed !!")
+
+    # Connect BLE Device
+    is_connected = ble_client_obj.connect()
+    if not is_connected:
+        Utility.console_log("Connection to device ", ble_devname, "failed !!")
+        # Call disconnect to perform cleanup operations before exiting application
+        ble_client_obj.disconnect()
+        return
+
+    # Check dut responses
+    dut.expect("GAP procedure initiated: advertise;", timeout=30)
+
+    # Read Services
+    services_ret = ble_client_obj.get_services(srv_uuid)
+    if services_ret:
+        print("\nServices\n")
+        print(services_ret)
+    else:
+        print("Failure: Read Services failed")
+        ble_client_obj.disconnect()
+        return
+
+    # Read Characteristics
+    chars_ret = {}
+    chars_ret = ble_client_obj.read_chars()
+    if chars_ret:
+        Utility.console_log("\nCharacteristics retrieved")
+        for path, props in chars_ret.items():
+            print("\n\tCharacteristic: ", path)
+            print("\tCharacteristic UUID: ", props[2])
+            print("\tValue: ", props[0])
+            print("\tProperties: : ", props[1])
+    else:
+        print("Failure: Read Characteristics failed")
+        ble_client_obj.disconnect()
+        return
+
+    '''
+    Write Characteristics
+    - write 'A' to characteristic with write permission
+    '''
+    chars_ret_on_write = {}
+    chars_ret_on_write = ble_client_obj.write_chars('A')
+    if chars_ret_on_write:
+        Utility.console_log("\nCharacteristics after write operation")
+        for path, props in chars_ret_on_write.items():
+            print("\n\tCharacteristic:", path)
+            print("\tCharacteristic UUID: ", props[2])
+            print("\tValue:", props[0])
+            print("\tProperties: : ", props[1])
+    else:
+        print("Failure: Write Characteristics failed")
+        ble_client_obj.disconnect()
+        return
+
+    # Call disconnect to perform cleanup operations before exiting application
+    ble_client_obj.disconnect()
+
+
+@IDF.idf_example_test(env_tag="Example_WIFI_BT")
+def test_example_app_ble_peripheral(env, extra_data):
+    """
+        Steps:
+            1. Discover Bluetooth Adapter and Power On
+            2. Connect BLE Device
+            3. Read Services
+            4. Read Characteristics
+            5. Write Characteristics
+    """
+    try:
+
+        # Acquire DUT
+        dut = env.get_dut("bleprph", "examples/bluetooth/nimble/bleprph")
+
+        # Get binary file
+        binary_file = os.path.join(dut.app.binary_path, "bleprph.bin")
+        bin_size = os.path.getsize(binary_file)
+        IDF.log_performance("bleprph_bin_size", "{}KB".format(bin_size // 1024))
+        IDF.check_performance("bleprph_bin_size", bin_size // 1024)
+
+        # Upload binary and start testing
+        Utility.console_log("Starting bleprph simple example test app")
+        dut.start_app()
+
+        subprocess.check_output(['rm','-rf','/var/lib/bluetooth/*'])
+
+        # Get device address from dut
+        dut_addr = dut.expect(re.compile(r"Device Address: ([a-fA-F0-9:]+)"), timeout=30)[0]
+
+        # Starting a py-client in a separate thread
+        thread1 = Thread(target=bleprph_client_task, args=(dut_addr,dut,))
+        thread1.start()
+        thread1.join()
+
+        # Check dut responses
+        dut.expect("connection established; status=0", timeout=30)
+        dut.expect("disconnect;", timeout=30)
+    except Exception as e:
+        sys.exit(e)
+
+
+if __name__ == '__main__':
+    test_example_app_ble_peripheral()
index e6ce6255c2bde10d69da7a927ad7acd743e828c4..5b1c7d7e7512f64e90fa6234c574d0343f314fff 100644 (file)
@@ -9,7 +9,7 @@
 #include <string.h>
 #include "esp_wifi.h"
 #include "esp_system.h"
-#include "esp_event_loop.h"
+#include "esp_event.h"
 #include "esp_log.h"
 #include "esp_mesh.h"
 #include "esp_mesh_internal.h"
@@ -19,7 +19,6 @@
 /*******************************************************
  *                Macros
  *******************************************************/
-//#define MESH_P2P_TOS_OFF
 
 /*******************************************************
  *                Constants
@@ -71,11 +70,9 @@ void esp_mesh_p2p_tx_main(void *arg)
     data.data = tx_buf;
     data.size = sizeof(tx_buf);
     data.proto = MESH_PROTO_BIN;
-#ifdef MESH_P2P_TOS_OFF
-    data.tos = MESH_TOS_DEF;
-#endif /* MESH_P2P_TOS_OFF */
-
+    data.tos = MESH_TOS_P2P;
     is_running = true;
+
     while (is_running) {
         /* non-root do nothing but print */
         if (!esp_mesh_is_root()) {
@@ -138,8 +135,8 @@ void esp_mesh_p2p_rx_main(void *arg)
     int flag = 0;
     data.data = rx_buf;
     data.size = RX_SIZE;
-
     is_running = true;
+
     while (is_running) {
         data.size = RX_SIZE;
         err = esp_mesh_recv(&from, &data, portMAX_DELAY, &flag, NULL, 0);
@@ -178,53 +175,66 @@ esp_err_t esp_mesh_comm_p2p_start(void)
     return ESP_OK;
 }
 
-void mesh_event_handler(mesh_event_t event)
+void mesh_event_handler(void *arg, esp_event_base_t event_base,
+                        int32_t event_id, void *event_data)
 {
     mesh_addr_t id = {0,};
     static uint8_t last_layer = 0;
-    ESP_LOGD(MESH_TAG, "esp_event_handler:%d", event.id);
 
-    switch (event.id) {
-    case MESH_EVENT_STARTED:
+    switch (event_id) {
+    case MESH_EVENT_STARTED: {
         esp_mesh_get_id(&id);
-        ESP_LOGI(MESH_TAG, "<MESH_EVENT_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
+        ESP_LOGI(MESH_TAG, "<MESH_EVENT_MESH_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
         is_mesh_connected = false;
         mesh_layer = esp_mesh_get_layer();
-        break;
-    case MESH_EVENT_STOPPED:
+    }
+    break;
+    case MESH_EVENT_STOPPED: {
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOPPED>");
         is_mesh_connected = false;
         mesh_layer = esp_mesh_get_layer();
-        break;
-    case MESH_EVENT_CHILD_CONNECTED:
+    }
+    break;
+    case MESH_EVENT_CHILD_CONNECTED: {
+        mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_CONNECTED>aid:%d, "MACSTR"",
-                 event.info.child_connected.aid,
-                 MAC2STR(event.info.child_connected.mac));
-        break;
-    case MESH_EVENT_CHILD_DISCONNECTED:
+                 child_connected->aid,
+                 MAC2STR(child_connected->mac));
+    }
+    break;
+    case MESH_EVENT_CHILD_DISCONNECTED: {
+        mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_DISCONNECTED>aid:%d, "MACSTR"",
-                 event.info.child_disconnected.aid,
-                 MAC2STR(event.info.child_disconnected.mac));
-        break;
-    case MESH_EVENT_ROUTING_TABLE_ADD:
+                 child_disconnected->aid,
+                 MAC2STR(child_disconnected->mac));
+    }
+    break;
+    case MESH_EVENT_ROUTING_TABLE_ADD: {
+        mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
         ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_ADD>add %d, new:%d",
-                 event.info.routing_table.rt_size_change,
-                 event.info.routing_table.rt_size_new);
-        break;
-    case MESH_EVENT_ROUTING_TABLE_REMOVE:
+                 routing_table->rt_size_change,
+                 routing_table->rt_size_new);
+    }
+    break;
+    case MESH_EVENT_ROUTING_TABLE_REMOVE: {
+        mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
         ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_REMOVE>remove %d, new:%d",
-                 event.info.routing_table.rt_size_change,
-                 event.info.routing_table.rt_size_new);
-        break;
-    case MESH_EVENT_NO_PARENT_FOUND:
+                 routing_table->rt_size_change,
+                 routing_table->rt_size_new);
+    }
+    break;
+    case MESH_EVENT_NO_PARENT_FOUND: {
+        mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_NO_PARENT_FOUND>scan times:%d",
-                 event.info.no_parent.scan_times);
-        /* TODO handler for the failure */
-        break;
-    case MESH_EVENT_PARENT_CONNECTED:
+                 no_parent->scan_times);
+    }
+    /* TODO handler for the failure */
+    break;
+    case MESH_EVENT_PARENT_CONNECTED: {
+        mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data;
         esp_mesh_get_id(&id);
-        mesh_layer = event.info.connected.self_layer;
-        memcpy(&mesh_parent_addr.addr, event.info.connected.connected.bssid, 6);
+        mesh_layer = connected->self_layer;
+        memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6);
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_PARENT_CONNECTED>layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"",
                  last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr),
@@ -237,104 +247,129 @@ void mesh_event_handler(mesh_event_t event)
             tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA);
         }
         esp_mesh_comm_p2p_start();
-        break;
-    case MESH_EVENT_PARENT_DISCONNECTED:
+    }
+    break;
+    case MESH_EVENT_PARENT_DISCONNECTED: {
+        mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data;
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_PARENT_DISCONNECTED>reason:%d",
-                 event.info.disconnected.reason);
+                 disconnected->reason);
         is_mesh_connected = false;
         mesh_disconnected_indicator();
         mesh_layer = esp_mesh_get_layer();
-        break;
-    case MESH_EVENT_LAYER_CHANGE:
-        mesh_layer = event.info.layer_change.new_layer;
+    }
+    break;
+    case MESH_EVENT_LAYER_CHANGE: {
+        mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data;
+        mesh_layer = layer_change->new_layer;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_LAYER_CHANGE>layer:%d-->%d%s",
                  last_layer, mesh_layer,
                  esp_mesh_is_root() ? "<ROOT>" :
                  (mesh_layer == 2) ? "<layer2>" : "");
         last_layer = mesh_layer;
         mesh_connected_indicator(mesh_layer);
-        break;
-    case MESH_EVENT_ROOT_ADDRESS:
+    }
+    break;
+    case MESH_EVENT_ROOT_ADDRESS: {
+        mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_ADDRESS>root address:"MACSTR"",
-                 MAC2STR(event.info.root_addr.addr));
-        break;
-    case MESH_EVENT_ROOT_GOT_IP:
-        /* root starts to connect to server */
-        ESP_LOGI(MESH_TAG,
-                 "<MESH_EVENT_ROOT_GOT_IP>sta ip: " IPSTR ", mask: " IPSTR ", gw: " IPSTR,
-                 IP2STR(&event.info.got_ip.ip_info.ip),
-                 IP2STR(&event.info.got_ip.ip_info.netmask),
-                 IP2STR(&event.info.got_ip.ip_info.gw));
-        break;
-    case MESH_EVENT_ROOT_LOST_IP:
-        ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_LOST_IP>");
-        break;
-    case MESH_EVENT_VOTE_STARTED:
+                 MAC2STR(root_addr->addr));
+    }
+    break;
+    case MESH_EVENT_VOTE_STARTED: {
+        mesh_event_vote_started_t *vote_started = (mesh_event_vote_started_t *)event_data;
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_VOTE_STARTED>attempts:%d, reason:%d, rc_addr:"MACSTR"",
-                 event.info.vote_started.attempts,
-                 event.info.vote_started.reason,
-                 MAC2STR(event.info.vote_started.rc_addr.addr));
-        break;
-    case MESH_EVENT_VOTE_STOPPED:
+                 vote_started->attempts,
+                 vote_started->reason,
+                 MAC2STR(vote_started->rc_addr.addr));
+    }
+    break;
+    case MESH_EVENT_VOTE_STOPPED: {
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_VOTE_STOPPED>");
         break;
-    case MESH_EVENT_ROOT_SWITCH_REQ:
+    }
+    case MESH_EVENT_ROOT_SWITCH_REQ: {
+        mesh_event_root_switch_req_t *switch_req = (mesh_event_root_switch_req_t *)event_data;
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_ROOT_SWITCH_REQ>reason:%d, rc_addr:"MACSTR"",
-                 event.info.switch_req.reason,
-                 MAC2STR( event.info.switch_req.rc_addr.addr));
-        break;
-    case MESH_EVENT_ROOT_SWITCH_ACK:
+                 switch_req->reason,
+                 MAC2STR( switch_req->rc_addr.addr));
+    }
+    break;
+    case MESH_EVENT_ROOT_SWITCH_ACK: {
         /* new root */
         mesh_layer = esp_mesh_get_layer();
         esp_mesh_get_parent_bssid(&mesh_parent_addr);
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_SWITCH_ACK>layer:%d, parent:"MACSTR"", mesh_layer, MAC2STR(mesh_parent_addr.addr));
-        break;
-    case MESH_EVENT_TODS_STATE:
-        ESP_LOGI(MESH_TAG, "<MESH_EVENT_TODS_REACHABLE>state:%d",
-                 event.info.toDS_state);
-        break;
-    case MESH_EVENT_ROOT_FIXED:
+    }
+    break;
+    case MESH_EVENT_TODS_STATE: {
+        mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data;
+        ESP_LOGI(MESH_TAG, "<MESH_EVENT_TODS_REACHABLE>state:%d", *toDs_state);
+    }
+    break;
+    case MESH_EVENT_ROOT_FIXED: {
+        mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_FIXED>%s",
-                 event.info.root_fixed.is_fixed ? "fixed" : "not fixed");
-        break;
-    case MESH_EVENT_ROOT_ASKED_YIELD:
+                 root_fixed->is_fixed ? "fixed" : "not fixed");
+    }
+    break;
+    case MESH_EVENT_ROOT_ASKED_YIELD: {
+        mesh_event_root_conflict_t *root_conflict = (mesh_event_root_conflict_t *)event_data;
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_ROOT_ASKED_YIELD>"MACSTR", rssi:%d, capacity:%d",
-                 MAC2STR(event.info.root_conflict.addr),
-                 event.info.root_conflict.rssi,
-                 event.info.root_conflict.capacity);
-        break;
-    case MESH_EVENT_CHANNEL_SWITCH:
-        ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHANNEL_SWITCH>new channel:%d", event.info.channel_switch.channel);
-        break;
-    case MESH_EVENT_SCAN_DONE:
+                 MAC2STR(root_conflict->addr),
+                 root_conflict->rssi,
+                 root_conflict->capacity);
+    }
+    break;
+    case MESH_EVENT_CHANNEL_SWITCH: {
+        mesh_event_channel_switch_t *channel_switch = (mesh_event_channel_switch_t *)event_data;
+        ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHANNEL_SWITCH>new channel:%d", channel_switch->channel);
+    }
+    break;
+    case MESH_EVENT_SCAN_DONE: {
+        mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_SCAN_DONE>number:%d",
-                 event.info.scan_done.number);
-        break;
-    case MESH_EVENT_NETWORK_STATE:
+                 scan_done->number);
+    }
+    break;
+    case MESH_EVENT_NETWORK_STATE: {
+        mesh_event_network_state_t *network_state = (mesh_event_network_state_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_NETWORK_STATE>is_rootless:%d",
-                 event.info.network_state.is_rootless);
-        break;
-    case MESH_EVENT_STOP_RECONNECTION:
+                 network_state->is_rootless);
+    }
+    break;
+    case MESH_EVENT_STOP_RECONNECTION: {
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOP_RECONNECTION>");
-        break;
-    case MESH_EVENT_FIND_NETWORK:
+    }
+    break;
+    case MESH_EVENT_FIND_NETWORK: {
+        mesh_event_find_network_t *find_network = (mesh_event_find_network_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_FIND_NETWORK>new channel:%d, router BSSID:"MACSTR"",
-                 event.info.find_network.channel, MAC2STR(event.info.find_network.router_bssid));
-        break;
-    case MESH_EVENT_ROUTER_SWITCH:
+                 find_network->channel, MAC2STR(find_network->router_bssid));
+    }
+    break;
+    case MESH_EVENT_ROUTER_SWITCH: {
+        mesh_event_router_switch_t *router_switch = (mesh_event_router_switch_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROUTER_SWITCH>new router:%s, channel:%d, "MACSTR"",
-                 event.info.router_switch.ssid, event.info.router_switch.channel, MAC2STR(event.info.router_switch.bssid));
-        break;
+                 router_switch->ssid, router_switch->channel, MAC2STR(router_switch->bssid));
+    }
+    break;
     default:
-        ESP_LOGI(MESH_TAG, "unknown id:%d", event.id);
+        ESP_LOGI(MESH_TAG, "unknown id:%d", event_id);
         break;
     }
 }
 
+void ip_event_handler(void *arg, esp_event_base_t event_base,
+                      int32_t event_id, void *event_data)
+{
+    ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
+    ESP_LOGI(MESH_TAG, "<IP_EVENT_STA_GOT_IP>IP:%s", ip4addr_ntoa(&event->ip_info.ip));
+}
+
 void app_main(void)
 {
     ESP_ERROR_CHECK(mesh_light_init());
@@ -347,33 +382,23 @@ void app_main(void)
      * */
     ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
     ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA));
-#if 0
-    /* static ip settings */
-    tcpip_adapter_ip_info_t sta_ip;
-    sta_ip.ip.addr = ipaddr_addr("192.168.1.102");
-    sta_ip.gw.addr = ipaddr_addr("192.168.1.1");
-    sta_ip.netmask.addr = ipaddr_addr("255.255.255.0");
-    tcpip_adapter_set_ip_info(WIFI_IF_STA, &sta_ip);
-#endif
+    /*  event initialization */
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
     /*  wifi initialization */
-    ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL));
     wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT();
     ESP_ERROR_CHECK(esp_wifi_init(&config));
+    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL));
     ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_FLASH));
     ESP_ERROR_CHECK(esp_wifi_start());
     /*  mesh initialization */
     ESP_ERROR_CHECK(esp_mesh_init());
+    ESP_ERROR_CHECK(esp_event_handler_register(MESH_EVENT, ESP_EVENT_ANY_ID, &mesh_event_handler, NULL));
     ESP_ERROR_CHECK(esp_mesh_set_max_layer(CONFIG_MESH_MAX_LAYER));
     ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1));
     ESP_ERROR_CHECK(esp_mesh_set_ap_assoc_expire(10));
-#ifdef MESH_FIX_ROOT
-    ESP_ERROR_CHECK(esp_mesh_fix_root(1));
-#endif
     mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT();
     /* mesh ID */
     memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
-    /* mesh event callback */
-    cfg.event_cb = &mesh_event_handler;
     /* router */
     cfg.channel = CONFIG_MESH_CHANNEL;
     cfg.router.ssid_len = strlen(CONFIG_MESH_ROUTER_SSID);
index 56df30ab6e78421a78cf4e86977a819cae969b80..99ccfbe7f15a4bc0524ba8e6c3834345c8207278 100644 (file)
@@ -9,7 +9,7 @@
 #include <string.h>
 #include "esp_wifi.h"
 #include "esp_system.h"
-#include "esp_event_loop.h"
+#include "esp_event.h"
 #include "esp_log.h"
 #include "esp_mesh.h"
 #include "esp_mesh_internal.h"
@@ -40,7 +40,6 @@ static int mesh_layer = -1;
 /*******************************************************
  *                Function Declarations
  *******************************************************/
-void mesh_event_handler(mesh_event_t event);
 void mesh_scan_done_handler(int num);
 
 /*******************************************************
@@ -156,58 +155,71 @@ void mesh_scan_done_handler(int num)
     }
 }
 
-void mesh_event_handler(mesh_event_t event)
+void mesh_event_handler(void *arg, esp_event_base_t event_base,
+                        int32_t event_id, void *event_data)
 {
     mesh_addr_t id = {0,};
     static uint8_t last_layer = 0;
-    ESP_LOGD(MESH_TAG, "esp_event_handler:%d", event.id);
+    wifi_scan_config_t scan_config = { 0 };
 
-    switch (event.id) {
-    case MESH_EVENT_STARTED:
+    switch (event_id) {
+    case MESH_EVENT_STARTED: {
         esp_mesh_get_id(&id);
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
         mesh_layer = esp_mesh_get_layer();
         ESP_ERROR_CHECK(esp_mesh_set_self_organized(0, 0));
         esp_wifi_scan_stop();
-        wifi_scan_config_t scan_config = { 0 };
         /* mesh softAP is hidden */
         scan_config.show_hidden = 1;
         scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE;
         ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0));
-        break;
-    case MESH_EVENT_STOPPED:
+    }
+    break;
+    case MESH_EVENT_STOPPED: {
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_STOPPED>");
         mesh_layer = esp_mesh_get_layer();
-        break;
-    case MESH_EVENT_CHILD_CONNECTED:
+    }
+    break;
+    case MESH_EVENT_CHILD_CONNECTED: {
+        mesh_event_child_connected_t *child_connected = (mesh_event_child_connected_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_CONNECTED>aid:%d, "MACSTR"",
-                 event.info.child_connected.aid,
-                 MAC2STR(event.info.child_connected.mac));
-        break;
-    case MESH_EVENT_CHILD_DISCONNECTED:
+                 child_connected->aid,
+                 MAC2STR(child_connected->mac));
+    }
+    break;
+    case MESH_EVENT_CHILD_DISCONNECTED: {
+        mesh_event_child_disconnected_t *child_disconnected = (mesh_event_child_disconnected_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_CHILD_DISCONNECTED>aid:%d, "MACSTR"",
-                 event.info.child_disconnected.aid,
-                 MAC2STR(event.info.child_disconnected.mac));
-        break;
-    case MESH_EVENT_ROUTING_TABLE_ADD:
+                 child_disconnected->aid,
+                 MAC2STR(child_disconnected->mac));
+    }
+    break;
+    case MESH_EVENT_ROUTING_TABLE_ADD: {
+        mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
         ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_ADD>add %d, new:%d",
-                 event.info.routing_table.rt_size_change,
-                 event.info.routing_table.rt_size_new);
-        break;
-    case MESH_EVENT_ROUTING_TABLE_REMOVE:
+                 routing_table->rt_size_change,
+                 routing_table->rt_size_new);
+    }
+    break;
+    case MESH_EVENT_ROUTING_TABLE_REMOVE: {
+        mesh_event_routing_table_change_t *routing_table = (mesh_event_routing_table_change_t *)event_data;
         ESP_LOGW(MESH_TAG, "<MESH_EVENT_ROUTING_TABLE_REMOVE>remove %d, new:%d",
-                 event.info.routing_table.rt_size_change,
-                 event.info.routing_table.rt_size_new);
-        break;
-    case MESH_EVENT_NO_PARENT_FOUND:
+                 routing_table->rt_size_change,
+                 routing_table->rt_size_new);
+    }
+    break;
+    case MESH_EVENT_NO_PARENT_FOUND: {
+        mesh_event_no_parent_found_t *no_parent = (mesh_event_no_parent_found_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_NO_PARENT_FOUND>scan times:%d",
-                 event.info.no_parent.scan_times);
-        /* TODO handler for the failure */
-        break;
-    case MESH_EVENT_PARENT_CONNECTED:
+                 no_parent->scan_times);
+    }
+    /* TODO handler for the failure */
+    break;
+    case MESH_EVENT_PARENT_CONNECTED: {
+        mesh_event_connected_t *connected = (mesh_event_connected_t *)event_data;
         esp_mesh_get_id(&id);
-        mesh_layer = event.info.connected.self_layer;
-        memcpy(&mesh_parent_addr.addr, event.info.connected.connected.bssid, 6);
+        mesh_layer = connected->self_layer;
+        memcpy(&mesh_parent_addr.addr, connected->connected.bssid, 6);
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_PARENT_CONNECTED>layer:%d-->%d, parent:"MACSTR"%s, ID:"MACSTR"",
                  last_layer, mesh_layer, MAC2STR(mesh_parent_addr.addr),
@@ -218,59 +230,71 @@ void mesh_event_handler(mesh_event_t event)
         if (esp_mesh_is_root()) {
             tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA);
         }
-        break;
-    case MESH_EVENT_PARENT_DISCONNECTED:
+    }
+    break;
+    case MESH_EVENT_PARENT_DISCONNECTED: {
+        mesh_event_disconnected_t *disconnected = (mesh_event_disconnected_t *)event_data;
         ESP_LOGI(MESH_TAG,
                  "<MESH_EVENT_PARENT_DISCONNECTED>reason:%d",
-                 event.info.disconnected.reason);
+                 disconnected->reason);
         mesh_disconnected_indicator();
         mesh_layer = esp_mesh_get_layer();
-        if (event.info.disconnected.reason == WIFI_REASON_ASSOC_TOOMANY) {
+        if (disconnected->reason == WIFI_REASON_ASSOC_TOOMANY) {
             esp_wifi_scan_stop();
             scan_config.show_hidden = 1;
             scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE;
             ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0));
         }
-        break;
-    case MESH_EVENT_LAYER_CHANGE:
-        mesh_layer = event.info.layer_change.new_layer;
+    }
+    break;
+    case MESH_EVENT_LAYER_CHANGE: {
+        mesh_event_layer_change_t *layer_change = (mesh_event_layer_change_t *)event_data;
+        mesh_layer = layer_change->new_layer;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_LAYER_CHANGE>layer:%d-->%d%s",
                  last_layer, mesh_layer,
                  esp_mesh_is_root() ? "<ROOT>" :
                  (mesh_layer == 2) ? "<layer2>" : "");
         last_layer = mesh_layer;
         mesh_connected_indicator(mesh_layer);
-        break;
-    case MESH_EVENT_ROOT_ADDRESS:
+    }
+    break;
+    case MESH_EVENT_ROOT_ADDRESS: {
+        mesh_event_root_address_t *root_addr = (mesh_event_root_address_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_ADDRESS>root address:"MACSTR"",
-                 MAC2STR(event.info.root_addr.addr));
-        break;
-    case MESH_EVENT_ROOT_GOT_IP:
-        /* root starts to connect to server */
-        ESP_LOGI(MESH_TAG,
-                 "<MESH_EVENT_ROOT_GOT_IP>sta ip: " IPSTR ", mask: " IPSTR ", gw: " IPSTR,
-                 IP2STR(&event.info.got_ip.ip_info.ip),
-                 IP2STR(&event.info.got_ip.ip_info.netmask),
-                 IP2STR(&event.info.got_ip.ip_info.gw));
-        break;
-    case MESH_EVENT_ROOT_LOST_IP:
-        ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_LOST_IP>");
-        break;
-    case MESH_EVENT_ROOT_FIXED:
+                 MAC2STR(root_addr->addr));
+    }
+    break;
+    case MESH_EVENT_TODS_STATE: {
+        mesh_event_toDS_state_t *toDs_state = (mesh_event_toDS_state_t *)event_data;
+        ESP_LOGI(MESH_TAG, "<MESH_EVENT_TODS_REACHABLE>state:%d", *toDs_state);
+    }
+    break;
+    case MESH_EVENT_ROOT_FIXED: {
+        mesh_event_root_fixed_t *root_fixed = (mesh_event_root_fixed_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_ROOT_FIXED>%s",
-                 event.info.root_fixed.is_fixed ? "fixed" : "not fixed");
-        break;
-    case MESH_EVENT_SCAN_DONE:
+                 root_fixed->is_fixed ? "fixed" : "not fixed");
+    }
+    break;
+    case MESH_EVENT_SCAN_DONE: {
+        mesh_event_scan_done_t *scan_done = (mesh_event_scan_done_t *)event_data;
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_SCAN_DONE>number:%d",
-                 event.info.scan_done.number);
-        mesh_scan_done_handler(event.info.scan_done.number);
-        break;
+                 scan_done->number);
+        mesh_scan_done_handler(scan_done->number);
+    }
+    break;
     default:
-        ESP_LOGI(MESH_TAG, "unknown id:%d", event.id);
+        ESP_LOGI(MESH_TAG, "unknown id:%d", event_id);
         break;
     }
 }
 
+void ip_event_handler(void *arg, esp_event_base_t event_base,
+                      int32_t event_id, void *event_data)
+{
+    ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
+    ESP_LOGI(MESH_TAG, "<IP_EVENT_STA_GOT_IP>IP:%s", ip4addr_ntoa(&event->ip_info.ip));
+}
+
 void app_main(void)
 {
     ESP_ERROR_CHECK(mesh_light_init());
@@ -283,28 +307,21 @@ void app_main(void)
      * */
     ESP_ERROR_CHECK(tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP));
     ESP_ERROR_CHECK(tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA));
-#if 0
-    /* static ip settings */
-    tcpip_adapter_ip_info_t sta_ip;
-    sta_ip.ip.addr = ipaddr_addr("192.168.1.102");
-    sta_ip.gw.addr = ipaddr_addr("192.168.1.1");
-    sta_ip.netmask.addr = ipaddr_addr("255.255.255.0");
-    tcpip_adapter_set_ip_info(WIFI_IF_STA, &sta_ip);
-#endif
+    /*  event initialization */
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
     /*  wifi initialization */
-    ESP_ERROR_CHECK(esp_event_loop_init(NULL, NULL));
     wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT();
     ESP_ERROR_CHECK(esp_wifi_init(&config));
+    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL));
     ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_FLASH));
     ESP_ERROR_CHECK(esp_wifi_start());
     /*  mesh initialization */
     ESP_ERROR_CHECK(esp_mesh_init());
+    ESP_ERROR_CHECK(esp_event_handler_register(MESH_EVENT, ESP_EVENT_ANY_ID, &mesh_event_handler, NULL));
     /* mesh enable IE crypto */
     mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT();
     /* mesh ID */
     memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
-    /* mesh event callback */
-    cfg.event_cb = &mesh_event_handler;
     /* router */
     cfg.channel = CONFIG_MESH_CHANNEL;
     cfg.router.ssid_len = strlen(CONFIG_MESH_ROUTER_SSID);
index 148d67473c1329d6f296c107d0f2b7f16e9e842c..979b73870ad442854d5aac84f8df297334c8399c 100644 (file)
@@ -454,6 +454,7 @@ esp_err_t esp_modem_remove_event_handler(modem_dte_t *dte, esp_event_handler_t h
 static void on_ppp_status_changed(ppp_pcb *pcb, int err_code, void *ctx)
 {
     struct netif *pppif = ppp_netif(pcb);
+    const ip_addr_t *dest_ip = NULL;
     modem_dte_t *dte = (modem_dte_t *)(ctx);
     esp_modem_dte_t *esp_dte = __containerof(dte, esp_modem_dte_t, parent);
     ppp_client_ip_info_t ipinfo = {0};
@@ -462,8 +463,14 @@ static void on_ppp_status_changed(ppp_pcb *pcb, int err_code, void *ctx)
         ipinfo.ip = pppif->ip_addr.u_addr.ip4;
         ipinfo.gw = pppif->gw.u_addr.ip4;
         ipinfo.netmask = pppif->netmask.u_addr.ip4;
-        ipinfo.ns1 = dns_getserver(0).u_addr.ip4;
-        ipinfo.ns2 = dns_getserver(1).u_addr.ip4;
+        dest_ip = dns_getserver(0);
+        if(dest_ip != NULL){
+          ipinfo.ns1 = (*dest_ip).u_addr.ip4;
+        }
+        dest_ip = dns_getserver(1);
+        if(dest_ip != NULL){
+          ipinfo.ns2 = (*dest_ip).u_addr.ip4;
+        }
         esp_event_post_to(esp_dte->event_loop_hdl, ESP_MODEM_EVENT, MODEM_EVENT_PPP_CONNECT, &ipinfo, sizeof(ipinfo), 0);
         break;
     case PPPERR_PARAM:
index 03025125becda1450591b1012ff61b8fd4eed518..ee687889783c641d85e75f70763339d17ce3c035 100644 (file)
@@ -170,9 +170,10 @@ err:
 static int create_multicast_ipv6_socket()
 {
     struct sockaddr_in6 saddr = { 0 };
+    u8_t  netif_index = EXAMPLE_INTERFACE;
     struct in6_addr if_inaddr = { 0 };
     struct ip6_addr if_ipaddr = { 0 };
-    struct ip6_mreq v6imreq = { 0 };
+    struct ipv6_mreq v6imreq = { 0 };
     int sock = -1;
     int err = 0;
 
@@ -211,8 +212,7 @@ static int create_multicast_ipv6_socket()
 #endif // LISTEN_ALL_IF
 
     // Assign the multicast source interface, via its IP
-    err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &if_inaddr,
-                     sizeof(struct in6_addr));
+    err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &netif_index,sizeof(uint8_t));
     if (err < 0) {
         ESP_LOGE(V6TAG, "Failed to set IPV6_MULTICAST_IF. Error %d", errno);
         goto err;
@@ -245,7 +245,8 @@ static int create_multicast_ipv6_socket()
 #if LISTEN_ALL_IF
     v6imreq.imr_interface.s_addr = IPADDR_ANY;
 #else
-    inet6_addr_from_ip6addr(&v6imreq.ipv6mr_interface, &if_ipaddr);
+    v6imreq.ipv6mr_interface = EXAMPLE_INTERFACE;
+   /*  inet6_addr_from_ip6addr(&v6imreq.ipv6mr_interface, &if_ipaddr);*/
 #endif // LISTEN_ALL_IF
 #ifdef CONFIG_EXAMPLE_IPV6
     // Configure multicast address to listen to
@@ -262,7 +263,7 @@ static int create_multicast_ipv6_socket()
     }
 
     err = setsockopt(sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP,
-                     &v6imreq, sizeof(struct ip6_mreq));
+                     &v6imreq, sizeof(struct ipv6_mreq));
     if (err < 0) {
         ESP_LOGE(V6TAG, "Failed to set IPV6_ADD_MEMBERSHIP. Error %d", errno);
         goto err;
index d6d5223a9c498c0fa4392b26b5291df0cfc0b311..fa49ba8e4df4b861f9056403b105fbc1d9cec882 100644 (file)
@@ -80,7 +80,7 @@ Make sure to note down the BLE device name (starting with PROV_) displayed in th
 In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (please replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). Assuming default example configuration :
 
 ```
-python esp_prov.py --ssid myssid --passphrase mypassword --sec_ver 1 --pop abcd1234 --transport ble --ble_devname PROV_261FCC
+python esp_prov.py --transport ble --service_name PROV_261FCC --sec_ver 1 --pop abcd1234 --ssid myssid --passphrase mypassword
 ```
 
 Above command will perform the provisioning steps, and the monitor log should display something like this :
@@ -150,7 +150,6 @@ Or, enable `Reset Provisioning` option under `Example Configuration` under menuc
 If the platform requirement, for running `esp_prov` is not satisfied, then the script execution will fallback to console mode, in which case the full process (involving user inputs) will look like this :
 
 ```
-==== Esp_Prov Version: V0.1 ====
 BLE client is running in console mode
     This could be due to your platform not being supported or dependencies not being met
     Please ensure all pre-requisites are met to run the full fledged client
index f379e7d3acd7f87480edabaf5908b58a1b57a697..01277117edd3cb59435cc47f6f9f5a440e1e5beb 100644 (file)
@@ -76,7 +76,7 @@ def test_examples_provisioning_ble(env, extra_data):
         raise RuntimeError("Failed to get security")
 
     print("Getting transport")
-    transport = esp_prov.get_transport(provmode, None, devname)
+    transport = esp_prov.get_transport(provmode, devname)
     if transport is None:
         raise RuntimeError("Failed to get transport")
 
index cb7551c614646e6af4669452dd21cb97f9e2bebb..0732c54505f1c2035c48b03a2a62e5400002121d 100644 (file)
@@ -65,14 +65,12 @@ I (398) app_prov: Console provisioning started
 In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (please replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). Assuming default example configuration, the script should be run as follows :
 
 ```
-python esp_prov.py --ssid myssid --passphrase mypassword --sec_ver 1 --pop abcd1234 --transport console
+python esp_prov.py --transport console --proto_ver "V0.1" --sec_ver 1 --pop abcd1234 --ssid myssid --passphrase mypassword
 ```
 
 A console will open up and the `Client->Device` commands have to be copied manually to the serial monitor console prompt :
 
 ```
-==== Esp_Prov Version: V0.1 ====
-
 ==== Verifying protocol version ====
 Client->Device msg : proto-ver 0 56302e31
 Enter device->client msg :
@@ -111,8 +109,6 @@ This is helpful in understanding the provisioning process and the order in which
 The full execution sequence of `esp_prov`, as seen on the console, is shown here :
 
 ```
-==== Esp_Prov Version: V0.1 ====
-
 ==== Verifying protocol version ====
 Client->Device msg : proto-ver 0 56302e31
 Enter device->client msg : 53554343455353
index 6a07e69f608762ed6634f9644405276b455eb9f9..82ed6ffe31a67373ed33d01049017a08473295d6 100644 (file)
@@ -68,7 +68,7 @@ I (519482) tcpip_adapter: softAP assign IP to station,IP is: 192.168.4.2
 In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (please replace the values corresponding to the parameters `--custom_info` and `--custom_ver` with your desired values for the custom configuration). Assuming default example configuration, the script should be run as follows :
 
 ```
-python esp_prov.py --ssid myssid --passphrase mypassword --sec_ver 0 --transport softap --softap_endpoint 192.168.4.1:80  --custom_config --custom_info "some string" --custom_ver 4321
+python esp_prov.py --transport softap --service_name "192.168.4.1:80" --sec_ver 0 --ssid myssid --passphrase mypassword --custom_config --custom_info "some string" --custom_ver 4321
 ```
 
 Above command will perform the provisioning steps, and the monitor log should display something like this :
index 5bba6aad4cbcd30be148b8c0a1a56e16599b25e1..b59f83710bf7ca994e2ce0b28f373c24662b108a 100644 (file)
@@ -74,10 +74,10 @@ I (1045) wifi_prov_mgr: Provisioning started with service name : PROV_261FCC
 
 Make sure to note down the BLE device name (starting with `PROV_`) displayed in the serial monitor log (eg. PROV_261FCC). This will depend on the MAC ID and will be unique for every device.
 
-In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (please replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). Assuming default example configuration :
+In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (make sure to replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). Assuming default example configuration, which uses protocomm security scheme 1 and proof of possession PoP based authentication :
 
 ```
-python esp_prov.py --ssid myssid --passphrase mypassword --sec_ver 1 --pop abcd1234 --transport ble --ble_devname PROV_261FCC
+python esp_prov.py --transport ble --service_name PROV_261FCC --sec_ver 1 --pop abcd1234 --ssid myssid --passphrase mypassword
 ```
 
 Above command will perform the provisioning steps, and the monitor log should display something like this :
@@ -109,6 +109,54 @@ I (54355) app: Hello World!
 I (55355) app: Hello World!
 ```
 
+### Wi-Fi Scanning
+
+Provisioning manager also supports providing real-time Wi-Fi scan results (performed on the device) during provisioning. This allows the client side applications to choose the AP for which the device Wi-Fi station is to be configured. Various information about the visible APs is available, like signal strength (RSSI) and security type, etc. Also, the manager now provides capabilities information which can be used by client applications to determine the security type and availability of specific features (like `wifi_scan`).
+
+When using the scan based provisioning, we don't need to specify the `--ssid` and `--passphrase` fields explicitly:
+
+```
+python esp_prov.py --transport ble --service_name PROV_261FCC --pop abcd1234
+```
+
+See below the sample output from `esp_prov` tool on running above command:
+
+```
+Connecting...
+Connected
+Getting Services...
+Security scheme determined to be : 1
+
+==== Starting Session ====
+==== Session Established ====
+
+==== Scanning Wi-Fi APs ====
+++++ Scan process executed in 1.9967520237 sec
+++++ Scan results : 5
+
+++++ Scan finished in 2.7374596596 sec
+==== Wi-Fi Scan results ====
+S.N. SSID                              BSSID         CHN RSSI AUTH
+[ 1] MyHomeWiFiAP                      788a20841996    1 -45  WPA2_PSK
+[ 2] MobileHotspot                     7a8a20841996   11 -46  WPA2_PSK
+[ 3] MyHomeWiFiAP                      788a208daa26   11 -54  WPA2_PSK
+[ 4] NeighborsWiFiAP                   8a8a20841996    6 -61  WPA2_PSK
+[ 5] InsecureWiFiAP                    dca4caf1227c    7 -74  Open
+
+Select AP by number (0 to rescan) : 1
+Enter passphrase for MyHomeWiFiAP :
+
+==== Sending Wi-Fi credential to esp32 ====
+==== Wi-Fi Credentials sent successfully ====
+
+==== Applying config to esp32 ====
+==== Apply config sent successfully ====
+
+==== Wi-Fi connection state  ====
+++++ WiFi state: connected ++++
+==== Provisioning was successful ====
+```
+
 ## Troubleshooting
 
 ### Provisioning failed
index d6fd9a47e05f1cb329225f7119234bdd5db7a1cb..96634fa71a66d2f4bb8a90f315c7d11e32c4e8f3 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <esp_log.h>
 #include <esp_wifi.h>
-#include <esp_event_loop.h>
+#include <esp_event.h>
 #include <nvs_flash.h>
 
 #include <wifi_provisioning/manager.h>
@@ -30,73 +30,56 @@ const int WIFI_CONNECTED_EVENT = BIT0;
 static EventGroupHandle_t wifi_event_group;
 
 /* Event handler for catching system events */
-static esp_err_t event_handler(void *ctx, system_event_t *event)
+static void event_handler(void* arg, esp_event_base_t event_base,
+                          int event_id, void* event_data)
 {
-    /* Pass event information to provisioning manager so that it can
-     * maintain its internal state depending upon the system event */
-    wifi_prov_mgr_event_handler(ctx, event);
-
-    /* Global event handling */
-    switch (event->event_id) {
-        case SYSTEM_EVENT_STA_START:
-            esp_wifi_connect();
-            break;
-        case SYSTEM_EVENT_STA_GOT_IP:
-            ESP_LOGI(TAG, "Connected with IP Address:%s",
-                     ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
-            xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_EVENT);
-            break;
-        case SYSTEM_EVENT_STA_DISCONNECTED:
-            ESP_LOGI(TAG, "Disconnected. Connecting to the AP again...");
-            esp_wifi_connect();
-            break;
-        default:
-            break;
-    }
-    return ESP_OK;
-}
-
-/* Event handler for catching provisioning manager events */
-static void prov_event_handler(void *user_data,
-                               wifi_prov_cb_event_t event, void *event_data)
-{
-    switch (event) {
-        case WIFI_PROV_START:
-            ESP_LOGI(TAG, "Provisioning started");
-            break;
-        case WIFI_PROV_CRED_RECV: {
-            wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)event_data;
-            /* If SSID length is exactly 32 bytes, null termination
-             * will not be present, so explicitly obtain the length */
-            size_t ssid_len = strnlen((const char *)wifi_sta_cfg->ssid, sizeof(wifi_sta_cfg->ssid));
-            ESP_LOGI(TAG, "Received Wi-Fi credentials"
-                     "\n\tSSID     : %.*s\n\tPassword : %s",
-                     ssid_len, (const char *) wifi_sta_cfg->ssid,
-                     (const char *) wifi_sta_cfg->password);
-            break;
-        }
-        case WIFI_PROV_CRED_FAIL: {
-            wifi_prov_sta_fail_reason_t *reason = (wifi_prov_sta_fail_reason_t *)event_data;
-            ESP_LOGE(TAG, "Provisioning failed!\n\tReason : %s"
-                     "\n\tPlease reset to factory and retry provisioning",
-                     (*reason == WIFI_PROV_STA_AUTH_ERROR) ?
-                     "Wi-Fi AP password incorrect" : "Wi-Fi AP not found");
-            break;
+    if (event_base == WIFI_PROV_EVENT) {
+        switch (event_id) {
+            case WIFI_PROV_START:
+                ESP_LOGI(TAG, "Provisioning started");
+                break;
+            case WIFI_PROV_CRED_RECV: {
+                wifi_sta_config_t *wifi_sta_cfg = (wifi_sta_config_t *)event_data;
+                ESP_LOGI(TAG, "Received Wi-Fi credentials"
+                         "\n\tSSID     : %s\n\tPassword : %s",
+                         (const char *) wifi_sta_cfg->ssid,
+                         (const char *) wifi_sta_cfg->password);
+                break;
+            }
+            case WIFI_PROV_CRED_FAIL: {
+                wifi_prov_sta_fail_reason_t *reason = (wifi_prov_sta_fail_reason_t *)event_data;
+                ESP_LOGE(TAG, "Provisioning failed!\n\tReason : %s"
+                         "\n\tPlease reset to factory and retry provisioning",
+                         (*reason == WIFI_PROV_STA_AUTH_ERROR) ?
+                         "Wi-Fi station authentication failed" : "Wi-Fi access-point not found");
+                break;
+            }
+            case WIFI_PROV_CRED_SUCCESS:
+                ESP_LOGI(TAG, "Provisioning successful");
+                break;
+            case WIFI_PROV_END:
+                /* De-initialize manager once provisioning is finished */
+                wifi_prov_mgr_deinit();
+                break;
+            default:
+                break;
         }
-        case WIFI_PROV_CRED_SUCCESS:
-            ESP_LOGI(TAG, "Provisioning successful");
-            break;
-        case WIFI_PROV_END:
-            /* De-initialize manager once provisioning is finished */
-            wifi_prov_mgr_deinit();
-            break;
-        default:
-            break;
+    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
+        esp_wifi_connect();
+    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
+        ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
+        ESP_LOGI(TAG, "Connected with IP Address:%s", ip4addr_ntoa(&event->ip_info.ip));
+        /* Signal main application to continue execution */
+        xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_EVENT);
+    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
+        ESP_LOGI(TAG, "Disconnected. Connecting to the AP again...");
+        esp_wifi_connect();
     }
 }
 
 static void wifi_init_sta()
 {
+    /* Start Wi-Fi in station mode */
     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
     ESP_ERROR_CHECK(esp_wifi_start());
 }
@@ -123,11 +106,18 @@ void app_main()
         ESP_ERROR_CHECK(nvs_flash_init());
     }
 
-    /* Initialize TCP/IP and the event loop */
+    /* Initialize TCP/IP */
     tcpip_adapter_init();
-    ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
+
+    /* Initialize the event loop */
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
     wifi_event_group = xEventGroupCreate();
 
+    /* Register our event handler for Wi-Fi, IP and Provisioning related events */
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_PROV_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
+    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL));
+
     /* Initialize Wi-Fi */
     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
     ESP_ERROR_CHECK(esp_wifi_init(&cfg));
@@ -146,14 +136,7 @@ void app_main()
          * appropriate scheme specific event handler allows the manager
          * to take care of this automatically. This can be set to
          * WIFI_PROV_EVENT_HANDLER_NONE when using wifi_prov_scheme_softap*/
-        .scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM,
-
-        /* Do we want an application specific handler be executed on
-         * various provisioning related events */
-        .app_event_handler = {
-            .event_cb = prov_event_handler,
-            .user_data = NULL
-        }
+        .scheme_event_handler = WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM
     };
 
     /* Initialize provisioning manager with the
@@ -219,7 +202,7 @@ void app_main()
 
         /* Uncomment the following to wait for the provisioning to finish and then release
          * the resources of the manager. Since in this case de-initialization is triggered
-         * by the configured prov_event_handler(), we don't need to call the following */
+         * by the default event loop handler, we don't need to call the following */
         // wifi_prov_mgr_wait();
         // wifi_prov_mgr_deinit();
     } else {
index 25bb463d2e403a5b0d6e8d90fdd673da960a9b3c..ea7172dc4d69037aa33cbbf0de9e08390079d231 100644 (file)
@@ -76,7 +76,7 @@ def test_examples_wifi_prov_mgr(env, extra_data):
         raise RuntimeError("Failed to get security")
 
     print("Getting transport")
-    transport = esp_prov.get_transport(provmode, None, devname)
+    transport = esp_prov.get_transport(provmode, devname)
     if transport is None:
         raise RuntimeError("Failed to get transport")
 
index e5445b80c8ab65a4057b922ea90e27df4da3d615..56d092dbfab535298fa28ae9dc0b302274e56aad 100644 (file)
@@ -81,7 +81,7 @@ I (519482) tcpip_adapter: softAP assign IP to station,IP is: 192.168.4.2
 In a separate terminal run the `esp_prov.py` script under `$IDP_PATH/tools/esp_prov` directory (please replace `myssid` and `mypassword` with the credentials of the AP to which the device is supposed to connect to after provisioning). The SoftAP endpoint corresponds to the IP and port of the device on the SoftAP network, but this is usually same as the default value and may be left out. Assuming default example configuration, the script should be run as follows :
 
 ```
-python esp_prov.py --ssid myssid --passphrase mypassword --sec_ver 1 --pop abcd1234 --transport softap --softap_endpoint 192.168.4.1:80
+python esp_prov.py --transport softap --service_name "192.168.4.1:80" --sec_ver 1 --pop abcd1234 --ssid myssid --passphrase mypassword
 ```
 
 Above command will perform the provisioning steps, and the monitor log should display something like this :
index e54ef23bec1e88ea778891c1573af1980e9ba3fc..6f67f47c8ee34bfb3a322c70366478457809bb58 100644 (file)
@@ -97,7 +97,7 @@ def test_examples_provisioning_softap(env, extra_data):
         raise RuntimeError("Failed to get security")
 
     print("Getting transport")
-    transport = esp_prov.get_transport(provmode, softap_endpoint, None)
+    transport = esp_prov.get_transport(provmode, softap_endpoint)
     if transport is None:
         raise RuntimeError("Failed to get transport")
 
index 52d24713728bdc3e12d9e08f3b3b9ad00571b296..71d09fee774e514eec7cc41001a03ae693ceb88d 100644 (file)
@@ -56,24 +56,13 @@ inline static bool iperf_is_tcp_server(void)
 
 static int iperf_get_socket_error_code(int sockfd)
 {
-    uint32_t optlen = sizeof(int);
-    int result;
-    int err;
-
-    /* get the error state, and clear it */
-    err = getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &result, &optlen);
-    if (err == -1) {
-        ESP_LOGE(TAG, "getsockopt failed: ret=%d", err);
-        return -1;
-    }
 
-    return result;
+    return errno;
 }
 
 static int iperf_show_socket_error_reason(const char *str, int sockfd)
 {
-    int err = iperf_get_socket_error_code(sockfd);
-
+    int err = errno;
     if (err != 0) {
         ESP_LOGW(TAG, "%s error, error code: %d, reason: %s", str, err, strerror(err));
     }
diff --git a/tools/ble/lib_ble_client.py b/tools/ble/lib_ble_client.py
new file mode 100644 (file)
index 0000000..3cbec03
--- /dev/null
@@ -0,0 +1,805 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+#
+
+# DBus-Bluez BLE library
+
+from __future__ import print_function
+import sys
+import time
+
+try:
+    from future.moves.itertools import zip_longest
+    import dbus
+    import dbus.mainloop.glib
+    from gi.repository import GLib
+except ImportError as e:
+    if 'linux' not in sys.platform:
+        sys.exit("Error: Only supported on Linux platform")
+    print(e)
+    print("Install packages `libgirepository1.0-dev gir1.2-gtk-3.0 libcairo2-dev libdbus-1-dev libdbus-glib-1-dev` for resolving the issue")
+    print("Run `pip install -r $IDF_PATH/tools/ble/requirements.txt` for resolving the issue")
+    raise
+
+import lib_gatt
+import lib_gap
+
+srv_added_old_cnt = 0
+srv_added_new_cnt = 0
+blecent_retry_check_cnt = 0
+verify_service_cnt = 0
+verify_readchars_cnt = 0
+blecent_adv_uuid = '1811'
+iface_added = False
+gatt_app_obj_check = False
+gatt_app_reg_check = False
+adv_data_check = False
+adv_reg_check = False
+read_req_check = False
+write_req_check = False
+subscribe_req_check = False
+ble_hr_chrc = False
+
+DISCOVERY_START = False
+
+TEST_CHECKS_PASS = False
+ADV_STOP = False
+
+SERVICES_RESOLVED = False
+SERVICE_UUID_FOUND = False
+
+BLUEZ_SERVICE_NAME = 'org.bluez'
+DBUS_OM_IFACE = 'org.freedesktop.DBus.ObjectManager'
+DBUS_PROP_IFACE = 'org.freedesktop.DBus.Properties'
+
+ADAPTER_IFACE = 'org.bluez.Adapter1'
+DEVICE_IFACE = 'org.bluez.Device1'
+
+GATT_MANAGER_IFACE = 'org.bluez.GattManager1'
+LE_ADVERTISING_MANAGER_IFACE = 'org.bluez.LEAdvertisingManager1'
+
+GATT_SERVICE_IFACE = 'org.bluez.GattService1'
+GATT_CHRC_IFACE = 'org.bluez.GattCharacteristic1'
+
+ADAPTER_ON = False
+DEVICE_CONNECTED = False
+GATT_APP_REGISTERED = False
+ADV_REGISTERED = False
+ADV_ACTIVE_INSTANCE = False
+
+CHRC_VALUE_CNT = False
+
+# Set up the main loop.
+dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+dbus.mainloop.glib.threads_init()
+# Set up the event main loop.
+event_loop = GLib.MainLoop()
+
+
+def set_props_status(props):
+    """
+        Set Adapter status if it is powered on or off
+    """
+    global ADAPTER_ON, SERVICES_RESOLVED, GATT_OBJ_REMOVED, GATT_APP_REGISTERED, \
+        ADV_REGISTERED, ADV_ACTIVE_INSTANCE, DEVICE_CONNECTED, CHRC_VALUE, CHRC_VALUE_CNT
+    is_service_uuid = False
+    # Signal caught for change in Adapter Powered property
+    if 'Powered' in props:
+        if props['Powered'] == 1:
+            ADAPTER_ON = True
+        else:
+            ADAPTER_ON = False
+        event_loop.quit()
+    elif 'ServicesResolved' in props:
+        if props['ServicesResolved'] == 1:
+            SERVICES_RESOLVED = True
+        else:
+            SERVICES_RESOLVED = False
+    elif 'UUIDs' in props:
+        # Signal caught for add/remove GATT data having service uuid
+        for uuid in props['UUIDs']:
+            if blecent_adv_uuid in uuid:
+                is_service_uuid = True
+        if not is_service_uuid:
+            # Signal caught for removing GATT data having service uuid
+            # and for unregistering GATT application
+            GATT_APP_REGISTERED = False
+            lib_gatt.GATT_APP_OBJ = False
+    elif 'ActiveInstances' in props:
+        # Signal caught for Advertising - add/remove Instances property
+        if props['ActiveInstances'] == 1:
+            ADV_ACTIVE_INSTANCE = True
+        elif props['ActiveInstances'] == 0:
+            ADV_ACTIVE_INSTANCE = False
+            ADV_REGISTERED = False
+            lib_gap.ADV_OBJ = False
+    elif 'Connected' in props:
+        # Signal caught for device connect/disconnect
+        if props['Connected'] is True:
+            DEVICE_CONNECTED = True
+            event_loop.quit()
+        else:
+            DEVICE_CONNECTED = False
+    elif 'Value' in props:
+        # Signal caught for change in chars value
+        if ble_hr_chrc:
+            CHRC_VALUE_CNT += 1
+            print(props['Value'])
+            if CHRC_VALUE_CNT == 10:
+                event_loop.quit()
+
+
+def props_change_handler(iface, changed_props, invalidated):
+    """
+        PropertiesChanged Signal handler.
+        Catch and print information about PropertiesChanged signal.
+    """
+
+    if iface == ADAPTER_IFACE:
+        set_props_status(changed_props)
+    if iface == LE_ADVERTISING_MANAGER_IFACE:
+        set_props_status(changed_props)
+    if iface == DEVICE_IFACE:
+        set_props_status(changed_props)
+    if iface == GATT_CHRC_IFACE:
+        set_props_status(changed_props)
+
+
+class BLE_Bluez_Client:
+    def __init__(self, iface, devname=None, devaddr=None):
+        self.bus = None
+        self.device = None
+        self.devname = devname
+        self.devaddr = devaddr
+        self.iface = iface
+        self.ble_objs = None
+        self.props_iface_obj = None
+        self.adapter_path = []
+        self.adapter = None
+        self.services = []
+        self.srv_uuid = []
+        self.chars = {}
+        self.char_uuid = []
+
+        try:
+            self.bus = dbus.SystemBus()
+            om_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, "/"), DBUS_OM_IFACE)
+            self.ble_objs = om_iface_obj.GetManagedObjects()
+
+        except Exception as e:
+            print(e)
+
+    def __del__(self):
+        try:
+            print("Test Exit")
+        except Exception as e:
+            print(e)
+            sys.exit(1)
+
+    def set_adapter(self):
+        '''
+            Discover Bluetooth Adapter
+            Power On Bluetooth Adapter
+        '''
+        try:
+            print("discovering adapter...")
+            for path, interfaces in self.ble_objs.items():
+                adapter = interfaces.get(ADAPTER_IFACE)
+                if adapter is not None:
+                    if path.endswith(self.iface):
+                        self.adapter = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, path), ADAPTER_IFACE)
+                        # Create Properties Interface object only after adapter is found
+                        self.props_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, path), DBUS_PROP_IFACE)
+                        self.adapter_path = [path, interfaces]
+                        # Check adapter status - power on/off
+                        set_props_status(interfaces[ADAPTER_IFACE])
+                        break
+
+            if self.adapter is None:
+                raise RuntimeError("\nError: bluetooth adapter not found")
+
+            if self.props_iface_obj is None:
+                raise RuntimeError("\nError: properties interface not found")
+
+            print("bluetooth adapter discovered")
+
+            self.props_iface_obj.connect_to_signal('PropertiesChanged', props_change_handler)
+
+            # Check if adapter is already powered on
+            if ADAPTER_ON:
+                print("bluetooth adapter is already on")
+                return True
+
+            # Power On Adapter
+            print("powering on adapter...")
+            self.props_iface_obj.Set(ADAPTER_IFACE, "Powered", dbus.Boolean(1))
+
+            event_loop.run()
+
+            if ADAPTER_ON:
+                print("bluetooth adapter powered on")
+                return True
+            else:
+                print("Failure: bluetooth adapter not powered on")
+                return False
+
+        except Exception as e:
+            print(e)
+            sys.exit(1)
+
+    def connect(self):
+        '''
+            Connect to the device discovered
+            Retry 10 times to discover and connect to device
+        '''
+        global DISCOVERY_START
+
+        device_found = False
+        try:
+            self.adapter.StartDiscovery()
+            print("\nStarted Discovery")
+
+            DISCOVERY_START = True
+
+            for retry_cnt in range(10,0,-1):
+                try:
+                    if self.device is None:
+                        print("\nConnecting to device...")
+                        # Wait for device to be discovered
+                        time.sleep(5)
+                        device_found = self.get_device()
+                    if device_found:
+                        self.device.Connect(dbus_interface=DEVICE_IFACE)
+                        event_loop.quit()
+                        print("\nConnected to device")
+                        return True
+                except Exception as e:
+                    print(e)
+                    print("\nRetries left", retry_cnt - 1)
+                    continue
+
+            # Device not found
+            return False
+
+        except Exception as e:
+            print(e)
+            self.device = None
+            return False
+
+    def get_device(self):
+        '''
+            Discover device based on device name
+            and device address and connect
+        '''
+        dev_path = None
+
+        om_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, "/"), DBUS_OM_IFACE)
+        self.ble_objs = om_iface_obj.GetManagedObjects()
+        for path, interfaces in self.ble_objs.items():
+            if DEVICE_IFACE not in interfaces.keys():
+                continue
+            device_addr_iface = (path.replace('_', ':')).lower()
+            dev_addr = self.devaddr.lower()
+            if dev_addr in device_addr_iface and \
+                    interfaces[DEVICE_IFACE].get("Name") == self.devname:
+                dev_path = path
+                break
+
+        if dev_path is None:
+            print("\nBLE device not found")
+            return False
+
+        device_props_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, dev_path), DBUS_PROP_IFACE)
+        device_props_iface_obj.connect_to_signal('PropertiesChanged', props_change_handler)
+
+        self.device = self.bus.get_object(BLUEZ_SERVICE_NAME, dev_path)
+        return True
+
+    def srvc_iface_added_handler(self, path, interfaces):
+        '''
+        Add services found as lib_ble_client obj
+        '''
+        if self.device and path.startswith(self.device.object_path):
+            if GATT_SERVICE_IFACE in interfaces.keys():
+                service = self.bus.get_object(BLUEZ_SERVICE_NAME, path)
+                uuid = service.Get(GATT_SERVICE_IFACE, 'UUID', dbus_interface=DBUS_PROP_IFACE)
+                if uuid not in self.srv_uuid:
+                    self.srv_uuid.append(uuid)
+                if path not in self.services:
+                    self.services.append(path)
+
+    def verify_get_services(self):
+        global SERVICE_SCAN_FAIL, verify_service_cnt
+        verify_service_cnt += 1
+        if iface_added and self.services and SERVICES_RESOLVED:
+            event_loop.quit()
+
+        if verify_service_cnt == 10:
+            event_loop.quit()
+
+    def verify_service_uuid_found(self):
+        '''
+        Verify service uuid found
+        '''
+        global SERVICE_UUID_FOUND
+
+        srv_uuid_found = [uuid for uuid in self.srv_uuid if service_uuid in uuid]
+        if srv_uuid_found:
+            SERVICE_UUID_FOUND = True
+
+    def get_services(self, srv_uuid=None):
+        '''
+        Retrieve Services found in the device connected
+        '''
+        global service_uuid, iface_added, SERVICE_UUID_FOUND
+        service_uuid = srv_uuid
+        iface_added = False
+        SERVICE_UUID_FOUND = False
+        try:
+            om_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, "/"), DBUS_OM_IFACE)
+            self.ble_objs = om_iface_obj.GetManagedObjects()
+
+            for path, interfaces in self.ble_objs.items():
+                self.srvc_iface_added_handler(path, interfaces)
+            # If services not found, then they may not have been added yet on dbus
+            if not self.services:
+                iface_added = True
+                GLib.timeout_add_seconds(2, self.verify_get_services)
+                om_iface_obj.connect_to_signal('InterfacesAdded', self.srvc_iface_added_handler)
+                event_loop.run()
+            if service_uuid:
+                self.verify_service_uuid_found()
+                if not SERVICE_UUID_FOUND:
+                    raise Exception("Service with uuid: %s not found !!!" % service_uuid)
+            return self.srv_uuid
+        except Exception as e:
+            print("Error: ", e)
+            return False
+
+    def chrc_iface_added_handler(self, path, interfaces):
+        '''
+        Add services found as lib_ble_client obj
+        '''
+        global chrc, chrc_discovered
+        chrc_val = None
+
+        if self.device and path.startswith(self.device.object_path):
+            if GATT_CHRC_IFACE in interfaces.keys():
+                chrc = self.bus.get_object(BLUEZ_SERVICE_NAME, path)
+                chrc_props = chrc.GetAll(GATT_CHRC_IFACE,
+                                         dbus_interface=DBUS_PROP_IFACE)
+                chrc_flags = chrc_props['Flags']
+                if 'read' in chrc_flags:
+                    chrc_val = chrc.ReadValue({}, dbus_interface=GATT_CHRC_IFACE)
+                uuid = chrc_props['UUID']
+                self.chars[path] = chrc_val, chrc_flags, uuid
+
+    def verify_get_chars(self):
+        global verify_readchars_cnt
+        verify_readchars_cnt += 1
+        if iface_added and self.chars:
+                event_loop.quit()
+        if verify_readchars_cnt == 10:
+            event_loop.quit()
+
+    def read_chars(self):
+        '''
+            Read characteristics found in the device connected
+        '''
+        global iface_added, chrc_discovered
+        chrc_discovered = False
+        iface_added = False
+
+        try:
+            om_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, "/"), DBUS_OM_IFACE)
+            self.ble_objs = om_iface_obj.GetManagedObjects()
+            for path, interfaces in self.ble_objs.items():
+                self.chrc_iface_added_handler(path, interfaces)
+
+            # If chars not found, then they have not been added yet to interface
+            if not self.chars:
+                iface_added = True
+                GLib.timeout_add_seconds(2, self.verify_get_chars)
+                om_iface_obj.connect_to_signal('InterfacesAdded', self.chars_iface_added_handler)
+                event_loop.run()
+            return self.chars
+        except Exception as e:
+            print("Error: ", e)
+            return False
+
+    def write_chars(self, write_val):
+        '''
+            Write characteristics to the device connected
+        '''
+        chrc = None
+        chrc_val = None
+        char_write_props = False
+
+        try:
+            for path, props in self.chars.items():
+                if 'write' in props[1]:  # check permission
+                    char_write_props = True
+                    chrc = self.bus.get_object(BLUEZ_SERVICE_NAME, path)
+                    chrc.WriteValue(write_val,{},dbus_interface=GATT_CHRC_IFACE)
+                    if 'read' in props[1]:
+                        chrc_val = chrc.ReadValue({}, dbus_interface=GATT_CHRC_IFACE)
+                    else:
+                        print("Warning: Cannot read value. Characteristic does not have read permission.")
+                    if not (ord(write_val) == int(chrc_val[0])):
+                        print("\nWrite Failed")
+                        return False
+                    self.chars[path] = chrc_val, props[1], props[2]  # update value
+            if not char_write_props:
+                print("Failure: Cannot perform write operation. Characteristic does not have write permission.")
+                return False
+
+            return self.chars
+        except Exception as e:
+            print(e)
+            return False
+
+    def hr_update_simulation(self, hr_srv_uuid, hr_char_uuid):
+        '''
+            Start Notifications
+            Retrieve updated value
+            Stop Notifications
+        '''
+        global ble_hr_chrc
+
+        srv_path = None
+        chrc = None
+        uuid = None
+        chrc_path = None
+        chars_ret = None
+        ble_hr_chrc = True
+
+        try:
+            # Get HR Measurement characteristic
+            services = list(zip_longest(self.srv_uuid, self.services))
+            for uuid, path in services:
+                if hr_srv_uuid in uuid:
+                    srv_path = path
+                    break
+
+            if srv_path is None:
+                print("Failure: HR UUID:", hr_srv_uuid, "not found")
+                return False
+
+            chars_ret = self.read_chars()
+
+            for path, props in chars_ret.items():
+                if path.startswith(srv_path):
+                    chrc = self.bus.get_object(BLUEZ_SERVICE_NAME, path)
+                    chrc_path = path
+                    if hr_char_uuid in props[2]:  # uuid
+                        break
+            if chrc is None:
+                print("Failure: Characteristics for service: ", srv_path, "not found")
+                return False
+            # Subscribe to notifications
+            print("\nSubscribe to notifications: On")
+            chrc.StartNotify(dbus_interface=GATT_CHRC_IFACE)
+
+            chrc_props_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, chrc_path), DBUS_PROP_IFACE)
+            chrc_props_iface_obj.connect_to_signal('PropertiesChanged', props_change_handler)
+
+            event_loop.run()
+            chrc.StopNotify(dbus_interface=GATT_CHRC_IFACE)
+            time.sleep(2)
+            print("\nSubscribe to notifications: Off")
+
+            ble_hr_chrc = False
+            return True
+
+        except Exception as e:
+            print(e)
+            return False
+
+    def create_gatt_app(self):
+        '''
+            Create GATT data
+            Register GATT Application
+        '''
+        global gatt_app_obj, gatt_manager_iface_obj
+
+        gatt_app_obj = None
+        gatt_manager_iface_obj = None
+
+        try:
+            gatt_app_obj = lib_gatt.Application(self.bus, self.adapter_path[0])
+            gatt_manager_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME,self.adapter_path[0]), GATT_MANAGER_IFACE)
+
+            gatt_manager_iface_obj.RegisterApplication(gatt_app_obj, {},
+                                                       reply_handler=self.gatt_app_handler,
+                                                       error_handler=self.gatt_app_error_handler)
+            return True
+        except Exception as e:
+            print(e)
+            return False
+
+    def gatt_app_handler(self):
+        '''
+            GATT Application Register success handler
+        '''
+        global GATT_APP_REGISTERED
+        GATT_APP_REGISTERED = True
+
+    def gatt_app_error_handler(self, error):
+        '''
+            GATT Application Register error handler
+        '''
+        global GATT_APP_REGISTERED
+        GATT_APP_REGISTERED = False
+
+    def start_advertising(self, adv_host_name, adv_iface_index, adv_type, adv_uuid):
+        '''
+            Create Advertising data
+            Register Advertisement
+            Start Advertising
+        '''
+        global le_adv_obj, le_adv_manager_iface_obj
+        le_adv_obj = None
+        le_adv_manager_iface_obj = None
+        le_adv_iface_path = None
+
+        try:
+            print("Advertising started")
+            gatt_app_ret = self.create_gatt_app()
+
+            if not gatt_app_ret:
+                return False
+
+            for path,interface in self.ble_objs.items():
+                if LE_ADVERTISING_MANAGER_IFACE in interface:
+                    le_adv_iface_path = path
+
+            if le_adv_iface_path is None:
+                print('\n Cannot start advertising. LEAdvertisingManager1 Interface not found')
+                return False
+
+            le_adv_obj = lib_gap.Advertisement(self.bus, adv_iface_index, adv_type, adv_uuid, adv_host_name)
+            le_adv_manager_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, le_adv_iface_path), LE_ADVERTISING_MANAGER_IFACE)
+
+            le_adv_manager_iface_obj.RegisterAdvertisement(le_adv_obj.get_path(), {},
+                                                           reply_handler=self.adv_handler,
+                                                           error_handler=self.adv_error_handler)
+
+            GLib.timeout_add_seconds(2, self.verify_blecent)
+            event_loop.run()
+
+            if TEST_CHECKS_PASS:
+                return True
+            else:
+                return False
+
+        except Exception as e:
+            print("in Exception")
+            print(e)
+            return False
+
+    def adv_handler(self):
+        '''
+            Advertisement Register success handler
+        '''
+        global ADV_REGISTERED
+        ADV_REGISTERED = True
+
+    def adv_error_handler(self, error):
+        '''
+            Advertisement Register error handler
+        '''
+        global ADV_REGISTERED
+        ADV_REGISTERED = False
+
+    def verify_blecent(self):
+        """
+            Verify blecent test commands are successful
+        """
+        global blecent_retry_check_cnt, gatt_app_obj_check, gatt_app_reg_check,\
+            adv_data_check, adv_reg_check, read_req_check, write_req_check,\
+            subscribe_req_check, TEST_CHECKS_PASS
+
+        # Get device when connected
+        if not self.device:
+            om_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, "/"), DBUS_OM_IFACE)
+            self.ble_objs = om_iface_obj.GetManagedObjects()
+
+            for path, interfaces in self.ble_objs.items():
+                if DEVICE_IFACE not in interfaces.keys():
+                    continue
+                device_props_iface_obj = dbus.Interface(self.bus.get_object(BLUEZ_SERVICE_NAME, path), DBUS_PROP_IFACE)
+                device_props_iface_obj.connect_to_signal('PropertiesChanged', props_change_handler)
+                self.device = self.bus.get_object(BLUEZ_SERVICE_NAME, path)
+
+        # Check for failures after 10 retries
+        if blecent_retry_check_cnt == 10:
+            # check for failures
+            if not gatt_app_obj_check:
+                print("Failure: GATT Data could not be created")
+            if not gatt_app_reg_check:
+                print("Failure: GATT Application could not be registered")
+            if not adv_data_check:
+                print("Failure: Advertising data could not be created")
+            if not adv_reg_check:
+                print("Failure: Advertisement could not be registered")
+            if not read_req_check:
+                print("Failure: Read Request not received")
+            if not write_req_check:
+                print("Failure: Write Request not received")
+            if not subscribe_req_check:
+                print("Failure: Subscribe Request not received")
+
+            # Blecent Test failed
+            TEST_CHECKS_PASS = False
+            if subscribe_req_check:
+                lib_gatt.alert_status_char_obj.StopNotify()
+            event_loop.quit()
+            return False  # polling for checks will stop
+
+        # Check for success
+        if not gatt_app_obj_check and lib_gatt.GATT_APP_OBJ:
+            print("GATT Data created")
+            gatt_app_obj_check = True
+        if not gatt_app_reg_check and GATT_APP_REGISTERED:
+            print("GATT Application registered")
+            gatt_app_reg_check = True
+        if not adv_data_check and lib_gap.ADV_OBJ:
+            print("Advertising data created")
+            adv_data_check = True
+        if not adv_reg_check and ADV_REGISTERED and ADV_ACTIVE_INSTANCE:
+            print("Advertisement registered")
+            adv_reg_check = True
+        if not read_req_check and lib_gatt.CHAR_READ:
+            read_req_check = True
+        if not write_req_check and lib_gatt.CHAR_WRITE:
+            write_req_check = True
+        if not subscribe_req_check and lib_gatt.CHAR_SUBSCRIBE:
+            subscribe_req_check = True
+
+        # Increment retry count
+        blecent_retry_check_cnt += 1
+        if read_req_check and write_req_check and subscribe_req_check:
+            # all checks passed
+            # Blecent Test passed
+            TEST_CHECKS_PASS = True
+            lib_gatt.alert_status_char_obj.StopNotify()
+            event_loop.quit()
+            return False  # polling for checks will stop
+
+        # Default return True - polling for checks will continue
+        return True
+
+    def verify_blecent_disconnect(self):
+        """
+            Verify cleanup is successful
+        """
+        global blecent_retry_check_cnt, gatt_app_obj_check, gatt_app_reg_check,\
+            adv_data_check, adv_reg_check, ADV_STOP
+
+        if blecent_retry_check_cnt == 0:
+            gatt_app_obj_check = False
+            gatt_app_reg_check = False
+            adv_data_check = False
+            adv_reg_check = False
+
+        # Check for failures after 10 retries
+        if blecent_retry_check_cnt == 10:
+            # check for failures
+            if not gatt_app_obj_check:
+                print("Warning: GATT Data could not be removed")
+            if not gatt_app_reg_check:
+                print("Warning: GATT Application could not be unregistered")
+            if not adv_data_check:
+                print("Warning: Advertising data could not be removed")
+            if not adv_reg_check:
+                print("Warning: Advertisement could not be unregistered")
+
+            # Blecent Test failed
+            ADV_STOP = False
+            event_loop.quit()
+            return False  # polling for checks will stop
+
+        # Check for success
+        if not gatt_app_obj_check and not lib_gatt.GATT_APP_OBJ:
+            print("GATT Data removed")
+            gatt_app_obj_check = True
+        if not gatt_app_reg_check and not GATT_APP_REGISTERED:
+            print("GATT Application unregistered")
+            gatt_app_reg_check = True
+        if not adv_data_check and not adv_reg_check and not (ADV_REGISTERED or ADV_ACTIVE_INSTANCE or lib_gap.ADV_OBJ):
+            print("Advertising data removed")
+            print("Advertisement unregistered")
+            adv_data_check = True
+            adv_reg_check = True
+
+        # Increment retry count
+        blecent_retry_check_cnt += 1
+        if adv_reg_check:
+            # all checks passed
+            ADV_STOP = True
+            event_loop.quit()
+            return False  # polling for checks will stop
+
+        # Default return True - polling for checks will continue
+        return True
+
+    def disconnect(self):
+        '''
+        Before application exits:
+            Advertisement is unregistered
+            Advertisement object created is removed from dbus
+            GATT Application is unregistered
+            GATT Application object created is removed from dbus
+            Disconnect device if connected
+            Adapter is powered off
+        '''
+        try:
+            global blecent_retry_check_cnt, DISCOVERY_START
+            blecent_retry_check_cnt = 0
+
+            print("\nexiting from test...")
+
+            if ADV_REGISTERED:
+                # Unregister Advertisement
+                le_adv_manager_iface_obj.UnregisterAdvertisement(le_adv_obj.get_path())
+
+                # Remove Advertising data
+                dbus.service.Object.remove_from_connection(le_adv_obj)
+
+            if GATT_APP_REGISTERED:
+                # Unregister GATT Application
+                gatt_manager_iface_obj.UnregisterApplication(gatt_app_obj.get_path())
+
+                # Remove GATT data
+                dbus.service.Object.remove_from_connection(gatt_app_obj)
+
+                GLib.timeout_add_seconds(2, self.verify_blecent_disconnect)
+                event_loop.run()
+
+                if ADV_STOP:
+                    print("Stop Advertising status: ", ADV_STOP)
+                else:
+                    print("Warning: Stop Advertising status: ", ADV_STOP)
+
+            # Disconnect device
+            if self.device:
+                print("disconnecting device...")
+                self.device.Disconnect(dbus_interface=DEVICE_IFACE)
+                if self.adapter:
+                    self.adapter.RemoveDevice(self.device)
+                self.device = None
+                if DISCOVERY_START:
+                    self.adapter.StopDiscovery()
+                    DISCOVERY_START = False
+
+            # Power off Adapter
+            self.props_iface_obj.Set(ADAPTER_IFACE, "Powered", dbus.Boolean(0))
+            event_loop.run()
+
+            if not DEVICE_CONNECTED:
+                print("device disconnected")
+            else:
+                print("Warning: device could not be disconnected")
+
+            print("powering off adapter...")
+            if not ADAPTER_ON:
+                print("bluetooth adapter powered off")
+            else:
+                print("\nWarning: Bluetooth adapter not powered off")
+
+        except Exception as e:
+            print(e)
+            return False
diff --git a/tools/ble/lib_gap.py b/tools/ble/lib_gap.py
new file mode 100644 (file)
index 0000000..2033dc4
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+#
+
+# Register Advertisement
+
+from __future__ import print_function
+import sys
+
+try:
+    import dbus
+    import dbus.service
+except ImportError as e:
+    if 'linux' not in sys.platform:
+        sys.exit("Error: Only supported on Linux platform")
+    print(e)
+    print("Install packages `libgirepository1.0-dev gir1.2-gtk-3.0 libcairo2-dev libdbus-1-dev libdbus-glib-1-dev` for resolving the issue")
+    print("Run `pip install -r $IDF_PATH/tools/ble/requirements.txt` for resolving the issue")
+    raise
+
+ADV_OBJ = False
+
+DBUS_PROP_IFACE = 'org.freedesktop.DBus.Properties'
+LE_ADVERTISEMENT_IFACE = 'org.bluez.LEAdvertisement1'
+
+
+class InvalidArgsException(dbus.exceptions.DBusException):
+    _dbus_error_name = 'org.freedesktop.DBus.Error.InvalidArgs'
+
+
+class Advertisement(dbus.service.Object):
+    PATH_BASE = '/org/bluez/hci0/advertisement'
+
+    def __init__(self, bus, index, advertising_type, uuid, name):
+        self.path = self.PATH_BASE + str(index)
+        self.bus = bus
+        self.ad_type = advertising_type
+        self.service_uuids = [uuid]
+        self.local_name = dbus.String(name)
+        dbus.service.Object.__init__(self, bus, self.path)
+
+    def __del__(self):
+        pass
+
+    def get_properties(self):
+        properties = dict()
+        properties['Type'] = self.ad_type
+
+        if self.service_uuids is not None:
+            properties['ServiceUUIDs'] = dbus.Array(self.service_uuids,
+                                                    signature='s')
+        if self.local_name is not None:
+            properties['LocalName'] = dbus.String(self.local_name)
+
+        return {LE_ADVERTISEMENT_IFACE: properties}
+
+    def get_path(self):
+        return dbus.ObjectPath(self.path)
+
+    @dbus.service.method(DBUS_PROP_IFACE,
+                         in_signature='s',
+                         out_signature='a{sv}')
+    def GetAll(self, interface):
+        global ADV_OBJ
+        if interface != LE_ADVERTISEMENT_IFACE:
+            raise InvalidArgsException()
+        ADV_OBJ = True
+        return self.get_properties()[LE_ADVERTISEMENT_IFACE]
+
+    @dbus.service.method(LE_ADVERTISEMENT_IFACE,
+                         in_signature='',
+                         out_signature='')
+    def Release(self):
+        pass
diff --git a/tools/ble/lib_gatt.py b/tools/ble/lib_gatt.py
new file mode 100644 (file)
index 0000000..c666d8e
--- /dev/null
@@ -0,0 +1,412 @@
+#!/usr/bin/env python
+#
+# Copyright 2019 Espressif Systems (Shanghai) PTE LTD
+#
+# 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.
+#
+
+# Creating GATT Application which then becomes available to remote devices.
+
+from __future__ import print_function
+import sys
+
+try:
+    import dbus
+    import dbus.service
+except ImportError as e:
+    if 'linux' not in sys.platform:
+        sys.exit("Error: Only supported on Linux platform")
+    print(e)
+    print("Install packages `libgirepository1.0-dev gir1.2-gtk-3.0 libcairo2-dev libdbus-1-dev libdbus-glib-1-dev` for resolving the issue")
+    print("Run `pip install -r $IDF_PATH/tools/ble/requirements.txt` for resolving the issue")
+    raise
+
+alert_status_char_obj = None
+
+GATT_APP_OBJ = False
+CHAR_READ = False
+CHAR_WRITE = False
+CHAR_SUBSCRIBE = False
+
+DBUS_OM_IFACE = 'org.freedesktop.DBus.ObjectManager'
+DBUS_PROP_IFACE = 'org.freedesktop.DBus.Properties'
+GATT_MANAGER_IFACE = 'org.bluez.GattManager1'
+GATT_SERVICE_IFACE = 'org.bluez.GattService1'
+GATT_CHRC_IFACE = 'org.bluez.GattCharacteristic1'
+GATT_DESC_IFACE = 'org.bluez.GattDescriptor1'
+
+
+class InvalidArgsException(dbus.exceptions.DBusException):
+    _dbus_error_name = 'org.freedesktop.DBus.Error.InvalidArgs'
+
+
+class NotSupportedException(dbus.exceptions.DBusException):
+    _dbus_error_name = 'org.bluez.Error.NotSupported'
+
+
+class Application(dbus.service.Object):
+    """
+    org.bluez.GattApplication1 interface implementation
+    """
+
+    def __init__(self, bus, path):
+        self.path = path
+        self.services = []
+        srv_obj = AlertNotificationService(bus, '0001')
+        self.add_service(srv_obj)
+        dbus.service.Object.__init__(self, bus, self.path)
+
+    def __del__(self):
+        pass
+
+    def get_path(self):
+        return dbus.ObjectPath(self.path)
+
+    def add_service(self, service):
+        self.services.append(service)
+
+    @dbus.service.method(DBUS_OM_IFACE, out_signature='a{oa{sa{sv}}}')
+    def GetManagedObjects(self):
+        global GATT_APP_OBJ
+        response = {}
+
+        for service in self.services:
+            response[service.get_path()] = service.get_properties()
+            chrcs = service.get_characteristics()
+            for chrc in chrcs:
+                response[chrc.get_path()] = chrc.get_properties()
+                descs = chrc.get_descriptors()
+                for desc in descs:
+                    response[desc.get_path()] = desc.get_properties()
+
+        GATT_APP_OBJ = True
+        return response
+
+    def Release(self):
+        pass
+
+
+class Service(dbus.service.Object):
+    """
+    org.bluez.GattService1 interface implementation
+    """
+    PATH_BASE = '/org/bluez/hci0/service'
+
+    def __init__(self, bus, index, uuid, primary=False):
+        self.path = self.PATH_BASE + str(index)
+        self.bus = bus
+        self.uuid = uuid
+        self.primary = primary
+        self.characteristics = []
+        dbus.service.Object.__init__(self, bus, self.path)
+
+    def get_properties(self):
+        return {
+            GATT_SERVICE_IFACE: {
+                'UUID': self.uuid,
+                'Primary': self.primary,
+                'Characteristics': dbus.Array(
+                    self.get_characteristic_paths(),
+                    signature='o')
+            }
+        }
+
+    def get_path(self):
+        return dbus.ObjectPath(self.path)
+
+    def add_characteristic(self, characteristic):
+        self.characteristics.append(characteristic)
+
+    def get_characteristic_paths(self):
+        result = []
+        for chrc in self.characteristics:
+            result.append(chrc.get_path())
+        return result
+
+    def get_characteristics(self):
+        return self.characteristics
+
+    @dbus.service.method(DBUS_PROP_IFACE,
+                         in_signature='s',
+                         out_signature='a{sv}')
+    def GetAll(self, interface):
+        if interface != GATT_SERVICE_IFACE:
+            raise InvalidArgsException()
+        return self.get_properties()[GATT_SERVICE_IFACE]
+
+
+class Characteristic(dbus.service.Object):
+    """
+    org.bluez.GattCharacteristic1 interface implementation
+    """
+    def __init__(self, bus, index, uuid, flags, service):
+        self.path = service.path + '/char' + str(index)
+        self.bus = bus
+        self.uuid = uuid
+        self.service = service
+        self.flags = flags
+        self.value = [0]
+        self.descriptors = []
+        dbus.service.Object.__init__(self, bus, self.path)
+
+    def get_properties(self):
+        return {
+            GATT_CHRC_IFACE: {
+                'Service': self.service.get_path(),
+                'UUID': self.uuid,
+                'Flags': self.flags,
+                'Value': self.value,
+                'Descriptors': dbus.Array(self.get_descriptor_paths(), signature='o')
+
+            }
+        }
+
+    def get_path(self):
+        return dbus.ObjectPath(self.path)
+
+    def add_descriptor(self, descriptor):
+        self.descriptors.append(descriptor)
+
+    def get_descriptor_paths(self):
+        result = []
+        for desc in self.descriptors:
+            result.append(desc.get_path())
+        return result
+
+    def get_descriptors(self):
+        return self.descriptors
+
+    @dbus.service.method(DBUS_PROP_IFACE, in_signature='s', out_signature='a{sv}')
+    def GetAll(self, interface):
+        if interface != GATT_CHRC_IFACE:
+            raise InvalidArgsException()
+
+        return self.get_properties()[GATT_CHRC_IFACE]
+
+    @dbus.service.method(GATT_CHRC_IFACE, in_signature='a{sv}', out_signature='ay')
+    def ReadValue(self, options):
+        print('\nDefault ReadValue called, returning error')
+        raise NotSupportedException()
+
+    @dbus.service.method(GATT_CHRC_IFACE, in_signature='aya{sv}')
+    def WriteValue(self, value, options):
+        print('\nDefault WriteValue called, returning error')
+        raise NotSupportedException()
+
+    @dbus.service.method(GATT_CHRC_IFACE)
+    def StartNotify(self):
+        print('Default StartNotify called, returning error')
+        raise NotSupportedException()
+
+    @dbus.service.method(GATT_CHRC_IFACE)
+    def StopNotify(self):
+        print('Default StopNotify called, returning error')
+        raise NotSupportedException()
+
+    @dbus.service.signal(DBUS_PROP_IFACE,
+                         signature='sa{sv}as')
+    def PropertiesChanged(self, interface, changed, invalidated):
+        print("\nProperties Changed")
+
+
+class Descriptor(dbus.service.Object):
+    """
+    org.bluez.GattDescriptor1 interface implementation
+    """
+    def __init__(self, bus, index, uuid, flags, characteristic):
+        self.path = characteristic.path + '/desc' + str(index)
+        self.bus = bus
+        self.uuid = uuid
+        self.flags = flags
+        self.chrc = characteristic
+        dbus.service.Object.__init__(self, bus, self.path)
+
+    def get_properties(self):
+        return {
+            GATT_DESC_IFACE: {
+                'Characteristic': self.chrc.get_path(),
+                'UUID': self.uuid,
+                'Flags': self.flags,
+            }
+        }
+
+    def get_path(self):
+        return dbus.ObjectPath(self.path)
+
+    @dbus.service.method(DBUS_PROP_IFACE,
+                         in_signature='s',
+                         out_signature='a{sv}')
+    def GetAll(self, interface):
+        if interface != GATT_DESC_IFACE:
+            raise InvalidArgsException()
+
+        return self.get_properties()[GATT_DESC_IFACE]
+
+    @dbus.service.method(GATT_DESC_IFACE, in_signature='a{sv}', out_signature='ay')
+    def ReadValue(self, options):
+        print('Default ReadValue called, returning error')
+        raise NotSupportedException()
+
+    @dbus.service.method(GATT_DESC_IFACE, in_signature='aya{sv}')
+    def WriteValue(self, value, options):
+        print('Default WriteValue called, returning error')
+        raise NotSupportedException()
+
+
+class AlertNotificationService(Service):
+    TEST_SVC_UUID = '00001811-0000-1000-8000-00805f9b34fb'
+
+    def __init__(self, bus, index):
+        global alert_status_char_obj
+        Service.__init__(self, bus, index, self.TEST_SVC_UUID, primary=True)
+        self.add_characteristic(SupportedNewAlertCategoryCharacteristic(bus, '0001', self))
+        self.add_characteristic(AlertNotificationControlPointCharacteristic(bus, '0002', self))
+        alert_status_char_obj = UnreadAlertStatusCharacteristic(bus, '0003', self)
+        self.add_characteristic(alert_status_char_obj)
+
+
+class SupportedNewAlertCategoryCharacteristic(Characteristic):
+    SUPPORT_NEW_ALERT_UUID = '00002A47-0000-1000-8000-00805f9b34fb'
+
+    def __init__(self, bus, index, service):
+        Characteristic.__init__(
+            self, bus, index,
+            self.SUPPORT_NEW_ALERT_UUID,
+            ['read'],
+            service)
+
+        self.value = [dbus.Byte(2)]
+
+    def ReadValue(self, options):
+        global CHAR_READ
+        CHAR_READ = True
+        val_list = []
+        for val in self.value:
+            val_list.append(dbus.Byte(val))
+        print("Read Request received\n", "\tSupportedNewAlertCategoryCharacteristic")
+        print("\tValue:", "\t", val_list)
+        return val_list
+
+
+class AlertNotificationControlPointCharacteristic(Characteristic):
+    ALERT_NOTIF_UUID = '00002A44-0000-1000-8000-00805f9b34fb'
+
+    def __init__(self, bus, index, service):
+        Characteristic.__init__(
+            self, bus, index,
+            self.ALERT_NOTIF_UUID,
+            ['read','write'],
+            service)
+
+        self.value = [dbus.Byte(0)]
+
+    def ReadValue(self, options):
+        val_list = []
+        for val in self.value:
+            val_list.append(dbus.Byte(val))
+        print("Read Request received\n", "\tAlertNotificationControlPointCharacteristic")
+        print("\tValue:", "\t", val_list)
+        return val_list
+
+    def WriteValue(self, value, options):
+        global CHAR_WRITE
+        CHAR_WRITE = True
+        print("Write Request received\n", "\tAlertNotificationControlPointCharacteristic")
+        print("\tCurrent value:", "\t", self.value)
+        val_list = []
+        for val in value:
+            val_list.append(val)
+        self.value = val_list
+        # Check if new value is written
+        print("\tNew value:", "\t", self.value)
+        if not self.value == value:
+            print("Failed: Write Request\n\tNew value not written\tCurrent value:", self.value)
+
+
+class UnreadAlertStatusCharacteristic(Characteristic):
+    UNREAD_ALERT_STATUS_UUID = '00002A45-0000-1000-8000-00805f9b34fb'
+
+    def __init__(self, bus, index, service):
+        Characteristic.__init__(
+            self, bus, index,
+            self.UNREAD_ALERT_STATUS_UUID,
+            ['read', 'write', 'notify'],
+            service)
+        self.value = [dbus.Byte(0)]
+        self.cccd_obj = ClientCharacteristicConfigurationDescriptor(bus, '0001', self)
+        self.add_descriptor(self.cccd_obj)
+        self.notifying = False
+
+    def StartNotify(self):
+        global CHAR_SUBSCRIBE
+        CHAR_SUBSCRIBE = True
+
+        if self.notifying:
+            print('\nAlready notifying, nothing to do')
+            return
+        self.notifying = True
+        print("\nNotify Started")
+        self.cccd_obj.WriteValue([dbus.Byte(1), dbus.Byte(0)])
+        self.cccd_obj.ReadValue()
+
+    def StopNotify(self):
+        if not self.notifying:
+            print('\nNot notifying, nothing to do')
+            return
+        self.notifying = False
+        print("\nNotify Stopped")
+
+    def ReadValue(self, options):
+        print("Read Request received\n", "\tUnreadAlertStatusCharacteristic")
+        val_list = []
+        for val in self.value:
+            val_list.append(dbus.Byte(val))
+        print("\tValue:", "\t", val_list)
+        return val_list
+
+    def WriteValue(self, value, options):
+        print("Write Request received\n", "\tUnreadAlertStatusCharacteristic")
+        val_list = []
+        for val in value:
+            val_list.append(val)
+        self.value = val_list
+        # Check if new value is written
+        print("\tNew value:", "\t", self.value)
+        if not self.value == value:
+            print("Failed: Write Request\n\tNew value not written\tCurrent value:", self.value)
+
+
+class ClientCharacteristicConfigurationDescriptor(Descriptor):
+    CCCD_UUID = '00002902-0000-1000-8000-00805f9b34fb'
+
+    def __init__(self, bus, index, characteristic):
+        self.value = [dbus.Byte(0)]
+        Descriptor.__init__(
+            self, bus, index,
+            self.CCCD_UUID,
+            ['read', 'write'],
+            characteristic)
+
+    def ReadValue(self):
+        print("\tValue on read:", "\t", self.value)
+        return self.value
+
+    def WriteValue(self, value):
+        val_list = []
+        for val in value:
+            val_list.append(val)
+        self.value = val_list
+        # Check if new value is written
+        print("New value on write:", "\t", self.value)
+        if not self.value == value:
+            print("Failed: Write Request\n\tNew value not written\tCurrent value:", self.value)
diff --git a/tools/ble/requirements.txt b/tools/ble/requirements.txt
new file mode 100644 (file)
index 0000000..8049fd2
--- /dev/null
@@ -0,0 +1,3 @@
+future
+dbus-python
+pygobject
index a3b2845577b056b64cf430e56b77de224f5a837d..e7b9715194d9d06027514ee9d26f39c4acb14179 100644 (file)
@@ -70,6 +70,7 @@ tools/ldgen/ldgen.py
 tools/ldgen/test/test_fragments.py
 tools/ldgen/test/test_generation.py
 tools/mass_mfg/mfg_gen.py
+tools/set-submodules-to-github.sh
 tools/test_check_kconfigs.py
 tools/test_idf_monitor/run_test_idf_monitor.py
 tools/test_idf_size/test.sh
index c4fef6938ca1d765217cb00593664b3716b664be..7f8a443b00ddf24067de75245b075aae92dc4c22 100644 (file)
@@ -6,7 +6,7 @@
 # SYNOPSIS
 
 ```
-python esp_prov.py --transport < mode of provisioning : softap \ ble \ console > --sec_ver < Security version 0 / 1 > [ Optional parameters... ]
+python esp_prov.py --transport < mode of provisioning : softap \ ble \ console > [ Optional parameters... ]
 ```
 
 # DESCRIPTION
@@ -53,11 +53,9 @@ Usage of `esp-prov` assumes that the provisioning app has specific protocomm end
 * `--pop <Proof of possession string>` (Optional)
     For specifying optional Proof of Possession string to use for protocomm endpoint security version 1. This option is ignored when security version 0 is in use
 
-* `--softap_endpoint <softap_ip:port>` (Optional) (Default `192.168.4.1:80`)
-    For specifying the IP and port of the HTTP server on which provisioning app is running. The client must connect to the device SoftAP prior to running `esp_prov`
-
-* `--ble_devname <BLE device name>` (Optional)
-    For specifying name of the BLE device to which connection is to be established prior to starting provisioning process. This is only used when `--transport ble` is specified, else it is ignored. Since connection with BLE is supported only on Linux, so this option is again ignored for other platforms
+* `--service_name <name> (Optional)
+    When transport mode is ble, this specifies the BLE device name to which connection is to be established for provisioned.
+    When transport mode is softap, this specifies the HTTP server hostname / IP which is running the provisioning service, on the SoftAP network of the device which is to be provisioned. This defaults to `192.168.4.1:80` if not specified
 
 * `--custom_config` (Optional)
     This flag assumes the provisioning app has an endpoint called `custom-config`. Use `--custom_info` and `--custom_ver` options to specify the fields accepted by this endpoint
index d80db3cd7e237dafdc90510c5cd964ebeebd352a..52fb394f26f6d8538252985915cb49cdcfd017ef 100644 (file)
@@ -18,6 +18,7 @@
 from __future__ import print_function
 from builtins import input
 import argparse
+import textwrap
 import time
 import os
 import sys
@@ -57,12 +58,16 @@ def get_security(secver, pop=None, verbose=False):
     return None
 
 
-def get_transport(sel_transport, softap_endpoint=None, ble_devname=None):
+def get_transport(sel_transport, service_name):
     try:
         tp = None
         if (sel_transport == 'softap'):
-            tp = transport.Transport_HTTP(softap_endpoint)
+            if service_name is None:
+                service_name = '192.168.4.1:80'
+            tp = transport.Transport_HTTP(service_name)
         elif (sel_transport == 'ble'):
+            if service_name is None:
+                raise RuntimeError('"--service_name" must be specified for ble transport')
             # BLE client is now capable of automatically figuring out
             # the primary service from the advertisement data and the
             # characteristics corresponding to each endpoint.
@@ -71,7 +76,7 @@ def get_transport(sel_transport, softap_endpoint=None, ble_devname=None):
             # in which case, the automated discovery will fail and the client
             # will fallback to using the provided UUIDs instead
             nu_lookup = {'prov-session': 'ff51', 'prov-config': 'ff52', 'proto-ver': 'ff53'}
-            tp = transport.Transport_BLE(devname=ble_devname,
+            tp = transport.Transport_BLE(devname=service_name,
                                          service_uuid='0000ffff-0000-1000-8000-00805f9b34fb',
                                          nu_lookup=nu_lookup)
         elif (sel_transport == 'console'):
@@ -93,31 +98,53 @@ def version_match(tp, protover, verbose=False):
         if response.lower() == protover.lower():
             return True
 
-        # Else interpret this as JSON structure containing
-        # information with versions and capabilities of both
-        # provisioning service and application
-        info = json.loads(response)
-        if info['prov']['ver'].lower() == protover.lower():
-            return True
+        try:
+            # Else interpret this as JSON structure containing
+            # information with versions and capabilities of both
+            # provisioning service and application
+            info = json.loads(response)
+            if info['prov']['ver'].lower() == protover.lower():
+                return True
+
+        except ValueError:
+            # If decoding as JSON fails, it means that capabilities
+            # are not supported
+            return False
 
-        return False
     except Exception as e:
         on_except(e)
         return None
 
 
-def has_capability(tp, capability, verbose=False):
+def has_capability(tp, capability='none', verbose=False):
+    # Note : default value of `capability` argument cannot be empty string
+    # because protocomm_httpd expects non zero content lengths
     try:
         response = tp.send_data('proto-ver', capability)
 
         if verbose:
             print("proto-ver response : ", response)
 
-        info = json.loads(response)
-        if capability in info['prov']['cap']:
-            return True
+        try:
+            # Interpret this as JSON structure containing
+            # information with versions and capabilities of both
+            # provisioning service and application
+            info = json.loads(response)
+            supported_capabilities = info['prov']['cap']
+            if capability.lower() == 'none':
+                # No specific capability to check, but capabilities
+                # feature is present so return True
+                return True
+            elif capability in supported_capabilities:
+                return True
+            return False
+
+        except ValueError:
+            # If decoding as JSON fails, it means that capabilities
+            # are not supported
+            return False
 
-    except Exception as e:
+    except RuntimeError as e:
         on_except(e)
 
     return False
@@ -239,75 +266,123 @@ def get_wifi_config(tp, sec):
         return None
 
 
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser(description="Generate ESP prov payload")
-
-    parser.add_argument("--ssid", dest='ssid', type=str,
-                        help="SSID of Wi-Fi Network", default='')
-    parser.add_argument("--passphrase", dest='passphrase', type=str,
-                        help="Passphrase of Wi-Fi network", default='')
-
-    parser.add_argument("--sec_ver", dest='secver', type=int,
-                        help="Security scheme version", default=None)
-    parser.add_argument("--proto_ver", dest='protover', type=str,
-                        help="Protocol version", default='')
-    parser.add_argument("--pop", dest='pop', type=str,
-                        help="Proof of possession", default='')
+def desc_format(*args):
+    desc = ''
+    for arg in args:
+        desc += textwrap.fill(replace_whitespace=False, text=arg) + "\n"
+    return desc
 
-    parser.add_argument("--softap_endpoint", dest='softap_endpoint', type=str,
-                        help="<softap_ip:port>, http(s):// shouldn't be included", default='192.168.4.1:80')
 
-    parser.add_argument("--ble_devname", dest='ble_devname', type=str,
-                        help="BLE Device Name", default='')
-
-    parser.add_argument("--transport", dest='provmode', type=str,
-                        help="provisioning mode i.e console or softap or ble", default='softap')
-
-    parser.add_argument("--custom_config", help="Provision Custom Configuration",
-                        action="store_true")
-    parser.add_argument("--custom_info", dest='custom_info', type=str,
-                        help="Custom Config Info String", default='<some custom info string>')
-    parser.add_argument("--custom_ver", dest='custom_ver', type=int,
-                        help="Custom Config Version Number", default=2)
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=desc_format(
+                                     'ESP Provisioning tool for configuring devices '
+                                     'running protocomm based provisioning service.',
+                                     'See esp-idf/examples/provisioning for sample applications'),
+                                     formatter_class=argparse.RawTextHelpFormatter)
+
+    parser.add_argument("--transport", required=True, dest='mode', type=str,
+                        help=desc_format(
+                            'Mode of transport over which provisioning is to be performed.',
+                            'This should be one of "softap", "ble" or "console"'))
+
+    parser.add_argument("--service_name", dest='name', type=str,
+                        help=desc_format(
+                            'This specifies the name of the provisioning service to connect to, '
+                            'depending upon the mode of transport :',
+                            '\t- transport "ble"    : The BLE Device Name',
+                            '\t- transport "softap" : HTTP Server hostname or IP',
+                            '\t                       (default "192.168.4.1:80")'))
+
+    parser.add_argument("--proto_ver", dest='version', type=str, default='',
+                        help=desc_format(
+                            'This checks the protocol version of the provisioning service running '
+                            'on the device before initiating Wi-Fi configuration'))
+
+    parser.add_argument("--sec_ver", dest='secver', type=int, default=None,
+                        help=desc_format(
+                            'Protocomm security scheme used by the provisioning service for secure '
+                            'session establishment. Accepted values are :',
+                            '\t- 0 : No security',
+                            '\t- 1 : X25519 key exchange + AES-CTR encryption',
+                            '\t      + Authentication using Proof of Possession (PoP)',
+                            'In case device side application uses IDF\'s provisioning manager, '
+                            'the compatible security version is automatically determined from '
+                            'capabilities retrieved via the version endpoint'))
+
+    parser.add_argument("--pop", dest='pop', type=str, default='',
+                        help=desc_format(
+                            'This specifies the Proof of possession (PoP) when security scheme 1 '
+                            'is used'))
+
+    parser.add_argument("--ssid", dest='ssid', type=str, default='',
+                        help=desc_format(
+                            'This configures the device to use SSID of the Wi-Fi network to which '
+                            'we would like it to connect to permanently, once provisioning is complete. '
+                            'If Wi-Fi scanning is supported by the provisioning service, this need not '
+                            'be specified'))
+
+    parser.add_argument("--passphrase", dest='passphrase', type=str, default='',
+                        help=desc_format(
+                            'This configures the device to use Passphrase for the Wi-Fi network to which '
+                            'we would like it to connect to permanently, once provisioning is complete. '
+                            'If Wi-Fi scanning is supported by the provisioning service, this need not '
+                            'be specified'))
+
+    parser.add_argument("--custom_config", action="store_true",
+                        help=desc_format(
+                            'This is an optional parameter, only intended for use with '
+                            '"examples/provisioning/custom_config"'))
+    parser.add_argument("--custom_info", dest='custom_info', type=str, default='<some custom info string>',
+                        help=desc_format(
+                            'Custom Config Info String. "--custom_config" must be specified for using this'))
+    parser.add_argument("--custom_ver", dest='custom_ver', type=int, default=2,
+                        help=desc_format(
+                            'Custom Config Version Number. "--custom_config" must be specified for using this'))
+
+    parser.add_argument("-v","--verbose", help="Increase output verbosity", action="store_true")
 
-    parser.add_argument("-v","--verbose", help="increase output verbosity", action="store_true")
     args = parser.parse_args()
 
-    if args.protover != '':
-        print("==== Esp_Prov Version: " + args.protover + " ====")
-
-    obj_transport = get_transport(args.provmode, args.softap_endpoint, args.ble_devname)
+    obj_transport = get_transport(args.mode.lower(), args.name)
     if obj_transport is None:
-        print("---- Invalid provisioning mode ----")
+        print("---- Failed to establish connection ----")
         exit(1)
 
     # If security version not specified check in capabilities
     if args.secver is None:
+        # First check if capabilities are supported or not
+        if not has_capability(obj_transport):
+            print('Security capabilities could not be determined. Please specify "--sec_ver" explicitly')
+            print("---- Invalid Security Version ----")
+            exit(2)
+
         # When no_sec is present, use security 0, else security 1
         args.secver = int(not has_capability(obj_transport, 'no_sec'))
+        print("Security scheme determined to be :", args.secver)
 
-    if (args.secver != 0) and not has_capability(obj_transport, 'no_pop'):
-        if len(args.pop) == 0:
-            print("---- Proof of Possession argument not provided ----")
-            exit(2)
-    elif len(args.pop) != 0:
-        print("---- Proof of Possession will be ignored ----")
-        args.pop = ''
+        if (args.secver != 0) and not has_capability(obj_transport, 'no_pop'):
+            if len(args.pop) == 0:
+                print("---- Proof of Possession argument not provided ----")
+                exit(2)
+        elif len(args.pop) != 0:
+            print("---- Proof of Possession will be ignored ----")
+            args.pop = ''
 
     obj_security = get_security(args.secver, args.pop, args.verbose)
     if obj_security is None:
         print("---- Invalid Security Version ----")
         exit(2)
 
-    if args.protover != '':
+    if args.version != '':
         print("\n==== Verifying protocol version ====")
-        if not version_match(obj_transport, args.protover, args.verbose):
+        if not version_match(obj_transport, args.version, args.verbose):
             print("---- Error in protocol version matching ----")
             exit(3)
         print("==== Verified protocol version successfully ====")
 
     print("\n==== Starting Session ====")
     if not establish_session(obj_transport, obj_security):
+        print("Failed to establish session. Ensure that security scheme and proof of possession are correct")
         print("---- Error in establishing session ----")
         exit(4)
     print("==== Session Established ====")
@@ -328,7 +403,7 @@ if __name__ == '__main__':
         while True:
             print("\n==== Scanning Wi-Fi APs ====")
             start_time = time.time()
-            APs = scan_wifi_APs(args.provmode, obj_transport, obj_security)
+            APs = scan_wifi_APs(args.mode.lower(), obj_transport, obj_security)
             end_time = time.time()
             print("\n++++ Scan finished in " + str(end_time - start_time) + " sec")
             if APs is None:
index 47e8b28efab0f54a089f262d76c4d486823aa108..3c7aed013c2e0666090d1a8e05cfd0e36628a290 100644 (file)
@@ -35,6 +35,11 @@ class Transport_HTTP(Transport):
         else:
             ssl_ctx = ssl.create_default_context(cafile=certfile)
             self.conn = http.client.HTTPSConnection(hostname, context=ssl_ctx, timeout=30)
+        try:
+            print("Connecting to " + hostname)
+            self.conn.connect()
+        except Exception as err:
+            raise RuntimeError("Connection Failure : " + str(err))
         self.headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
 
     def _send_post_request(self, path, data):
index ce614f77ef9e4be5d6455ed948ea0a7e2d514cfe..e38b1f1ece10827d6e04c914d01298825cdde7ef 100644 (file)
@@ -127,75 +127,117 @@ An instance of an intermediate CSV file will be created for each device on an in
 Running the utility
 -------------------
 
-The mfg\_gen.py utility uses the generated CSV Configuration file and the master value CSV file to generate factory images for each device. 
-
-*A sample CSV Configuration file and a master value CSV file are both provided with this utility.* 
-
 **Usage**::
-    
-    ./mfg_gen.py [-h] [--conf CONFIG_FILE] [--values VALUES_FILE]
-                    [--prefix PREFIX] [--fileid FILEID] [--outdir OUTDIR]
-                    [--size PART_SIZE] [--version {v1,v2}]
-                    [--keygen {true,false}] [--encrypt {true,false}]
-                    [--keyfile KEYFILE]
-
-The description of the arguments is given in the table below.
-
-+------------------------+------------------------------------------------------------+-------------------+
-|   Arguments            |                        Description                         |  Default Value    |
-+========================+============================================================+===================+
-| --conf CONFIG_FILE     | Path to existing CSV configuration file                    |                   |
-+------------------------+------------------------------------------------------------+-------------------+
-| --values VALUES_FILE   | Path to existing master value CSV file                     |                   |
-+------------------------+------------------------------------------------------------+-------------------+
-| --prefix PREFIX        | Unique filename prefix                                     |                   |
-+------------------------+------------------------------------------------------------+-------------------+
-| --fileid FILEID        | Unique file identifier (any key in the file with values)   | numeric value     |
-|                        | as a filename suffix                                       | (1,2,3...)        |
-+------------------------+------------------------------------------------------------+-------------------+
-| --outdir OUTDIR        | Output directory to store created files                    | current directory |
-+------------------------+------------------------------------------------------------+-------------------+
-| --size PART_SIZE       | Size of NVS Partition in bytes (must be multiple of 4096)  |                   |
-+------------------------+------------------------------------------------------------+-------------------+
-| --version {v1,v2}      | Set version                                                | v2                |
-+------------------------+------------------------------------------------------------+-------------------+
-| --keygen {true,false}  | Generate keys for encryption                               | false             |
-+------------------------+------------------------------------------------------------+-------------------+
-| --encrypt {true,false} | Set encryption mode                                        | false             |
-+------------------------+------------------------------------------------------------+-------------------+
-| --keyfile KEYFILE      | File storing key for encryption (Applicable only if        |                   |
-|                        | Encryption mode is true).                                  |                   |
-+------------------------+------------------------------------------------------------+-------------------+
-
-*To run this utility with the provided sample files, use the commands below*::
-
-    ./mfg_gen.py --conf samples/sample_config.csv --values samples/sample_values_singlepage_blob.csv --prefix Fan --size 0x3000
-
-    ./mfg_gen.py --conf samples/sample_config.csv --values samples/sample_values_multipage_blob.csv --prefix Fan --size 0x4000
-
-When you use this utility to generate factory images on a per device basis, keep in mind that the arguments --conf, --values, --prefix, and --size are mandatory.
-
-    ./mfg_gen.py --conf samples/sample_config.csv --values samples/sample_values_singlepage_blob.csv --prefix Fan --size 0x3000 --outdir tmp
-
-.. note:: If the --outdir directory does not exist, it will be created.
+
+        python mfg_gen.py [-h] {generate,generate-key} ...
+
+        Optional Arguments:
+        +-----+------------+----------------------------------------------------------------------+
+        | No. | Parameter  |                           Description                                |
+        +=====+============+======================================================================+
+        | 1   | -h, --help |        show this help message and exit                               |
+        +-----+------------+----------------------------------------------------------------------+
+
+        Commands:
+               Run mfg_gen.py {command} -h for additional help
+        +-----+--------------+--------------------------------------------------------------------+
+        | No. | Parameter    |                           Description                              |
+        +=====+==============+====================================================================+
+        | 1   | generate     |      Generate NVS partition                                        |
+        +-----+--------------+--------------------------------------------------------------------+
+        | 2   | generate-key |      Generate keys for encryption                                  |
+        +-----+--------------+--------------------------------------------------------------------+
+
+**To generate factory images for each device (Default):**
+    **Usage**::
+
+        python mfg_gen.py generate [-h] [--fileid FILEID] [--version {1,2}] [--keygen]
+                                        [--keyfile KEYFILE] [--inputkey INPUTKEY]
+                                        [--outdir OUTDIR]
+                                        conf values prefix size
+        
+        Positional Arguments:
+        +--------------+----------------------------------------------------------------------+
+        | Parameter    |                           Description                                |
+        +==============+======================================================================+
+        | conf         |        Path to configuration csv file to parse                       | 
+        +--------------+----------------------------------------------------------------------+
+        | values       |        Path to values csv file to parse                              |
+        +--------------+----------------------------------------------------------------------+
+        | prefix       |        Unique name for each output filename prefix                   |                          
+        +-----+--------------+----------------------------------------------------------------+
+        | size         |        Size of NVS partition in bytes                                |
+        |              |        (must be multiple of 4096)                                    |
+        +--------------+----------------------------------------------------------------------+
+
+        Optional Arguments:
+        +---------------------+--------------------------------------------------------------------+
+        | Parameter           |                           Description                              |
+        +=====================+====================================================================+
+        | -h, --help          |     show this help message and exit                                |
+        +---------------------+--------------------------------------------------------------------+
+        | --fileid FILEID     |     Unique file identifier(any key in values file)                 |
+        |                     |     for each filename suffix (Default: numeric value(1,2,3...)     |
+        +---------------------+--------------------------------------------------------------------+
+        | --version {1,2}     |     Set multipage blob version.                                    |
+        |                     |     Version 1 - Multipage blob support disabled.                   |
+        |                     |     Version 2 - Multipage blob support enabled.                    |
+        |                     |     Default: Version 2                                             |
+        +---------------------+--------------------------------------------------------------------+
+        | --keygen            |     Generates key for encrypting NVS partition                     |
+        +---------------------+--------------------------------------------------------------------+
+        | --inputkey INPUTKEY |     File having key for encrypting NVS partition                   |
+        +---------------------+--------------------------------------------------------------------+
+        | --outdir OUTDIR     |     Output directory to store files created                        |
+        |                     |     (Default: current directory)                                   |
+        +---------------------+--------------------------------------------------------------------+
+
+You can run the utility to generate factory images for each device using the command below. A sample CSV file is provided with the utility::
+
+    python mfg_gen.py generate samples/sample_config.csmples/sample_values_singlepage_blob.csv Sample 0x3000
 
 The master value CSV file should have the path in the ``file`` type relative to the directory from which you are running the utility.
 
-    ./mfg_gen.py --conf samples/sample_config.csv --values samples/sample_values_singlepage_blob.csv --prefix Fan --size 0x3000 --encrypt true --keygen true
+**To generate encrypted factory images for each device:**
+
+You can run the utility to encrypt factory images for each device using the command below. A sample CSV file is provided with the utility:
 
-.. note:: The generated ``keys/`` directory is named as the file with encryption keys of the form ``prefix-fileid-keys.bin``.
+- Encrypt by allowing the utility to generate encryption keys::
 
-*If you* **only** *want to generate a binary file with encryption keys, you can run the command below.*::
+    python mfg_gen.py generate samples/sample_config.csv samples/sample_values_singlepage_blob.csv Sample 0x3000 --keygen
 
-    ./mfg_gen.py --keygen true
+.. note:: Encryption key of the following format ``<outdir>/keys/keys-<prefix>-<fileid>.bin`` is created.
+.. note:: This newly created file having encryption keys in ``keys/`` directory is compatible with NVS key-partition structure. Refer to :ref:`nvs_key_partition` for more details.
 
-.. note:: When you use this utility to generate encryption keys only, the --keygen argument is mandatory.
+- Encrypt by providing the encryption keys as input binary file::
+
+    python mfg_gen.py generate samples/sample_config.csv samples/sample_values_singlepage_blob.csv Sample 0x3000 --inputkey keys/sample_keys.bin
+
+**To generate only encryption keys:**
+  **Usage**::
+
+        python mfg_gen.py generate-key [-h] [--keyfile KEYFILE] [--outdir OUTDIR]
+
+        Optional Arguments:
+        +--------------------+----------------------------------------------------------------------+
+        | Parameter          |                           Description                                |
+        +====================+======================================================================+
+        | -h, --help         |      show this help message and exit                                 |
+        +--------------------+----------------------------------------------------------------------+
+        | --keyfile KEYFILE  |      Path to output encryption keys file                             |
+        +--------------------+----------------------------------------------------------------------+
+        | --outdir OUTDIR    |      Output directory to store files created.                        |
+        |                    |      (Default: current directory)                                    |
+        +--------------------+----------------------------------------------------------------------+
+    
+You can run the utility to generate only encryption keys using the command below::
 
-In the following example, the 'keys/' directory will be created at the current path. This binary file can further be used to encrypt factory images created on the per device basis*.::
+    python mfg_gen.py generate-key
 
-    ./mfg_gen.py --keygen true --keyfile encr_keys.bin
+.. note:: Encryption key of the following format ``<outdir>/keys/keys-<timestamp>.bin`` is created. Timestamp format is: ``%m-%d_%H-%M``.
+.. note:: To provide custom target filename use the --keyfile argument.
 
-.. note:: When running the utility to generate encryption keys only, if --keyfile is given, it will generate encryption keys with the filename given in the --keyfile argument.
+Generated encryption key binary file can further be used to encrypt factory images created on the per device basis.
 
 The default numeric value: 1,2,3... of the ``fileid`` argument corresponds to each line bearing device instance values in the master value CSV file.
 
@@ -203,3 +245,4 @@ While running the manufacturing utility, the following folders will be created i
 
 - ``bin/`` for storing the generated binary files
 - ``csv/`` for storing the generated intermediate CSV files
+- ``keys/`` for storing encryption keys (when generating encrypted factory images)
index 9a1df1a465ae62751f6a9204243e1dd9c53f4974..7843c5cdbfa9aef5ff9f16d83a040d32e2b9117e 100755 (executable)
@@ -45,7 +45,7 @@ def verify_values_exist(input_values_file, keys_in_values_file):
     for values_data in values_file_reader:
         line_no += 1
         if len(values_data) != key_count_in_values_file:
-            raise SystemExit("\nOops...Number of values is not equal to number of keys in file: %s at line No:%s\n"
+            raise SystemExit("\nError: Number of values is not equal to number of keys in file: %s at line No:%s\n"
                              % (str(input_values_file), str(line_no)))
 
 
@@ -88,11 +88,11 @@ def verify_datatype_encoding(input_config_file):
     for config_data in config_file_reader:
         line_no += 1
         if config_data[1] not in valid_datatypes:
-            raise SystemExit("Oops...config file: %s has invalid datatype at line no:%s\n`"
+            raise SystemExit("Error: config file: %s has invalid datatype at line no:%s\n`"
                              % (str(input_config_file), str(line_no)))
         if 'namespace' not in config_data:
             if config_data[2] not in valid_encodings:
-                raise SystemExit("Oops...config file: %s has invalid encoding at line no:%s\n`"
+                raise SystemExit("Error: config file: %s has invalid encoding at line no:%s\n`"
                                  % (str(input_config_file), str(line_no)))
 
 
@@ -106,7 +106,7 @@ def verify_file_data_count(input_config_file, keys_repeat):
     for line in config_file_reader:
         line_no += 1
         if len(line) != 3 and line[0] not in keys_repeat:
-            raise SystemExit("Oops...data missing in config file at line no:%s <format needed:key,type,encoding>\n"
+            raise SystemExit("Error: data missing in config file at line no:%s <format needed:key,type,encoding>\n"
                              % str(line_no))
     config_file.close()
 
@@ -134,7 +134,7 @@ def verify_data_in_file(input_config_file, input_values_file, config_file_keys,
 
     except Exception as err:
         print(err)
-        raise
+        exit(1)
 
 
 def get_keys(keys_in_values_file, config_file_keys):
@@ -226,14 +226,13 @@ def add_data_to_file(config_data_to_write, key_value_pair, output_csv_file):
 
     # Set index to start of file
     target_csv_file.seek(0)
-
     target_csv_file.close()
 
 
 def create_dir(filetype, output_dir_path):
     """ Create new directory(if doesn't exist) to store file generated
     """
-    output_target_dir = output_dir_path + filetype
+    output_target_dir = os.path.join(output_dir_path,filetype,'')
     if not os.path.isdir(output_target_dir):
         distutils.dir_util.mkpath(output_target_dir)
 
@@ -272,152 +271,116 @@ def set_repeat_value(total_keys_repeat, keys, csv_file, target_filename):
     return target_filename
 
 
-def main(input_config_file=None,input_values_file=None,target_file_name_prefix=None,
-         file_identifier=None,output_dir_path=None,part_size=None,input_version=None,
-         input_is_keygen=None,input_is_encrypt=None,input_is_keyfile=None):
+def create_intermediate_csv(args, keys_in_config_file, keys_in_values_file, keys_repeat, is_encr=False):
+    file_identifier_value = '0'
+    csv_str = 'csv'
+    bin_str = 'bin'
+    set_output_keyfile = False
+
+    # Add config data per namespace to `config_data_to_write` list
+    config_data_to_write = add_config_data_per_namespace(args.conf)
+
     try:
-        if all(arg is None for arg in [input_config_file,input_values_file,target_file_name_prefix,
-                                       file_identifier,output_dir_path]):
-            parser = argparse.ArgumentParser(prog='./mfg_gen.py',
-                                             description="Create binary files from input config and values file",
-                                             formatter_class=argparse.RawDescriptionHelpFormatter)
-
-            parser.add_argument('--conf',
-                                dest='config_file',
-                                help='the input configuration csv file',
-                                default=None)
-
-            parser.add_argument('--values',
-                                dest='values_file',
-                                help='the input values csv file',
-                                default=None)
-
-            parser.add_argument('--prefix',
-                                dest='prefix',
-                                help='the unique name as each filename prefix')
-
-            parser.add_argument('--fileid',
-                                dest='fileid',
-                                help='the unique file identifier(any key in values file) \
-                                as each filename suffix (Default: numeric value(1,2,3...)')
-
-            parser.add_argument('--outdir',
-                                dest='outdir',
-                                default=os.getcwd(),
-                                help='the output directory to store the files created\
-                                (Default: current directory)')
-
-            parser.add_argument("--size",
-                                dest='part_size',
-                                help='Size of NVS Partition in bytes (must be multiple of 4096)')
-
-            parser.add_argument("--version",
-                                dest="version",
-                                help='Set version. Default: v2',
-                                choices=['v1','v2'],
-                                default='v2',
-                                type=str.lower)
-
-            parser.add_argument("--keygen",
-                                dest="keygen",
-                                help='Generate keys for encryption. Default: false',
-                                choices=['true','false'],
-                                default='false',
-                                type=str.lower)
-
-            parser.add_argument("--encrypt",
-                                dest="encrypt",
-                                help='Set encryption mode. Default: false',
-                                choices=['true','false'],
-                                default='false',
-                                type=str.lower)
-
-            parser.add_argument("--keyfile",
-                                dest="keyfile",
-                                help='File having key for encryption (Applicable only if encryption mode is true)',
-                                default=None)
-
-            args = parser.parse_args()
-
-            args.outdir = os.path.join(args.outdir, '')
-
-            input_config_file = args.config_file
-            input_values_file = args.values_file
-            target_file_name_prefix = args.prefix
-            output_dir_path = args.outdir
-            part_size = args.part_size
-            input_version = args.version
-            input_is_keygen = args.keygen
-            input_is_encrypt = args.encrypt
-            input_is_keyfile = args.keyfile
-            file_identifier = ''
-            print_arg_str = "Invalid.\nTo generate binary --conf, --values, --prefix and --size arguments are mandatory.\
-            \nTo generate encryption keys --keygen argument is mandatory."
-            print_encrypt_arg_str = "Missing parameter. Enter --keygen or --keyfile."
-
-            if args.fileid:
-                file_identifier = args.fileid
-
-            if input_config_file and input_is_encrypt.lower() == 'true' and input_is_keygen.lower() == 'true' and input_is_keyfile:
-                sys.exit('Invalid. Cannot provide both --keygen and --keyfile argument together.')
-
-            nvs_partition_gen.check_input_args(input_config_file, input_values_file, part_size, input_is_keygen,
-                                               input_is_encrypt, input_is_keyfile, input_version, print_arg_str,
-                                               print_encrypt_arg_str, output_dir_path)
-
-            if not input_config_file and input_is_keygen:
-                if input_is_encrypt == 'true':
-                    sys.exit("Invalid.\nOnly --keyfile and --outdir arguments allowed.\n")
-                # Generate Key Only
-                nvs_partition_gen.nvs_part_gen(input_filename=input_config_file, output_filename=input_values_file,
-                                               input_part_size=part_size, is_key_gen=input_is_keygen,
-                                               encrypt_mode=input_is_encrypt, key_file=input_is_keyfile,
-                                               version_no=input_version, output_dir=output_dir_path)
-                exit(0)
-
-            if not (input_config_file and input_values_file and target_file_name_prefix and part_size):
-                sys.exit(print_arg_str)
-
-        keys_in_values_file = []
-        keys_in_config_file = []
-        config_data_to_write = []
-        key_value_data = []
-        csv_file_list = []
-        keys_repeat = []
-        is_empty_line = False
-        files_created = False
-        file_identifier_value = '0'
-        output_target_dir = ''
-        target_values_file = None
-        output_file_prefix = None
-
-        # Verify config file is not empty
-        if os.stat(input_config_file).st_size == 0:
-            raise SystemExit("Oops...config file: %s is empty." % input_config_file)
-
-        # Verify values file is not empty
-        if os.stat(input_values_file).st_size == 0:
-            raise SystemExit("Oops...values file: %s is empty." % input_values_file)
-
-        # Verify config file does not have empty lines
-        csv_config_file = open(input_config_file,'r')
-        try:
-            config_file_reader = csv.reader(csv_config_file, delimiter=',')
-            for config_data in config_file_reader:
-                for data in config_data:
-                    empty_line = data.strip()
-                    if empty_line is '':
-                        is_empty_line = True
-                    else:
-                        is_empty_line = False
-                        break
-                if is_empty_line:
-                    raise SystemExit("Oops...config file: %s cannot have empty lines. " % input_config_file)
-                if not config_data:
-                    raise SystemExit("Oops...config file: %s cannot have empty lines." % input_config_file)
-
-            csv_config_file.seek(0)
+        with open(args.values, 'r') as csv_values_file:
+            values_file_reader = csv.reader(csv_values_file, delimiter=',')
+            keys = next(values_file_reader)
+
+        filename, file_ext = os.path.splitext(args.values)
+        target_filename = filename + "_created" + file_ext
+        if keys_repeat:
+            target_values_file = set_repeat_value(keys_repeat, keys, args.values, target_filename)
+        else:
+            target_values_file = args.values
+
+        csv_values_file = open(target_values_file, 'r')
+
+        values_file_reader = csv.reader(csv_values_file, delimiter=',')
+        next(values_file_reader)
+
+        # Create new directory(if doesn't exist) to store csv file generated
+        output_csv_target_dir = create_dir(csv_str, args.outdir)
+        # Create new directory(if doesn't exist) to store bin file generated
+        output_bin_target_dir = create_dir(bin_str, args.outdir)
+        if args.keygen:
+            set_output_keyfile = True
+
+        for values_data_line in values_file_reader:
+            key_value_data = list(zip_longest(keys_in_values_file, values_data_line))
+
+            # Get file identifier value from values file
+            file_identifier_value = get_fileid_val(args.fileid, keys_in_config_file,
+                                                   keys_in_values_file, values_data_line, key_value_data,
+                                                   file_identifier_value)
+
+            key_value_pair = key_value_data[:]
+
+            # Verify if output csv file does not exist
+            csv_filename = args.prefix + "-" + file_identifier_value + "." + csv_str
+            output_csv_file = output_csv_target_dir + csv_filename
+            if os.path.isfile(output_csv_file):
+                raise SystemExit("Target csv file: %s already exists.`" % output_csv_file)
+
+            # Add values corresponding to each key to csv intermediate file
+            add_data_to_file(config_data_to_write, key_value_pair, output_csv_file)
+            print("\nCreated CSV file: ===>", output_csv_file)
+
+            # Verify if output bin file does not exist
+            bin_filename = args.prefix + "-" + file_identifier_value + "." + bin_str
+            output_bin_file = output_bin_target_dir + bin_filename
+            if os.path.isfile(output_bin_file):
+                raise SystemExit("Target binary file: %s already exists.`" % output_bin_file)
+
+            args.input = output_csv_file
+            args.output = os.path.join(bin_str, bin_filename)
+            if set_output_keyfile:
+                args.keyfile = "keys-" + args.prefix + "-" + file_identifier_value
+
+            if is_encr:
+                nvs_partition_gen.encrypt(args)
+            else:
+                nvs_partition_gen.generate(args)
+
+        print("\nFiles generated in %s ..." % args.outdir)
+
+    except Exception as e:
+        print(e)
+        exit(1)
+    finally:
+        csv_values_file.close()
 
+
+def verify_empty_lines_exist(args, input_file):
+    input_file_reader = csv.reader(input_file, delimiter=',')
+    for file_data in input_file_reader:
+        for data in file_data:
+            if len(data.strip()) == 0:
+                raise SystemExit("Error: config file: %s cannot have empty lines. " % args.conf)
+            else:
+                break
+        if not file_data:
+            raise SystemExit("Error: config file: %s cannot have empty lines." % args.conf)
+
+    input_file.seek(0)
+    return input_file_reader
+
+
+def verify_file_format(args):
+    keys_in_config_file = []
+    keys_in_values_file = []
+    keys_repeat = []
+
+    # Verify config file is not empty
+    if os.stat(args.conf).st_size == 0:
+        raise SystemExit("Error: config file: %s is empty." % args.conf)
+
+    # Verify values file is not empty
+    if os.stat(args.values).st_size == 0:
+        raise SystemExit("Error: values file: %s is empty." % args.values)
+
+    # Verify config file does not have empty lines
+    with open(args.conf, 'r') as csv_config_file:
+        try:
+            config_file_reader = verify_empty_lines_exist(args, csv_config_file)
             # Extract keys from config file
             for config_data in config_file_reader:
                 if 'namespace' not in config_data:
@@ -425,124 +388,130 @@ def main(input_config_file=None,input_values_file=None,target_file_name_prefix=N
                 if 'REPEAT' in config_data:
                     keys_repeat.append(config_data[0])
 
-            csv_config_file.close()
         except Exception as e:
             print(e)
-        finally:
-            csv_config_file.close()
 
-        is_empty_line = False
-        # Verify values file does not have empty lines
-        csv_values_file = open(input_values_file, 'r')
+    # Verify values file does not have empty lines
+    with open(args.values, 'r') as csv_values_file:
         try:
-            values_file_reader = csv.reader(csv_values_file, delimiter=',')
-            for values_data in values_file_reader:
-                for data in values_data:
-                    empty_line = data.strip()
-                    if empty_line is '':
-                        is_empty_line = True
-                    else:
-                        is_empty_line = False
-                        break
-                if is_empty_line:
-                    raise SystemExit("Oops...values file: %s cannot have empty lines." % input_values_file)
-                if not values_data:
-                    raise SystemExit("Oops...values file: %s cannot have empty lines." % input_values_file)
-
-            csv_values_file.seek(0)
-
+            values_file_reader = verify_empty_lines_exist(args, csv_values_file)
             # Extract keys from values file
             keys_in_values_file = next(values_file_reader)
 
-            csv_values_file.close()
         except Exception as e:
             print(e)
-            exit(1)
-        finally:
-            csv_values_file.close()
 
-        # Verify file identifier exists in values file
-        if file_identifier:
-            if file_identifier not in keys_in_values_file:
-                raise SystemExit('Oops...target_file_identifier: %s does not exist in values file.\n' % file_identifier)
+    # Verify file identifier exists in values file
+    if args.fileid:
+        if args.fileid not in keys_in_values_file:
+            raise SystemExit('Error: target_file_identifier: %s does not exist in values file.\n' % args.fileid)
+    else:
+        args.fileid = 1
 
-        # Verify data in the input_config_file and input_values_file
-        verify_data_in_file(input_config_file, input_values_file, keys_in_config_file,
-                            keys_in_values_file, keys_repeat)
+    return keys_in_config_file, keys_in_values_file, keys_repeat
 
-        # Add config data per namespace to `config_data_to_write` list
-        config_data_to_write = add_config_data_per_namespace(input_config_file)
 
-        try:
-            with open(input_values_file, 'r') as csv_values_file:
-                values_file_reader = csv.reader(csv_values_file, delimiter=',')
-                keys = next(values_file_reader)
-
-            filename, file_ext = os.path.splitext(input_values_file)
-            target_filename = filename + "_created" + file_ext
-            if keys_repeat:
-                target_values_file = set_repeat_value(keys_repeat, keys, input_values_file, target_filename)
-            else:
-                target_values_file = input_values_file
+def generate(args):
+    keys_in_config_file = []
+    keys_in_values_file = []
+    keys_repeat = []
+    encryption_enabled = False
 
-            csv_values_file = open(target_values_file, 'r')
+    args.outdir = os.path.join(args.outdir, '')
+    # Verify input config and values file format
+    keys_in_config_file, keys_in_values_file, keys_repeat = verify_file_format(args)
 
-            values_file_reader = csv.reader(csv_values_file, delimiter=',')
-            next(values_file_reader)
-            for values_data_line in values_file_reader:
-                key_value_data = list(zip_longest(keys_in_values_file,values_data_line))
-
-                # Get file identifier value from values file
-                file_identifier_value = get_fileid_val(file_identifier, keys_in_config_file,
-                                                       keys_in_values_file, values_data_line, key_value_data, file_identifier_value)
-
-                key_value_pair = key_value_data[:]
-
-                # Create new directory(if doesn't exist) to store csv file generated
-                output_target_dir = create_dir("csv/", output_dir_path)
-
-                # Verify if output csv file does not exist
-                csv_filename = target_file_name_prefix + "-" + file_identifier_value + ".csv"
-                csv_file_list.append(csv_filename)
-                output_csv_file = output_target_dir + csv_filename
-                if os.path.isfile(output_csv_file):
-                    raise SystemExit("Target csv file: %s already exists.`" % output_csv_file)
-
-                # Add values corresponding to each key to csv target file
-                add_data_to_file(config_data_to_write, key_value_pair, output_csv_file)
-
-                # Create new directory(if doesn't exist) to store bin file generated
-                output_target_dir = create_dir("bin/", output_dir_path)
-
-                # Verify if output bin file does not exist
-                output_file_prefix = target_file_name_prefix + "-" + file_identifier_value
-                output_bin_file = output_target_dir + output_file_prefix + ".bin"
-                if os.path.isfile(output_bin_file):
-                    raise SystemExit("Target csv file: %s already exists.`" % output_bin_file)
-
-                # Create output csv and bin file
-                if input_is_keygen.lower() == 'true' and input_is_keyfile:
-                    input_is_keyfile = os.path.basename(input_is_keyfile)
-                nvs_partition_gen.nvs_part_gen(input_filename=output_csv_file, output_filename=output_bin_file,
-                                               input_part_size=part_size, is_key_gen=input_is_keygen,
-                                               encrypt_mode=input_is_encrypt, key_file=input_is_keyfile,
-                                               version_no=input_version, encr_key_prefix=output_file_prefix, output_dir=output_dir_path)
-                print("CSV Generated: ", str(output_csv_file))
-
-                files_created = True
-
-            csv_values_file.close()
-        except Exception as e:
-            print(e)
-            exit(1)
-        finally:
-            csv_values_file.close()
-        return csv_file_list, files_created, target_values_file
+    # Verify data in the input_config_file and input_values_file
+    verify_data_in_file(args.conf, args.values, keys_in_config_file,
+                        keys_in_values_file, keys_repeat)
+
+    if (args.keygen or args.inputkey):
+        encryption_enabled = True
+        print("\nGenerating encrypted NVS binary images...")
+    # Create intermediate csv file
+    create_intermediate_csv(args, keys_in_config_file, keys_in_values_file,
+                            keys_repeat, is_encr=encryption_enabled)
+
+
+def generate_key(args):
+    nvs_partition_gen.generate_key(args)
+
+
+def main():
+    try:
+        parser = argparse.ArgumentParser(description="\nESP Manufacturing Utility", formatter_class=argparse.RawTextHelpFormatter)
+        subparser = parser.add_subparsers(title='Commands',
+                                          dest='command',
+                                          help='\nRun mfg_gen.py {command} -h for additional help\n\n')
+
+        parser_gen = subparser.add_parser('generate',
+                                          help='Generate NVS partition',
+                                          formatter_class=argparse.RawTextHelpFormatter)
+        parser_gen.set_defaults(func=generate)
+        parser_gen.add_argument('conf',
+                                default=None,
+                                help='Path to configuration csv file to parse')
+        parser_gen.add_argument('values',
+                                default=None,
+                                help='Path to values csv file to parse')
+        parser_gen.add_argument('prefix',
+                                default=None,
+                                help='Unique name for each output filename prefix')
+        parser_gen.add_argument('size',
+                                default=None,
+                                help='Size of NVS partition in bytes\
+                                    \n(must be multiple of 4096)')
+        parser_gen.add_argument('--fileid',
+                                default=None,
+                                help='''Unique file identifier(any key in values file) \
+                                    \nfor each filename suffix (Default: numeric value(1,2,3...)''')
+        parser_gen.add_argument('--version',
+                                choices=[1, 2],
+                                default=2,
+                                type=int,
+                                help='''Set multipage blob version.\
+                                    \nVersion 1 - Multipage blob support disabled.\
+                                    \nVersion 2 - Multipage blob support enabled.\
+                                    \nDefault: Version 2 ''')
+        parser_gen.add_argument('--keygen',
+                                action="store_true",
+                                default=False,
+                                help='Generates key for encrypting NVS partition')
+        parser_gen.add_argument('--keyfile',
+                                default=None,
+                                help=argparse.SUPPRESS)
+        parser_gen.add_argument('--inputkey',
+                                default=None,
+                                help='File having key for encrypting NVS partition')
+        parser_gen.add_argument('--outdir',
+                                default=os.getcwd(),
+                                help='Output directory to store files created\
+                                    \n(Default: current directory)')
+        parser_gen.add_argument('--input',
+                                default=None,
+                                help=argparse.SUPPRESS)
+        parser_gen.add_argument('--output',
+                                default=None,
+                                help=argparse.SUPPRESS)
+        parser_gen_key = subparser.add_parser('generate-key',
+                                              help='Generate keys for encryption',
+                                              formatter_class=argparse.RawTextHelpFormatter)
+        parser_gen_key.set_defaults(func=generate_key)
+        parser_gen_key.add_argument('--keyfile',
+                                    default=None,
+                                    help='Path to output encryption keys file')
+        parser_gen_key.add_argument('--outdir',
+                                    default=os.getcwd(),
+                                    help='Output directory to store files created.\
+                                        \n(Default: current directory)')
+
+        args = parser.parse_args()
+        args.func(args)
 
     except ValueError as err:
         print(err)
-    except Exception:
-        raise
+    except Exception as e:
+        print(e)
 
 
 if __name__ == "__main__":
diff --git a/tools/set-submodules-to-github.sh b/tools/set-submodules-to-github.sh
new file mode 100755 (executable)
index 0000000..5495fb4
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Explicitly switches the relative submodules locations on GitHub to the original public URLs
+#
+#       '../../group/repo.git' to 'https://github.com/group/repo.git'
+#
+# This can be useful for non-GitHub forks to automate getting of right submodules sources.
+#
+
+#
+# It makes sense to do
+#
+#       git submodule deinit --force .
+#       git submodule init
+#
+# before running this, and
+#
+#       git submodule update --recursive
+#
+# after that. These were not included over this script deliberately, to use the script flexibly
+#
+
+set -o errexit
+set -o pipefail
+set -o nounset
+
+DEBUG_SHELL=${DEBUG_SHELL:-"0"}
+[ "${DEBUG_SHELL}" = "1" ] && set -x
+
+### '../../' relative locations
+
+for LINE in $(git config -f .gitmodules --list | grep "\.url=../../[^.]")
+do
+    SUBPATH=$(echo "${LINE}" | sed "s|^submodule\.\([^.]*\)\.url.*$|\1|")
+    LOCATION=$(echo "${LINE}" | sed 's|.*\.url=\.\./\.\./\(.*\)$|\1|')
+    SUBURL="https://github.com/$LOCATION"
+
+    git config submodule."${SUBPATH}".url "${SUBURL}"
+done
+
+git config --get-regexp '^submodule\..*\.url$'