diff --git a/cores/esp8266/Esp.h b/cores/esp8266/Esp.h index 405a94c8e..80b041196 100644 --- a/cores/esp8266/Esp.h +++ b/cores/esp8266/Esp.h @@ -55,7 +55,8 @@ enum RFMode { RF_DISABLED = 4 // disable RF after deep-sleep wake up, just like modem sleep, there will be the smallest current. }; -#define RF_MODE(mode) extern "C" int __get_rf_mode() { return mode; } +#define RF_MODE(mode) int __get_rf_mode() { return mode; } +#define RF_PRE_INIT() void __run_user_rf_pre_init() // compatibility definitions #define WakeMode RFMode @@ -71,7 +72,7 @@ enum ADCMode { ADC_VDD = 255 }; -#define ADC_MODE(mode) extern "C" int __get_adc_mode(void) { return (int) (mode); } +#define ADC_MODE(mode) int __get_adc_mode(void) { return (int) (mode); } typedef enum { FM_QIO = 0x00, diff --git a/cores/esp8266/core_esp8266_phy.c b/cores/esp8266/core_esp8266_phy.c index acdbabf54..d8f43f65a 100644 --- a/cores/esp8266/core_esp8266_phy.c +++ b/cores/esp8266/core_esp8266_phy.c @@ -242,6 +242,14 @@ static const uint8_t ICACHE_FLASH_ATTR phy_init_data[128] = [114] = 2 }; +// These functions will be overriden from C++ code. +// Unfortunately, we can't use extern "C" because Arduino preprocessor +// doesn't generate forward declarations for extern "C" functions correctly, +// so we use mangled names here. +#define __get_adc_mode _Z14__get_adc_modev +#define __get_rf_mode _Z13__get_rf_modev +#define __run_user_rf_pre_init _Z22__run_user_rf_pre_initv + extern int __real_register_chipv6_phy(uint8_t* init_data); extern int __wrap_register_chipv6_phy(uint8_t* init_data) { if (init_data != NULL) { diff --git a/tests/test_overrides/test_overrides.ino b/tests/test_overrides/test_overrides.ino new file mode 100644 index 000000000..fe963492f --- /dev/null +++ b/tests/test_overrides/test_overrides.ino @@ -0,0 +1,11 @@ +ADC_MODE(ADC_VCC); +RF_MODE(RF_DISABLED); +RF_PRE_INIT() +{ +} + +void setup() { +} + +void loop() { +}