Merge branch 'feature/asio_update' into 'master'

asio: updated ASIO port to use latest asio and esp-idf features

See merge request espressif/esp-idf!6623
This commit is contained in:
Angus Gratton
2020-01-10 12:57:25 +08:00
5 changed files with 36 additions and 22 deletions

View File

@@ -22,8 +22,12 @@
# define ASIO_NO_EXCEPTIONS # define ASIO_NO_EXCEPTIONS
# endif // CONFIG_COMPILER_CXX_EXCEPTIONS # endif // CONFIG_COMPILER_CXX_EXCEPTIONS
# ifndef CONFIG_COMPILER_RTTI
# define ASIO_NO_TYPEID
# endif // CONFIG_COMPILER_RTTI
// //
// LWIP compatifility inet and address macros/functions // LWIP compatibility inet and address macros/functions
// //
# define LWIP_COMPAT_SOCKET_INET 1 # define LWIP_COMPAT_SOCKET_INET 1
# define LWIP_COMPAT_SOCKET_ADDR 1 # define LWIP_COMPAT_SOCKET_ADDR 1
@@ -34,12 +38,6 @@
# define ASIO_DISABLE_SERIAL_PORT # define ASIO_DISABLE_SERIAL_PORT
# define ASIO_SEPARATE_COMPILATION # define ASIO_SEPARATE_COMPILATION
# define ASIO_STANDALONE # define ASIO_STANDALONE
# define ASIO_NO_TYPEID
# define ASIO_DISABLE_SIGNAL
# define ASIO_HAS_PTHREADS # define ASIO_HAS_PTHREADS
# define ASIO_DISABLE_EPOLL
# define ASIO_DISABLE_EVENTFD
# define ASIO_DISABLE_SIGNAL
# define ASIO_DISABLE_SIGACTION
#endif // _ESP_ASIO_CONFIG_H_ #endif // _ESP_ASIO_CONFIG_H_

View File

@@ -15,6 +15,7 @@
#define _ESP_PLATFORM_NET_IF_H_ #define _ESP_PLATFORM_NET_IF_H_
#include "lwip/sockets.h" #include "lwip/sockets.h"
#include "lwip/if_api.h"
#define MSG_DONTROUTE 0x4 /* send without using routing tables */ #define MSG_DONTROUTE 0x4 /* send without using routing tables */
#define SOCK_SEQPACKET 5 /* sequenced packet stream */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */
@@ -22,8 +23,6 @@
#define SOCK_SEQPACKET 5 /* sequenced packet stream */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */
#define SOMAXCONN 128 #define SOMAXCONN 128
#define IF_NAMESIZE 16
#define IPV6_UNICAST_HOPS 4 /* int; IP6 hops */ #define IPV6_UNICAST_HOPS 4 /* int; IP6 hops */
#define NI_MAXHOST 1025 #define NI_MAXHOST 1025

View File

@@ -5,7 +5,7 @@ const static char *TAG = "esp32_asio_pthread";
int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id) int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id)
{ {
ESP_LOGW(TAG, "%s: not yet supported!", __FUNCTION__); ESP_LOGW(TAG, "%s: not yet supported!", __func__);
return 0; return 0;
} }
@@ -14,6 +14,24 @@ int pthread_setcancelstate(int state, int *oldstate)
return 0; return 0;
} }
// This functions (pthread_sigmask(), sigfillset) are called from ASIO::signal_blocker to temporarily silence signals
// Since signals are not yet supported in ESP pthread these functions serve as no-ops
//
int pthread_sigmask(int how, const sigset_t *restrict set, sigset_t *restrict oset)
{
ESP_LOGD(TAG, "%s: Signals not supported in ESP pthread", __func__);
return 0;
}
int sigfillset(sigset_t *what)
{
ESP_LOGD(TAG, "%s: Signals not supported in ESP pthread", __func__);
if (what != NULL) {
*what = ~0;
}
return 0;
}
void newlib_include_pthread_impl(void) void newlib_include_pthread_impl(void)
{ {
// Linker hook, exists for no other purpose // Linker hook, exists for no other purpose

View File

@@ -15,18 +15,17 @@ Supported features
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
ESP platform port currently supports only network asynchronous socket operations; does not support serial port and ssl. ESP platform port currently supports only network asynchronous socket operations; does not support serial port and ssl.
Internal asio settings for ESP include Internal asio settings for ESP include
- EXCEPTIONS: Supported, choice in menuconfig
- SIGNAL, SIGACTION: Not supported - EXCEPTIONS are enabled in ASIO if enabled in menuconfig
- EPOLL, EVENTFD: Not supported - TYPEID is enabled in ASIO if enabled in menuconfig
- TYPEID: Disabled by default, but supported in toolchain and asio (provided stdlib recompiled with -frtti)
Application Example Application Example
------------------- -------------------
ESP examples are based on standard asio examples `examples/protocols/asio`: ESP examples are based on standard asio :example:`examples/protocols/asio`:
- udp_echo_server
- tcp_echo_server - :example:`examples/protocols/asio/udp_echo_server`
- chat_client - :example:`examples/protocols/asio/tcp_echo_server`
- chat_server - :example:`examples/protocols/asio/chat_client`
- :example:`examples/protocols/asio/chat_server`
Please refer to the specific example README.md for details Please refer to the specific example README.md for details