diff --git a/.github/workflows/build_and_run_example_test_mdns.yml b/.github/workflows/build_and_run_example_test_mdns.yml
index de4aac90e..3d309a6f5 100644
--- a/.github/workflows/build_and_run_example_test_mdns.yml
+++ b/.github/workflows/build_and_run_example_test_mdns.yml
@@ -13,8 +13,9 @@ jobs:
container: espressif/idf:${{ matrix.idf_ver }}
steps:
- name: Checkout esp-protocols
- uses: actions/checkout@master
+ uses: actions/checkout@v3
with:
+ submodules: recursive
path: esp-protocols
- name: Build ${{ matrix.example }} with IDF-${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
env:
@@ -23,6 +24,7 @@ jobs:
run: |
. ${IDF_PATH}/export.sh
cd $GITHUB_WORKSPACE/esp-protocols/components/mdns/examples/
+ idf.py set-target ${{ matrix.idf_target }}
cat sdkconfig.ci.eth_def >> sdkconfig.defaults
idf.py build
rm sdkconfig.defaults
@@ -32,4 +34,5 @@ jobs:
cat sdkconfig.ci.eth_socket >> sdkconfig.defaults
idf.py build
cd $GITHUB_WORKSPACE/esp-protocols/components/mdns/tests/test_apps/
+ idf.py set-target ${{ matrix.idf_target }}
idf.py build
diff --git a/.github/workflows/build_and_run_example_test.yml b/.github/workflows/build_and_run_example_test_websocket.yml
similarity index 97%
rename from .github/workflows/build_and_run_example_test.yml
rename to .github/workflows/build_and_run_example_test_websocket.yml
index 4f26acd48..678b6d1e6 100644
--- a/.github/workflows/build_and_run_example_test.yml
+++ b/.github/workflows/build_and_run_example_test_websocket.yml
@@ -13,7 +13,9 @@ jobs:
container: espressif/idf:${{ matrix.idf_ver }}
steps:
- name: Checkout esp-protocols
- uses: actions/checkout@v1
+ uses: actions/checkout@v3
+ with:
+ submodules: recursive
- name: Build ${{ matrix.example }} with IDF-${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
env:
IDF_TARGET: ${{ matrix.idf_target }}
diff --git a/.github/workflows/build_asio.yml b/.github/workflows/build_asio.yml
new file mode 100644
index 000000000..83ccf2d94
--- /dev/null
+++ b/.github/workflows/build_asio.yml
@@ -0,0 +1,28 @@
+name: Build ASIO
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ idf_ver: ["latest"]
+ idf_target: ["esp32", "esp32s2"]
+ example: ["asio_chat", "async_request", "socks4", "ssl_client_server", "tcp_echo_server", "udp_echo_server"]
+
+ runs-on: ubuntu-20.04
+ container: espressif/idf:${{ matrix.idf_ver }}
+ steps:
+ - name: Checkout esp-protocols
+ uses: actions/checkout@v3
+ with:
+ path: esp-protocols
+ - name: Build ${{ matrix.example }} with IDF-${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
+ env:
+ IDF_TARGET: ${{ matrix.idf_target }}
+ shell: bash
+ run: |
+ . ${IDF_PATH}/export.sh
+ cd $GITHUB_WORKSPACE/esp-protocols/components/asio/examples/${{ matrix.example }}
+ idf.py set-target ${{ matrix.idf_target }}
+ idf.py build
diff --git a/.github/workflows/publish-docs-component.yml b/.github/workflows/publish-docs-component.yml
index fbc674a2d..0eeda079c 100644
--- a/.github/workflows/publish-docs-component.yml
+++ b/.github/workflows/publish-docs-component.yml
@@ -39,10 +39,16 @@ jobs:
cp -r html_en/. $GITHUB_WORKSPACE/docs/mdns/en
cp -r html_zh_CN/. $GITHUB_WORKSPACE/docs/mdns/zh_CN
+ cd $GITHUB_WORKSPACE/components/asio/docs
+ ./generate_docs
+ mkdir -p $GITHUB_WORKSPACE/docs/asio
+ cp -r html/. $GITHUB_WORKSPACE/docs/asio
+
cd $GITHUB_WORKSPACE/docs
touch .nojekyll
echo 'esp-modem
' > index.html
echo 'esp-websocket-client
' >> index.html
+ echo 'ASIO
' >> index.html
echo 'mDNS_en
' >> index.html
echo 'mDNS_zh_CN
' >> index.html
@@ -50,7 +56,7 @@ jobs:
- name: Upload components to component service
uses: espressif/github-actions/upload_components@master
with:
- directories: "components/esp_modem;components/esp_websocket_client;components/mdns"
+ directories: "components/esp_modem;components/esp_websocket_client;components/mdns;components/asio"
namespace: "espressif"
api_token: ${{ secrets.IDF_COMPONENT_API_TOKEN }}
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..6ecce627b
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "components/asio/asio"]
+ path = components/asio/asio
+ url = https://github.com/espressif/asio
diff --git a/README.md b/README.md
index c886af4b8..c422581ad 100644
--- a/README.md
+++ b/README.md
@@ -19,3 +19,8 @@
* Brief introduction [README](components/esp_websocket_client/README.md)
* Full html [documentation](https://espressif.github.io/esp-protocols/esp_websocket_client/index.html)
+
+### ASIO port
+
+* Brief introduction [README](components/asio/README.md)
+* Full html [documentation](https://espressif.github.io/esp-protocols/asio/index.html)
diff --git a/components/asio/README.md b/components/asio/README.md
new file mode 100644
index 000000000..acfbd5f91
--- /dev/null
+++ b/components/asio/README.md
@@ -0,0 +1,11 @@
+# ASIO port
+
+Asio is a cross-platform C++ library, see https://think-async.com/Asio/. It provides a consistent asynchronous model using a modern C++ approach.
+
+## Examples
+
+Get started with example test :example:`examples `:
+
+## Documentation
+
+* View the full [html documentation](https://espressif.github.io/esp-protocols/asio/index.html)
diff --git a/components/asio/asio b/components/asio/asio
index f31694c9f..58384fb6a 160000
--- a/components/asio/asio
+++ b/components/asio/asio
@@ -1 +1 @@
-Subproject commit f31694c9f1746ba189a4bcae2e34db15135ddb22
+Subproject commit 58384fb6af92e7952b1534acb3004924f7ea0565
diff --git a/components/asio/docs/Doxyfile b/components/asio/docs/Doxyfile
new file mode 100755
index 000000000..1e95d8217
--- /dev/null
+++ b/components/asio/docs/Doxyfile
@@ -0,0 +1,73 @@
+# 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://doxygen.nl/manual/config.html
+
+
+PROJECT_NAME = "ESP Protocols Programming Guide"
+
+## The 'INPUT' statement below is used as input by script 'gen-df-input.py'
+## to automatically generate API reference list files heder_file.inc
+## These files are placed in '_inc' directory
+## and used to include in API reference documentation
+
+
+## Get warnings for functions that have no documentation for their parameters or return value
+##
+WARN_NO_PARAMDOC = YES
+
+## Enable preprocessing and remove __attribute__(...) expressions from the INPUT files
+##
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+PREDEFINED = \
+ $(ENV_DOXYGEN_DEFINES) \
+ __DOXYGEN__=1 \
+ __attribute__(x)= \
+ _Static_assert()= \
+ IDF_DEPRECATED(X)= \
+ IRAM_ATTR= \
+ configSUPPORT_DYNAMIC_ALLOCATION=1 \
+ configSUPPORT_STATIC_ALLOCATION=1 \
+ configQUEUE_REGISTRY_SIZE=1 \
+ configUSE_RECURSIVE_MUTEXES=1 \
+ configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS=1 \
+ configNUM_THREAD_LOCAL_STORAGE_POINTERS=1 \
+ configUSE_APPLICATION_TASK_TAG=1 \
+ configTASKLIST_INCLUDE_COREID=1 \
+ "ESP_EVENT_DECLARE_BASE(x)=extern esp_event_base_t x"
+
+## Do not complain about not having dot
+##
+HAVE_DOT = NO
+
+## Generate XML that is required for Breathe
+##
+GENERATE_XML = YES
+XML_OUTPUT = xml
+
+GENERATE_HTML = NO
+HAVE_DOT = NO
+GENERATE_LATEX = NO
+GENERATE_MAN = YES
+GENERATE_RTF = NO
+
+## Skip distracting progress messages
+##
+QUIET = YES
+
+## Enable Section Tags for conditional documentation
+##
+ENABLED_SECTIONS += \
+ DOC_EXCLUDE_HEADER_SECTION \ ## To conditionally remove doc sections from IDF source files without affecting documentation in upstream files.
+ DOC_SINGLE_GROUP ## To conditionally remove groups from the documentation and create a 'flat' document without affecting documentation in upstream files.
diff --git a/components/asio/docs/conf_common.py b/components/asio/docs/conf_common.py
new file mode 100644
index 000000000..10d1e997e
--- /dev/null
+++ b/components/asio/docs/conf_common.py
@@ -0,0 +1,21 @@
+from esp_docs.conf_docs import * # noqa: F403,F401
+
+extensions += ['sphinx_copybutton',
+ # Needed as a trigger for running doxygen
+ 'esp_docs.esp_extensions.dummy_build_system',
+ 'esp_docs.esp_extensions.run_doxygen',
+ ]
+
+# link roles config
+github_repo = 'espressif/esp-protocols'
+
+# context used by sphinx_idf_theme
+html_context['github_user'] = 'espressif'
+html_context['github_repo'] = 'esp-protocols'
+
+# Extra options required by sphinx_idf_theme
+project_slug = 'esp-idf' # >=5.0
+versions_url = 'https://github.com/espressif/esp-protocols/docs/docs_versions.js'
+
+idf_targets = ['esp32']
+languages = ['en', 'zh_CN']
diff --git a/components/asio/docs/en/conf.py b/components/asio/docs/en/conf.py
new file mode 100644
index 000000000..bba642268
--- /dev/null
+++ b/components/asio/docs/en/conf.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#
+# English Language RTD & Sphinx config file
+#
+# Uses ../conf_common.py for most non-language-specific settings.
+
+# Importing conf_common adds all the non-language-specific
+# parts to this conf module
+
+try:
+ from conf_common import * # noqa: F403,F401
+except ImportError:
+ import os
+ import sys
+ sys.path.insert(0, os.path.abspath('../'))
+ from conf_common import * # noqa: F403,F401
+
+# General information about the project.
+project = u'ESP-Protocols'
+copyright = u'2016 - 2022, Espressif Systems (Shanghai) Co., Ltd'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'en'
diff --git a/docs/en/api-reference/protocols/asio.rst b/components/asio/docs/en/index.rst
similarity index 79%
rename from docs/en/api-reference/protocols/asio.rst
rename to components/asio/docs/en/index.rst
index ec6b0b159..56ff694f2 100644
--- a/docs/en/api-reference/protocols/asio.rst
+++ b/components/asio/docs/en/index.rst
@@ -32,11 +32,11 @@ Internal asio settings for ESP include
Application Example
-------------------
-ESP examples are based on standard asio :example:`protocols/asio`:
+ESP examples are based on standard asio :example:`examples <../examples>`:
-- :example:`protocols/asio/udp_echo_server`
-- :example:`protocols/asio/tcp_echo_server`
-- :example:`protocols/asio/asio_chat`
-- :example:`protocols/asio/ssl_client_server`
+- :example:`udp_echo_server <../examples/udp_echo_server>`
+- :example:`tcp_echo_server <../examples/tcp_echo_server>`
+- :example:`asio_chat <../examples/asio_chat>`
+- :example:`ssl_client_server <../examples/ssl_client_server>`
Please refer to the specific example README.md for details
diff --git a/components/asio/docs/generate_docs b/components/asio/docs/generate_docs
new file mode 100755
index 000000000..e60c1a8f9
--- /dev/null
+++ b/components/asio/docs/generate_docs
@@ -0,0 +1,27 @@
+build-docs --target esp32 --language en
+
+cp -rf _build/en/esp32/html .
+rm -rf _build __pycache__
+
+# Modifes some version and target fields of index.html
+echo "" >> html/index.html
+
diff --git a/components/asio/docs/zh_CN/conf.py b/components/asio/docs/zh_CN/conf.py
new file mode 100644
index 000000000..cc6fbc271
--- /dev/null
+++ b/components/asio/docs/zh_CN/conf.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+#
+# English Language RTD & Sphinx config file
+#
+# Uses ../conf_common.py for most non-language-specific settings.
+
+# Importing conf_common adds all the non-language-specific
+# parts to this conf module
+try:
+ from conf_common import * # noqa: F403,F401
+except ImportError:
+ import os
+ import sys
+ sys.path.insert(0, os.path.abspath('..'))
+ from conf_common import * # noqa: F403,F401
+
+import datetime
+
+current_year = datetime.datetime.now().year
+
+# General information about the project.
+project = u'ESP-IDF 编程指南'
+copyright = u'2016 - {} 乐鑫信息科技(上海)股份有限公司'.format(current_year)
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'zh_CN'
diff --git a/docs/zh_CN/api-reference/protocols/asio.rst b/components/asio/docs/zh_CN/index.rst
similarity index 100%
rename from docs/zh_CN/api-reference/protocols/asio.rst
rename to components/asio/docs/zh_CN/index.rst
diff --git a/examples/protocols/asio/asio_chat/CMakeLists.txt b/components/asio/examples/asio_chat/CMakeLists.txt
similarity index 79%
rename from examples/protocols/asio/asio_chat/CMakeLists.txt
rename to components/asio/examples/asio_chat/CMakeLists.txt
index 31a345c19..2d3c9ecbe 100644
--- a/examples/protocols/asio/asio_chat/CMakeLists.txt
+++ b/components/asio/examples/asio_chat/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(asio_chat)
diff --git a/examples/protocols/asio/asio_chat/README.md b/components/asio/examples/asio_chat/README.md
similarity index 100%
rename from examples/protocols/asio/asio_chat/README.md
rename to components/asio/examples/asio_chat/README.md
diff --git a/examples/protocols/asio/asio_chat/example_test.py b/components/asio/examples/asio_chat/example_test.py
similarity index 100%
rename from examples/protocols/asio/asio_chat/example_test.py
rename to components/asio/examples/asio_chat/example_test.py
diff --git a/examples/protocols/asio/asio_chat/main/CMakeLists.txt b/components/asio/examples/asio_chat/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/CMakeLists.txt
rename to components/asio/examples/asio_chat/main/CMakeLists.txt
diff --git a/examples/protocols/asio/asio_chat/main/Kconfig.projbuild b/components/asio/examples/asio_chat/main/Kconfig.projbuild
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/Kconfig.projbuild
rename to components/asio/examples/asio_chat/main/Kconfig.projbuild
diff --git a/examples/protocols/asio/asio_chat/main/asio_chat.cpp b/components/asio/examples/asio_chat/main/asio_chat.cpp
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/asio_chat.cpp
rename to components/asio/examples/asio_chat/main/asio_chat.cpp
diff --git a/examples/protocols/asio/asio_chat/main/chat_message.hpp b/components/asio/examples/asio_chat/main/chat_message.hpp
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/chat_message.hpp
rename to components/asio/examples/asio_chat/main/chat_message.hpp
diff --git a/examples/protocols/asio/asio_chat/main/client.hpp b/components/asio/examples/asio_chat/main/client.hpp
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/client.hpp
rename to components/asio/examples/asio_chat/main/client.hpp
diff --git a/examples/protocols/asio/asio_chat/main/server.hpp b/components/asio/examples/asio_chat/main/server.hpp
similarity index 100%
rename from examples/protocols/asio/asio_chat/main/server.hpp
rename to components/asio/examples/asio_chat/main/server.hpp
diff --git a/examples/protocols/asio/asio_chat/sdkconfig.ci b/components/asio/examples/asio_chat/sdkconfig.ci
similarity index 100%
rename from examples/protocols/asio/asio_chat/sdkconfig.ci
rename to components/asio/examples/asio_chat/sdkconfig.ci
diff --git a/examples/protocols/asio/asio_chat/sdkconfig.defaults b/components/asio/examples/asio_chat/sdkconfig.defaults
similarity index 100%
rename from examples/protocols/asio/asio_chat/sdkconfig.defaults
rename to components/asio/examples/asio_chat/sdkconfig.defaults
diff --git a/examples/protocols/asio/async_request/CMakeLists.txt b/components/asio/examples/async_request/CMakeLists.txt
similarity index 80%
rename from examples/protocols/asio/async_request/CMakeLists.txt
rename to components/asio/examples/async_request/CMakeLists.txt
index b360f7df5..ff659707e 100644
--- a/examples/protocols/asio/async_request/CMakeLists.txt
+++ b/components/asio/examples/async_request/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(async_http_request)
diff --git a/examples/protocols/asio/async_request/README.md b/components/asio/examples/async_request/README.md
similarity index 100%
rename from examples/protocols/asio/async_request/README.md
rename to components/asio/examples/async_request/README.md
diff --git a/examples/protocols/asio/async_request/main/CMakeLists.txt b/components/asio/examples/async_request/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/async_request/main/CMakeLists.txt
rename to components/asio/examples/async_request/main/CMakeLists.txt
diff --git a/examples/protocols/asio/async_request/main/async_http_request.cpp b/components/asio/examples/async_request/main/async_http_request.cpp
similarity index 100%
rename from examples/protocols/asio/async_request/main/async_http_request.cpp
rename to components/asio/examples/async_request/main/async_http_request.cpp
diff --git a/examples/protocols/asio/socks4/CMakeLists.txt b/components/asio/examples/socks4/CMakeLists.txt
similarity index 79%
rename from examples/protocols/asio/socks4/CMakeLists.txt
rename to components/asio/examples/socks4/CMakeLists.txt
index 1a2667508..f1ffe9d12 100644
--- a/examples/protocols/asio/socks4/CMakeLists.txt
+++ b/components/asio/examples/socks4/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(asio_sock4)
diff --git a/examples/protocols/asio/socks4/README.md b/components/asio/examples/socks4/README.md
similarity index 100%
rename from examples/protocols/asio/socks4/README.md
rename to components/asio/examples/socks4/README.md
diff --git a/examples/protocols/asio/socks4/main/CMakeLists.txt b/components/asio/examples/socks4/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/socks4/main/CMakeLists.txt
rename to components/asio/examples/socks4/main/CMakeLists.txt
diff --git a/examples/protocols/asio/socks4/main/Kconfig.projbuild b/components/asio/examples/socks4/main/Kconfig.projbuild
similarity index 100%
rename from examples/protocols/asio/socks4/main/Kconfig.projbuild
rename to components/asio/examples/socks4/main/Kconfig.projbuild
diff --git a/examples/protocols/asio/socks4/main/socks4.cpp b/components/asio/examples/socks4/main/socks4.cpp
similarity index 100%
rename from examples/protocols/asio/socks4/main/socks4.cpp
rename to components/asio/examples/socks4/main/socks4.cpp
diff --git a/examples/protocols/asio/socks4/main/socks4.hpp b/components/asio/examples/socks4/main/socks4.hpp
similarity index 100%
rename from examples/protocols/asio/socks4/main/socks4.hpp
rename to components/asio/examples/socks4/main/socks4.hpp
diff --git a/examples/protocols/asio/socks4/sdkconfig.defaults b/components/asio/examples/socks4/sdkconfig.defaults
similarity index 100%
rename from examples/protocols/asio/socks4/sdkconfig.defaults
rename to components/asio/examples/socks4/sdkconfig.defaults
diff --git a/examples/protocols/asio/ssl_client_server/CMakeLists.txt b/components/asio/examples/ssl_client_server/CMakeLists.txt
similarity index 81%
rename from examples/protocols/asio/ssl_client_server/CMakeLists.txt
rename to components/asio/examples/ssl_client_server/CMakeLists.txt
index 927c74690..73ee939a7 100644
--- a/examples/protocols/asio/ssl_client_server/CMakeLists.txt
+++ b/components/asio/examples/ssl_client_server/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
set(EXCLUDE_COMPONENTS openssl)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
diff --git a/examples/protocols/asio/ssl_client_server/README.md b/components/asio/examples/ssl_client_server/README.md
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/README.md
rename to components/asio/examples/ssl_client_server/README.md
diff --git a/examples/protocols/asio/ssl_client_server/example_test.py b/components/asio/examples/ssl_client_server/example_test.py
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/example_test.py
rename to components/asio/examples/ssl_client_server/example_test.py
diff --git a/examples/protocols/asio/ssl_client_server/main/CMakeLists.txt b/components/asio/examples/ssl_client_server/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/CMakeLists.txt
rename to components/asio/examples/ssl_client_server/main/CMakeLists.txt
diff --git a/examples/protocols/asio/ssl_client_server/main/Kconfig.projbuild b/components/asio/examples/ssl_client_server/main/Kconfig.projbuild
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/Kconfig.projbuild
rename to components/asio/examples/ssl_client_server/main/Kconfig.projbuild
diff --git a/examples/protocols/asio/ssl_client_server/main/asio_ssl_main.cpp b/components/asio/examples/ssl_client_server/main/asio_ssl_main.cpp
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/asio_ssl_main.cpp
rename to components/asio/examples/ssl_client_server/main/asio_ssl_main.cpp
diff --git a/examples/protocols/asio/ssl_client_server/main/ca.crt b/components/asio/examples/ssl_client_server/main/ca.crt
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/ca.crt
rename to components/asio/examples/ssl_client_server/main/ca.crt
diff --git a/examples/protocols/asio/ssl_client_server/main/server.key b/components/asio/examples/ssl_client_server/main/server.key
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/server.key
rename to components/asio/examples/ssl_client_server/main/server.key
diff --git a/examples/protocols/asio/ssl_client_server/main/srv.crt b/components/asio/examples/ssl_client_server/main/srv.crt
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/main/srv.crt
rename to components/asio/examples/ssl_client_server/main/srv.crt
diff --git a/examples/protocols/asio/ssl_client_server/partitions.csv b/components/asio/examples/ssl_client_server/partitions.csv
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/partitions.csv
rename to components/asio/examples/ssl_client_server/partitions.csv
diff --git a/examples/protocols/asio/ssl_client_server/sdkconfig.ci b/components/asio/examples/ssl_client_server/sdkconfig.ci
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/sdkconfig.ci
rename to components/asio/examples/ssl_client_server/sdkconfig.ci
diff --git a/examples/protocols/asio/ssl_client_server/sdkconfig.defaults b/components/asio/examples/ssl_client_server/sdkconfig.defaults
similarity index 100%
rename from examples/protocols/asio/ssl_client_server/sdkconfig.defaults
rename to components/asio/examples/ssl_client_server/sdkconfig.defaults
diff --git a/examples/protocols/asio/tcp_echo_server/CMakeLists.txt b/components/asio/examples/tcp_echo_server/CMakeLists.txt
similarity index 80%
rename from examples/protocols/asio/tcp_echo_server/CMakeLists.txt
rename to components/asio/examples/tcp_echo_server/CMakeLists.txt
index 9ed3aab2d..29e290677 100644
--- a/examples/protocols/asio/tcp_echo_server/CMakeLists.txt
+++ b/components/asio/examples/tcp_echo_server/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(asio_tcp_echo_server)
diff --git a/examples/protocols/asio/tcp_echo_server/README.md b/components/asio/examples/tcp_echo_server/README.md
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/README.md
rename to components/asio/examples/tcp_echo_server/README.md
diff --git a/examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py b/components/asio/examples/tcp_echo_server/asio_tcp_server_test.py
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/asio_tcp_server_test.py
rename to components/asio/examples/tcp_echo_server/asio_tcp_server_test.py
diff --git a/examples/protocols/asio/tcp_echo_server/main/CMakeLists.txt b/components/asio/examples/tcp_echo_server/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/main/CMakeLists.txt
rename to components/asio/examples/tcp_echo_server/main/CMakeLists.txt
diff --git a/examples/protocols/asio/tcp_echo_server/main/Kconfig.projbuild b/components/asio/examples/tcp_echo_server/main/Kconfig.projbuild
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/main/Kconfig.projbuild
rename to components/asio/examples/tcp_echo_server/main/Kconfig.projbuild
diff --git a/examples/protocols/asio/tcp_echo_server/main/echo_server.cpp b/components/asio/examples/tcp_echo_server/main/echo_server.cpp
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/main/echo_server.cpp
rename to components/asio/examples/tcp_echo_server/main/echo_server.cpp
diff --git a/examples/protocols/asio/tcp_echo_server/sdkconfig.defaults b/components/asio/examples/tcp_echo_server/sdkconfig.defaults
similarity index 100%
rename from examples/protocols/asio/tcp_echo_server/sdkconfig.defaults
rename to components/asio/examples/tcp_echo_server/sdkconfig.defaults
diff --git a/examples/protocols/asio/udp_echo_server/CMakeLists.txt b/components/asio/examples/udp_echo_server/CMakeLists.txt
similarity index 80%
rename from examples/protocols/asio/udp_echo_server/CMakeLists.txt
rename to components/asio/examples/udp_echo_server/CMakeLists.txt
index 1282ffd88..2e0c28024 100644
--- a/examples/protocols/asio/udp_echo_server/CMakeLists.txt
+++ b/components/asio/examples/udp_echo_server/CMakeLists.txt
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# (Not part of the boilerplate)
# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection.
-set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
+set(EXTRA_COMPONENT_DIRS ../../../../common_components/protocol_examples_common)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(asio_udp_echo_server)
diff --git a/examples/protocols/asio/udp_echo_server/README.md b/components/asio/examples/udp_echo_server/README.md
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/README.md
rename to components/asio/examples/udp_echo_server/README.md
diff --git a/examples/protocols/asio/udp_echo_server/asio_udp_server_test.py b/components/asio/examples/udp_echo_server/asio_udp_server_test.py
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/asio_udp_server_test.py
rename to components/asio/examples/udp_echo_server/asio_udp_server_test.py
diff --git a/examples/protocols/asio/udp_echo_server/main/CMakeLists.txt b/components/asio/examples/udp_echo_server/main/CMakeLists.txt
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/main/CMakeLists.txt
rename to components/asio/examples/udp_echo_server/main/CMakeLists.txt
diff --git a/examples/protocols/asio/udp_echo_server/main/Kconfig.projbuild b/components/asio/examples/udp_echo_server/main/Kconfig.projbuild
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/main/Kconfig.projbuild
rename to components/asio/examples/udp_echo_server/main/Kconfig.projbuild
diff --git a/examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp b/components/asio/examples/udp_echo_server/main/udp_echo_server.cpp
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/main/udp_echo_server.cpp
rename to components/asio/examples/udp_echo_server/main/udp_echo_server.cpp
diff --git a/examples/protocols/asio/udp_echo_server/sdkconfig.defaults b/components/asio/examples/udp_echo_server/sdkconfig.defaults
similarity index 100%
rename from examples/protocols/asio/udp_echo_server/sdkconfig.defaults
rename to components/asio/examples/udp_echo_server/sdkconfig.defaults
diff --git a/components/asio/idf_component.yml b/components/asio/idf_component.yml
new file mode 100644
index 000000000..b2e11a570
--- /dev/null
+++ b/components/asio/idf_component.yml
@@ -0,0 +1,5 @@
+version: "1.0.1"
+description: ASIO
+dependencies:
+ idf:
+ version: ">=5.0"