อินเทอร์เฟซ HAL ของเซ็นเซอร์ที่ประกาศใน sensors.h แสดงถึงอินเทอร์เฟซระหว่าง Framework ของ Android กับซอฟต์แวร์เฉพาะฮาร์ดแวร์ การใช้งาน HAL ต้องกำหนดฟังก์ชันแต่ละฟังก์ชัน ที่ประกาศไว้ใน sensors.h ฟังก์ชันหลักมีดังนี้
get_sensors_list
- แสดงรายการเซ็นเซอร์ทั้งหมดactivate
- เริ่มหรือหยุดเซ็นเซอร์batch
- ตั้งค่าพารามิเตอร์ของเซ็นเซอร์ เช่น ความถี่ในการสุ่มตัวอย่างและความหน่วงเวลาในการรายงานสูงสุดsetDelay
- ใช้ใน HAL เวอร์ชัน 1.0 เท่านั้น กำหนดความถี่ในการสุ่มตัวอย่างสำหรับเซ็นเซอร์ที่ระบุflush
- ล้าง FIFO ของเซ็นเซอร์ที่ระบุและรายงานเหตุการณ์การล้างเสร็จสมบูรณ์ เมื่อดำเนินการนี้เสร็จแล้วpoll
- แสดงเหตุการณ์เซ็นเซอร์ที่ใช้ได้
การติดตั้งใช้งานต้องปลอดภัยต่อการทำงานแบบหลายเธรดและอนุญาตให้เรียกใช้ฟังก์ชันเหล่านี้ จากเธรดต่างๆ ได้
นอกจากนี้ อินเทอร์เฟซยังกำหนดประเภทต่างๆ ที่ฟังก์ชันเหล่านั้นใช้ด้วย ประเภทหลักๆ มีดังนี้
sensors_module_t
sensors_poll_device_t
sensor_t
sensors_event_t
นอกจากส่วนด้านล่างแล้ว โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับเซ็นเซอร์ประเภทดังกล่าวใน sensors.h
get_sensors_list(list)
int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);
แสดงรายการเซ็นเซอร์ที่ HAL ติดตั้งไว้ ดูรายละเอียดเกี่ยวกับวิธีกำหนดเซ็นเซอร์ได้ที่ sensor_t
ลำดับที่เซ็นเซอร์ปรากฏในรายการคือลำดับที่ระบบจะรายงานเซ็นเซอร์ไปยังแอปพลิเคชัน โดยปกติแล้ว เซ็นเซอร์พื้นฐานจะปรากฏ ก่อน ตามด้วยเซ็นเซอร์แบบรวม
หากเซ็นเซอร์หลายตัวใช้ประเภทเซ็นเซอร์และพร็อพเพอร์ตี้การปลุกเดียวกัน เซ็นเซอร์ตัวแรก
ในรายการจะเรียกว่าเซ็นเซอร์ "เริ่มต้น" ซึ่งเป็นค่าที่ได้จาก
getDefaultSensor(int sensorType, bool wakeUp)
ฟังก์ชันนี้จะแสดงผลจำนวนเซ็นเซอร์ในรายการ
activate(sensor, true/false)
int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int enabled);
เปิดหรือปิดใช้งานเซ็นเซอร์
sensor_handle
คือแฮนเดิลของเซ็นเซอร์เพื่อเปิด/ปิดใช้งาน แฮนเดิลของเซ็นเซอร์
กำหนดโดยฟิลด์ handle
ของโครงสร้าง sensor_t
ตั้งค่า enabled
เป็น 1 เพื่อเปิดใช้หรือ 0 เพื่อปิดใช้เซ็นเซอร์
เซ็นเซอร์แบบครั้งเดียวจะปิดใช้งานโดยอัตโนมัติเมื่อได้รับเหตุการณ์
และยังคงต้องยอมรับการปิดใช้งานผ่านการเรียกใช้ activate(...,
enabled=0)
เซ็นเซอร์ที่ไม่ใช่เซ็นเซอร์ปลุกจะไม่ป้องกันไม่ให้ SoC เข้าสู่โหมดพัก นั่นคือ HAL จะต้องไม่ถือการล็อกการปลุกบางส่วนในนามของแอปพลิเคชัน
เมื่อเซ็นเซอร์ปลุกส่งเหตุการณ์อย่างต่อเนื่อง เซ็นเซอร์จะป้องกันไม่ให้ SoC เข้าสู่โหมดพัก แต่หากไม่จำเป็นต้องส่งเหตุการณ์ใดๆ ระบบจะต้องปล่อย Wake Lock บางส่วน
หาก enabled
เป็น 1 และเซ็นเซอร์เปิดใช้งานอยู่แล้ว ฟังก์ชันนี้จะไม่มีการดำเนินการ
และจะสำเร็จ
หาก enabled
เป็น 0 และเซ็นเซอร์ปิดใช้งานอยู่แล้ว ฟังก์ชันนี้จะไม่มีการดำเนินการ
และจะสำเร็จ
ฟังก์ชันนี้จะแสดงผล 0 เมื่อสำเร็จ และแสดงผลหมายเลขข้อผิดพลาดที่เป็นลบในกรณีอื่นๆ
batch(sensor, flags, sampling period, maximum report latency)
int (*batch)( struct sensors_poll_device_1* dev, int sensor_handle, int flags, int64_t sampling_period_ns, int64_t max_report_latency_ns);
กำหนดพารามิเตอร์ของเซ็นเซอร์ รวมถึงความถี่ในการสุ่มตัวอย่างและเวลาในการตอบสนองสูงสุดของรายงาน ฟังก์ชันนี้จะเรียกใช้ได้ในขณะที่เซ็นเซอร์เปิดใช้งานอยู่ ในกรณีนี้ฟังก์ชันต้องไม่ทำให้ข้อมูลการวัดของเซ็นเซอร์สูญหาย การเปลี่ยนจากอัตราการสุ่มตัวอย่างหนึ่งไปยังอีกอัตราหนึ่งต้องไม่ทำให้เหตุการณ์สูญหาย และการเปลี่ยนจากเวลาในการตอบสนองสูงสุดของรายงานที่สูงไปยังเวลาในการตอบสนองสูงสุดของรายงานที่ต่ำก็ต้องไม่ทำให้เหตุการณ์สูญหายเช่นกัน
sensor_handle
คือแฮนเดิลของเซ็นเซอร์ที่จะกำหนดค่า
ปัจจุบันยังไม่มีการใช้งาน flags
sampling_period_ns
คือระยะเวลาการสุ่มตัวอย่างที่เซ็นเซอร์
ควรทำงานเป็นหน่วยนาโนวินาที ดูรายละเอียดเพิ่มเติมได้ที่ sampling_period_ns
max_report_latency_ns
คือเวลาสูงสุดที่เหตุการณ์อาจล่าช้าก่อนที่จะมีการรายงานผ่าน HAL เป็นหน่วยนาโนวินาที ดูรายละเอียดเพิ่มเติมได้ที่ย่อหน้า max_report_latency_ns
ฟังก์ชันนี้จะแสดงผล 0 เมื่อสำเร็จ และแสดงผลหมายเลขข้อผิดพลาดที่เป็นลบในกรณีอื่นๆ
setDelay(sensor, sampling period)
int (*setDelay)( struct sensors_poll_device_t *dev, int sensor_handle, int64_t sampling_period_ns);
หลังจาก HAL เวอร์ชัน 1.0 ฟังก์ชันนี้จะเลิกใช้งานและจะไม่มีการเรียกใช้
แต่จะมีการเรียกใช้ฟังก์ชัน batch
เพื่อตั้งค่าพารามิเตอร์
sampling_period_ns
แทน
ใน HAL เวอร์ชัน 1.0 มีการใช้ setDelay แทน batch เพื่อตั้งค่า sampling_period_ns
flush(sensor)
int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);
เพิ่มเหตุการณ์ล้างข้อมูลเสร็จสมบูรณ์ที่ส่วนท้ายของ FIFO ของฮาร์ดแวร์สำหรับเซ็นเซอร์ที่ระบุและล้าง FIFO ระบบจะส่งเหตุการณ์เหล่านั้นตามปกติ (เช่น ราวกับว่าเวลาในการตอบสนองสูงสุดในการรายงาน หมดอายุแล้ว) และนำออกจาก FIFO
การล้างข้อมูลจะเกิดขึ้นแบบไม่พร้อมกัน (กล่าวคือ ฟังก์ชันนี้ต้องแสดงผลทันที) หากการติดตั้งใช้งานใช้ FIFO เดียวสำหรับเซ็นเซอร์หลายตัว ระบบจะล้าง FIFO นั้น และเพิ่มเหตุการณ์การล้างเสร็จสมบูรณ์สำหรับเซ็นเซอร์ที่ระบุเท่านั้น
หากเซ็นเซอร์ที่ระบุไม่มี FIFO (บัฟเฟอร์ไม่ได้) หรือหาก FIFO
ว่างเปล่าในขณะที่เรียกใช้ flush
จะต้องยังคงสำเร็จและ
ส่งเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์สำหรับเซ็นเซอร์นั้น การตั้งค่านี้มีผลกับเซ็นเซอร์ทั้งหมด
ยกเว้นเซ็นเซอร์แบบครั้งเดียว
เมื่อเรียกใช้ flush
แม้ว่าจะมีเหตุการณ์ล้างข้อมูลอยู่ใน
FIFO สำหรับเซ็นเซอร์นั้นอยู่แล้ว ก็จะต้องสร้างเหตุการณ์เพิ่มเติมและเพิ่มลงในท้าย
ของ FIFO และต้องล้างข้อมูล FIFO จำนวนการเรียก flush
ต้องเท่ากับจำนวนเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์ที่สร้างขึ้น
flush
ไม่ใช้กับเซ็นเซอร์แบบครั้งเดียว
หาก sensor_handle
อ้างอิงถึงเซ็นเซอร์แบบครั้งเดียว
flush
ต้องแสดงผล -EINVAL
และไม่สร้าง
เหตุการณ์ข้อมูลเมตาที่ล้างข้อมูลเสร็จสมบูรณ์
ฟังก์ชันนี้จะแสดงผลเป็น 0 เมื่อสำเร็จ -EINVAL
หากเซ็นเซอร์ที่ระบุเป็น
เซ็นเซอร์แบบครั้งเดียวหรือไม่ได้เปิดใช้ และแสดงผลเป็นหมายเลขข้อผิดพลาดที่เป็นลบในกรณีอื่นๆ
poll()
int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
count);
แสดงผลอาร์เรย์ของข้อมูลเซ็นเซอร์โดยการกรอกอาร์กิวเมนต์ data
ฟังก์ชันนี้
ต้องบล็อกจนกว่าจะมีเหตุการณ์ โดยจะแสดงผลจำนวนเหตุการณ์ที่อ่านได้
เมื่อสำเร็จ หรือแสดงผลหมายเลขข้อผิดพลาดที่เป็นค่าลบในกรณีที่เกิดข้อผิดพลาด
จำนวนเหตุการณ์ที่แสดงใน data
ต้องน้อยกว่าหรือเท่ากับอาร์กิวเมนต์ count
ฟังก์ชันนี้จะไม่แสดงผล 0 (ไม่มีเหตุการณ์)
ลำดับของการโทร
เมื่ออุปกรณ์บูตระบบ ระบบจะเรียกใช้ get_sensors_list
เมื่อเซ็นเซอร์เปิดใช้งาน ระบบจะเรียกฟังก์ชัน batch
พร้อมพารามิเตอร์ที่ขอ
ตามด้วย activate(..., enable=1)
โปรดทราบว่าใน HAL เวอร์ชัน 1_0 ลำดับจะตรงกันข้าม โดยจะเรียกใช้ activate
ก่อน ตามด้วย set_delay
เมื่อลักษณะที่ขอของเซ็นเซอร์มีการเปลี่ยนแปลงขณะที่เปิดใช้งานอยู่ ระบบจะเรียกใช้ฟังก์ชัน batch
flush
สามารถเรียกใช้ได้ทุกเมื่อ แม้ในเซ็นเซอร์ที่ไม่ได้เปิดใช้งาน (ในกรณีนี้
ต้องส่งคืน -EINVAL
)
เมื่อเซ็นเซอร์ถูกปิดใช้งาน ระบบจะเรียกใช้ activate(..., enable=0)
ในขณะที่เรียกใช้ฟังก์ชันเหล่านั้น ระบบจะเรียกใช้ฟังก์ชัน poll
ซ้ำๆ เพื่อขอข้อมูล
poll
จะโทรได้แม้ว่าจะไม่มีเซ็นเซอร์เปิดใช้งานอยู่
sensors_module_t
sensors_module_t
เป็นประเภทที่ใช้สร้างโมดูลฮาร์ดแวร์ Android
สำหรับเซ็นเซอร์ การใช้งาน HAL ต้องกำหนดออบเจ็กต์
HAL_MODULE_INFO_SYM
ของประเภทนี้เพื่อแสดงฟังก์ชัน get_sensors_list ดูข้อมูลเพิ่มเติมได้ที่คำจำกัดความของ sensors_module_t
ใน sensors.h และคำจำกัดความของ hw_module_t
sensors_poll_device_t / sensors_poll_device_1_t
sensors_poll_device_1_t
มีวิธีการที่เหลือที่กำหนดไว้ข้างต้น ได้แก่
activate
, batch
, flush
และ
poll
ฟิลด์ common
(ประเภท hw_device_t)
กำหนดหมายเลขเวอร์ชันของ HAL
sensor_t
sensor_t
แสดงถึงเซ็นเซอร์
Android ฟิลด์ที่สำคัญบางส่วนมีดังนี้
name: สตริงที่ผู้ใช้มองเห็นได้ซึ่งแสดงถึงเซ็นเซอร์ สตริงนี้มักจะมีชื่อชิ้นส่วนของเซ็นเซอร์พื้นฐาน ประเภทของเซ็นเซอร์ และ ระบุว่าเป็นเซ็นเซอร์ที่ทำให้หน้าจอติดหรือไม่ เช่น "LIS2HH12 Accelerometer" "MAX21000 Uncalibrated Gyroscope" "BMP280 Wake-up Barometer" "MPU6515 Game Rotation Vector"
handle: จำนวนเต็มที่ใช้เพื่ออ้างอิงถึงเซ็นเซอร์เมื่อลงทะเบียนหรือ สร้างเหตุการณ์จากเซ็นเซอร์
type: ประเภทของเซ็นเซอร์ ดูรายละเอียดเพิ่มเติมได้ที่คำอธิบายประเภทเซ็นเซอร์ในเซ็นเซอร์ Android คืออะไร และดูประเภทเซ็นเซอร์อย่างเป็นทางการได้ที่ประเภทเซ็นเซอร์ สำหรับเซ็นเซอร์ประเภทที่ไม่ใช่เซ็นเซอร์อย่างเป็นทางการ type
ต้องขึ้นต้นด้วย SENSOR_TYPE_DEVICE_PRIVATE_BASE
stringType: ประเภทของเซ็นเซอร์เป็นสตริง เมื่อเซ็นเซอร์มีประเภทอย่างเป็นทางการ ให้ตั้งค่าเป็น SENSOR_STRING_TYPE_*
เมื่อเซ็นเซอร์มีประเภทเฉพาะของผู้ผลิต stringType
ต้อง
ขึ้นต้นด้วยชื่อโดเมนย้อนกลับของผู้ผลิต ตัวอย่างเช่น เซ็นเซอร์ (เช่น
เครื่องตรวจจับยูนิคอร์น) ที่กำหนดโดยทีม Cool-product ที่
Fictional-Company อาจใช้
stringType=”com.fictional_company.cool_product.unicorn_detector”
stringType
ใช้เพื่อระบุประเภทเซ็นเซอร์ที่ไม่ใช่เซ็นเซอร์อย่างเป็นทางการ
ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทและประเภทสตริงได้ที่ sensors.h
requiredPermission: สตริงที่แสดงถึงสิทธิ์
ที่แอปพลิเคชันต้องมีเพื่อดูเซ็นเซอร์ ลงทะเบียนกับเซ็นเซอร์ และรับ
ข้อมูลของเซ็นเซอร์ สตริงว่างหมายความว่าแอปพลิเคชันไม่จำเป็นต้องมีสิทธิ์ใดๆ ในการเข้าถึงเซ็นเซอร์นี้
เซ็นเซอร์บางประเภท เช่น เครื่องวัดอัตราการเต้นของหัวใจ มีrequiredPermission
ที่จำเป็น
เซ็นเซอร์ทั้งหมดที่ให้ข้อมูลผู้ใช้ที่ละเอียดอ่อน (เช่น อัตราการเต้นของหัวใจ) ต้องได้รับการปกป้องโดย
สิทธิ์
flags: Flags สำหรับเซ็นเซอร์นี้ ซึ่งกำหนดโหมดการรายงานของเซ็นเซอร์และระบุว่า
เซ็นเซอร์เป็นเซ็นเซอร์ปลุกหรือไม่ ตัวอย่างเช่น เซ็นเซอร์ปลุกแบบครั้งเดียว
จะมี flags = SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP
บิตของ
แฟล็กที่ไม่ได้ใช้ใน HAL เวอร์ชันปัจจุบันต้องมีค่าเป็น 0
maxRange: ค่าสูงสุดที่เซ็นเซอร์รายงานได้ในหน่วยเดียวกันกับค่าที่รายงาน
เซ็นเซอร์ต้องรายงานค่าได้โดยไม่ทำให้เกิดการอิ่มตัว
ภายใน [-maxRange; maxRange]
โปรดทราบว่านี่หมายความว่าช่วงทั้งหมดของ
เซ็นเซอร์ในความหมายทั่วไปคือ 2*maxRange
เมื่อเซ็นเซอร์รายงานค่าในแกนหลายแกน ช่วงจะมีผลกับแต่ละแกน เช่น ตัวตรวจวัดความเร่ง "+/- 2g"
จะรายงาน maxRange = 2*9.81 = 2g
ความละเอียด: ความแตกต่างของค่าที่น้อยที่สุดที่เซ็นเซอร์วัดได้
โดยปกติจะคำนวณตาม maxRange
และจำนวนบิตในการวัด
power: ต้นทุนด้านพลังงานของการเปิดใช้เซ็นเซอร์ในหน่วยมิลลิแอมป์
ซึ่งมักจะมากกว่าการใช้พลังงานที่รายงานในเอกสารข้อมูลด้านเทคนิคของเซ็นเซอร์พื้นฐาน ดูรายละเอียดเพิ่มเติมได้ที่เซ็นเซอร์ฐาน != เซ็นเซอร์
จริง และดูรายละเอียดเกี่ยวกับวิธีวัดการใช้พลังงานของเซ็นเซอร์ได้ที่กระบวนการวัด
พลังงาน
หากการใช้พลังงานของเซ็นเซอร์ขึ้นอยู่กับว่าอุปกรณ์กำลังเคลื่อนที่หรือไม่ การใช้พลังงานขณะเคลื่อนที่จะเป็นค่าที่รายงานในฟิลด์ power
minDelay: สำหรับเซ็นเซอร์แบบต่อเนื่อง ระยะเวลาการสุ่มตัวอย่างในหน่วย
ไมโครวินาที ซึ่งสอดคล้องกับอัตราที่เร็วที่สุดที่เซ็นเซอร์รองรับ ดูรายละเอียดเกี่ยวกับวิธีใช้ค่านี้ได้ที่ sampling_period_ns โปรดทราบว่า minDelay
แสดงในหน่วยไมโครวินาที ส่วน sampling_period_ns
แสดงในหน่วยนาโนวินาที สำหรับเซ็นเซอร์ในโหมดการรายงานเมื่อมีการเปลี่ยนแปลงและโหมดการรายงานพิเศษ minDelay
ต้องเป็น 0 เว้นแต่จะระบุไว้เป็นอย่างอื่น สำหรับเซ็นเซอร์แบบครั้งเดียว ค่าต้องเป็น -1
maxDelay: สำหรับเซ็นเซอร์แบบต่อเนื่องและเซ็นเซอร์ที่เปลี่ยนแปลง ค่าการสุ่มตัวอย่าง
เป็นหน่วยไมโครวินาที ซึ่งสอดคล้องกับอัตราที่ช้าที่สุดที่เซ็นเซอร์
รองรับ ดูรายละเอียดเกี่ยวกับวิธีใช้ค่านี้ได้ที่ sampling_period_ns โปรดทราบว่า maxDelay
แสดงในหน่วยไมโครวินาที ส่วน sampling_period_ns
แสดงในหน่วยนาโนวินาที สำหรับเซ็นเซอร์พิเศษและเซ็นเซอร์แบบครั้งเดียว maxDelay
ต้องเป็น 0
fifoReservedEventCount: จำนวนเหตุการณ์ที่สงวนไว้สำหรับเซ็นเซอร์นี้ใน
FIFO ของฮาร์ดแวร์ หากมี FIFO เฉพาะสำหรับเซ็นเซอร์นี้
fifoReservedEventCount
คือขนาดของ FIFO เฉพาะนี้ หากมีการแชร์ FIFO กับเซ็นเซอร์อื่นๆ fifoReservedEventCount
คือขนาดของส่วนหนึ่งของ FIFO ที่สงวนไว้สำหรับเซ็นเซอร์นั้น ในระบบ FIFO ที่ใช้ร่วมกันส่วนใหญ่และในระบบที่ไม่มี FIFO ของฮาร์ดแวร์ ค่านี้จะเป็น 0
fifoMaxEventCount: จำนวนเหตุการณ์สูงสุดที่จัดเก็บได้ใน FIFO สำหรับเซ็นเซอร์นี้ ซึ่งจะมากกว่าหรือเท่ากับ
fifoReservedEventCount
เสมอ ค่านี้ใช้เพื่อประมาณว่า FIFO จะเต็มเร็วเพียงใดเมื่อลงทะเบียนกับเซ็นเซอร์ที่อัตราหนึ่งๆ โดยสมมติว่าไม่มีการเปิดใช้งานเซ็นเซอร์อื่นๆ ในระบบที่ไม่มี FIFO ของฮาร์ดแวร์ ค่า fifoMaxEventCount
จะเป็น 0 ดูรายละเอียดเพิ่มเติมได้ที่การประมวลผลแบบกลุ่ม
สำหรับเซ็นเซอร์ที่มีประเภทเซ็นเซอร์อย่างเป็นทางการ เฟรมเวิร์กจะเขียนทับฟิลด์บางรายการ
เช่น เซ็นเซอร์ตัวตรวจวัดความเร่ง
จะบังคับให้มีโหมดการรายงานอย่างต่อเนื่อง และเครื่องวัดอัตราการเต้นของหัวใจจะ
บังคับให้ได้รับการปกป้องโดยสิทธิ์ SENSOR_PERMISSION_BODY_SENSORS
sensors_event_t
เหตุการณ์เซ็นเซอร์ที่สร้างโดยเซ็นเซอร์ Android และรายงานผ่านฟังก์ชัน poll จะมีค่าเป็น type sensors_event_t
ฟิลด์สำคัญบางส่วนของ sensors_event_t
มีดังนี้
version: ต้องเป็น sizeof(struct sensors_event_t)
เซ็นเซอร์: แฮนเดิลของเซ็นเซอร์ที่สร้างเหตุการณ์ ตามที่กำหนดโดย
sensor_t.handle
type: ประเภทเซ็นเซอร์ของเซ็นเซอร์ที่สร้างเหตุการณ์ ตามที่กำหนดโดย
sensor_t.type
timestamp: การประทับเวลาของเหตุการณ์ในหน่วยนาโนวินาที นี่คือเวลาที่เหตุการณ์เกิดขึ้น (มีการดำเนินการขั้นตอน หรือมีการวัดค่าจากเครื่องวัดความเร่ง) ไม่ใช่เวลาที่รายงานเหตุการณ์ timestamp
ต้องซิงค์กับนาฬิกา elapsedRealtimeNano
และในกรณีของเซ็นเซอร์ต่อเนื่อง ความผันผวน
ต้องมีค่าน้อย บางครั้งคุณอาจต้องกรองการประทับเวลาเพื่อให้เป็นไปตามข้อกำหนดของ CDD
เนื่องจากการใช้เวลาอินเทอร์รัปต์ของ SoC เพียงอย่างเดียวเพื่อตั้งค่าการประทับเวลา
จะทำให้เกิดความผันผวนสูงเกินไป และการใช้เวลาของชิปเซ็นเซอร์เพียงอย่างเดียวเพื่อตั้งค่า
การประทับเวลาอาจทำให้เกิดการยกเลิกการซิงค์จาก
นาฬิกา elapsedRealtimeNano
เนื่องจากนาฬิกาของเซ็นเซอร์มีการเลื่อน
ข้อมูลและฟิลด์ที่ทับซ้อนกัน: ค่าที่วัดโดยเซ็นเซอร์ ความหมายและหน่วยของฟิลด์เหล่านั้นจะเฉพาะเจาะจงสำหรับเซ็นเซอร์แต่ละประเภท
ดูคำอธิบายฟิลด์ข้อมูลได้ที่ sensors.h และคำจำกัดความของประเภทเซ็นเซอร์ต่างๆ
สำหรับเซ็นเซอร์บางตัว ระบบจะรายงานความแม่นยำของค่าที่อ่านได้เป็นส่วนหนึ่งของข้อมูลผ่านฟิลด์ status
ด้วย ฟิลด์นี้จะส่งผ่านเฉพาะเซ็นเซอร์บางประเภทเท่านั้น โดยจะปรากฏที่เลเยอร์ SDK เป็นค่าความแม่นยำ สำหรับเซ็นเซอร์เหล่านั้น ข้อกำหนดประเภทเซ็นเซอร์
จะระบุว่าต้องตั้งค่าฟิลด์สถานะ
เหตุการณ์การล้างข้อมูลเมตาเสร็จสมบูรณ์
เหตุการณ์ข้อมูลเมตามีประเภทเดียวกับเหตุการณ์เซ็นเซอร์ปกติ ดังนี้
sensors_event_meta_data_t = sensors_event_t
โดยจะส่งคืนพร้อมกับ
เหตุการณ์เซ็นเซอร์อื่นๆ ผ่านการสำรวจ โดยจะมีช่องต่อไปนี้
version: ต้องเป็น META_DATA_VERSION
ประเภท: ต้องเป็น SENSOR_TYPE_META_DATA
sensor, reserved, และ timestamp: ต้องเป็น 0
meta_data.what: มีประเภทข้อมูลเมตาสำหรับเหตุการณ์นี้ ปัจจุบันมีข้อมูลเมตาที่ถูกต้องเพียงประเภทเดียวคือ META_DATA_FLUSH_COMPLETE
เหตุการณ์ META_DATA_FLUSH_COMPLETE
แสดงถึงการล้าง FIFO ของเซ็นเซอร์
เสร็จสมบูรณ์ เมื่อ meta_data.what=META_DATA_FLUSH_COMPLETE
, meta_data.sensor
ต้องตั้งค่าเป็นแฮนเดิลของเซ็นเซอร์ที่ล้างแล้ว โดยจะสร้างขึ้นเมื่อและต่อเมื่อมีการเรียกใช้ flush
ในเซ็นเซอร์เท่านั้น ดูข้อมูลเพิ่มเติมได้ที่ส่วนเกี่ยวกับฟังก์ชัน flush