From fa3e4103abd1a0d8af787cf79b757797a86bedd1 Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:11:32 +0100 Subject: [PATCH 1/6] docs: Hyperlinks to guides --- CONTRIBUTING.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 968826790..5810d06b9 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -15,7 +15,9 @@ Before sending us a Pull Request, please consider this list of points: * Is the contribution entirely your own work, or already licensed under an Apache License 2.0 compatible Open Source License? If not then we unfortunately cannot accept it. -* Does any new code conform to the esp-idf Style Guide? (Style Guide currently pending). +* Does any new code conform to the esp-idf :doc:`Style Guide `? + +* Does the code documentation follow requirements in :doc:`documenting-code`? * Is the code adequately commented for people to understand how it is structured? From 4e9e8f52acdba97d7f10d16ba440904d9c709425 Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:13:18 +0100 Subject: [PATCH 2/6] doc: Documenting Code clean up --- .../_static/doc-code-documentation-inline.png | Bin 52513 -> 52554 bytes docs/documenting-code.rst | 121 +++++++++--------- 2 files changed, 57 insertions(+), 64 deletions(-) diff --git a/docs/_static/doc-code-documentation-inline.png b/docs/_static/doc-code-documentation-inline.png index 72bf22f156224e4e32e7934828ccc73f15cea67e..9de5d51a2bd0c0fca7f0cb53b8b0a6c3ff9ed38c 100644 GIT binary patch delta 14525 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 Ryg_-RB&Q}@BW)h?{{d_m+xP$g delta 14441 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 T@vzEQFV_bd73nHTv%voYSvlc& diff --git a/docs/documenting-code.rst b/docs/documenting-code.rst index 72e3cea14..a73e26de4 100644 --- a/docs/documenting-code.rst +++ b/docs/documenting-code.rst @@ -40,98 +40,91 @@ Go for it! When writing code for this repository, please follow guidelines below. - 1. Document all building blocks of code: functions, structs, typedefs, enums, macros, etc. Provide enough information on purpose, functionality and limitations of documented items, as you would like to see them documented when reading the code by others. +1. Document all building blocks of code: functions, structs, typedefs, enums, macros, etc. Provide enough information on purpose, functionality and limitations of documented items, as you would like to see them documented when reading the code by others. - 2. Documentation of function should describe what this function does. If it accepts input parameters and returns some value, all of them should be explained. +2. Documentation of function should describe what this function does. If it accepts input parameters and returns some value, all of them should be explained. - 3. Do not add a data type before parameter or any other characters besides spaces. All spaces and line breaks are compressed into a single space. If you like to break a line, then break it twice. +3. Do not add a data type before parameter or any other characters besides spaces. All spaces and line breaks are compressed into a single space. If you like to break a line, then break it twice. - .. image:: _static/doc-code-function.png - :align: center - :alt: Sample function documented inline and after rendering + .. image:: _static/doc-code-function.png + :align: center + :alt: Sample function documented inline and after rendering - 4. If function has void input or does not return any value, then skip ``@param`` or ``@return`` +4. If function has void input or does not return any value, then skip ``@param`` or ``@return`` - .. image:: _static/doc-code-void-function.png - :align: center - :alt: Sample void function documented inline and after rendering + .. image:: _static/doc-code-void-function.png + :align: center + :alt: Sample void function documented inline and after rendering - 5. When documenting members of a ``struct``, ``typedef`` or ``enum``, place specific comment like below after each member. +5. When documenting a ``define`` as well as members of a ``struct`` or ``enum``, place specific comment like below after each member. - .. image:: _static/doc-code-member.png - :align: center - :alt: Sample of member documentation inline and after rendering + .. image:: _static/doc-code-member.png + :align: center + :alt: Sample of member documentation inline and after rendering + + +6. To provide well formatted lists, break the line after command (like ``@return`` in example below). + + :: + + * + * @return + * - ESP_OK if erase operation was successful + * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL + * - ESP_ERR_NVS_READ_ONLY if handle was opened as read only + * - ESP_ERR_NVS_NOT_FOUND if the requested key doesn't exist + * - other error codes from the underlying storage driver + * - 6. To provide well formatted lists, break the line after command (like ``@return`` in example below). - - .. code-block:: c - - ... - * - * @return - * - ESP_OK if erase operation was successful - * - ESP_ERR_NVS_INVALID_HANDLE if handle has been closed or is NULL - * - ESP_ERR_NVS_READ_ONLY if handle was opened as read only - * - ESP_ERR_NVS_NOT_FOUND if the requested key doesn't exist - * - other error codes from the underlying storage driver - * - ... - - 7. Overview of functionality of documented header file, or group of files that make a library, should be placed in the same directory in a separate ``README.rst`` file. If directory contains header files for different APIs, then the file name should be ``apiname-readme.rst``. +7. Overview of functionality of documented header file, or group of files that make a library, should be placed in the same directory in a separate ``README.rst`` file. If directory contains header files for different APIs, then the file name should be ``apiname-readme.rst``. Go one extra mile ----------------- There is couple of tips, how you can make your documentation even better and more useful to the reader. - 1. Add code snippets to illustrate implementation. To do so, enclose snippet using ``@code{c}`` and ``@endcode`` commands. +1. Add code snippets to illustrate implementation. To do so, enclose snippet using ``@code{c}`` and ``@endcode`` commands. - .. code-block:: c + :: - ... - * - * @code{c} - * // Example of using nvs_get_i32: - * int32_t max_buffer_size = 4096; // default value - * esp_err_t err = nvs_get_i32(my_handle, "max_buffer_size", &max_buffer_size); - * assert(err == ESP_OK || err == ESP_ERR_NVS_NOT_FOUND); - * // if ESP_ERR_NVS_NOT_FOUND was returned, max_buffer_size will still - * // have its default value. - * @endcode - * - ... + * + * @code{c} + * // Example of using nvs_get_i32: + * int32_t max_buffer_size = 4096; // default value + * esp_err_t err = nvs_get_i32(my_handle, "max_buffer_size", &max_buffer_size); + * assert(err == ESP_OK || err == ESP_ERR_NVS_NOT_FOUND); + * // if ESP_ERR_NVS_NOT_FOUND was returned, max_buffer_size will still + * // have its default value. + * @endcode + * - The code snippet should be enclosed in a comment block of the function that it illustrates. + The code snippet should be enclosed in a comment block of the function that it illustrates. - 2. To highlight some important information use command ``@attention`` or ``@note``. +2. To highlight some important information use command ``@attention`` or ``@note``. - .. code-block:: c + :: - ... - * - * @attention - * 1. This API only impact WIFI_MODE_STA or WIFI_MODE_APSTA mode - * 2. If the ESP32 is connected to an AP, call esp_wifi_disconnect to disconnect. - * - ... + * + * @attention + * 1. This API only impact WIFI_MODE_STA or WIFI_MODE_APSTA mode + * 2. If the ESP32 is connected to an AP, call esp_wifi_disconnect to disconnect. + * - Above example also shows how to use a numbered list. + Above example also shows how to use a numbered list. - 3. Use markdown to make your documentation even more readable. You will add headers, links, tables and more. +3. Use markdown to make your documentation even more readable. You will add headers, links, tables and more. - .. code-block:: c + :: - ... - * - * [ESP32 Technical Reference](http://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf) - * - ... + * + * [ESP32 Technical Reference](http://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf) + * - .. note:: +.. note:: Code snippets, notes, links, etc. will not make it to the documentation, if not enclosed in a comment block associated with one of documented objects. - 5. Prepare one or more complete code examples together with description. Place them in a separate file ``example.rst`` in the same directory as the API header files. If directory contains header files for different APIs, then the file name should be ``apiname-example.rst``. +5. Prepare one or more complete code examples together with description. Place them in a separate file ``example.rst`` in the same directory as the API header files. If directory contains header files for different APIs, then the file name should be ``apiname-example.rst``. Put it all together ------------------- From bf61f6de55a2d637e7fa6805bfa2736e15f982d8 Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:14:48 +0100 Subject: [PATCH 3/6] doc: API Reference - examples & fixes --- docs/api/bt.rst | 11 +++++++---- docs/api/ledc.rst | 3 +++ docs/api/nvs_flash.rst | 19 +++++++++++++++++-- docs/api/vfs.rst | 1 + 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/docs/api/bt.rst b/docs/api/bt.rst index 0ab17b2aa..1824bc454 100644 --- a/docs/api/bt.rst +++ b/docs/api/bt.rst @@ -9,15 +9,19 @@ Overview Application Example ------------------- -`Instructions`_ +Check `/examples `_ folder of `espressif/esp-idf `_ repository, that contains the following example: -API Reference -------------- +`05_ble_adv `_ + + This is a BLE advertising demo with virtual HCI interface. Send Reset/ADV_PARAM/ADV_DATA/ADV_ENABLE HCI command for BLE advertising. `Instructions`_ .. _Instructions: template.html +API Reference +------------- + Header Files ^^^^^^^^^^^^ @@ -35,4 +39,3 @@ Functions .. doxygenfunction:: API_vhci_host_register_callback .. doxygenfunction:: API_vhci_host_send_packet .. doxygenfunction:: bt_controller_init - diff --git a/docs/api/ledc.rst b/docs/api/ledc.rst index f379e9d00..855f82216 100644 --- a/docs/api/ledc.rst +++ b/docs/api/ledc.rst @@ -27,7 +27,10 @@ Data Structures ^^^^^^^^^^^^^^^ .. doxygenstruct:: ledc_channel_config_t + :members: + .. doxygenstruct:: ledc_timer_config_t + :members: Macros ^^^^^^ diff --git a/docs/api/nvs_flash.rst b/docs/api/nvs_flash.rst index 5d3634355..a765f7608 100644 --- a/docs/api/nvs_flash.rst +++ b/docs/api/nvs_flash.rst @@ -5,8 +5,23 @@ Application Example Two examples are provided in ESP-IDF examples directory: -- `07_nvs_rw_value `_ demostrates how to read and write integer values -- `08_nvs_rw_blob `_ demostrates how to read and write variable length binary values +`07_nvs_rw_value `_ + + Demonstrates how to read and write a single integer value using NVS. + + The value holds the number of ESP32 module restarts. Since it is written to NVS, the value is preserved between restarts. + + Example also shows how to check if read / write operation was successful, or certain value is not initialized in NVS. Diagnostic is provided in plain text to help track program flow and capture any issues on the way. + +`08_nvs_rw_blob `_ + + Demonstrates how to read and write a single integer value and a blob (binary large object) using NVS to preserve them between ESP32 module restarts. + + * value - tracks number of ESP32 module soft and hard restarts. + * blob - contains a table with module run times. The table is read from NVS to dynamically allocated RAM. New run time is added to the table on each manually triggered soft restart and written back to NVS. Triggering is done by pulling down GPIO0. + + Example also shows how to implement diagnostics if read / write operation was successful. + API Reference ------------- diff --git a/docs/api/vfs.rst b/docs/api/vfs.rst index df6cd03f6..798aac549 100644 --- a/docs/api/vfs.rst +++ b/docs/api/vfs.rst @@ -25,6 +25,7 @@ Structures ^^^^^^^^^^ .. doxygenstruct:: esp_vfs_t + :members: Functions ^^^^^^^^^ From a86c431f981cb20031997c95352232d49865a5dd Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:16:47 +0100 Subject: [PATCH 4/6] doc: Formating clean up --- docs/build_system.rst | 15 ++++++++++----- docs/security/secure-boot.rst | 8 ++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/docs/build_system.rst b/docs/build_system.rst index aa14cdda5..4ba89f865 100644 --- a/docs/build_system.rst +++ b/docs/build_system.rst @@ -57,6 +57,7 @@ Example Project --------------- An example project directory tree might look like this:: + - myProject/ - Makefile - sdkconfig @@ -66,11 +67,11 @@ An example project directory tree might look like this:: - component2/ - component.mk - Kconfig - src1.c - - include/ - - component2.h + - include/ - component2.h - main/ - src1.c - src2.c - component.mk + - build/ This example "myProject" contains the following elements: @@ -101,6 +102,7 @@ Minimal Example Makefile ^^^^^^^^^^^^^^^^^^^^^^^^ :: + PROJECT_NAME := myProject include $(IDF_PATH)/make/project.mk @@ -135,7 +137,8 @@ Minimal Component Makefile ^^^^^^^^^^^^^^^^^^^^^^^^^^ The minimal ``component.mk`` file is an empty file(!). If the file is empty, the default component behaviour is set: -- All source files in the same directory as the makefile (*.c, *.cpp, *.S) will be compiled into the component library + +- All source files in the same directory as the makefile (``*.c``, ``*.cpp``, ``*.S``) will be compiled into the component library - A sub-directory "include" will be added to the global include search path for all other components. - The component library will be linked into the project app. @@ -209,8 +212,8 @@ The following variables can be set inside ``component.mk`` to control the build ``COMPONENT_PRIV_INCLUDEDIRS`` variable, except these paths are not expanded relative to the component directory. - ``COMPONENT_SRCDIRS``: Directory paths, must be relative to the - component directory, which will be searched for source files (*.cpp, - *.c, *.S). Defaults to '.', ie the component directory + component directory, which will be searched for source files (``*.cpp``, + ``*.c``, ``*.S``). Defaults to '.', ie the component directory itself. Override this to specify a different list of directories which contain source files. - ``COMPONENT_OBJS``: Object files to compile. Default value is a .o @@ -366,12 +369,14 @@ The configuration system can be used to conditionally compile some files depending on the options selected in ``make menuconfig``: ``Kconfig``:: + config FOO_ENABLE_BAR bool "Enable the BAR feature." help This enables the BAR feature of the FOO component. ``component.mk``:: + COMPONENT_OBJS := foo_a.o foo_b.o ifdef CONFIG_FOO_BAR diff --git a/docs/security/secure-boot.rst b/docs/security/secure-boot.rst index b352b3964..113d25090 100644 --- a/docs/security/secure-boot.rst +++ b/docs/security/secure-boot.rst @@ -27,18 +27,18 @@ This is a high level overview of the secure boot process. Step by step instructi 2. Secure Boot Configuration includes "Secure boot signing key", which is a file path. This file is a ECDSA public/private key pair in a PEM format file. -2. The software bootloader image is built by esp-idf with secure boot support enabled and the public key (signature verification) portion of the secure boot signing key compiled in. This software bootloader image is flashed at offset 0x1000. +3. The software bootloader image is built by esp-idf with secure boot support enabled and the public key (signature verification) portion of the secure boot signing key compiled in. This software bootloader image is flashed at offset 0x1000. -3. On first boot, the software bootloader follows the following process to enable secure boot: +4. On first boot, the software bootloader follows the following process to enable secure boot: - Hardware secure boot support generates a device secure bootloader key (generated via hardware RNG, then stored read/write protected in efuse), and a secure digest. The digest is derived from the key, an IV, and the bootloader image contents. - The secure digest is flashed at offset 0x0 in the flash. - Depending on Secure Boot Configuration, efuses are burned to disable JTAG and the ROM BASIC interpreter (it is strongly recommended these options are turned on.) - Bootloader permanently enables secure boot by burning the ABS_DONE_0 efuse. The software bootloader then becomes protected (the chip will only boot a bootloader image if the digest matches.) -4. On subsequent boots the ROM bootloader sees that the secure boot efuse is burned, reads the saved digest at 0x0 and uses hardware secure boot support to compare it with a newly calculated digest. If the digest does not match then booting will not continue. The digest and comparison are performed entirely by hardware, and the calculated digest is not readable by software. For technical details see `Hardware Secure Boot Support`. +5. On subsequent boots the ROM bootloader sees that the secure boot efuse is burned, reads the saved digest at 0x0 and uses hardware secure boot support to compare it with a newly calculated digest. If the digest does not match then booting will not continue. The digest and comparison are performed entirely by hardware, and the calculated digest is not readable by software. For technical details see `Hardware Secure Boot Support`. -5. When running in secure boot mode, the software bootloader uses the secure boot signing key (the public key of which is embedded in the bootloader itself, and therefore validated as part of the bootloader) to verify the signature appended to all subsequent partition tables and app images before they are booted. +6. When running in secure boot mode, the software bootloader uses the secure boot signing key (the public key of which is embedded in the bootloader itself, and therefore validated as part of the bootloader) to verify the signature appended to all subsequent partition tables and app images before they are booted. Keys ---- From dd0585e84e6e28039131bc227b1b0010eeeea28a Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:17:44 +0100 Subject: [PATCH 5/6] doc: Index clean up --- docs/index.rst | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 8bc7a72f2..adf07b586 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,6 +5,9 @@ ESP32 Programming Guide Until ESP-IDF release 1.0, this documentation is a draft. It is incomplete and may have mistakes. Please mind your step! +Documentation adressed to developers of applications for `ESP32 `_ by `Espressif `_ using `esp-idf `_. + + Contents: .. toctree:: @@ -41,7 +44,7 @@ Contents: 1. System - TBA 1.1. Fundamentals of multiprocessor programming with FreeRTOS - TBA 1.2. Application startup flow - TBA - 1.3. Flash encryption and secure boot: how they work and APIs - TBA + 1.3. Flash encryption and secure boot: how they work and APIs 1.4. Lower Power Coprocessor - TBA 1.5. Watchdogs 1.6. ... @@ -61,7 +64,7 @@ Contents: 6.1. GPIO 6.2. ADC - TBA 6.3. DAC - TBA - 6.4. UART - TBA + 6.4. UART 6.5. I2C - TBA 6.6. I2S - TBA 6.7. SPI - TBA @@ -78,9 +81,9 @@ Contents: 7.3. Touch Sensor - TBA 8. Protocols - TBA 9. Components - 9.1. Logging - 9.2 Non-Volatile Storage - 9.3 Virtual Filesystem + 9.1. Logging + 9.2 Non-Volatile Storage + 9.3 Virtual Filesystem 9.3. Http sever - TBA 10. Applications - TBA .. @@ -128,11 +131,9 @@ Contents: COPYRIGHT -.. About - TBA - Indices -======= +------- * :ref:`genindex` * :ref:`search` From d4b5bd347da854a79bee24a3ee88741fcca4a362 Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Wed, 16 Nov 2016 20:27:55 +0100 Subject: [PATCH 6/6] Doxygen configuration clean up --- docs/Doxyfile | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/docs/Doxyfile b/docs/Doxyfile index 1f53a8593..eeb4fe740 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -1,3 +1,18 @@ +# This is Doxygen configuration file +# +# Doxygen provides over 260 configuration statements +# To make this file easier to follow, +# it contains only statements that are non-default +# +# NOTE: +# It is recommended not to change defaults unless specifically required +# Test any changes how they affect generated documentation +# Make sure that correct warnings are generated to flag issues with documented code +# +# For the complete list of configuration statements see: +# http://www.stack.nl/~dimitri/doxygen/manual/config.html + + PROJECT_NAME = "ESP32 Programming Guide" INPUT = ../components/esp32/include/esp_wifi.h \ @@ -10,14 +25,18 @@ INPUT = ../components/esp32/include/esp_wifi.h \ ../components/esp32/include/esp_int_wdt.h \ ../components/esp32/include/esp_task_wdt.h -WARN_NO_PARAMDOC = YES +## Get warnings for functions that have no documentation for their parameters or return value +## +WARN_NO_PARAMDOC = YES -RECURSIVE = NO -CASE_SENSE_NAMES = NO -EXTRACT_ALL = NO +## Do not complain about not having dot +## +HAVE_DOT = NO -GENERATE_XML = YES -XML_OUTPUT = xml +## Generate XML that is required for Breathe +## +GENERATE_XML = YES +XML_OUTPUT = xml GENERATE_HTML = NO HAVE_DOT = NO @@ -25,5 +44,9 @@ GENERATE_LATEX = NO GENERATE_MAN = YES GENERATE_RTF = NO +## Skip distracting progress messages +## +QUIET = YES +## Log warnings in a file for further review +## WARN_LOGFILE = "doxygen-warning-log.txt" -