# Creating Doxygen documentation for a new library
1. All supporting files were created with Doxygen version 1.9.2. Please download
from https://sourceforge.net/projects/doxygen/files/rel-1.9.2/.
1. Your library API should have each function, data type, and constant documented
according to the Doxygen format using **@brief** and **@param**. Doxygen will output
warnings if you are missing this. Please see the MQTT library for example documentation.
An example function:
```C
/**
* @brief Function description.
*
* @param[in] input An input parameter.
* @param[out] output An output parameter.
*
* @return List of values returned.
*
* Example
* @code{c}
* status = MyFunction(input, output);
* @endcode
*/
/* @[declare_mylibrary_myfunction] */
size_t MyLibrary_MyFunction( size_t input, size_t * output );
/* @[declare_mylibrary_myfunction] */
```
1. Your library must have a **@file** command and **@brief** description in each
file for Doxygen to know to parse the file as part of the library. Please see the
MQTT library for examples.
An example from mqtt.h:
```C
/**
* @file mqtt.h
* @brief User-facing functions of the MQTT 3.1.1 library.
*/
```
1. Please associate each data type and constant in your library's public API to
a group so that it will appear in the custom Doxygen pages.
For each comment block add the following commands to associate your data types and constants:
| Data Type | Command |
| --- | --- |
| constant | **@ingroup** _constants |
| function pointer | **@ingroup** _callback_types |
| enum | **@ingroup** _enum_types |
| struct | **@ingroup** _struct_types |
Some examples of grouped data types and constants in mqtt.h:
```C
/**
* @ingroup mqtt_constants
* @brief Invalid packet identifier.
*
* Zero is an invalid packet identifier as per MQTT v3.1.1 spec.
*/
#define MQTT_PACKET_ID_INVALID ( ( uint16_t ) 0U )
/**
* @ingroup mqtt_callback_types
* @brief Application provided callback to retrieve the current time in
* milliseconds.
*
* @return The current time in milliseconds.
*/
typedef uint32_t (* MQTTGetCurrentTimeFunc_t )( void );
/**
* @ingroup mqtt_enum_types
* @brief Values indicating if an MQTT connection exists.
*/
typedef enum MQTTConnectionStatus
{
MQTTNotConnected, /**< @brief MQTT Connection is inactive. */
MQTTConnected /**< @brief MQTT Connection is active. */
} MQTTConnectionStatus_t;
/**
* @ingroup mqtt_struct_types
* @brief An element of the state engine records for QoS 1 or Qos 2 publishes.
*/
typedef struct MQTTPubAckInfo
{
uint16_t packetId; /**< @brief The packet ID of the original PUBLISH. */
MQTTQoS_t qos; /**< @brief The QoS of the original PUBLISH. */
MQTTPublishState_t publishState; /**< @brief The current state of the publish process. */
} MQTTPubAckInfo_t;
```
1. Please add **/\* \@\[declare_\\] \*/** around each API function
so that Doxygen can copy the function signature to custom function pages.
```C
/* @[declare_mylibrary_myfunction] */
size_t MyLibrary_MyFunction( size_t input, size_t * output );
/* @[declare_mylibrary_myfunction] */
```
1. Please copy the all of the template pages to your library's docs/doxygen folder.
For our CI to detect files correctly, please keep the folder name as *docs/doxygen*
and all of the files names the same.
```console
cp -R /docs/doxygen_templates /docs/doxygen
```
1. Search for "FIXME"s in /docs/doxygen/config.doxygen and update with
your library information.
1. Search for "FIXME"s in /docs/doxygen/pages.txt and update with your
library's information.
1. Add your library to the CSDK's list of libraries, in the first section in /docs/doxygen/pages.txt.
```doxygen
- [](@ref library_name) - []()
```
1. Add the name of your library's Doxygen TAG file to the list of library tag files in /docs/doxygen/config.doxyfile configuration option named `TAGFILES`:
```doxygen
TAGFILES = /docs/doxygen/output/.tag=../../../..//docs/doxygen/output/html
```
1. Generate Doxygen with the current working directory as the root of your library's repo:
```console
doxygen docs/doxygen/config.doxygen
```
Fix all warnings.
1. Generate Doxygen in the CSDK repo root:
```console
git submodule update --init --checkout
python tools/doxygen/generate_docs.py --root .
```
Fix all warnings.