mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
esp-compiler: add designated init macros to make esp configuration pattern viable under C++
This commit is contained in:
parent
d8da662dec
commit
50588ff3f7
@ -30,4 +30,22 @@
|
|||||||
#define unlikely(x) (x)
|
#define unlikely(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utility macros used for designated initializers, which work differently
|
||||||
|
* in C99 and C++ standards mainly for aggregate types.
|
||||||
|
* The member separator, comma, is already part of the macro, please omit the trailing comma.
|
||||||
|
* Usage example:
|
||||||
|
* struct config_t { char* pchr; char arr[SIZE]; } config = {
|
||||||
|
* ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(pchr)
|
||||||
|
* ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(arr, "Value")
|
||||||
|
* };
|
||||||
|
*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(member, value) { .member = value },
|
||||||
|
#define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(member) .member = { },
|
||||||
|
#else
|
||||||
|
#define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(member, value) .member = value,
|
||||||
|
#define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(member)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -15,19 +15,12 @@
|
|||||||
#ifndef _ESP_NETIF_DEFAULTS_H
|
#ifndef _ESP_NETIF_DEFAULTS_H
|
||||||
#define _ESP_NETIF_DEFAULTS_H
|
#define _ESP_NETIF_DEFAULTS_H
|
||||||
|
|
||||||
|
#include "esp_compiler.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
|
||||||
// Designated initializers work differently under C++ and C compiler
|
|
||||||
//
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define _ESP_NETIF_EMPTY_AGGREGATE_MEMBER(item) .item = { },
|
|
||||||
#else
|
|
||||||
#define _ESP_NETIF_EMPTY_AGGREGATE_MEMBER(item)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Macros to assemble master configs with partial configs from netif, stack and driver
|
// Macros to assemble master configs with partial configs from netif, stack and driver
|
||||||
//
|
//
|
||||||
@ -35,8 +28,8 @@ extern "C" {
|
|||||||
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_STA() \
|
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_STA() \
|
||||||
{ \
|
{ \
|
||||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(mac) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(ip_info) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||||
.get_ip_event = IP_EVENT_STA_GOT_IP, \
|
.get_ip_event = IP_EVENT_STA_GOT_IP, \
|
||||||
.lost_ip_event = IP_EVENT_STA_LOST_IP, \
|
.lost_ip_event = IP_EVENT_STA_LOST_IP, \
|
||||||
.if_key = "WIFI_STA_DEF", \
|
.if_key = "WIFI_STA_DEF", \
|
||||||
@ -47,7 +40,7 @@ extern "C" {
|
|||||||
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_AP() \
|
#define ESP_NETIF_INHERENT_DEFAULT_WIFI_AP() \
|
||||||
{ \
|
{ \
|
||||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_SERVER | ESP_NETIF_FLAG_AUTOUP), \
|
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_SERVER | ESP_NETIF_FLAG_AUTOUP), \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(mac) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||||
.ip_info = &_g_esp_netif_soft_ap_ip, \
|
.ip_info = &_g_esp_netif_soft_ap_ip, \
|
||||||
.get_ip_event = 0, \
|
.get_ip_event = 0, \
|
||||||
.lost_ip_event = 0, \
|
.lost_ip_event = 0, \
|
||||||
@ -59,8 +52,8 @@ extern "C" {
|
|||||||
#define ESP_NETIF_INHERENT_DEFAULT_ETH() \
|
#define ESP_NETIF_INHERENT_DEFAULT_ETH() \
|
||||||
{ \
|
{ \
|
||||||
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
.flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_FLAG_GARP | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(mac) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(ip_info) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||||
.get_ip_event = IP_EVENT_ETH_GOT_IP, \
|
.get_ip_event = IP_EVENT_ETH_GOT_IP, \
|
||||||
.lost_ip_event = 0, \
|
.lost_ip_event = 0, \
|
||||||
.if_key = "ETH_DEF", \
|
.if_key = "ETH_DEF", \
|
||||||
@ -71,8 +64,8 @@ extern "C" {
|
|||||||
#define ESP_NETIF_INHERENT_DEFAULT_PPP() \
|
#define ESP_NETIF_INHERENT_DEFAULT_PPP() \
|
||||||
{ \
|
{ \
|
||||||
.flags = ESP_NETIF_FLAG_IS_PPP, \
|
.flags = ESP_NETIF_FLAG_IS_PPP, \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(mac) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
|
||||||
_ESP_NETIF_EMPTY_AGGREGATE_MEMBER(ip_info) \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
|
||||||
.get_ip_event = IP_EVENT_PPP_GOT_IP, \
|
.get_ip_event = IP_EVENT_PPP_GOT_IP, \
|
||||||
.lost_ip_event = IP_EVENT_PPP_LOST_IP, \
|
.lost_ip_event = IP_EVENT_PPP_LOST_IP, \
|
||||||
.if_key = "PPP_DEF", \
|
.if_key = "PPP_DEF", \
|
||||||
@ -159,7 +152,7 @@ extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_ppp;
|
|||||||
//
|
//
|
||||||
// Include default common configs inherent to esp-netif
|
// Include default common configs inherent to esp-netif
|
||||||
// - These inherent configs are defined in esp_netif_defaults.c and describe
|
// - These inherent configs are defined in esp_netif_defaults.c and describe
|
||||||
// common behavioural patters for common interfaces such as STA, AP, ETH
|
// common behavioural patterns for common interfaces such as STA, AP, ETH, PPP
|
||||||
//
|
//
|
||||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_sta_config;
|
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_sta_config;
|
||||||
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ap_config;
|
extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ap_config;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "esp_err.h"
|
#include "esp_err.h"
|
||||||
#include "esp_wifi_crypto_types.h"
|
#include "esp_wifi_crypto_types.h"
|
||||||
|
#include "esp_compiler.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -71,20 +72,13 @@ typedef struct {
|
|||||||
wps_factory_information_t factory_info;
|
wps_factory_information_t factory_info;
|
||||||
} esp_wps_config_t;
|
} esp_wps_config_t;
|
||||||
|
|
||||||
/* C & C++ compilers have different rules about C99-style named initializers */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define WPS_AGG(X) { X }
|
|
||||||
#else
|
|
||||||
#define WPS_AGG(X) X
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WPS_CONFIG_INIT_DEFAULT(type) { \
|
#define WPS_CONFIG_INIT_DEFAULT(type) { \
|
||||||
.wps_type = type, \
|
.wps_type = type, \
|
||||||
.factory_info = { \
|
.factory_info = { \
|
||||||
WPS_AGG( .manufacturer = "ESPRESSIF" ), \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(manufacturer, "ESPRESSIF") \
|
||||||
WPS_AGG( .model_number = "ESP32" ), \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(model_number, "ESP32") \
|
||||||
WPS_AGG( .model_name = "ESPRESSIF IOT" ), \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(model_name, "ESPRESSIF IOT") \
|
||||||
WPS_AGG( .device_name = "ESP STATION" ), \
|
ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(device_name, "ESP STATION") \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user