@@ -80,6 +80,7 @@ extern "C" {
8080
8181
8282
83+
8384#if MG_ARCH == MG_ARCH_ARMCGT
8485
8586#include < ctype.h>
@@ -122,6 +123,85 @@ extern "C" {
122123#endif
123124
124125
126+ #if MG_ARCH == MG_ARCH_CUBE
127+
128+ #include < ctype.h>
129+ #include < errno.h>
130+ #include < stdarg.h>
131+ #include < stdbool.h>
132+ #include < stdio.h>
133+ #include < stdlib.h>
134+ #include < string.h>
135+ #include < sys/stat.h>
136+ #include < sys/time.h>
137+ #include < sys/types.h>
138+ #include < time.h>
139+ #include < unistd.h>
140+
141+ // Cube-generated header, includes ST Cube HAL
142+ // NOTE: use angle brackets to prevent amalgamator ditching it
143+ #include < main.h>
144+
145+ #ifndef MG_PATH_MAX
146+ #define MG_PATH_MAX 100
147+ #endif
148+
149+ #ifndef MG_ENABLE_DIRLIST
150+ #define MG_ENABLE_DIRLIST 0
151+ #endif
152+
153+ #ifndef MG_ENABLE_SOCKET
154+ #define MG_ENABLE_SOCKET 0
155+ #endif
156+
157+ #ifndef MG_ENABLE_TCPIP
158+ #define MG_ENABLE_TCPIP 1 // Enable built-in TCP/IP stack
159+ #endif
160+
161+ #if MG_ENABLE_TCPIP && !defined(MG_ENABLE_DRIVER_STM32F) && !defined(MG_ENABLE_DRIVER_STM32H)
162+ #if defined(STM32F1) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7)
163+ #define MG_ENABLE_DRIVER_STM32F 1
164+ #elif defined(STM32H5) || defined(STM32H7)
165+ #define MG_ENABLE_DRIVER_STM32H 1
166+ #else
167+ #error Select a driver in mongoose_config.h
168+ #endif
169+ #endif
170+
171+ #if !defined(MG_OTA) && defined(STM32F1) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7)
172+ #define MG_OTA MG_OTA_STM32F
173+ #elif !defined(MG_OTA) && defined(STM32H5)
174+ #define MG_OTA MG_OTA_STM32H5
175+ #elif !defined(MG_OTA) && defined(STM32H7)
176+ #define MG_OTA MG_OTA_STM32H7
177+ #endif
178+
179+ #ifndef STM32H5
180+ #define HAL_ICACHE_IsEnabled () 0
181+ #define HAL_ICACHE_Enable () (void ) 0
182+ #define HAL_ICACHE_Disable () (void ) 0
183+ #endif
184+
185+ #ifndef MG_SET_MAC_ADDRESS
186+ // Construct MAC address from UUID
187+ #define MGUID ((uint32_t *) UID_BASE ) // Unique 96-bit chip ID
188+ #define MG_SET_MAC_ADDRESS (mac ) \
189+ do { \
190+ int icache_enabled_ = HAL_ICACHE_IsEnabled (); \
191+ if (icache_enabled_) HAL_ICACHE_Disable (); \
192+ mac[0 ] = 42 ; \
193+ mac[1 ] = ((MGUID [0 ] >> 0 ) & 255 ) ^ ((MGUID [2 ] >> 19 ) & 255 ); \
194+ mac[2 ] = ((MGUID [0 ] >> 10 ) & 255 ) ^ ((MGUID [1 ] >> 10 ) & 255 ); \
195+ mac[3 ] = (MGUID [0 ] >> 19 ) & 255 ; \
196+ mac[4 ] = ((MGUID [1 ] >> 0 ) & 255 ) ^ ((MGUID [2 ] >> 10 ) & 255 ); \
197+ mac[5 ] = ((MGUID [2 ] >> 0 ) & 255 ) ^ ((MGUID [1 ] >> 19 ) & 255 ); \
198+ if (icache_enabled_) HAL_ICACHE_Enable (); \
199+ } while (0 )
200+ #endif
201+
202+ #endif
203+
204+
125205#if MG_ARCH == MG_ARCH_ESP32
126206
127207#include < ctype.h>
@@ -3419,6 +3499,7 @@ struct mg_tcpip_driver_stm32f_data {
34193499 mif_.driver_data = &driver_data_; \
34203500 MG_SET_MAC_ADDRESS (mif_.mac ); \
34213501 mg_tcpip_init (mgr, &mif_); \
3502+ NVIC_EnableIRQ (ETH_IRQn); \
34223503 MG_INFO ((" Driver: stm32f, MAC: %M" , mg_print_mac, mif_.mac )); \
34233504 } while (0 )
34243505
@@ -3479,6 +3560,7 @@ struct mg_tcpip_driver_stm32h_data {
34793560 mif_.driver_data = &driver_data_; \
34803561 MG_SET_MAC_ADDRESS (mif_.mac ); \
34813562 mg_tcpip_init (mgr, &mif_); \
3563+ NVIC_EnableIRQ (ETH_IRQn); \
34823564 MG_INFO ((" Driver: stm32h, MAC: %M" , mg_print_mac, mif_.mac )); \
34833565 } while (0 )
34843566
0 commit comments