SDK สำหรับ TESAIoT Dev Kit
คู่มืออ้างอิง API และ Tutorial (ModusToolbox)
Loading...
Searching...
No Matches
Stream ของเซนเซอร์และเสียง

Functions

int sensor_stream_init (void)
 สร้าง task ครั้งเดียว ถูกเรียกแบบ lazy โดย sensor_stream_start() — ห้ามเรียกโดยตรง
int sensor_stream_start (const char *id, uint32_t interval_ms)
 เริ่มสตรีมเซนเซอร์หนึ่งตัว ผู้เรียกที่มีอยู่จริงในของที่ส่งมอบบีบค่า interval ให้อยู่ในช่วง [10, 5000] ms
void sensor_stream_stop (const char *id)
 หยุด stream ที่ทำงานอยู่ เป็น idempotent
void sensor_stream_stop_all (void)
 หยุด stream ที่ทำงานอยู่ทั้งหมดโดยไม่มีเงื่อนไข — เป็นเส้นทางพักเครื่องให้นิ่งก่อนอัปเดต
bool sensor_stream_is_active (void)
 คืน true ก็ต่อเมื่อมี stream ทำงานอยู่ เป็นตัวกัน "busy" ของ handler การอัปเดต
uint32_t sensor_stream_dropped_count (void)
 จำนวนตัวอย่างที่เส้นทาง NUS TX ปฏิเสธไว้ (link หลุดหรือบัฟเฟอร์เต็ม) ใช้ในข้อมูลวินิจฉัยของบอร์ด
int voice_capture_start (const char *id, uint32_t sample_rate_hz)
 เริ่มการบันทึกเสียง (ซึ่งเป็น stub) ส่งความเงียบหนึ่งวินาทีออกไปแบบซิงโครนัส — ผู้เรียกจะถูกบล็อก
void voice_capture_stop (void)
 หยุดแบบ idempotent ส่ง chunk สุดท้ายที่มี "final":true ออกไปถ้ามีการบันทึกทำงานอยู่
bool voice_capture_is_running (void)
 คืน true ก็ต่อเมื่อมีการบันทึกทำงานอยู่ ใช้กับป้ายปุ่มไมโครโฟนและเป็นตัวกันก่อนเริ่ม ไม่มีผู้เรียกที่ใดเลย

Detailed Description

9 ฟังก์ชัน: sensor_stream_* และ voice_capture_* คอมไพล์เฉพาะเมื่อ ENABLE_PAGE_BENTO_BUDDY=1 (ค่าตั้งต้นคือ 0, proj_cm33_ns/Makefile:64, :305) ให้ build ใหม่หลังจาก make getlibs — ดู Flag gate (อ่านก่อน)

การประกาศ: sensor_stream.h, voice_capture.h ส่วนการนำไปสร้างจริงใน sensor_stream.c / voice_capture.c ถูกเก็บไว้ใน libbento_secure.a voice_capture เป็น stub ตามที่ header ของมันระบุไว้เอง: เส้นทาง PDM-PCM ตัวจริงยังไม่ได้ต่อ มันส่งความเงียบสังเคราะห์หนึ่งวินาทีออกมาเป็นเฟรม bento.voice.chunk เพื่อให้ตรวจสอบตัวแจงข้อมูลฝั่ง desktop ได้ตั้งแต่ต้นจนจบ

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

Function Documentation

◆ sensor_stream_init()

int sensor_stream_init ( void )

สร้าง task ครั้งเดียว ถูกเรียกแบบ lazy โดย sensor_stream_start() — ห้ามเรียกโดยตรง

ข้อกำหนดการเรียกใช้
สร้าง task ของ FreeRTOS ครั้งเดียว การเรียกครั้งต่อ ๆ ไปเป็น no-op ถูกเรียก แบบ lazy โดย sensor_stream_start() เอง — ห้ามเรียกโดยตรง call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ sensor_stream.c:236 (if (sensor_stream_init() != 0) return -1; ภายใน sensor_stream_start คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ sensor_stream_start()

int sensor_stream_start ( const char * id,
uint32_t interval_ms )

เริ่มสตรีมเซนเซอร์หนึ่งตัว ผู้เรียกที่มีอยู่จริงในของที่ส่งมอบบีบค่า interval ให้อยู่ในช่วง [10, 5000] ms

ข้อกำหนดการเรียกใช้
เริ่มสตรีมเซนเซอร์ id ที่ interval_ms ผู้เรียกที่มีอยู่จริงในของที่ส่งมอบ บีบค่า interval ให้อยู่ในช่วง [10, 5000] ms ก่อนเรียก แทนที่ stream ที่กำลังทำงานอยู่ (v1 รองรับ stream เดียว) คืน 0 หรือคืน -1 เมื่อไม่รู้จัก id นั้น — ผู้เรียกจะตอบเป็น nack แบบ unknown_id call site ในเทมเพลต: 0 (ใน archive: 1)
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ที่มา
ยกมาจาก BENTO-TESAIoT-libraries/claw/common/ble_nus/nus_commands.c:770-784 (คอมไพล์รวมอยู่ใน archive สำเร็จรูป ไม่ได้ส่งมอบมาเป็นซอร์ส)

◆ sensor_stream_stop()

void sensor_stream_stop ( const char * id)

หยุด stream ที่ทำงานอยู่ เป็น idempotent

ข้อกำหนดการเรียกใช้
หยุด stream ที่ทำงานอยู่ เป็น idempotent (เรียกซ้ำแล้วผลเหมือนเดิม) call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ nus_commands.c:790 (sensor_stream_stop(id); คือ verb bento.sensor.stream.stop คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ sensor_stream_stop_all()

void sensor_stream_stop_all ( void )

หยุด stream ที่ทำงานอยู่ทั้งหมดโดยไม่มีเงื่อนไข — เป็นเส้นทางพักเครื่องให้นิ่งก่อนอัปเดต

ข้อกำหนดการเรียกใช้
หยุด stream ที่ทำงานอยู่ทั้งหมดโดยไม่มีเงื่อนไข เป็น idempotent กระบวนการอัปเดตเฟิร์มแวร์ใช้ฟังก์ชันนี้เมื่อได้รับคำตอบ Y เพื่อให้ตัวแฟลชทำงานบนอุปกรณ์ที่นิ่งอยู่ call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ bento_fw.c:343 (sensor_stream_stop_all(); คือเส้นทางพักเครื่องให้นิ่งก่อนอัปเดต คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ sensor_stream_is_active()

bool sensor_stream_is_active ( void )

คืน true ก็ต่อเมื่อมี stream ทำงานอยู่ เป็นตัวกัน "busy" ของ handler การอัปเดต

ข้อกำหนดการเรียกใช้
คืน true ก็ต่อเมื่อมี stream ทำงานอยู่ handler การอัปเดตใช้ค่านี้เพื่อตอบ {"ok":false,"error":"busy"} เมื่อการแฟลชเข้ามาชิงกับ stream ที่กำลังทำงานอยู่ call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ bento_fw.c:299 (if (sensor_stream_is_active()) { คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ sensor_stream_dropped_count()

uint32_t sensor_stream_dropped_count ( void )

จำนวนตัวอย่างที่เส้นทาง NUS TX ปฏิเสธไว้ (link หลุดหรือบัฟเฟอร์เต็ม) ใช้ในข้อมูลวินิจฉัยของบอร์ด

ข้อกำหนดการเรียกใช้
จำนวนตัวอย่างที่ถูกทิ้งเพราะเส้นทาง NUS TX ปฏิเสธไว้ (link หลุดหรือบัฟเฟอร์เต็ม) ค่านี้ถูกเปิดออกในข้อมูลวินิจฉัยของบอร์ด call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ nus_commands.c:1334 ((unsigned)sensor_stream_dropped_count(), ใน JSON ของข้อมูลวินิจฉัย คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ voice_capture_start()

int voice_capture_start ( const char * id,
uint32_t sample_rate_hz )

เริ่มการบันทึกเสียง (ซึ่งเป็น stub) ส่งความเงียบหนึ่งวินาทีออกไปแบบซิงโครนัส — ผู้เรียกจะถูกบล็อก

ข้อกำหนดการเรียกใช้
id เดินทางไปกับเฟรม bento.voice.chunk ทุกเฟรม ส่วน sample_rate_hz เป็นเพียงคำแนะนำ (stub ใช้ค่าตั้งต้น 16 kHz) คืน 0 หรือคืน -1 เมื่อมีการบันทึกทำงานอยู่แล้วหรือไม่มี link ให้ใช้ stub ส่งความเงียบหนึ่งวินาทีออกไปแบบซิงโครนัส (คอมเมนต์ที่ ipc_bento_buddy_bridge.c:133) ผู้เรียกจึงถูกบล็อกไว้ตลอดการส่งนั้น call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ ipc_bento_buddy_bridge.c:138 ((void)voice_capture_start((const char *)msg->data, คือการแตะปุ่มไมโครโฟนบน CM55 ที่มาทาง IPC คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ voice_capture_stop()

void voice_capture_stop ( void )

หยุดแบบ idempotent ส่ง chunk สุดท้ายที่มี "final":true ออกไปถ้ามีการบันทึกทำงานอยู่

ข้อกำหนดการเรียกใช้
เป็น idempotent ส่ง chunk สุดท้ายที่มี "final":true ออกไปถ้ามีการบันทึกทำงานอยู่ เพื่อให้ฝั่ง desktop ปิดตัวสะสมข้อมูลของตนได้ call site ในเทมเพลต: 0 call site ใน archive อยู่ที่ ipc_bento_buddy_bridge.c:141 (voice_capture_stop(); คอมไพล์รวมอยู่ใน libbento_secure.a ไม่ได้ส่งมอบมาเป็นซอร์ส)
variant ที่ใช้ได้
mtb-mpy และ mtb-only

◆ voice_capture_is_running()

bool voice_capture_is_running ( void )

คืน true ก็ต่อเมื่อมีการบันทึกทำงานอยู่ ใช้กับป้ายปุ่มไมโครโฟนและเป็นตัวกันก่อนเริ่ม ไม่มีผู้เรียกที่ใดเลย

ข้อกำหนดการเรียกใช้
คืน true ก็ต่อเมื่อมีการบันทึกทำงานอยู่ ตั้งใจไว้สำหรับป้ายปุ่มไมโครโฟน และเป็นตัวกันก่อนเรียก voice_capture_start() ไม่มีผู้เรียกที่ใดเลย
variant ที่ใช้ได้
mtb-mpy และ mtb-only
ตัวอย่าง (เขียนขึ้นเอง — ไม่มี call site ในของที่ส่งมอบจริง)
static void bento_ex_voice_capture_is_running(void)
{
voice_capture_stop(); /* toggle off — idempotent, emits a
* final "final":true chunk */
} else {
/* Toggle on: id travels on every bento.voice.chunk frame. */
if (voice_capture_start("clip-1",
/* already running (race) or no link — leave the label as-is */
}
}
}