Skip to content

Commit 7307640

Browse files
committed
Declare __get_adc_mode and __get_rf_mode with C++ linkage
Workaround for #1759. Using extern "C" qualifiers in sketch breaks compilation in Arduino IDE 1.6.8.
1 parent 9d4208e commit 7307640

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

cores/esp8266/Esp.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ enum RFMode {
5555
RF_DISABLED = 4 // disable RF after deep-sleep wake up, just like modem sleep, there will be the smallest current.
5656
};
5757

58-
#define RF_MODE(mode) extern "C" int __get_rf_mode() { return mode; }
58+
#define RF_MODE(mode) int __get_rf_mode() { return mode; }
59+
#define RF_PRE_INIT() void __run_user_rf_pre_init()
5960

6061
// compatibility definitions
6162
#define WakeMode RFMode
@@ -71,7 +72,7 @@ enum ADCMode {
7172
ADC_VDD = 255
7273
};
7374

74-
#define ADC_MODE(mode) extern "C" int __get_adc_mode(void) { return (int) (mode); }
75+
#define ADC_MODE(mode) int __get_adc_mode(void) { return (int) (mode); }
7576

7677
typedef enum {
7778
FM_QIO = 0x00,

cores/esp8266/core_esp8266_phy.c

+8
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,14 @@ static const uint8_t ICACHE_FLASH_ATTR phy_init_data[128] =
242242
[114] = 2
243243
};
244244

245+
// These functions will be overriden from C++ code.
246+
// Unfortunately, we can't use extern "C" because Arduino preprocessor
247+
// doesn't generate forward declarations for extern "C" functions correctly,
248+
// so we use mangled names here.
249+
#define __get_adc_mode _Z14__get_adc_modev
250+
#define __get_rf_mode _Z13__get_rf_modev
251+
#define __run_user_rf_pre_init _Z22__run_user_rf_pre_initv
252+
245253
extern int __real_register_chipv6_phy(uint8_t* init_data);
246254
extern int __wrap_register_chipv6_phy(uint8_t* init_data) {
247255
if (init_data != NULL) {
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
ADC_MODE(ADC_VCC);
2+
RF_MODE(RF_DISABLED);
3+
RF_PRE_INIT()
4+
{
5+
}
6+
7+
void setup() {
8+
}
9+
10+
void loop() {
11+
}

0 commit comments

Comments
 (0)