|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
|
ชื่อทั้ง 6 ชุดเดียวกันนี้มีอยู่บน mtb-mpy ด้วย โดยมาจาก lfs_wifi_creds.c ที่อยู่ใน libbento_mpy.a — เป็น archive (ไฟล์ไลบรารีแบบสแตติก .a) ที่ ไม่ได้ส่งมอบมาเป็นซอร์ส และการอ่านเขียนไฟล์ของมันทำงานด้วยการเรียก open() ของ Python ผ่าน MicroPython VFS นั่นคือเหตุผลที่รุ่น mtb-mpy ต้องใช้ VM และมีอยู่บน variant นี้ไม่ได้ ส่วนที่เก็บฝั่ง C ที่ส่งมอบจริงเข้าถึงไฟล์เดียวกันผ่าน bento_storage แทน และเข้ากันได้ระดับไบต์โดยเจตนา
| mtb-mpy (archive อ่านที่นี่ไม่ได้) | mtb-only (lfs_wifi_creds_c.c ส่งมอบจริง) | |
|---|---|---|
| การอ่านเขียนไฟล์ | open() ของ Python ผ่าน VFS bridge | bento_storage_read_file() / bento_storage_write_file() บน lfs2 ล้วน |
| บริบทการเรียก | MicroPython task เท่านั้น หลังเมานต์ VFS แล้ว | task ใดก็ได้ เมื่อ bento_storage_init() เมานต์ให้แล้ว |
| lfs_wifi_creds_init() | การเริ่มต้นใช้งานจริง; gc_collect() ก่อน (~16 KB GC heap) | no-op — bento_storage_init() เป็นเจ้าของการเริ่มต้นใช้งาน |
| lfs_wifi_creds_deinit() | ทำให้ handle ของ Python ใช้ไม่ได้ ก่อน soft reset | no-op |
| lfs_wifi_creds_ready() | ที่เก็บเริ่มต้นแล้วและเมานต์ VFS แล้ว | ส่งต่อไปยัง bento_storage_ready() |
| lfs_wifi_creds_needs_resave() | true หลังอ่านไฟล์รูปแบบเดิมที่ใช้ XOR-32 | false เสมอ — เขียนเฉพาะรูปแบบปัจจุบันเท่านั้น |
| เส้นทางการเขียน | เขียนทั้งกระบวนการภายใน wifi_creds_lock() และเลื่อนไปให้ตัว flush ที่ทำงานตอน REPL ว่าง | ทำ snapshot ภายใต้ lock เขียนนอก lock และทำทันทีใน WiFi worker |
ข้อกำหนดร่วม — รูปแบบข้อมูลบนดิสก์ที่เข้ากันได้ระดับไบต์ (บอร์ดที่ย้ายข้าม variant ยังคงเครือข่ายที่บันทึกไว้เอาไว้ได้):
| ตำแหน่ง (offset) | ขนาด | ฟิลด์ |
|---|---|---|
| 0 | 4 | magic 0x57494649 ("WIFI", QSPI_WIFI_CREDS_MAGIC) |
| 4 | 2 | version 1 (QSPI_WIFI_CREDS_VERSION) |
| 6 | 2 | count, 0 ถึง 6 |
| 8 | 600 | entries, 6 × sizeof(qspi_wifi_entry_t) = 100 |
| 608 | 4 | CRC32 (poly 0xEDB88320) ของไบต์ 0 ถึง 607 |
ตัวอ่านทั้งสองยอมรับค่าตรวจสอบ (checksum) แบบเดิมที่เป็น XOR-32 ตอนอ่าน ไฟล์ที่ยังไม่ผ่านการย้ายรูปแบบจึงยังบูตขึ้นมาพร้อมเครือข่ายของตนได้ ส่วนตัวเขียนทั้งสองปล่อยออกมาเป็น CRC32 เท่านั้น implementation ที่ส่งมอบจริง คัดมาตามตัวอักษร — สั้นพอที่จะเป็นข้อกำหนดของตัวเองได้:
การล็อก wifi_creds_lock() / wifi_creds_unlock() ป้องกันตัวแปร global ที่ใช้ร่วมกันคือ g_boot_wifi_creds ไม่ใช่ป้องกันตัวไฟล์ wifi_init.c ยังทำ read-modify-write กับ /.wifi_creds โดยตรงโดยไม่แตะตัวแปร global เหล่านั้น lock เดียวที่ครอบตัวไฟล์เองคือ lock ของชั้น bento_storage เอง