1 #include <stdint.h>
2 #include <stdlib.h>
3 
4 extern const char haas_help_text[];
5 
6 // Options to control how MicroPython is built for this port,
7 // overriding defaults in py/mpconfig.h.
8 
9 // system endianness
10 #define MP_ENDIANNESS_LITTLE        (1)
11 
12 // You can disable the built-in MicroPython compiler by setting the following
13 // config option to 0.  If you do this then you won't get a REPL prompt, but you
14 // will still be able to execute pre-compiled scripts, compiled with mpy-cross.
15 #define MICROPY_ENABLE_COMPILER     (1)
16 
17 // object representation and NLR handling
18 #define MICROPY_OBJ_REPR                    (MICROPY_OBJ_REPR_A)
19 #define MICROPY_NLR_SETJMP                  (1)
20 
21 // memory allocation policies
22 #define MICROPY_ALLOC_PATH_MAX              (256)
23 
24 // emitters
25 #define MICROPY_PERSISTENT_CODE_LOAD        (1)
26 #define MICROPY_EMIT_XTENSAWIN              (1)
27 
28 // compiler configuration
29 #define MICROPY_COMP_MODULE_CONST           (1)
30 #define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN    (1)
31 
32 // optimisations
33 #define MICROPY_OPT_COMPUTED_GOTO           (1)
34 #define MICROPY_OPT_MPZ_BITWISE             (1)
35 
36 // Python internal features
37 #define MICROPY_READER_VFS                  (0)
38 #define MICROPY_READER_POSIX                (1)
39 #define MICROPY_ENABLE_FINALISER            (0)
40 #define MICROPY_STACK_CHECK                 (1)
41 #define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1)
42 #define MICROPY_KBD_EXCEPTION               (1)
43 #define MICROPY_HELPER_REPL                 (1)
44 #define MICROPY_REPL_EMACS_KEYS             (1)
45 #define MICROPY_REPL_AUTO_INDENT            (1)
46 #define MICROPY_LONGINT_IMPL                (MICROPY_LONGINT_IMPL_MPZ)
47 #define MICROPY_ENABLE_SOURCE_LINE          (1)
48 #define MICROPY_ERROR_REPORTING             (MICROPY_ERROR_REPORTING_NORMAL)
49 #define MICROPY_WARNINGS                    (1)
50 #define MICROPY_FLOAT_IMPL                  (MICROPY_FLOAT_IMPL_FLOAT)
51 #define MICROPY_CPYTHON_COMPAT              (0)
52 #define MICROPY_STREAMS_NON_BLOCK           (1)
53 #define MICROPY_STREAMS_POSIX_API           (1)
54 #define MICROPY_MODULE_BUILTIN_INIT         (1)
55 #define MICROPY_MODULE_WEAK_LINKS           (1)
56 #define MICROPY_MODULE_FROZEN_STR           (0)
57 #define MICROPY_MODULE_FROZEN_MPY           (1)
58 #define MICROPY_QSTR_EXTRA_POOL             mp_qstr_frozen_const_pool
59 #define MICROPY_CAN_OVERRIDE_BUILTINS       (1)
60 #define MICROPY_USE_INTERNAL_ERRNO          (0) // errno.h from xtensa-esp32-elf/sys-include/sys
61 #define MICROPY_USE_INTERNAL_PRINTF         (0) // ESP32 SDK requires its own printf
62 #define MICROPY_ENABLE_SCHEDULER            (1)
63 #define MICROPY_SCHEDULER_DEPTH             (8)
64 #define MICROPY_VFS                         (1)
65 #define MICROPY_VFS_FAT                     (0)
66 #define MICROPY_VFS_POSIX                   (0)
67 #define USE_STATFS                          (MICROPY_VFS_POSIX)
68 
69 #define MICROPY_ENABLE_GC                   (1)
70 #define MICROPY_MALLOC_USES_ALLOCATED_SIZE  (1)
71 #define MICROPY_MEM_STATS                   (0)
72 
73 // control over Python builtins
74 #define MICROPY_PY_FUNCTION_ATTRS           (1)
75 #define MICROPY_PY_DESCRIPTORS              (1)
76 #define MICROPY_PY_DELATTR_SETATTR          (1)
77 #define MICROPY_PY_STR_BYTES_CMP_WARN       (1)
78 #define MICROPY_PY_BUILTINS_STR_UNICODE     (1)
79 #define MICROPY_PY_BUILTINS_STR_CENTER      (1)
80 #define MICROPY_PY_BUILTINS_STR_PARTITION   (1)
81 #define MICROPY_PY_BUILTINS_STR_SPLITLINES  (1)
82 #define MICROPY_PY_BUILTINS_BYTEARRAY       (1)
83 #define MICROPY_PY_BUILTINS_MEMORYVIEW      (1)
84 #define MICROPY_PY_BUILTINS_SET             (1)
85 #define MICROPY_PY_BUILTINS_SLICE           (1)
86 #define MICROPY_PY_BUILTINS_SLICE_ATTRS     (1)
87 #define MICROPY_PY_BUILTINS_SLICE_INDICES   (1)
88 #define MICROPY_PY_BUILTINS_FROZENSET       (1)
89 #define MICROPY_PY_BUILTINS_PROPERTY        (1)
90 #define MICROPY_PY_BUILTINS_RANGE_ATTRS     (1)
91 #define MICROPY_PY_BUILTINS_ROUND_INT       (1)
92 #define MICROPY_PY_ALL_SPECIAL_METHODS      (1)
93 #define MICROPY_PY_BUILTINS_COMPILE         (1)
94 #define MICROPY_PY_BUILTINS_ENUMERATE       (1)
95 #define MICROPY_PY_BUILTINS_EXECFILE        (1)
96 #define MICROPY_PY_BUILTINS_FILTER          (1)
97 #define MICROPY_PY_BUILTINS_REVERSED        (1)
98 #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED  (1)
99 #define MICROPY_PY_BUILTINS_INPUT           (1)
100 #define MICROPY_PY_BUILTINS_MIN_MAX         (1)
101 #define MICROPY_PY_BUILTINS_POW3            (1)
102 #define MICROPY_PY_BUILTINS_HELP            (1)
103 #define MICROPY_PY_BUILTINS_HELP_TEXT       haas_help_text
104 #define MICROPY_PY_BUILTINS_HELP_MODULES    (1)
105 #define MICROPY_PY___FILE__                 (1)
106 #define MICROPY_PY_MICROPYTHON_MEM_INFO     (1)
107 #define MICROPY_PY_ARRAY                    (1)
108 #define MICROPY_PY_ARRAY_SLICE_ASSIGN       (1)
109 #define MICROPY_PY_ATTRTUPLE                (1)
110 #define MICROPY_PY_COLLECTIONS              (1)
111 #define MICROPY_PY_COLLECTIONS_DEQUE        (1)
112 #define MICROPY_PY_COLLECTIONS_ORDEREDDICT  (1)
113 #define MICROPY_PY_MATH                     (1)
114 #define MICROPY_PY_MATH_SPECIAL_FUNCTIONS   (1)
115 #define MICROPY_PY_MATH_ISCLOSE             (1)
116 #define MICROPY_PY_CMATH                    (1)
117 #define MICROPY_PY_GC                       (1)
118 #define MICROPY_PY_IO                       (1)
119 #define MICROPY_PY_IO_IOBASE                (1)
120 #define MICROPY_PY_IO_FILEIO                (0)
121 #define MICROPY_PY_IO_BYTESIO               (1)
122 #define MICROPY_PY_IO_BUFFEREDWRITER        (1)
123 #define MICROPY_PY_STRUCT                   (1)
124 #define MICROPY_PY_SYS                      (1)
125 #define MICROPY_PY_SYS_MAXSIZE              (1)
126 #define MICROPY_PY_SYS_MODULES              (1)
127 #define MICROPY_PY_SYS_EXIT                 (1)
128 #define MICROPY_PY_SYS_ATEXIT               (1)
129 #define MICROPY_PY_SYS_STDFILES             (0)
130 #define MICROPY_PY_SYS_STDIO_BUFFER         (1)
131 #define MICROPY_PY_UERRNO                   (1)
132 #define MICROPY_PY_USELECT                  (1)
133 #define MICROPY_PY_UTIME_MP_HAL             (1)
134 #define MICROPY_PY_UTIME                    (1)
135 #define MICROPY_PY_THREAD                   (1)
136 #define MICROPY_PY_THREAD_GIL               (1)
137 #define MICROPY_PY_THREAD_GIL_VM_DIVISOR    (32)
138 
139 #define MICROPY_DEBUG_VERBOSE               (0)
140 
141 // extended modules
142 #define MICROPY_PY_BLUETOOTH                (0)
143 #ifndef MICROPY_PY_BLUETOOTH
144     #define MICROPY_PY_BLUETOOTH                (1)
145     #define MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE (1)
146     #define MICROPY_BLUETOOTH_NIMBLE            (1)
147     #define MICROPY_BLUETOOTH_NIMBLE_BINDINGS_ONLY (1)
148 #endif
149 #define MICROPY_EPOCH_IS_1970               (1)
150 #define MICROPY_PY_UASYNCIO                 (1)
151 #define MICROPY_PY_UCTYPES                  (1)
152 #define MICROPY_PY_UZLIB                    (1)
153 #define MICROPY_PY_UJSON                    (1)
154 #define MICROPY_PY_URE                      (1)
155 #define MICROPY_PY_URE_SUB                  (1)
156 #define MICROPY_PY_UHEAPQ                   (1)
157 #define MICROPY_PY_UTIMEQ                   (1)
158 #define MICROPY_PY_UHASHLIB                 (1)
159 #define MICROPY_PY_UHASHLIB_SHA1            (1)
160 #define MICROPY_PY_UHASHLIB_SHA256          (1)
161 #define MICROPY_PY_UHASHLIB_MD5             (1)
162 #define MICROPY_PY_UCRYPTOLIB               (1)
163 #define MICROPY_PY_UBINASCII                (1)
164 #define MICROPY_PY_UBINASCII_CRC32          (1)
165 #define MICROPY_PY_URANDOM                  (1)
166 #define MICROPY_PY_URANDOM_EXTRA_FUNCS      (1)
167 #define MICROPY_PY_URANDOM_SEED_INIT_FUNC   (rand())
168 #define MICROPY_PY_OS_DUPTERM               (1)
169 #define MICROPY_PY_MACHINE                  (1)
170 #define MICROPY_PY_MACHINE_PIN_MAKE_NEW     mp_pin_make_new
171 #define MICROPY_PY_MACHINE_PULSE            (1)
172 #define MICROPY_PY_MACHINE_I2C              (1)
173 #define MICROPY_PY_MACHINE_SPI              (1)
174 #define MICROPY_PY_MACHINE_SPI_MSB          (0)
175 #define MICROPY_PY_MACHINE_SPI_LSB          (1)
176 #define MICROPY_PY_MACHINE_HW_PWM           (0)
177 #ifndef MICROPY_HW_ENABLE_SDCARD
178 #define MICROPY_HW_ENABLE_SDCARD            (1)
179 #endif
180 #define MICROPY_HW_SOFTSPI_MIN_DELAY        (0)
181 #define MICROPY_HW_SOFTSPI_MAX_BAUDRATE     (200 * 1000000 / 200) // roughly, ets_get_cpu_frequency()
182 #define MICROPY_PY_USSL                     (1)
183 #define MICROPY_SSL_MBEDTLS                 (1)
184 #define MICROPY_PY_USSL_FINALISER           (1)
185 #define MICROPY_PY_UWEBSOCKET               (1)
186 #define MICROPY_PY_WEBREPL                  (1)
187 #define MICROPY_PY_FRAMEBUF                 (1) //  fatal error: ports/stm32/font_petme128_8x8.h: No such file or directory
188 #define MICROPY_PY_BTREE                    (0) //  fatal error: btree/btree.h: No such file or directory
189 #define MICROPY_PY_USOCKET_EVENTS           (MICROPY_PY_WEBREPL)
190 #define MICROPY_PY_BLUETOOTH_RANDOM_ADDR    (1)
191 #define MICROPY_PY_BLUETOOTH_DEFAULT_GAP_NAME ("HAAS")
192 
193 // fatfs configuration
194 #define MICROPY_FATFS_ENABLE_LFN       (1)
195 #define MICROPY_FATFS_LFN_CODE_PAGE    437 /* 1=SFN/ANSI 437=LFN/U.S.(OEM) */
196 #define MICROPY_FATFS_USE_LABEL        (1)
197 #define MICROPY_FATFS_RPATH            (2)
198 #define MICROPY_FATFS_MULTI_PARTITION  (1)
199 #if MICROPY_VFS_FAT
200 #define mp_type_fileio mp_type_vfs_fat_fileio
201 #define mp_type_textio mp_type_vfs_fat_textio
202 #elif MICROPY_VFS_LFS1
203 #define mp_type_fileio mp_type_vfs_lfs1_fileio
204 #define mp_type_textio mp_type_vfs_lfs1_textio
205 #elif MICROPY_VFS_LFS2
206 #define mp_type_fileio mp_type_vfs_lfs2_fileio
207 #define mp_type_textio mp_type_vfs_lfs2_textio
208 #endif
209 
210 // extended modules by aiot
211 #define MICROPY_QSTR_BYTES_IN_HASH          (1)
212 #define MICROPY_ALLOC_PARSE_CHUNK_INIT      (16)
213 #define MICROPY_ENABLE_EXTERNAL_IMPORT      (1)
214 
215 // type definitions for the specific machine
216 
217 #define MICROPY_MAKE_POINTER_CALLABLE(p) ((void *)((mp_uint_t)(p) | 1))
218 #define MP_SSIZE_MAX (0x7fffffff)
219 
220 // This port is intended to be 32-bit, but unfortunately, int32_t for
221 // different targets may be defined in different ways - either as int
222 // or as long. This requires different printf formatting specifiers
223 // to print such value. So, we avoid int32_t and use int directly.
224 #define UINT_FMT "%u"
225 #define INT_FMT "%d"
226 
227 typedef int32_t mp_int_t; // must be pointer size
228 typedef uint32_t mp_uint_t; // must be pointer size
229 typedef long mp_off_t;
230 // ssize_t, off_t as required by POSIX-signatured functions in stream.h
231 #include <sys/types.h>
232 
233 // board specifics
234 #define MICROPY_PY_SYS_PLATFORM "AliOS Things"
235 
236 #define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
237 
238 // extra built in names to add to the global namespace
239 #define MICROPY_PORT_BUILTINS \
240     { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj }, \
241     { MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
242 
243 // We need to provide a declaration/definition of alloca()
244 #include <alloca.h>
245 
246 #ifndef MICROPY_HW_BOARD_NAME
247 #define MICROPY_HW_BOARD_NAME "HaaS"
248 #endif
249 
250 #ifndef MICROPY_HW_MCU_NAME
251 #define MICROPY_HW_MCU_NAME "AliOS"
252 #endif
253 
254 #ifdef __thumb__
255 #define MICROPY_MIN_USE_CORTEX_CPU (1)
256 #define MICROPY_MIN_USE_STM32_MCU (1)
257 #define MICROPY_MIN_USE_XM510_MCU (1)
258 #endif
259 
260 
261 // #define MICROPY_BEGIN_ATOMIC_SECTION() portENTER_CRITICAL_NESTED()
262 // #define MICROPY_END_ATOMIC_SECTION(state) portEXIT_CRITICAL_NESTED(state)
263 
264 #if MICROPY_PY_USOCKET_EVENTS
265 #define MICROPY_PY_USOCKET_EVENTS_HANDLER extern void usocket_events_handler(void);
266 #else
267 #define MICROPY_PY_USOCKET_EVENTS_HANDLER
268 #endif
269 
270 #if MICROPY_PY_THREAD
271 #define MICROPY_EVENT_POLL_HOOK \
272     do { \
273         extern void mp_handle_pending(bool); \
274         mp_handle_pending(true); \
275         MICROPY_PY_USOCKET_EVENTS_HANDLER \
276         MP_THREAD_GIL_EXIT(); \
277         MP_THREAD_GIL_ENTER(); \
278     } while (0);
279 #else
280 #define MICROPY_EVENT_POLL_HOOK \
281     do { \
282         extern void mp_handle_pending(bool); \
283         mp_handle_pending(true); \
284         MICROPY_PY_USOCKET_EVENTS_HANDLER \
285         aos_msleep(1); \
286     } while (0);
287 
288 #define MICROPY_THREAD_YIELD()
289 #endif
290 
291 
292 #define MP_STATE_PORT MP_STATE_VM
293 
294 #define MICROPY_PORT_ROOT_POINTERS \
295     const char *readline_hist[8];
296 
297 
298 #ifdef MICROPY_PY_UTIME
299 #define MICROPY_PY_UTIME_DEF
300 #define MICROPY_PY_UTIME_DEF_WEAK_LINKS
301 #else
302 #define MICROPY_PY_UTIME_DEF
303 #define MICROPY_PY_UTIME_DEF_WEAK_LINKS
304 #endif
305 
306 
307 #define MICROPY_COMPONENTS_AUDIO        1
308 #define MICROPY_COMPONENTS_BLE          1
309 #define MICROPY_COMPONENTS_DRIVER       1
310 #define MICROPY_COMPONENTS_LINKSDK      1
311 #define MICROPY_COMPONENTS_MINICV       0
312 #define MICROPY_COMPONENTS_MODBUS       1
313 #define MICROPY_COMPONENTS_MQTT         1
314 #define MICROPY_COMPONENTS_NETMGR       1
315 #define MICROPY_COMPONENTS_NETWORK      1
316 #define MICROPY_COMPONENTS_OSS          1
317 #define MICROPY_COMPONENTS_OTA          1
318 #define MICROPY_COMPONENTS_SNTP         1
319 #define MICROPY_COMPONENTS_UCAMERA      0
320 #define MICROPY_COMPONENTS_ULOG         1
321 
322 
323 #define MICROPY_GC_HEAP_SIZE           (1024 * 64)
324 
325 extern const struct _mp_obj_module_t utime_module;
326 extern const struct _mp_obj_module_t driver_module;
327 
328 #if MICROPY_COMPONENTS_MINICV
329 extern const struct _mp_obj_module_t minicv_module;
330 #define MICROPY_PY_MINICV_DEF { MP_ROM_QSTR(MP_QSTR_minicv), MP_ROM_PTR(&minicv_module) },
331 #else
332 #define MICROPY_PY_MINICV_DEF
333 #endif
334 
335 #if PY_BUILD_OSS
336 extern const struct _mp_obj_module_t oss_module;
337 #define MICROPY_PY_OSS_DEF { MP_ROM_QSTR(MP_QSTR_OSS), MP_ROM_PTR(&oss_module) },
338 #else
339 #define MICROPY_PY_OSS_DEF
340 #endif
341 
342 #if PY_BUILD_UCAMERA
343 extern const struct _mp_obj_module_t ucamera_module;
344 #define MICROPY_PY_UCAMERA_DEF { MP_ROM_QSTR(MP_QSTR_UCamera), MP_ROM_PTR(&ucamera_module) },
345 #else
346 #define MICROPY_PY_UCAMERA_DEF
347 #endif
348 #if PY_BUILD_HTTP
349 extern const struct _mp_obj_module_t http_module;
350 #define MICROPY_PY_HTTP_DEF { MP_ROM_QSTR(MP_QSTR_http), MP_ROM_PTR(&http_module) },
351 #else
352 #define MICROPY_PY_HTTP_DEF
353 #endif
354 
355 #if PY_BUILD_TCP
356 extern const struct _mp_obj_module_t tcp_module;
357 #define MICROPY_PY_TCP_DEF { MP_ROM_QSTR(MP_QSTR_tcp), MP_ROM_PTR(&tcp_module) },
358 #else
359 #define MICROPY_PY_TCP_DEF
360 #endif
361 
362 #if PY_BUILD_UDP
363 extern const struct _mp_obj_module_t udp_module;
364 #define MICROPY_PY_UDP_DEF { MP_ROM_QSTR(MP_QSTR_udp), MP_ROM_PTR(&udp_module) },
365 #else
366 #define MICROPY_PY_UDP_DEF
367 #endif
368 
369 
370 #if PY_BUILD_NETMGR
371 extern const struct _mp_obj_module_t netmgr_module;
372 #define MICROPY_PY_NETMGR_DEF { MP_ROM_QSTR(MP_QSTR_netmgr), MP_ROM_PTR(&netmgr_module) },
373 #else
374 #define MICROPY_PY_NETMGR_DEF
375 #endif
376 
377 #if PY_BUILD_BLENETCONFIG
378 extern const struct _mp_obj_module_t blenetconfig_module;
379 #define MICROPY_PY_BLE_NETCONFIG_DEF { MP_ROM_QSTR(MP_QSTR_ble_netconfig), MP_ROM_PTR(&blenetconfig_module) },
380 #else
381 #define MICROPY_PY_BLE_NETCONFIG_DEF
382 #endif
383 
384 #if PY_BUILD_MQTT
385 extern const struct _mp_obj_module_t mqtt_module;
386 #define MICROPY_PY_MQTT_DEF { MP_ROM_QSTR(MP_QSTR_mqtt), MP_ROM_PTR(&mqtt_module) },
387 #else
388 #define MICROPY_PY_MQTT_DEF
389 #endif
390 
391 #if PY_BUILD_LINKSDK
392 extern const struct _mp_obj_module_t linkkit_module;
393 #define MICROPY_PY_LINKSDK_DEF { MP_ROM_QSTR(MP_QSTR__linkkit), MP_ROM_PTR(&linkkit_module) },
394 #else
395 #define MICROPY_PY_LINKSDK_DEF
396 #endif
397 
398 #if PY_BUILD_LINKSDK
399 extern const struct _mp_obj_module_t linksdk_module;
400 #define MICROPY_PY_LINKSDK2_DEF { MP_ROM_QSTR(MP_QSTR_linksdk), MP_ROM_PTR(&linksdk_module) },
401 #else
402 #define MICROPY_PY_LINKSDK2_DEF
403 #endif
404 
405 
406 #if PY_BUILD_USOCKET
407 extern const struct _mp_obj_module_t mp_module_usocket;
408 #define MICROPY_PY_USOCKET_DEF { MP_ROM_QSTR(MP_QSTR_usocket), MP_ROM_PTR(&mp_module_usocket) },
409 #else
410 #define MICROPY_PY_USOCKET_DEF
411 #endif
412 
413 
414 #if PY_BUILD_UOS
415 extern const struct _mp_obj_module_t mp_module_uos;
416 #define MICROPY_PY_UOS_DEF { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_uos) },
417 #else
418 #define MICROPY_PY_UOS_DEF
419 #endif
420 
421 
422 #if PY_BUILD_AUDIO
423 extern const struct _mp_obj_module_t audio_module;
424 #define MICROPY_PY_AUDIO_DEF {MP_ROM_QSTR(MP_QSTR_audio), MP_ROM_PTR(&audio_module)},
425 #else
426 #define MICROPY_PY_AUDIO_DEF
427 #endif
428 
429 #if PY_BUILD_SNTP
430 extern const struct _mp_obj_module_t sntp_module;
431 #define MICROPY_PY_SNTP_DEF { MP_ROM_QSTR(MP_QSTR_sntp), MP_ROM_PTR(&sntp_module) },
432 #else
433 #define MICROPY_PY_SNTP_DEF
434 #endif
435 
436 #if PY_BUILD_MODBUS
437 extern const struct _mp_obj_module_t modbus_module;
438 #define MICROPY_PY_MODBUS_DEF { MP_ROM_QSTR(MP_QSTR_modbus), MP_ROM_PTR(&modbus_module) },
439 #else
440 #define MICROPY_PY_MODBUS_DEF
441 #endif
442 
443 
444 #if PY_BUILD_ULOG
445 extern const struct _mp_obj_module_t ulog_module;
446 #define MICROPY_PY_ULOG_DEF { MP_ROM_QSTR(MP_QSTR_ulog), MP_ROM_PTR(&ulog_module) },
447 #else
448 #define MICROPY_PY_ULOG_DEF
449 #endif
450 
451 #if PY_BUILD_OTA
452 extern const struct _mp_obj_module_t ota_module;
453 #define MICROPY_PY_OTA_DEF { MP_ROM_QSTR(MP_QSTR_ota), MP_ROM_PTR(&ota_module) },
454 #else
455 #define MICROPY_PY_OTA_DEF
456 #endif
457 
458 #define MICROPY_PORT_BUILTIN_MODULES \
459         {MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&utime_module)}, \
460         {MP_ROM_QSTR(MP_QSTR_driver), MP_ROM_PTR(&driver_module)}, \
461         MICROPY_PY_UTIME_DEF \
462         MICROPY_PY_MINICV_DEF \
463         MICROPY_PY_LINKSDK_DEF \
464 		MICROPY_PY_LINKSDK2_DEF \
465         MICROPY_PY_HTTP_DEF \
466         MICROPY_PY_UDP_DEF \
467         MICROPY_PY_TCP_DEF \
468         MICROPY_PY_NETMGR_DEF \
469         MICROPY_PY_BLE_NETCONFIG_DEF \
470         MICROPY_PY_MQTT_DEF \
471         MICROPY_PY_USOCKET_DEF \
472         MICROPY_PY_AUDIO_DEF \
473         MICROPY_PY_UOS_DEF \
474         MICROPY_PY_OSS_DEF \
475         MICROPY_PY_UCAMERA_DEF \
476         MICROPY_PY_SNTP_DEF \
477         MICROPY_PY_MODBUS_DEF \
478         MICROPY_PY_ULOG_DEF \
479         MICROPY_PY_OTA_DEF \
480 
481 #define MICROPY_PORT_BUILTIN_MODULE_WEAK_LINKS \
482         MICROPY_PY_UTIME_DEF_WEAK_LINKS \
483 
484 
485