|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
|
Topics | |
| bento_link_ipc_query | |
Functions | |
| bool | bento_link_ipc_init (void) |
| เริ่มการทำงานของ backend IPC และลงทะเบียนตัวเองในชื่อ "ipc"; ต้องมาก่อน bento_link_get() | |
| bento_link_t * | bento_link_get (const char *name) |
| ค้นหา backend ตามชื่อ; คืน NULL เมื่อไม่มี — ต้องตรวจ NULL เสมอ | |
| bento_link_t * | bento_link_at (uint32_t index) |
| ไล่รายการใน registry; คืน NULL เมื่อเลยรายการสุดท้าย | |
| bool | bento_link_register (bento_link_t *link) |
| API สำหรับผู้เขียน backend: ลงทะเบียน bento_link_t ของ transport เพียงครั้งเดียว | |
5 symbol: registry ของ bento_link (bento_link_register(), bento_link_get(), bento_link_at()) และจุดเข้า 2 จุดของ backend "ipc" ที่ส่งมอบมา (bento_link_ipc_init(), bento_link_ipc_query) เขียนไว้ใน bento_link.c และ bento_link_ipc.c คอมไพล์รวมอยู่ใน libbento_mpy.a ไม่ได้ส่งมอบมาเป็นซอร์ส bento_link.h ประกาศฟังก์ชันของ registry ไว้ 3 ตัว; bento_secure_undeclared.h เก็บ prototype ของ bento_link_ipc_init() ที่กู้กลับมา และบันทึกไว้ว่า bento_link_ipc_query() ไม่มีคำประกาศอยู่ที่ใดเลยในทรีนี้ — ผู้ใช้ไลบรารีเป็นผู้เขียน extern ขึ้นเอง
ตัวอย่างอ้างอิงที่ส่งมอบมาคือ template/bento_libs/claw/common/mpy/moddeepcraft.c และลำดับที่มันบังคับไว้คือข้อกำหนด: bento_link_ipc_init() → bento_link_get("ipc") → ตรวจ NULL → ต่อ bento_link_t ที่ได้คืนมาเข้ากับ adapter ของ DEEPCRAFT™
|
extern |
เริ่มการทำงานของ backend IPC และลงทะเบียนตัวเองในชื่อ "ipc"; ต้องมาก่อน bento_link_get()
"ipc" (ภายในเรียก bento_link_register()) เป็น idempotent ต้องมาก่อน bento_link_get("ipc") — ก่อนหน้านั้นการค้นหาจะคืนค่า NULL คืนค่า false เมื่อปลายทางของ pipe ยังไม่พร้อม; binding ในของที่ส่งมอบจริงจะ raise OSError เมื่อได้ false ทำงานใน task context; ผู้เรียกที่มีอยู่จริงในของที่ส่งมอบคือ ensure_inited() แบบ lazy ของ MicroPython task prototype ตัวนี้คือตัวที่ bento_secure_undeclared.h กู้กลับมา — ไม่มี header อื่นที่ส่งมอบมาประกาศฟังก์ชันนี้ไว้เลย | bento_link_t * bento_link_get | ( | const char * | name | ) |
ค้นหา backend ตามชื่อ; คืน NULL เมื่อไม่มี — ต้องตรวจ NULL เสมอ
Look up a backend by name; NULL if not compiled in / not registered.
"ipc", "usb", "ble", "wifi"); คืนค่า NULL เมื่อ backend นั้นไม่ได้ถูกคอมไพล์เข้ามาหรือยังไม่ได้ลงทะเบียน ต้องตรวจ NULL เสมอ — การมีอยู่ของ backend เป็นไปตาม persona ของบอร์ดและลำดับการเริ่มระบบ ลำดับที่ต้องทำ: bento_link_ipc_init() → bento_link_get("ipc") → ตรวจ NULL → เก็บพอยน์เตอร์ไว้ใน adapter ไม่มีการจับ lock; ทำงานใน task context | bento_link_t * bento_link_at | ( | uint32_t | index | ) |
ไล่รายการใน registry; คืน NULL เมื่อเลยรายการสุดท้าย
Enumerate registered backends: index 0..n-1, NULL past the end.
BENTO_LINK_MAX_BACKENDS แล้วหยุดที่ NULL ตัวแรก — registry เก็บเรียงชิดกันไม่มีช่องว่าง NULL จึงหมายความว่า "ไม่มีอีกแล้ว" เป็นที่มาของข้อมูลให้ deepcraft.links() ฝั่ง Python ไม่มีการจับ lock; ทำงานใน task context deepcraft_links() | bool bento_link_register | ( | bento_link_t * | link | ) |
API สำหรับผู้เขียน backend: ลงทะเบียน bento_link_t ของ transport เพียงครั้งเดียว
Register a backend (called once from each backend's init).
bento_link_t ของตัวเองเพียงครั้งเดียว จากฟังก์ชัน init ของตัวเอง ก่อนที่ผู้ใช้ไลบรารีรายใดจะ bento_link_get() มันได้ — แบบที่ใช้จริงในของที่ส่งมอบคือ backend "ipc" ที่ลงทะเบียนตัวเองอยู่ภายใน bento_link_ipc_init() registry เก็บได้มากที่สุด BENTO_LINK_MAX_BACKENDS (4) รายการ; ค่า false หมายถึงเต็มหรือซ้ำ และ backend ต้องรายงานว่าตัวเองใช้งานไม่ได้ ห้ามวนลองใหม่ callback รับข้อมูลที่ลงทะเบียนผ่านโครงสร้างฐานนี้ ต้องถูกส่งมอบนอกบริบทของอินเทอร์รัปต์ (ISR → คิว → task ที่ทำหน้าที่ส่งมอบ) ตามที่ bento_link.h กำหนด ไม่มี call site ในเทมเพลตเลย; ผู้เรียกรายเดียวอยู่ภายใน archive