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               (1)
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                 (1)
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             (1)
61 #define MICROPY_USE_INTERNAL_PRINTF            (0)  // HaaS use its own printf
62 #define MICROPY_ENABLE_SCHEDULER               (1)
63 #define MICROPY_SCHEDULER_DEPTH                (8)
64 #define MICROPY_VFS                            (1)
65 #define MICROPY_VFS_POSIX                      (1)
66 #define MICROPY_VFS_POSIX_FILE                 (1)
67 #define USE_STATFS                             MICROPY_VFS_POSIX
68 
69 #define MICROPY_ENABLE_GC                      (1)
70 #define MICROPY_GC_HEAP_SIZE                   (1024 * 512)
71 #define MICROPY_MALLOC_USES_ALLOCATED_SIZE     (1)
72 #define MICROPY_MEM_STATS                      (0)
73 
74 // control over Python builtins
75 #define MICROPY_PY_FUNCTION_ATTRS              (1)
76 #define MICROPY_PY_DESCRIPTORS                 (1)
77 #define MICROPY_PY_DELATTR_SETATTR             (1)
78 #define MICROPY_PY_STR_BYTES_CMP_WARN          (1)
79 #define MICROPY_PY_BUILTINS_STR_UNICODE        (1)
80 #define MICROPY_PY_BUILTINS_STR_CENTER         (1)
81 #define MICROPY_PY_BUILTINS_STR_PARTITION      (1)
82 #define MICROPY_PY_BUILTINS_STR_SPLITLINES     (1)
83 #define MICROPY_PY_BUILTINS_BYTEARRAY          (1)
84 #define MICROPY_PY_BUILTINS_MEMORYVIEW         (1)
85 #define MICROPY_PY_BUILTINS_SET                (1)
86 #define MICROPY_PY_BUILTINS_SLICE              (1)
87 #define MICROPY_PY_BUILTINS_SLICE_ATTRS        (1)
88 #define MICROPY_PY_BUILTINS_SLICE_INDICES      (1)
89 #define MICROPY_PY_BUILTINS_FROZENSET          (1)
90 #define MICROPY_PY_BUILTINS_PROPERTY           (1)
91 #define MICROPY_PY_BUILTINS_RANGE_ATTRS        (1)
92 #define MICROPY_PY_BUILTINS_ROUND_INT          (1)
93 #define MICROPY_PY_ALL_SPECIAL_METHODS         (1)
94 #define MICROPY_PY_BUILTINS_COMPILE            (1)
95 #define MICROPY_PY_BUILTINS_ENUMERATE          (1)
96 #define MICROPY_PY_BUILTINS_EXECFILE           (1)
97 #define MICROPY_PY_BUILTINS_FILTER             (1)
98 #define MICROPY_PY_BUILTINS_REVERSED           (1)
99 #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED     (1)
100 #define MICROPY_PY_BUILTINS_INPUT              (1)
101 #define MICROPY_PY_BUILTINS_MIN_MAX            (1)
102 #define MICROPY_PY_BUILTINS_POW3               (1)
103 #define MICROPY_PY_BUILTINS_HELP               (1)
104 #define MICROPY_PY_BUILTINS_HELP_TEXT          haas_help_text
105 #define MICROPY_PY_BUILTINS_HELP_MODULES       (1)
106 #define MICROPY_PY___FILE__                    (1)
107 #define MICROPY_PY_MICROPYTHON_MEM_INFO        (1)
108 #define MICROPY_PY_ARRAY                       (1)
109 #define MICROPY_PY_ARRAY_SLICE_ASSIGN          (1)
110 #define MICROPY_PY_ATTRTUPLE                   (1)
111 #define MICROPY_PY_COLLECTIONS                 (1)
112 #define MICROPY_PY_COLLECTIONS_DEQUE           (1)
113 #define MICROPY_PY_COLLECTIONS_ORDEREDDICT     (1)
114 #define MICROPY_PY_MATH                        (1)
115 #define MICROPY_PY_MATH_SPECIAL_FUNCTIONS      (1)
116 #define MICROPY_PY_MATH_ISCLOSE                (1)
117 #define MICROPY_PY_CMATH                       (1)
118 #define MICROPY_PY_GC                          (1)
119 #define MICROPY_PY_IO                          (1)
120 #define MICROPY_PY_IO_IOBASE                   (1)
121 #define MICROPY_PY_IO_FILEIO                   (1)
122 #define MICROPY_PY_IO_BYTESIO                  (1)
123 #define MICROPY_PY_IO_BUFFEREDWRITER           (1)
124 #define MICROPY_PY_STRUCT                      (1)
125 #define MICROPY_PY_SYS                         (1)
126 #define MICROPY_PY_SYS_MAXSIZE                 (1)
127 #define MICROPY_PY_SYS_MODULES                 (1)
128 #define MICROPY_PY_SYS_EXIT                    (1)
129 #define MICROPY_PY_SYS_ATEXIT                  (1)
130 #define MICROPY_PY_SYS_STDFILES                (1)
131 #define MICROPY_PY_SYS_STDIO_BUFFER            (1)
132 #define MICROPY_PY_UERRNO                      (1)
133 #define MICROPY_PY_USELECT                     (1)
134 #define MICROPY_PY_UTIME_MP_HAL                (1)
135 #define MICROPY_PY_UTIME                       (1)
136 #define MICROPY_PY_THREAD                      (1)
137 #define MICROPY_PY_THREAD_GIL                  (1)
138 #define MICROPY_PY_THREAD_GIL_VM_DIVISOR       (32)
139 
140 #define MICROPY_DEBUG_VERBOSE                  (0)
141 
142 // extended modules
143 #define MICROPY_PY_BLUETOOTH                   (0)
144 #ifndef MICROPY_PY_BLUETOOTH
145 #define MICROPY_PY_BLUETOOTH                     (1)
146 #define MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE (1)
147 #define MICROPY_BLUETOOTH_NIMBLE                 (1)
148 #define MICROPY_BLUETOOTH_NIMBLE_BINDINGS_ONLY   (1)
149 #endif
150 #define MICROPY_EPOCH_IS_1970             (1)
151 #define MICROPY_PY_UASYNCIO               (1)
152 #define MICROPY_PY_UCTYPES                (1)
153 #define MICROPY_PY_UZLIB                  (1)
154 #define MICROPY_PY_UJSON                  (1)
155 #define MICROPY_PY_URE                    (1)
156 #define MICROPY_PY_URE_SUB                (1)
157 #define MICROPY_PY_UHEAPQ                 (1)
158 #define MICROPY_PY_UTIMEQ                 (1)
159 #define MICROPY_PY_UHASHLIB               (1)
160 #define MICROPY_PY_UHASHLIB_SHA1          (1)
161 #define MICROPY_PY_UHASHLIB_SHA256        (1)
162 #define MICROPY_PY_UHASHLIB_MD5           (1)
163 #define MICROPY_PY_UCRYPTOLIB             (1)
164 #define MICROPY_PY_UBINASCII              (1)
165 #define MICROPY_PY_UBINASCII_CRC32        (1)
166 #define MICROPY_PY_URANDOM                (1)
167 #define MICROPY_PY_URANDOM_EXTRA_FUNCS    (1)
168 #define MICROPY_PY_URANDOM_SEED_INIT_FUNC (rand())
169 #define MICROPY_PY_OS_DUPTERM             (1)
170 #define MICROPY_PY_MACHINE                (1)
171 #define MICROPY_PY_MACHINE_PIN_MAKE_NEW   mp_pin_make_new
172 #define MICROPY_PY_MACHINE_PULSE          (1)
173 #define MICROPY_PY_MACHINE_I2C            (1)
174 #define MICROPY_PY_MACHINE_SPI            (1)
175 #define MICROPY_PY_MACHINE_SPI_MSB        (0)
176 #define MICROPY_PY_MACHINE_SPI_LSB        (1)
177 #define MICROPY_PY_MACHINE_ADC            (1)
178 #define MICROPY_PY_MACHINE_DAC            (0)
179 #ifndef MICROPY_HW_ENABLE_SDCARD
180 #define MICROPY_HW_ENABLE_SDCARD (1)
181 #endif
182 #define MICROPY_HW_SOFTSPI_MIN_DELAY          (0)
183 #define MICROPY_HW_SOFTSPI_MAX_BAUDRATE       (200 * 1000000 / 200)  // roughly, ets_get_cpu_frequency()
184 #define MICROPY_PY_USSL                       (1)
185 #define MICROPY_SSL_MBEDTLS                   (1)
186 #define MICROPY_PY_USSL_FINALISER             (1)
187 #define MICROPY_PY_UWEBSOCKET                 (1)
188 #define MICROPY_PY_WEBREPL                    (1)
189 #define MICROPY_PY_FRAMEBUF                   (1)
190 #define MICROPY_PY_BTREE                      (0)  //  fatal error: btree/btree.h: No such file or directory
191 #define MICROPY_PY_USOCKET_EVENTS             (MICROPY_PY_WEBREPL)
192 #define MICROPY_PY_BLUETOOTH_RANDOM_ADDR      (1)
193 #define MICROPY_PY_BLUETOOTH_DEFAULT_GAP_NAME ("HaaS")
194 
195 // fatfs configuration
196 #define MICROPY_FATFS_ENABLE_LFN              (1)
197 #define MICROPY_FATFS_LFN_CODE_PAGE           437 /* 1=SFN/ANSI 437=LFN/U.S.(OEM) */
198 #define MICROPY_FATFS_USE_LABEL               (1)
199 #define MICROPY_FATFS_RPATH                   (2)
200 #define MICROPY_FATFS_MULTI_PARTITION         (1)
201 
202 #if MICROPY_VFS_POSIX
203 #define mp_type_fileio mp_type_vfs_posix_fileio
204 #define mp_type_textio mp_type_vfs_posix_textio
205 #elif MICROPY_VFS_FAT
206 #define mp_type_fileio mp_type_vfs_fat_fileio
207 #define mp_type_textio mp_type_vfs_fat_textio
208 #elif MICROPY_VFS_LFS1
209 #define mp_type_fileio mp_type_vfs_lfs1_fileio
210 #define mp_type_textio mp_type_vfs_lfs1_textio
211 #elif MICROPY_VFS_LFS2
212 #define mp_type_fileio mp_type_vfs_lfs2_fileio
213 #define mp_type_textio mp_type_vfs_lfs2_textio
214 #endif
215 
216 // use vfs's functions for import stat and builtin open
217 #define mp_import_stat                   mp_vfs_import_stat
218 #define mp_builtin_open                  mp_vfs_open
219 #define mp_builtin_open_obj              mp_vfs_open_obj
220 
221 // extended modules by HaaS
222 #define MICROPY_PY_HAAS_SPECIFIC         (1)
223 #define MICROPY_QSTR_BYTES_IN_HASH       (1)
224 #define MICROPY_ALLOC_PARSE_CHUNK_INIT   (16)
225 #define MICROPY_ENABLE_EXTERNAL_IMPORT   (1)
226 #define MICROPY_ENABLE_DYNAMIC_TRIADIC   (0)
227 
228 #define MICROPY_PORT_ROOT_POINTERS       const char *readline_hist[8];
229 
230 // type definitions for the specific machine
231 
232 #define MICROPY_MAKE_POINTER_CALLABLE(p) ((void *)((mp_uint_t)(p) | 1))
233 #define MP_SSIZE_MAX                     (0x7fffffff)
234 
235 // This port is intended to be 32-bit, but unfortunately, int32_t for
236 // different targets may be defined in different ways - either as int
237 // or as long. This requires different printf formatting specifiers
238 // to print such value. So, we avoid int32_t and use int directly.
239 #define UINT_FMT                         "%u"
240 #define INT_FMT                          "%d"
241 
242 typedef int32_t mp_int_t;    // must be pointer size
243 typedef uint32_t mp_uint_t;  // must be pointer size
244 typedef long mp_off_t;
245 // ssize_t, off_t as required by POSIX-signatured functions in stream.h
246 #include <sys/types.h>
247 
248 // board specifics
249 #define MICROPY_PY_SYS_PLATFORM      "AliOS-Things"
250 #define MICROPY_PY_SYS_NODE          "V3.3"
251 #define MICROPY_HW_BOARD_NAME        SYSINFO_BOARD
252 #define MICROPY_HW_MCU_NAME          SYSINFO_MCU
253 
254 #define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
255 
256 // clang-format off
257 // extra built in names to add to the global namespace
258 #define MICROPY_PORT_BUILTINS                                               \
259     { MP_OBJ_NEW_QSTR(MP_QSTR_input), (mp_obj_t)&mp_builtin_input_obj },    \
260     { MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },      \
261     { MP_OBJ_NEW_QSTR(MP_QSTR_reboot), (mp_obj_t)&machine_reset_obj },
262 // clang-format on
263 
264 // We need to provide a declaration/definition of alloca()
265 #include <alloca.h>
266 
267 #ifdef __thumb__
268 #define MICROPY_MIN_USE_CORTEX_CPU (1)
269 #define MICROPY_MIN_USE_STM32_MCU  (1)
270 #define MICROPY_MIN_USE_XM510_MCU  (1)
271 #endif
272 
273 // #define MICROPY_BEGIN_ATOMIC_SECTION() portENTER_CRITICAL_NESTED()
274 // #define MICROPY_END_ATOMIC_SECTION(state) portEXIT_CRITICAL_NESTED(state)
275 
276 #if MICROPY_PY_USOCKET_EVENTS
277 #define MICROPY_PY_USOCKET_EVENTS_HANDLER extern void usocket_events_handler(void);
278 #else
279 #define MICROPY_PY_USOCKET_EVENTS_HANDLER
280 #endif
281 
282 #if MICROPY_PY_THREAD
283 #define MICROPY_EVENT_POLL_HOOK              \
284     do {                                     \
285         extern void mp_handle_pending(bool); \
286         mp_handle_pending(true);             \
287         MICROPY_PY_USOCKET_EVENTS_HANDLER    \
288         MP_THREAD_GIL_EXIT();                \
289         MP_THREAD_GIL_ENTER();               \
290     } while (0);
291 #else
292 #define MICROPY_EVENT_POLL_HOOK              \
293     do {                                     \
294         extern void mp_handle_pending(bool); \
295         mp_handle_pending(true);             \
296         MICROPY_PY_USOCKET_EVENTS_HANDLER    \
297         aos_msleep(1);                       \
298     } while (0);
299 
300 #define MICROPY_THREAD_YIELD()
301 #endif
302 
303 #define MP_STATE_PORT MP_STATE_VM
304 
305 #ifdef MICROPY_PY_UTIME
306 #define MICROPY_PY_UTIME_DEF
307 #define MICROPY_PY_UTIME_DEF_WEAK_LINKS
308 #else
309 #define MICROPY_PY_UTIME_DEF
310 #define MICROPY_PY_UTIME_DEF_WEAK_LINKS
311 #endif
312 
313 #define MICROPY_COMPONENTS_AUDIO   1
314 #define MICROPY_COMPONENTS_BLE     1
315 #define MICROPY_COMPONENTS_DRIVER  1
316 #define MICROPY_COMPONENTS_LINKSDK 1
317 #define MICROPY_COMPONENTS_MINICV  0
318 #define MICROPY_COMPONENTS_MODBUS  1
319 #define MICROPY_COMPONENTS_MQTT    1
320 #define MICROPY_COMPONENTS_NETMGR  1
321 #define MICROPY_COMPONENTS_NETWORK 1
322 #define MICROPY_COMPONENTS_OSS     1
323 #define MICROPY_COMPONENTS_OTA     1
324 #define MICROPY_COMPONENTS_SNTP    1
325 #define MICROPY_COMPONENTS_UCAMERA 0
326 #define MICROPY_COMPONENTS_ULOG    1
327 
328 extern const struct _mp_obj_module_t utime_module;
329 extern const struct _mp_obj_module_t driver_module;
330 
331 #if PY_BUILD_AI
332 extern const struct _mp_obj_module_t minicv_module;
333 #define MICROPY_PY_MINICV_DEF { MP_ROM_QSTR(MP_QSTR_minicv), MP_ROM_PTR(&minicv_module) },
334 #else
335 #define MICROPY_PY_MINICV_DEF
336 #endif
337 
338 #if PY_BUILD_OSS
339 extern const struct _mp_obj_module_t oss_module;
340 #define MICROPY_PY_OSS_DEF { MP_ROM_QSTR(MP_QSTR_OSS), MP_ROM_PTR(&oss_module) },
341 #else
342 #define MICROPY_PY_OSS_DEF
343 #endif
344 
345 #if PY_BUILD_UCLOUD_AI
346 extern const struct _mp_obj_module_t ucloud_ai_module;
347 #define MICROPY_PY_UCLOUD_AI_DEF { MP_ROM_QSTR(MP_QSTR_ucloud_ai), MP_ROM_PTR(&ucloud_ai_module) },
348 #else
349 #define MICROPY_PY_UCLOUD_AI_DEF
350 #endif
351 
352 #if PY_BUILD_AIAGENT
353 extern const struct _mp_obj_module_t aiagent_module;
354 #define MICROPY_PY_AIAGENT_DEF { MP_ROM_QSTR(MP_QSTR_aiagent), MP_ROM_PTR(&aiagent_module) },
355 #else
356 #define MICROPY_PY_AIAGENT_DEF
357 #endif
358 
359 #if PY_BUILD_UCAMERA
360 extern const struct _mp_obj_module_t ucamera_module;
361 #define MICROPY_PY_UCAMERA_DEF { MP_ROM_QSTR(MP_QSTR_UCamera), MP_ROM_PTR(&ucamera_module) },
362 #else
363 #define MICROPY_PY_UCAMERA_DEF
364 #endif
365 #if PY_BUILD_HTTP
366 extern const struct _mp_obj_module_t http_module;
367 #define MICROPY_PY_HTTP_DEF { MP_ROM_QSTR(MP_QSTR_http), MP_ROM_PTR(&http_module) },
368 #else
369 #define MICROPY_PY_HTTP_DEF
370 #endif
371 
372 #if PY_BUILD_TCP
373 extern const struct _mp_obj_module_t tcp_module;
374 #define MICROPY_PY_TCP_DEF { MP_ROM_QSTR(MP_QSTR_tcp), MP_ROM_PTR(&tcp_module) },
375 #else
376 #define MICROPY_PY_TCP_DEF
377 #endif
378 
379 #if PY_BUILD_UDP
380 extern const struct _mp_obj_module_t udp_module;
381 #define MICROPY_PY_UDP_DEF { MP_ROM_QSTR(MP_QSTR_udp), MP_ROM_PTR(&udp_module) },
382 #else
383 #define MICROPY_PY_UDP_DEF
384 #endif
385 
386 #if PY_BUILD_NETMGR
387 extern const struct _mp_obj_module_t netmgr_module;
388 #define MICROPY_PY_NETMGR_DEF { MP_ROM_QSTR(MP_QSTR_netmgr), MP_ROM_PTR(&netmgr_module) },
389 #else
390 #define MICROPY_PY_NETMGR_DEF
391 #endif
392 
393 #if PY_BUILD_MQTT
394 extern const struct _mp_obj_module_t mqtt_module;
395 #define MICROPY_PY_MQTT_DEF { MP_ROM_QSTR(MP_QSTR_mqtt), MP_ROM_PTR(&mqtt_module) },
396 #else
397 #define MICROPY_PY_MQTT_DEF
398 #endif
399 
400 // #if PY_BUILD_LINKSDK
401 // extern const struct _mp_obj_module_t linkkit_module;
402 // #define MICROPY_PY_LINKSDK_DEF { MP_ROM_QSTR(MP_QSTR__linkkit), MP_ROM_PTR(&linkkit_module) },
403 // #else
404 // #define MICROPY_PY_LINKSDK_DEF
405 // #endif
406 
407 #if PY_BUILD_ALIYUNIOT
408 extern const struct _mp_obj_module_t aliyunIoT_module;
409 #define MICROPY_PY_ALIYUNIOT_DEF { MP_ROM_QSTR(MP_QSTR_aliyunIoT), MP_ROM_PTR(&aliyunIoT_module) },
410 #else
411 #define MICROPY_PY_ALIYUNIOT_DEF
412 #endif
413 
414 #if PY_BUILD_USOCKET
415 extern const struct _mp_obj_module_t mp_module_usocket;
416 #define MICROPY_PY_USOCKET_DEF { MP_ROM_QSTR(MP_QSTR_usocket), MP_ROM_PTR(&mp_module_usocket) },
417 #else
418 #define MICROPY_PY_USOCKET_DEF
419 #endif
420 
421 #if PY_BUILD_UOS
422 extern const struct _mp_obj_module_t uos_module;
423 #define MICROPY_PY_UOS_DEF { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&uos_module) },
424 #else
425 #define MICROPY_PY_UOS_DEF
426 #endif
427 
428 #if PY_BUILD_AUDIO
429 extern const struct _mp_obj_module_t audio_module;
430 #define MICROPY_PY_AUDIO_DEF { MP_ROM_QSTR(MP_QSTR_audio), MP_ROM_PTR(&audio_module) },
431 #else
432 #define MICROPY_PY_AUDIO_DEF
433 #endif
434 
435 #if PY_BUILD_SNTP
436 extern const struct _mp_obj_module_t sntp_module;
437 #define MICROPY_PY_SNTP_DEF { MP_ROM_QSTR(MP_QSTR_sntp), MP_ROM_PTR(&sntp_module) },
438 #else
439 #define MICROPY_PY_SNTP_DEF
440 #endif
441 
442 #if PY_BUILD_MODBUS
443 extern const struct _mp_obj_module_t modbus_module;
444 #define MICROPY_PY_MODBUS_DEF { MP_ROM_QSTR(MP_QSTR_modbus), MP_ROM_PTR(&modbus_module) },
445 #else
446 #define MICROPY_PY_MODBUS_DEF
447 #endif
448 
449 #if PY_BUILD_UGRAPHICS
450 extern const struct _mp_obj_module_t ugraphics_module;
451 #define MICROPY_PY_UGRAPHICS_DEF { MP_ROM_QSTR(MP_QSTR_ugraphics), MP_ROM_PTR(&ugraphics_module) },
452 #else
453 #define MICROPY_PY_UGRAPHICS_DEF
454 #endif
455 
456 #if PY_BUILD_ULOG
457 extern const struct _mp_obj_module_t ulog_module;
458 #define MICROPY_PY_ULOG_DEF { MP_ROM_QSTR(MP_QSTR_ulog), MP_ROM_PTR(&ulog_module) },
459 #else
460 #define MICROPY_PY_ULOG_DEF
461 #endif
462 
463 #if PY_BUILD_KV
464 extern const struct _mp_obj_module_t kv_module;
465 #define MICROPY_PY_KV_DEF { MP_ROM_QSTR(MP_QSTR_kv), MP_ROM_PTR(&kv_module) },
466 #else
467 #define MICROPY_PY_KV_DEF
468 #endif
469 
470 #if PY_BUILD_SYSTEM
471 extern const struct _mp_obj_module_t system_module;
472 #define MICROPY_PY_SYSTEM_DEF { MP_ROM_QSTR(MP_QSTR_system), MP_ROM_PTR(&system_module) },
473 #else
474 #define MICROPY_PY_SYSTEM_DEF
475 #endif
476 
477 #if PY_BUILD_OTA
478 extern const struct _mp_obj_module_t ota_module;
479 #define MICROPY_PY_OTA_DEF { MP_ROM_QSTR(MP_QSTR_ota), MP_ROM_PTR(&ota_module) },
480 #else
481 #define MICROPY_PY_OTA_DEF
482 #endif
483 
484 #ifdef AOS_BOARD_HAAS700
485 
486 #if PY_BUILD_VIDEO
487 extern const struct _mp_obj_module_t video_module;
488 #define MICROPY_PY_VIDEO_DEF { MP_ROM_QSTR(MP_QSTR_video), MP_ROM_PTR(&video_module) },
489 #else
490 #define MICROPY_PY_VIDEO_DEF
491 #endif
492 
493 #if PY_BUILD_NETWORK
494 extern const struct _mp_obj_module_t network_module;
495 #define MICROPY_PY_NETWORK_DEF { MP_ROM_QSTR(MP_QSTR_network), MP_ROM_PTR(&network_module) },
496 #else
497 #define MICROPY_PY_NETWORK_DEF
498 #endif
499 
500 #endif
501 
502 // clang-format off
503 #ifndef AOS_BOARD_HAAS700
504 #define MICROPY_PORT_BUILTIN_MODULES    \
505     { MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&utime_module) },  \
506     { MP_ROM_QSTR(MP_QSTR_driver), MP_ROM_PTR(&driver_module) }, \
507     MICROPY_PY_UTIME_DEF    \
508     MICROPY_PY_MINICV_DEF   \
509     MICROPY_PY_ALIYUNIOT_DEF \
510     MICROPY_PY_HTTP_DEF     \
511     MICROPY_PY_UDP_DEF      \
512     MICROPY_PY_TCP_DEF      \
513     MICROPY_PY_NETMGR_DEF   \
514     MICROPY_PY_MQTT_DEF     \
515     MICROPY_PY_USOCKET_DEF  \
516     MICROPY_PY_AUDIO_DEF    \
517     MICROPY_PY_UOS_DEF      \
518     MICROPY_PY_OSS_DEF      \
519     MICROPY_PY_UCAMERA_DEF  \
520     MICROPY_PY_SNTP_DEF     \
521     MICROPY_PY_MODBUS_DEF   \
522     MICROPY_PY_UGRAPHICS_DEF \
523     MICROPY_PY_ULOG_DEF     \
524     MICROPY_PY_KV_DEF       \
525     MICROPY_PY_SYSTEM_DEF   \
526     MICROPY_PY_OTA_DEF      \
527     MICROPY_PY_UCLOUD_AI_DEF \
528     MICROPY_PY_AIAGENT_DEF
529 #else
530 #define MICROPY_PORT_BUILTIN_MODULES                            \
531     { MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&utime_module) },  \
532     { MP_ROM_QSTR(MP_QSTR_driver), MP_ROM_PTR(&driver_module) }, \
533     MICROPY_PY_UDP_DEF      \
534     MICROPY_PY_TCP_DEF      \
535     MICROPY_PY_VIDEO_DEF    \
536     MICROPY_PY_NETWORK_DEF
537 #endif
538 // clang-format on
539 
540 #define MICROPY_PORT_BUILTIN_MODULE_WEAK_LINKS MICROPY_PY_UTIME_DEF_WEAK_LINKS
541