Skip to content

Commit d3a4544

Browse files
authored
Merge pull request #3 from stm32duino/master
Sync to 1.3.0
2 parents 1848f11 + 3860563 commit d3a4544

File tree

243 files changed

+173603
-154847
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

243 files changed

+173603
-154847
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Arduino core support for STM32 based boards
2-
### Latest release [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Core_STM32.svg)](https://github.com/stm32duino/Arduino_Core_STM32/releases/latest) [![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Core_STM32/1.2.0.svg)](https://github.com/stm32duino/Arduino_Core_STM32/compare/1.2.0...master)
2+
### Latest release [![GitHub release](https://img.shields.io/github/release/stm32duino/Arduino_Core_STM32.svg)](https://github.com/stm32duino/Arduino_Core_STM32/releases/latest) [![GitHub commits](https://img.shields.io/github/commits-since/stm32duino/Arduino_Core_STM32/1.3.0.svg)](https://github.com/stm32duino/Arduino_Core_STM32/compare/1.3.0...master)
33

44
**Warning**: release versioning has been changed from date versioning to semantic one. See [Release Versioning change](https://github.com/stm32duino/wiki/wiki/Release-Versioning-change)
55

@@ -26,6 +26,7 @@ For advanced user, you can use the repository: see the [Using git repository](ht
2626
* STM32F0
2727
* [Nucleo F030R8](http://www.st.com/en/evaluation-tools/nucleo-f030r8.html)
2828
* [Nucleo F091RC](http://www.st.com/en/evaluation-tools/nucleo-f091rc.html)
29+
* [32F0308DISCOVERY](http://www.st.com/en/evaluation-tools/32f0308discovery.html)
2930

3031
* STM32F1
3132
* BluePill F103C8 (Basic support, no USB)
@@ -62,6 +63,8 @@ For advanced user, you can use the repository: see the [Using git repository](ht
6263
* STM32L4
6364
* [Nucleo L432KC](http://www.st.com/en/evaluation-tools/nucleo-l432kc.html)
6465
* [Nucleo L476RG](http://www.st.com/en/evaluation-tools/nucleo-l476rg.html)
66+
* [NUCLEO-L496ZG-P](http://www.st.com/en/evaluation-tools/nucleo-l496zg.html)
67+
* [NUCLEO-L496ZG-P](http://www.st.com/en/evaluation-tools/nucleo-l496zg-p.html)
6568
* [B-L475E-IOT01A](http://www.st.com/en/evaluation-tools/b-l475e-iot01a.html)
6669

6770
### Next release

boards.txt

Lines changed: 59 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,30 @@ Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.product_line=STM32F429xx
4949
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.variant=NUCLEO_F429ZI
5050
Nucleo_144.menu.pnum.NUCLEO_F429ZI.build.cmsis_lib_gcc=arm_cortexM4l_math
5151

52+
# NUCLEO_L496ZG board
53+
Nucleo_144.menu.pnum.NUCLEO_L496ZG=Nucleo L496ZG
54+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.node=NODE_L496ZG
55+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.upload.maximum_size=1048576
56+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.upload.maximum_data_size=327680
57+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.mcu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
58+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.board=NUCLEO_L496ZG
59+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.series=STM32L4xx
60+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.product_line=STM32L496xx
61+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.variant=NUCLEO_L496ZG
62+
Nucleo_144.menu.pnum.NUCLEO_L496ZG.build.cmsis_lib_gcc=arm_cortexM4l_math
63+
64+
# NUCLEO_L496ZG-P board
65+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P=Nucleo L496ZG-P
66+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.node=NODE_L496ZG
67+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.upload.maximum_size=1048576
68+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.upload.maximum_data_size=327680
69+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.mcu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
70+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.board=NUCLEO_L496ZG_P
71+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.series=STM32L4xx
72+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.product_line=STM32L496xx
73+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.variant=NUCLEO_L496ZG
74+
Nucleo_144.menu.pnum.NUCLEO_L496ZG-P.build.cmsis_lib_gcc=arm_cortexM4l_math
75+
5276
# Upload menu
5377
Nucleo_144.menu.upload_method.MassStorage=Mass Storage
5478
Nucleo_144.menu.upload_method.MassStorage.upload.protocol=
@@ -472,53 +496,41 @@ Maple.menu.upload_method.serialMethod.upload.tool=serial_upload
472496

473497
################################################################################
474498
# Serialx activation
475-
Nucleo_144.menu.xserial.generic=Generic Serial
476-
Nucleo_144.menu.xserial.none=No Serial
477-
Nucleo_144.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
478-
Nucleo_144.menu.xserial.all=All (up to 10)
479-
Nucleo_144.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
480-
Nucleo_144.menu.xserial.third=Enable first third (USART1 to 3 if available)
481-
Nucleo_144.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
482-
483-
Nucleo_64.menu.xserial.generic=Generic Serial
484-
Nucleo_64.menu.xserial.none=No Serial
485-
Nucleo_64.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
486-
Nucleo_64.menu.xserial.all=All (up to 10)
487-
Nucleo_64.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
488-
Nucleo_64.menu.xserial.third=Enable first third (USART1 to 3 if available)
489-
Nucleo_64.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
490-
491-
Nucleo_32.menu.xserial.generic=Generic Serial
492-
Nucleo_32.menu.xserial.none=No Serial
493-
Nucleo_32.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
494-
Nucleo_32.menu.xserial.all=All (up to 10)
495-
Nucleo_32.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
496-
Nucleo_32.menu.xserial.third=Enable first third (USART1 to 3 if available)
497-
Nucleo_32.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
498-
499-
Disco.menu.xserial.generic=Generic Serial
500-
Disco.menu.xserial.none=No Serial
501-
Disco.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
502-
Disco.menu.xserial.all=All (up to 10)
503-
Disco.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
504-
Disco.menu.xserial.third=Enable first third (USART1 to 3 if available)
505-
Disco.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
506-
507-
GenF103.menu.xserial.generic=Generic Serial
508-
GenF103.menu.xserial.none=No Serial
509-
GenF103.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
510-
GenF103.menu.xserial.all=All (up to 10)
511-
GenF103.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
512-
GenF103.menu.xserial.third=Enable first third (USART1 to 3 if available)
513-
GenF103.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
514-
515-
Maple.menu.xserial.generic=Generic Serial
516-
Maple.menu.xserial.none=No Serial
517-
Maple.menu.xserial.none.build.xSerial=-DNO_HWSERIAL
518-
Maple.menu.xserial.all=All (up to 10)
519-
Maple.menu.xserial.all.build.xSerial=-DALL_HWSERIAL
520-
Maple.menu.xserial.third=Enable first third (USART1 to 3 if available)
521-
Maple.menu.xserial.third.build.xSerial=-DFIRST_THIRD_HWSERIAL
499+
Nucleo_144.menu.xserial.generic=Enabled with generic Serial
500+
Nucleo_144.menu.xserial.none=Enabled without generic Serial
501+
Nucleo_144.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
502+
Nucleo_144.menu.xserial.disabled=Disabled (No Serial)
503+
Nucleo_144.menu.xserial.disabled.build.xSerial=
504+
505+
Nucleo_64.menu.xserial.generic=Enabled with generic Serial
506+
Nucleo_64.menu.xserial.none=Enabled without generic Serial
507+
Nucleo_64.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
508+
Nucleo_64.menu.xserial.disabled=Disabled (No Serial)
509+
Nucleo_64.menu.xserial.disabled.build.xSerial=
510+
511+
Nucleo_32.menu.xserial.generic=Enabled with generic Serial
512+
Nucleo_32.menu.xserial.none=Enabled without generic Serial
513+
Nucleo_32.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
514+
Nucleo_32.menu.xserial.disabled=Disabled (No Serial)
515+
Nucleo_32.menu.xserial.disabled.build.xSerial=
516+
517+
Disco.menu.xserial.generic=Enabled with generic Serial
518+
Disco.menu.xserial.none=Enabled without generic Serial
519+
Disco.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
520+
Disco.menu.xserial.disabled=Disabled (No Serial)
521+
Disco.menu.xserial.disabled.build.xSerial=
522+
523+
GenF103.menu.xserial.generic=Enabled with generic Serial
524+
GenF103.menu.xserial.none=Enabled without generic Serial
525+
GenF103.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
526+
GenF103.menu.xserial.disabled=Disabled (No Serial)
527+
GenF103.menu.xserial.disabled.build.xSerial=
528+
529+
Maple.menu.xserial.generic=Enabled with generic Serial
530+
Maple.menu.xserial.none=Enabled without generic Serial
531+
Maple.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
532+
Maple.menu.xserial.disabled=Disabled (No Serial)
533+
Maple.menu.xserial.disabled.build.xSerial=
522534

523535
# USB connectivity
524536
Nucleo_144.menu.usb.none=None

cores/arduino/HardwareSerial.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
#include "Arduino.h"
3131
#include "HardwareSerial.h"
3232

33-
#if !defined(NO_HWSERIAL)
33+
#if defined(HAL_UART_MODULE_ENABLED)
3434
#if defined(HAVE_HWSERIAL1) || defined(HAVE_HWSERIAL2) || defined(HAVE_HWSERIAL3) ||\
3535
defined(HAVE_HWSERIAL4) || defined(HAVE_HWSERIAL5) || defined(HAVE_HWSERIAL6) ||\
3636
defined(HAVE_HWSERIAL7) || defined(HAVE_HWSERIAL8) || defined(HAVE_HWSERIAL8) ||\
37-
defined(HAVE_HWSERIAL10)
37+
defined(HAVE_HWSERIAL10) || defined(HAVE_HWSERIALLP1)
3838
// SerialEvent functions are weak, so when the user doesn't define them,
3939
// the linker just sets their address to 0 (which is checked below).
4040
#if defined(HAVE_HWSERIAL1)
@@ -103,6 +103,12 @@
103103
void serialEvent10() __attribute__((weak));
104104
#endif
105105

106+
#if defined(HAVE_HWSERIALLP1)
107+
HardwareSerial SerialLP1(LPUART1);
108+
void serialEventLP1() __attribute__((weak));
109+
#endif
110+
#endif // HAVE_HWSERIALx
111+
106112
void serialEventRun(void)
107113
{
108114
#if defined(HAVE_HWSERIAL1)
@@ -135,6 +141,9 @@ void serialEventRun(void)
135141
#if defined(HAVE_HWSERIAL10)
136142
if (serialEventl10 && Serial10.available()) serialEvent10();
137143
#endif
144+
#if defined(HAVE_HWSERIALLP1)
145+
if (serialEventLP1 && SerialLP1.available()) serialEventLP1();
146+
#endif
138147
}
139148

140149
// Constructors ////////////////////////////////////////////////////////////////
@@ -391,5 +400,4 @@ void HardwareSerial::setRx(PinName _rx) {
391400
void HardwareSerial::setTx(PinName _tx){
392401
_serial.pin_tx = _tx;
393402
}
394-
#endif // HAVE_HWSERIALx
395-
#endif // !NO_HWSERIAL
403+
#endif // HAL_UART_MODULE_ENABLED

cores/arduino/HardwareSerial.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ extern HardwareSerial Serial7;
146146
extern HardwareSerial Serial8;
147147
extern HardwareSerial Serial9;
148148
extern HardwareSerial Serial10;
149+
extern HardwareSerial SerialLP1;
149150

150151
extern void serialEventRun(void) __attribute__((weak));
151152

cores/arduino/pins_arduino.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ enum {
4949

5050
// Arduino analog pins
5151
// Analog pins must be contiguous to be able to loop on each value
52-
#define MAX_ANALOG_INPUTS 20
52+
#define MAX_ANALOG_INPUTS 24
5353
_Static_assert(NUM_ANALOG_INPUTS <= MAX_ANALOG_INPUTS,
5454
"Core NUM_ANALOG_INPUTS limited to MAX_ANALOG_INPUTS" );
5555
_Static_assert(NUM_ANALOG_FIRST >= NUM_ANALOG_INPUTS,
@@ -138,6 +138,22 @@ static const uint8_t A18 = PIN_A18;
138138
#define PIN_A19 (PIN_A18 + 1)
139139
static const uint8_t A19 = PIN_A19;
140140
#endif
141+
#if NUM_ANALOG_INPUTS > 20
142+
#define PIN_A20 (PIN_A19 + 1)
143+
static const uint8_t A20 = PIN_A20;
144+
#endif
145+
#if NUM_ANALOG_INPUTS > 21
146+
#define PIN_A21 (PIN_A20 + 1)
147+
static const uint8_t A21 = PIN_A21;
148+
#endif
149+
#if NUM_ANALOG_INPUTS > 22
150+
#define PIN_A22 (PIN_A21 + 1)
151+
static const uint8_t A22 = PIN_A22;
152+
#endif
153+
#if NUM_ANALOG_INPUTS > 23
154+
#define PIN_A23 (PIN_A22 + 1)
155+
static const uint8_t A23 = PIN_A23;
156+
#endif
141157

142158
// Default for Arduino connector compatibility
143159
// SPI Definitions

cores/arduino/stm32/PortNames.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ GPIO_TypeDef *set_GPIO_Port_Clock(uint32_t port_idx) {
132132
#endif
133133
#if defined GPIOG_BASE
134134
case PortG:
135+
#if defined(STM32L4xx) && defined(PWR_CR2_IOSV)
136+
// Enable VDDIO2 supply for 14 I/Os (Port G[15:2])
137+
__HAL_RCC_PWR_CLK_ENABLE();
138+
HAL_PWREx_EnableVddIO2();
139+
#endif
135140
gpioPort = (GPIO_TypeDef *)GPIOG_BASE;
136141
__HAL_RCC_GPIOG_CLK_ENABLE();
137142
break;

cores/arduino/stm32/clock.c

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
*
3636
******************************************************************************
3737
*/
38-
#include "stm32_def.h"
38+
#include "clock.h"
3939

4040
#ifdef __cplusplus
4141
extern "C" {
@@ -120,6 +120,64 @@ void delayInsideIT(uint32_t delay_us)
120120
#endif
121121
}
122122

123+
/**
124+
* @brief Enable the specified clock if not already set
125+
* @param source: clock source: LSE_CLOCK, LSI_CLOCK, HSI_CLOCK or HSE_CLOCK
126+
* @retval None
127+
*/
128+
void enableClock(sourceClock_t source)
129+
{
130+
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
131+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
132+
133+
switch(source) {
134+
case LSI_CLOCK:
135+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {
136+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
137+
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
138+
}
139+
break;
140+
case HSI_CLOCK:
141+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {
142+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
143+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
144+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
145+
}
146+
break;
147+
case LSE_CLOCK:
148+
/* Enable Power Clock */
149+
if(__HAL_RCC_PWR_IS_CLK_DISABLED()) {
150+
__HAL_RCC_PWR_CLK_ENABLE();
151+
}
152+
#ifdef HAL_PWR_MODULE_ENABLED
153+
/* Allow access to Backup domain */
154+
HAL_PWR_EnableBkUpAccess();
155+
#endif
156+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {
157+
#ifdef __HAL_RCC_LSEDRIVE_CONFIG
158+
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
159+
#endif
160+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
161+
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
162+
}
163+
break;
164+
case HSE_CLOCK:
165+
if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {
166+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
167+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
168+
}
169+
break;
170+
default:
171+
/* No valid clock to enable */
172+
break;
173+
}
174+
if(RCC_OscInitStruct.OscillatorType != RCC_OSCILLATORTYPE_NONE) {
175+
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
176+
Error_Handler();
177+
}
178+
}
179+
}
180+
123181
#ifdef __cplusplus
124182
}
125183
#endif

cores/arduino/stm32/clock.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,22 @@
4747
#endif
4848

4949
/* Exported types ------------------------------------------------------------*/
50+
/* Clock source selection */
51+
typedef enum {
52+
LSI_CLOCK,
53+
HSI_CLOCK,
54+
LSE_CLOCK,
55+
HSE_CLOCK
56+
} sourceClock_t;
57+
5058
/* Exported constants --------------------------------------------------------*/
5159
/* Exported macro ------------------------------------------------------------*/
5260
/* Exported functions ------------------------------------------------------- */
5361
uint32_t GetCurrentMilli(void);
5462
uint32_t GetCurrentMicro(void);
5563
void delayInsideIT(uint32_t delay_us);
5664

65+
void enableClock(sourceClock_t source);
5766
#ifdef __cplusplus
5867
}
5968
#endif

cores/arduino/stm32/low_power.c

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
extern "C" {
4646
#endif
4747

48-
#ifdef UART_IT_WUF
48+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
4949
/* Save UART handler for callback */
5050
static UART_HandleTypeDef* WakeUpUart = NULL;
5151
#endif
@@ -201,7 +201,7 @@ void LowPower_sleep(uint32_t regulator){
201201
void LowPower_stop(serial_t *obj){
202202
__disable_irq();
203203

204-
#ifdef UART_IT_WUF
204+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
205205
if (WakeUpUart != NULL) {
206206
HAL_UARTEx_EnableStopMode(WakeUpUart);
207207
}
@@ -223,8 +223,8 @@ void LowPower_stop(serial_t *obj){
223223
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
224224

225225
/* Exit Stop mode reset clocks */
226-
SystemClock_Config();
227-
#ifdef UART_IT_WUF
226+
SystemClock_ConfigFromStop();
227+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
228228
if (WakeUpUart != NULL) {
229229
/* In case of WakeUp from UART, reset its clock source to HSI */
230230
uart_config_lowpower(obj);
@@ -290,7 +290,7 @@ void LowPower_shutdown(){
290290
* @retval None
291291
*/
292292
void LowPower_EnableWakeUpUart(serial_t* serial, void (*FuncPtr)( void ) ) {
293-
#ifdef UART_IT_WUF
293+
#if defined(UART_IT_WUF) && defined(HAL_UART_MODULE_ENABLED)
294294
UART_WakeUpTypeDef WakeUpSelection;
295295
if(serial == NULL) {
296296
return;
@@ -319,6 +319,17 @@ void LowPower_EnableWakeUpUart(serial_t* serial, void (*FuncPtr)( void ) ) {
319319
WakeUpUartCb = FuncPtr;
320320
}
321321

322+
/**
323+
* @brief Configures system clock after wake-up from STOP
324+
* @note Weaked function which can be redefined by user at the sketch level.
325+
* By default, call 'SystemClock_Config()'.
326+
* @param None
327+
* @retval None
328+
*/
329+
WEAK void SystemClock_ConfigFromStop(void) {
330+
SystemClock_Config();
331+
}
332+
322333
#ifdef __cplusplus
323334
}
324335
#endif

0 commit comments

Comments
 (0)