embedded-docs
Embedded firmware documentation generation and maintenance using Doxygen and related tools. Expert skill for API documentation, hardware interface documentation, memory maps, and integration with documentation systems.
Best use case
embedded-docs is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Embedded firmware documentation generation and maintenance using Doxygen and related tools. Expert skill for API documentation, hardware interface documentation, memory maps, and integration with documentation systems.
Teams using embedded-docs should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/embedded-docs/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How embedded-docs Compares
| Feature / Agent | embedded-docs | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Embedded firmware documentation generation and maintenance using Doxygen and related tools. Expert skill for API documentation, hardware interface documentation, memory maps, and integration with documentation systems.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Embedded Documentation Skill
Expert skill for embedded firmware documentation generation and maintenance. Provides Doxygen comment generation, API documentation structure, hardware interface documentation, and integration with documentation systems.
## Overview
The Embedded Documentation skill enables comprehensive documentation for embedded firmware projects:
- Doxygen comment generation and maintenance
- API documentation structure and organization
- Hardware interface documentation
- Memory map documentation
- Call graph and dependency visualization
- Version changelog management
- Register documentation formatting
- Integration with Sphinx/MkDocs
## Capabilities
### 1. Doxygen Comment Generation
Generate Doxygen-compatible documentation comments:
```c
/**
* @file uart_driver.h
* @brief UART peripheral driver for STM32F4 series
* @author Firmware Team
* @version 1.2.0
* @date 2026-01-24
*
* @details
* This driver provides a hardware abstraction layer for UART peripherals.
* It supports:
* - Polling, interrupt, and DMA transfer modes
* - Hardware flow control (RTS/CTS)
* - Configurable baud rates up to 10.5 Mbps
* - Error detection and handling
*
* @note Thread-safe when used with RTOS mutual exclusion
*
* @par Example Usage:
* @code
* uart_config_t config = {
* .baudrate = 115200,
* .parity = UART_PARITY_NONE,
* .stop_bits = UART_STOP_1
* };
* uart_init(UART1, &config);
* uart_transmit(UART1, data, len, 100);
* @endcode
*
* @copyright (c) 2026 Company Name. All rights reserved.
*/
```
### 2. Function Documentation
Document functions with complete parameter and return information:
```c
/**
* @brief Initialize UART peripheral with specified configuration
*
* Configures the UART hardware with the specified settings and prepares
* it for data transmission and reception. Must be called before any
* other UART operations.
*
* @param[in] uart UART peripheral instance (UART1, UART2, etc.)
* @param[in] config Pointer to configuration structure
*
* @return Status code indicating success or failure
* @retval UART_OK Initialization successful
* @retval UART_ERR_INVALID Invalid parameter (NULL pointer or invalid instance)
* @retval UART_ERR_BUSY Peripheral is busy or already initialized
* @retval UART_ERR_CLOCK Clock configuration failed
*
* @pre System clocks must be configured before calling this function
* @post UART peripheral is ready for data transfer
*
* @note This function enables the peripheral clock automatically
* @warning Do not call from interrupt context
*
* @see uart_deinit()
* @see uart_config_t
*
* @par Thread Safety:
* This function is NOT thread-safe. Use mutex protection when
* calling from multiple threads.
*
* @par Example:
* @code
* uart_status_t status = uart_init(UART1, &config);
* if (status != UART_OK) {
* handle_error(status);
* }
* @endcode
*/
uart_status_t uart_init(uart_instance_t uart, const uart_config_t *config);
```
### 3. Hardware Register Documentation
Document hardware register definitions:
```c
/**
* @defgroup UART_Registers UART Register Definitions
* @brief Memory-mapped register definitions for UART peripheral
* @{
*/
/**
* @brief UART Control Register 1 (CR1)
*
* @verbatim
* Bit Field | Name | R/W | Reset | Description
* ------------|---------|-----|-------|---------------------------
* [31:16] | - | - | 0 | Reserved
* [15] | OVER8 | RW | 0 | Oversampling mode (0=16x, 1=8x)
* [14] | - | - | 0 | Reserved
* [13] | UE | RW | 0 | UART enable
* [12] | M | RW | 0 | Word length (0=8bit, 1=9bit)
* [11] | WAKE | RW | 0 | Wakeup method
* [10] | PCE | RW | 0 | Parity control enable
* [9] | PS | RW | 0 | Parity selection (0=even, 1=odd)
* [8] | PEIE | RW | 0 | PE interrupt enable
* [7] | TXEIE | RW | 0 | TXE interrupt enable
* [6] | TCIE | RW | 0 | TC interrupt enable
* [5] | RXNEIE | RW | 0 | RXNE interrupt enable
* [4] | IDLEIE | RW | 0 | IDLE interrupt enable
* [3] | TE | RW | 0 | Transmitter enable
* [2] | RE | RW | 0 | Receiver enable
* [1] | RWU | RW | 0 | Receiver wakeup
* [0] | SBK | RW | 0 | Send break
* @endverbatim
*/
#define UART_CR1_OVER8_Pos (15U)
#define UART_CR1_OVER8_Msk (0x1UL << UART_CR1_OVER8_Pos)
#define UART_CR1_OVER8 UART_CR1_OVER8_Msk
/** @} */ /* End of UART_Registers group */
```
### 4. Memory Map Documentation
Document memory layout and regions:
```c
/**
* @defgroup Memory_Map Memory Map
* @brief System memory map documentation
*
* @verbatim
* Memory Map Overview (STM32F407VG)
* =================================
*
* Address Range | Size | Region | Description
* -----------------------|---------|-----------------|------------------
* 0x00000000-0x07FFFFFF | 128 MB | Aliased | Boot memory alias
* 0x08000000-0x080FFFFF | 1 MB | Flash | Main flash memory
* 0x10000000-0x1000FFFF | 64 KB | CCMRAM | Core-coupled RAM
* 0x1FFF0000-0x1FFF7A0F | 30 KB | System Memory | Bootloader ROM
* 0x1FFFC000-0x1FFFC007 | 8 B | OTP | Option bytes
* 0x20000000-0x2001FFFF | 128 KB | SRAM | Main SRAM
* 0x40000000-0x400FFFFF | 1 MB | APB1 | APB1 peripherals
* 0x40010000-0x4001FFFF | 64 KB | APB2 | APB2 peripherals
* 0x40020000-0x4007FFFF | 384 KB | AHB1 | AHB1 peripherals
* 0x50000000-0x5003FFFF | 256 KB | AHB2 | AHB2 peripherals
* 0xE0000000-0xE00FFFFF | 1 MB | Cortex-M4 | System control
*
* Flash Memory Layout
* ===================
*
* Sector | Address | Size | Usage
* -------|-------------|--------|------------------
* 0 | 0x08000000 | 16 KB | Bootloader
* 1 | 0x08004000 | 16 KB | Bootloader
* 2 | 0x08008000 | 16 KB | Application (start)
* 3 | 0x0800C000 | 16 KB | Application
* 4 | 0x08010000 | 64 KB | Application
* 5-11 | 0x08020000 | 896 KB | Application/Data
*
* @endverbatim
*/
```
### 5. API Documentation Structure
Organize documentation with module grouping:
```c
/**
* @mainpage Firmware API Reference
*
* @section intro Introduction
* This documentation describes the firmware API for the XYZ product.
*
* @section modules Module Overview
* - @ref HAL_Module "Hardware Abstraction Layer"
* - @ref Driver_Module "Device Drivers"
* - @ref App_Module "Application Layer"
* - @ref Utils_Module "Utility Functions"
*
* @section getting_started Getting Started
* See @ref quick_start for initialization examples.
*
* @section architecture Architecture
* @image html architecture.png "Firmware Architecture"
*/
/**
* @defgroup HAL_Module Hardware Abstraction Layer
* @brief Low-level hardware interface modules
* @{
*/
/**
* @defgroup HAL_GPIO GPIO Driver
* @brief General Purpose Input/Output driver
*/
/**
* @defgroup HAL_UART UART Driver
* @brief Universal Asynchronous Receiver/Transmitter driver
*/
/** @} */ /* End of HAL_Module */
```
## Process Integration
This skill integrates with the following processes:
| Process | Integration Point |
|---------|-------------------|
| `firmware-api-documentation.js` | Primary documentation generation |
| `hw-sw-interface-specification.js` | Interface documentation |
| `version-control-config-management.js` | Release documentation |
## Workflow
### 1. Analyze Codebase
```bash
# Find undocumented functions
grep -rn "^[a-z_]*\s\+[a-z_]*(" src/ | grep -v "/\*\*"
# Count documented vs undocumented
find src/ -name "*.h" -exec grep -l "@brief" {} \; | wc -l
find src/ -name "*.h" | wc -l
```
### 2. Generate Documentation Comments
The skill generates documentation comments for:
- Header files (module overview, includes, defines)
- Function declarations (params, returns, examples)
- Data structures (fields, usage)
- Enumerations (values, descriptions)
- Macros (purpose, usage)
### 3. Configure Doxygen
```ini
# Doxyfile configuration highlights
PROJECT_NAME = "Firmware API"
PROJECT_NUMBER = 1.2.0
OUTPUT_DIRECTORY = docs/api
GENERATE_HTML = YES
GENERATE_LATEX = NO
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = YES
INPUT = src include
FILE_PATTERNS = *.c *.h
RECURSIVE = YES
EXCLUDE = src/third_party
HAVE_DOT = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
```
### 4. Generate Output
```bash
# Generate HTML documentation
doxygen Doxyfile
# Generate PDF (requires LaTeX)
cd docs/api/latex && make pdf
# Serve locally for review
python -m http.server 8000 -d docs/api/html
```
## Output Schema
```json
{
"documentation": {
"type": "doxygen",
"format": "html",
"outputDir": "docs/api"
},
"coverage": {
"files": {
"total": 45,
"documented": 42,
"coverage": 0.933
},
"functions": {
"total": 156,
"documented": 148,
"coverage": 0.949
},
"parameters": {
"total": 312,
"documented": 298,
"coverage": 0.955
}
},
"warnings": [
"src/legacy.c:45: Missing @return documentation",
"include/config.h:12: Undocumented macro CONFIG_MAX_SIZE"
],
"artifacts": [
"docs/api/html/index.html",
"docs/api/Doxyfile",
"docs/memory-map.md",
"docs/register-reference.md"
]
}
```
## Documentation Templates
### Header File Template
```c
/**
* @file module_name.h
* @brief Brief module description
* @author Author Name
* @version X.Y.Z
* @date YYYY-MM-DD
*
* @details
* Detailed description of the module purpose and functionality.
*
* @par Dependencies:
* - dependency1.h
* - dependency2.h
*
* @par Example:
* @code
* // Usage example
* @endcode
*/
#ifndef MODULE_NAME_H
#define MODULE_NAME_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes */
/* Defines */
/* Types */
/* Function Prototypes */
#ifdef __cplusplus
}
#endif
#endif /* MODULE_NAME_H */
```
### Driver Function Template
```c
/**
* @brief Brief description (imperative mood)
*
* Detailed description explaining what the function does,
* when to use it, and any important considerations.
*
* @param[in] param1 Description of input parameter
* @param[out] param2 Description of output parameter
* @param[in,out] param3 Description of input/output parameter
*
* @return Description of return value
* @retval VALUE1 Meaning of VALUE1
* @retval VALUE2 Meaning of VALUE2
*
* @pre Preconditions that must be met
* @post Postconditions after successful execution
*
* @note Additional notes for users
* @warning Warnings about potential issues
*
* @see Related functions or documentation
*/
```
## Best Practices
### Comment Style
- Use brief descriptions starting with verb (Initialize, Configure, Get)
- Document all public API functions completely
- Include @param for every parameter
- Include @return and @retval for return values
- Add @pre/@post for state requirements
### Organization
- Group related functions with @defgroup
- Use @ingroup to add items to groups
- Create a @mainpage for navigation
- Link related items with @see and @ref
### Maintenance
- Update version numbers in @version tags
- Keep @date current with last modification
- Review and update documentation during code review
- Run Doxygen in CI to catch warnings
## Integration with Documentation Systems
### Sphinx Integration
```rst
.. doxygenfile:: uart_driver.h
:project: firmware
.. doxygenfunction:: uart_init
:project: firmware
```
### MkDocs Integration
```yaml
# mkdocs.yml
plugins:
- mkdoxy:
projects:
firmware:
src-dirs: src include
full-doc: True
```
## References
- Doxygen Manual: https://www.doxygen.nl/manual/
- MISRA C Documentation Guidelines
- Embedded Artistry Documentation Standards
- Linux Kernel Documentation Guidelines
## See Also
- `firmware-api-documentation.js` - Documentation generation process
- `hw-sw-interface-specification.js` - Interface specification process
- AG-012: Technical Documentation AgentRelated Skills
storybook-docs
Storybook integration for UI component documentation. Configure docs addon, generate component documentation from stories, write MDX documentation, and integrate with design systems.
sphinx-docs
Sphinx documentation system expertise for technical and API documentation. Configure projects, autodoc for Python APIs, intersphinx for cross-project linking, extensions, and multiple output formats.
mkdocs-material
MkDocs with Material theme expertise for Python-centric documentation. Configure navigation, plugins, multi-language support, PDF export, and advanced Material theme features.
docs-analytics
Documentation usage analytics and insights. Integrate with Google Analytics, Algolia analytics, and custom tracking to measure documentation effectiveness, identify content gaps, and optimize user journeys.
docs-accessibility
Documentation accessibility validation and remediation. Check WCAG 2.1 compliance, validate alt text, analyze heading hierarchy, verify color contrast, and generate accessibility reports.
confluence-docs
Atlassian Confluence integration for enterprise documentation. Create and update pages via API, manage spaces and permissions, handle content migration, and sync between Markdown and Confluence.
asyncapi-docs
AsyncAPI specification handling for event-driven API documentation. Parse, validate, and generate documentation for message-based APIs including Kafka, MQTT, WebSocket, and AMQP systems.
docs-site-generator
Generate documentation sites using Docusaurus, MkDocs, or VuePress
embedded-crypto
Embedded cryptographic operations and secure element integration. Expert skill for hardware crypto accelerators, secure key storage, TrustZone configuration, and side-channel attack mitigation.
homologation-docs
Type approval documentation and certification management
process-builder
Scaffold new babysitter process definitions following SDK patterns, proper structure, and best practices. Guides the 3-phase workflow from research to implementation.
babysitter
Orchestrate via @babysitter. Use this skill when asked to babysit a run, orchestrate a process or whenever it is called explicitly. (babysit, babysitter, orchestrate, orchestrate a run, workflow, etc.)