|
SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (MTB & µPython)
|
Functions | |
| bool | claw_https_connected (void) |
| predicate บอกสถานะการเชื่อมต่อ; ตรวจก่อน circuit breaker ต้นทุนต่ำและเรียกได้อย่างปลอดภัยทุกเมื่อ | |
| bool | claw_https_connect (const char *host, uint16_t port, const char *api_key) |
| เปิดการเชื่อมต่อ TLS และเก็บ API key ไว้; ยกระดับ trust ก่อน และตั้งกลับเมื่อล้มเหลว | |
| int | claw_https_post (const char *path, const char *json, size_t json_len, char *resp_buf, size_t resp_max) |
| POST json ไปยัง path; คืนค่าเป็นจำนวนไบต์ของคำตอบที่เขียนได้ และติดลบเมื่อล้มเหลว | |
| void | claw_https_disconnect (void) |
| ปิดการเชื่อมต่อ; ต้องตามด้วย claw_trust_set(CLAW_TRUST_USB) | |
4 ฟังก์ชัน: เป็นไคลเอนต์ HTTPS POST ที่ยิงไปยัง APISIX gateway ของ TESAIoT ผ่าน cy_http_client และ TLS เขียนไว้ใน claw_transport.c คอมไพล์รวมอยู่ใน libbento_mpy.a ไม่ได้ส่งมอบมาเป็นซอร์ส ทั้ง 4 ตัวถูกเรียกจาก template/bento_libs/claw/common/mpy/modbentoclaw.c ใน MicroPython task context; transport นี้ไม่มี lock ของตัวเอง
ลำดับที่โค้ดในของที่ส่งมอบจริงบังคับไว้ และเป็นลำดับที่กลุ่มฟังก์ชันนี้อธิบายไว้ทีละฟังก์ชัน: claw_ipc_init() → claw_trust_set(CLAW_TRUST_HTTPS) → claw_https_connect() (ตั้ง trust กลับเมื่อล้มเหลว) → guard ของ claw_https_connected() → claw_cb_allow() → claw_https_post() → claw_cb_success() / claw_cb_failure() → claw_https_disconnect() แล้วตามด้วย claw_trust_set(CLAW_TRUST_USB)
| bool claw_https_connected | ( | void | ) |
predicate บอกสถานะการเชื่อมต่อ; ตรวจก่อน circuit breaker ต้นทุนต่ำและเรียกได้อย่างปลอดภัยทุกเมื่อ
bentoclaw_ensure_init() ทำงานมาก่อนที่จุดเรียกทั้ง 7 แห่งในของที่ส่งมอบจริง ลำดับมีผลจริง: ตรวจการเชื่อมต่อ ก่อน circuit breaker ข้อผิดพลาดแบบ "ยังไม่ได้เชื่อมต่อ" จึงไม่ถูกรายงานผิดเป็น breaker ที่เปิดวงจร ใช้ในดิกชันนารีสถานะและในคำตอบ TACP STATUS ด้วย ไม่มีการจับ lock; ทำงานใน MicroPython task context bentoclaw.ask() | bool claw_https_connect | ( | const char * | host, |
| uint16_t | port, | ||
| const char * | api_key ) |
เปิดการเชื่อมต่อ TLS และเก็บ API key ไว้; ยกระดับ trust ก่อน และตั้งกลับเมื่อล้มเหลว
host:port และเก็บ API key ของอุปกรณ์ไว้ให้ปลั๊กอิน key-auth ของ gateway คืนค่า true เมื่อสำเร็จ claw_ipc_init() ทำงาน ก่อนการเรียกนี้ เพื่อให้ข้อความสถานะไปถึงแผงบน CM55 ได้ ระดับ trust ถูกยกขึ้นเป็น CLAW_TRUST_HTTPS ก่อนการพยายามเชื่อมต่อ และ ตั้งกลับเป็น CLAW_TRUST_USB ภายใน else เมื่อล้มเหลว — การจับคู่นั้นคือข้อกำหนด ไม่ใช่ทางเลือก (ดู claw_trust_set()) เมื่อสำเร็จจะผนวกรอบสนทนา CLAW_ROLE_SYSTEM เข้าเซสชัน บล็อกตลอดช่วงการจับมือ (handshake) ของ TLS; ทำงานใน MicroPython task context; ไม่มีการจับ lock bentoclaw_connect() | int claw_https_post | ( | const char * | path, |
| const char * | json, | ||
| size_t | json_len, | ||
| char * | resp_buf, | ||
| size_t | resp_max ) |
POST json ไปยัง path; คืนค่าเป็นจำนวนไบต์ของคำตอบที่เขียนได้ และติดลบเมื่อล้มเหลว
json ขนาด json_len ไบต์ ไปยัง path แล้วเขียนเนื้อคำตอบลงใน resp_buf คืนค่าเป็นจำนวนไบต์ของคำตอบที่เขียนได้ หรือ ค่าติดลบเมื่อล้มเหลว — ให้ตรวจด้วย resp_len < 0 จุดเรียก 2 แห่งในของที่ส่งมอบจริงต่างกัน (rlen > 0 บนเส้นทาง TACP ถือว่าเนื้อคำตอบที่ว่างเปล่าคือความล้มเหลว) การตรวจค่าติดลบที่แสดงไว้ที่นี่คือรูปแบบที่ถูกต้อง claw_https_connected() ต้องเป็น true มาก่อน บัฟเฟอร์รับคำตอบต้องไม่ทับซ้อนกับบัฟเฟอร์คำขอ: โค้ดในของที่ส่งมอบจริงประกอบคำขอไว้ใน s_work_large และรับคำตอบลงใน s_work_small — คอมเมนต์ "response overwrites s_work_small" ระบุข้อจำกัดนี้ไว้ชัดเจน json_len คือค่าที่ snprintf คืนมา ห้ามใช้ strlen ของบัฟเฟอร์ที่อาจถูกตัดทอนไปแล้ว บล็อก; ทำงานใน MicroPython task context; ไม่มีการจับ lock ให้จับคู่การเรียกทุกครั้งกับ claw_cb_failure() (ก่อนการ raise) หรือ claw_cb_success() | void claw_https_disconnect | ( | void | ) |
ปิดการเชื่อมต่อ; ต้องตามด้วย claw_trust_set(CLAW_TRUST_USB)
bentoclaw_ensure_init() และการเรียกขณะที่ตัดการเชื่อมต่ออยู่แล้วก็ไม่เป็นอันตราย ต้องตามด้วย claw_trust_set(CLAW_TRUST_USB): transport ไม่ได้แตะระดับ trust ด้วยตัวเอง และการปล่อยให้ CLAW_TRUST_HTTPS ค้างไว้หลังจากลิงก์หายไปแล้ว จะทำให้ transport ที่การเรียก tool ครั้งถัดไปวิ่งเข้ามานั้นถูกอธิบายผิด การอัปเดตสถานะไปยัง CM55 มี guard บน claw_ipc_initialized เป็น void; ทำงานใน MicroPython task context; ไม่มีการจับ lock bentoclaw_disconnect() พร้อมกับการตั้ง trust กลับ