SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
Loading...
Searching...
No Matches
ภาคผนวก Y — symbol ที่ผู้ใช้ไลบรารีต้องจัดหา และ symbol ที่เขียนทับได้
variant ที่ใช้ได้
mtb-mpy และ mtb-only

archive (ไฟล์ไลบรารีแบบสแตติก .a) ที่คอมไพล์มาแล้วทุกตัวใต้ template/lib/<module>/ มี manifest ที่เครื่องสร้างขึ้น 2 ไฟล์วางอยู่ข้าง header ของตัวเอง ได้แก่ consumer_must_provide.txt — symbol ที่ archive เรียกกลับออกมา และผู้ใช้ไลบรารีต้องนิยามเอง — และ overridable.txt — symbol ชนิด WEAK ที่ผู้ใช้ไลบรารี อาจเขียนทับด้วย strong definition ได้ ทั้ง 2 รายการไม่ใช่ API ที่ไว้เรียกใช้ จำนวนบรรทัดที่ระบุด้านล่างอ่านจากไฟล์ที่ส่งมอบจริงเมื่อ 2026-08-28

cm55_core — รอยต่อที่ผู้อ่านต้องเขียนเอง

consumer_must_provide.txt (182 symbol) มีสามตระกูลที่สำคัญ

  • รอยต่อของการเริ่มระบบ (bring-up) — การเรียกเหล่านี้เป็นความรับผิดชอบของผู้ใช้ไลบรารี และ archive คาดว่าจะมีอยู่จริง ได้แก่ cm55_ipc_communication_setup (ส่งมอบมาในรูปซอร์ส cm55_ipc_communication.c:42 ต้องมาก่อน RegisterCallback ทุกครั้ง), ipc_sensorhub_init, ipc_service_init, ipc_lcd_init, ipc_ui_init, sensorhub_ui_init, lv_init / lv_port_disp_init / lv_port_indev_init พร้อมชุด widget lv_*, pm_get_instance / pm_*, ws_panel_power_up, cm55_sensor_poll_*, bento_audio_*
  • symbol ai_* ทั้ง 35 ตัว — หลักฐานที่เครื่องสร้างขึ้นว่าฟังก์ชัน edge_ai ตัวใดมีผู้เรียกที่มีอยู่จริงในของที่ส่งมอบ (ภาคผนวก Y หัวข้อ edge_ai ด้านล่าง)
  • PDL/BSPCy_GFXSS_*, Cy_IPC_Pipe_*, Cy_SCB_I2C_*, GFXSS_config, gfx_context, frame_buffer1

overridable.txt: ว่างเปล่า ส่วนที่ export ออกมาแต่ไม่มีการประกาศ (bento_secure_undeclared.h): ผู้ใช้ไลบรารีต้องเขียน extern เองสำหรับ calculate_idle_percentage, disp_touch_i2c_controller_context, g_tesaiot_display_diag, rtos_cm55_gfx_task_handle, tesaiot_display_ready — เหมือนที่ผู้เรียกจริงทำ (proj_cm55/main.c:132-147, cm55_sensor_poll.c:42-54, lv_conf.h:1011-1017) หมายเหตุ: bento_secure_undeclared.h ที่ส่งมอบมาเก่าเกินจริงในส่วนของ g_tesaiot_display_diag และ rtos_cm55_gfx_task_handle เพราะ tesaiot_display.h ในไดเรกทอรีเดียวกันประกาศทั้ง 2 ตัวไว้แล้ว

edge_ai

consumer_must_provide.txt (58 symbol): RTOS และ ML runtime ที่ engine เรียกกลับออกมา ความสัมพันธ์ด้านกลับเป็นด้านที่ใช้ประโยชน์ได้ — cm55_core/consumer_must_provide.txt ระบุ symbol ai_* ไว้ 35 ตัว ซึ่งตรงกับชุดฟังก์ชัน API ของ edge_ai ที่มีผู้เรียกที่มีอยู่จริงในของที่ส่งมอบพอดี ส่วนฟังก์ชัน API 2 ตัวที่ไม่อยู่ในรายการนั้น คือ ai_engine_dq_calls และ ai_engine_resume_sensor ไม่มีผู้เรียกที่ใดเลย ตัวอย่างของทั้งสองจึงเป็นตัวอย่างที่เขียนขึ้นเอง overridable.txt: ว่างเปล่า ส่วน printf/puts เป็น no-op stub ที่ export ออกมา (ภาคผนวก X #1)

ipc_core — hook แบบ weak 7 ตัว

overridable.txt มีชื่ออยู่เจ็ดชื่อพอดี และทุกชื่อเป็นสิ่งที่ผู้ใช้ไลบรารีต้อง เขียนขึ้นเอง ไม่ใช่สิ่งที่มีไว้เรียก

Hook การเขียนทับในเทมเพลต ข้อกำหนดการเรียกใช้
cm55_controls_snapshot cm55_sensor_poll.c:342 เติมข้อมูลบล็อก controls ให้ snapshot ของ sensorhub
game_sprite_create game_sprite_engine.c:16 รอยต่อของ sprite engine
game_sprite_set game_sprite_engine.c:25 รอยต่อของ sprite engine
game_sprite_lookup game_sprite_registry.c:52 รอยต่อของ registry ป้อนข้อมูลให้ ui_widget_mgr_set_sprite_image
ipc_ui_ext_dispatch ipc_ui_ext_chain.c:41 ทำงานใน GFX-task context และแตะจอแสดงผลได้ (ipc_ui.h:40-41)
ipc_ui_ext_clear_all เป็น W ใน libbento_ipc.a จุดเขียนทับของ ext chain
ipc_ui_platform_diag strong definition อยู่ใน archive, tesaiot_display.c:593-609 max_words >= 10 และคืนค่า 10 เปิดออกมาให้ใช้ในชื่อ ui._diag()

consumer_must_provide.txt (302 symbol): LVGL, IPC pipe ของ PDL, FreeRTOS และรอยต่อของ page manager อันตรายจาก archive: PROVENANCE.txt ฝังค่า PAGE_ID_PLAYGROUND == 7 ไว้ตายตัว

tesaiot_hsm

overridable.txt: ว่างเปล่า — ไม่มีอะไรที่เป็น weak อยู่ใน archive consumer_must_provide.txt (71 symbol): อ็อบเจ็กต์ของ MQTT, ฟังก์ชันพื้นฐานของ OPTIGA (optiga_util_*, optiga_crypt_*), IPC ของการสัมผัส (touch), base64 และ optiga_util_callback ซึ่งผู้ใช้ไลบรารีเป็นผู้จัดหาให้ optiga_manager_init() นอกจากนั้น ฟังก์ชัน API 6 ตัวจากทั้งหมด 18 ตัว มีผู้เรียกที่มีอยู่จริงในของที่ส่งมอบใช้ในรูป weak symbol ภายใต้ ENABLE_OPTIGA_CLM=1 และต้องตรวจ NULL ที่พอยน์เตอร์ฟังก์ชันก่อนเรียก (ภาคผนวก X #19)

ble_nus — 5 รายการที่เขียนทับได้

overridable.txt: app_wifi_connect_direct, app_wifi_disconnect, app_wifi_get_ipv4, lfs_load_wifi_creds, lfs_save_wifi_creds โดย strong definition ในเทมเพลตอยู่ที่ proj_cm33_ns/wifi_init.c บรรทัด :193, :248, :256, :261, :304 ตามลำดับ (การจับคู่นี้ตัดสินไว้ในการตรวจแบบ RED รอบที่ 1) การที่จำนวนจุด เรียก ในเทมเพลตเป็นศูนย์นั้นถูกต้องแล้ว — ให้เขียนขึ้นเองไม่ใช่ให้เรียก lfs_save_wifi_creds ไม่ได้จับ wifi_creds_lock (ภาคผนวก X #18) consumer_must_provide.txt (61 symbol): WCM/WHD, IPC pipe, FreeRTOS และฟังก์ชันช่วยเรื่องลายนิ้วมือ (fingerprint) ของ OPTIGA

mpy_secure

overridable.txt: optiga_verify_staged_model — เป็น WEAK ใน archive ส่วนเทมเพลตส่งมอบ strong definition มาที่ optiga_trust_helpers.c:4526 (prototype อยู่ที่ tesaiot_hsm/include/optiga_trust_helpers.h:179) โดยไม่มีจุดเรียกในเทมเพลตเลย (ผู้เรียกที่อยู่ใน archive คือ modedgeai.c:773) consumer_must_provide.txt (139 symbol): MicroPython runtime, ชื่อ lfs_wifi_creds_* ทั้งหกที่บน mtb-only จัดหาให้ใหม่ในรูปซอร์สโดย storage_c/lfs_wifi_creds_c.c และรอยต่อของ IPC/TACP bento_secure_undeclared.h บันทึกไว้ว่าไม่มีการประกาศ bento_link_ipc_query อยู่ในต้นไม้ไฟล์เลย (:11) เช่นเดียวกับอ็อบเจ็กต์ของโมดูล mp_module_optiga / mp_module_edge_ai (:12-13) — ผู้ใช้ไลบรารีต้องเขียน extern เอง และบล็อก qstr/root-pointer ที่ bento_archived_qstrs.c:165-166 ต้องคัดลอกมาทีละไบต์ ห้ามสร้างขึ้นใหม่

กฎ

หากชื่อหนึ่งอยู่ใน overridable.txt หน้าคู่มืออ้างอิงที่บอกว่า "ให้เรียกฟังก์ชันนี้" คือหน้าที่ผิด และหากชื่อหนึ่งอยู่ใน consumer_must_provide.txt archive จะเชื่อม (link) ไม่ผ่านจนกว่าผู้ใช้ไลบรารีจะนิยามชื่อนั้นเอง — ซึ่งเทมเพลตที่ส่งมอบมานิยามไว้ให้แล้ว นั่นคือเหตุผลที่รายการทั้งสองอ่านได้เหมือนแผนที่ของสิ่งที่ผู้ใช้ไลบรารีต้องรับผิดชอบเอง