SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
Loading...
Searching...
No Matches
UI การจัดเตรียม HSM

Functions

void hsm_enrol_open (void)
 เปิด overlay การลงทะเบียนใบรับรองด้วย CSR จากการคลิกใน LVGL; ต้องจับคู่กับ hsm_provision_ui_teardown()
void hsm_protect_open (void)
 เปิด overlay ของ Protected Update; ข้อกำหนดเรื่องการจับคู่เหมือน hsm_enrol_open()
void hsm_provision_ui_teardown (void)
 เป็นคำสั่งสุดท้ายใน destroy_cb ของหน้า ขณะที่อ็อบเจ็กต์ LVGL ยังใช้งานได้อยู่

Detailed Description

Header: hsm_provision_ui.h ตัวโค้ดจริง: hsm_provision_ui.c ที่อยู่ใน archive (libbento_cm55.a) เป็นหน้าจอเชิงอธิบาย 2 หน้าบนหน้า HSM ได้แก่ การลงทะเบียนใบรับรอง (certificate enrolment) ด้วย CSR และ Protected Update แต่ละหน้าเป็น overlay (หน้าจอซ้อนทับ) เต็มจอที่ทำงานแบบ asynchronous คือ IPC_CMD_HSM_PROVISION คืนค่ากลับทันทีแล้วให้ lv_timer คอยวนถาม (polling) เพราะการวนรอแบบ busy-wait จะทำให้หน้าจอค้าง และทำให้ busy modal อธิบายอาการค้างนั้นไม่ได้

variant ที่ใช้ได้
mtb-mpy และ mtb-only

Function Documentation

◆ hsm_enrol_open()

void hsm_enrol_open ( void )

เปิด overlay การลงทะเบียนใบรับรองด้วย CSR จากการคลิกใน LVGL; ต้องจับคู่กับ hsm_provision_ui_teardown()

Open the Enrol screen — key pair, CSR, proof of possession, certificate.

ข้อกำหนดการเรียกใช้
เป็นตัวเนื้อของ lv_event_cb — ถูกเรียกจากการคลิกปุ่มใน LVGL ใน GFX-task context เท่านั้น ไม่มีอาร์กิวเมนต์ ไม่มีค่าคืนกลับ และไม่มีเส้นทางจัดการข้อผิดพลาดที่ call site (จุดที่มีการเรียกจริง) เพราะ overlay (หน้าจอซ้อนทับ) รายงานสถานะของตัวเอง ไม่มีการเริ่มต้นค่าใดที่ต้องทำมาก่อน นอกจากต้องมีหน้า HSM อยู่แล้ว เพราะฟังก์ชันนี้ประกอบ overlay ขึ้นมาเอง หน้าที่เป็นเจ้าของต้องจับคู่ฟังก์ชันนี้กับ hsm_provision_ui_teardown() ในเส้นทาง destroy ของตัวเอง — การจับคู่นั้นคือข้อกำหนดการเรียกใช้
variant ที่ใช้ได้
mtb-mpy และ mtb-only
/* ...context: button event callbacks - GFX task context ... */
static void enrol_btn_clicked_cb(lv_event_t *e) { (void)e; hsm_enrol_open(); }
static void protect_btn_clicked_cb(lv_event_t *e) { (void)e; hsm_protect_open(); }

◆ hsm_protect_open()

void hsm_protect_open ( void )

เปิด overlay ของ Protected Update; ข้อกำหนดเรื่องการจับคู่เหมือน hsm_enrol_open()

Open the Protect screen — pending change set, confirm, run, read back.

ข้อกำหนดการเรียกใช้
เหมือน hsm_enrol_open ทุกอย่าง คือเป็นตัวเนื้อของ callback รับเหตุการณ์ ทำงานใน GFX task เท่านั้น overlay รายงานสถานะของตัวเอง และต้องจับคู่กับ hsm_provision_ui_teardown() ใน destroy ของหน้านั้น
variant ที่ใช้ได้
mtb-mpy และ mtb-only
/* ...context: button event callbacks - GFX task context ... */
static void enrol_btn_clicked_cb(lv_event_t *e) { (void)e; hsm_enrol_open(); }
static void protect_btn_clicked_cb(lv_event_t *e) { (void)e; hsm_protect_open(); }

◆ hsm_provision_ui_teardown()

void hsm_provision_ui_teardown ( void )

เป็นคำสั่งสุดท้ายใน destroy_cb ของหน้า ขณะที่อ็อบเจ็กต์ LVGL ยังใช้งานได้อยู่

Called from page_hsm_destroy(): drop any overlay and cancel its poll timer.

ข้อกำหนดการเรียกใช้
ถูกเรียกจาก destroy_cb ของหน้า (ใน GFX-task context) ขณะที่อ็อบเจ็กต์ LVGL ยังใช้งานได้อยู่ โดยเป็นคำสั่งสุดท้าย — หลังจากลบ timer ของหน้านั้นและตั้งพอยน์เตอร์ของ widget เป็น null แล้ว คือเก็บกวาดของตัวเองก่อน แล้วจึงรื้อ overlay เรียกซ้ำได้โดยไม่เกิดผลต่างเมื่อไม่มี overlay เปิดอยู่ (ผู้เรียกที่มีอยู่จริงในของที่ส่งมอบไม่ได้ใส่ตัวกันไว้) เหตุผลที่บันทึกไว้ในโค้ด: timer ที่คอยวนถามสถานะการจัดเตรียมซึ่งทำงานหลังจาก widget ถูกคืนหน่วยความจำไปแล้ว จะไปอ้างถึงหน่วยความจำนั้น ปุ่มปิดของตัวโมดูลเอง (hsm_provision_ui.c:447) เป็นผู้เรียกอีกราย
variant ที่ใช้ได้
mtb-mpy และ mtb-only
void page_hsm_destroy(void)
{
memset(&s_ctx, 0, sizeof(s_ctx));
s_cert_overlay = NULL;
s_bench_overlay = NULL;
/* The screen (and every PIN widget under it) is being deleted by the
* page manager — cancel the pending one-shot timer and drop all widget
* pointers so a late callback cannot touch freed LVGL objects. */
if (s_pin.timer) {
lv_timer_delete(s_pin.timer);
s_pin.timer = NULL;
}
s_pin.overlay = NULL;
s_pin.icon_lbl = NULL;
s_pin.title_lbl = NULL;
s_pin.msg_lbl = NULL;
for (int i = 0; i < PIN_LENGTH; i++) s_pin.dots[i] = NULL;
/* Any provisioning overlay and its poll timer go with the page. A timer
* that fires after these widgets are freed dereferences them. */