ใน Android เวอร์ชัน L เราจะหยุดรองรับ HAL เซ็นเซอร์บางเวอร์ชัน เวอร์ชันที่รองรับมีเพียง SENSORS_DEVICE_API_VERSION_1_0
และ SENSORS_DEVICE_API_VERSION_1_3
ในรุ่นถัดไป เราอาจเลิกรองรับ 1_0 ด้วย
1_0 ไม่มีแนวคิดการแบ่งกลุ่ม หากเป็นไปได้ อุปกรณ์ทั้งหมดที่ใช้ 1_0 ควรอัปเกรดเป็น 1_3
1_1 และ 1_2 มีคำจำกัดความที่ไม่ชัดเจนเกี่ยวกับแนวคิดการแบ่งกลุ่ม และระบบไม่รองรับอีกต่อไป
อุปกรณ์ทั้งหมดที่ใช้ 1_1 หรือ 1_2 อยู่ในปัจจุบันต้องอัปเกรดเป็น 1_3
ใน 1_3 เราได้ลดความซับซ้อนของแนวคิดการแบ่งกลุ่ม และเปิดตัวเซ็นเซอร์ปลุก
หากต้องการอัปเกรดเป็น 1_3 ให้ทำตามการเปลี่ยนแปลงที่ระบุไว้ด้านล่าง
ใช้ฟังก์ชันการประมวลผลเป็นกลุ่ม
แม้ว่าคุณจะไม่ได้ใช้การแบ่งกลุ่ม (ฮาร์ดแวร์ไม่มี FIFO) คุณก็ต้องใช้ฟังก์ชัน batch
batch
ใช้เพื่อกำหนดระยะเวลาการสุ่มตัวอย่างและเวลาในการตอบสนองสูงสุดในการรายงานสำหรับเซ็นเซอร์หนึ่งๆ ข้อความนี้แทนที่ setDelay
ระบบจะไม่เรียก setDelay
อีกต่อไป
หากไม่ได้ใช้การแยกกลุ่ม คุณสามารถติดตั้งใช้งาน batch
ได้โดยเรียกใช้ฟังก์ชัน setDelay
ที่มีอยู่ด้วยพารามิเตอร์ sampling_period_ns
ที่ระบุ
ใช้ฟังก์ชันล้าง
แม้ว่าคุณจะไม่ได้ใช้การแยกกลุ่ม แต่ก็ต้องใช้ฟังก์ชัน flush
หากคุณไม่ได้ใช้การแยกกลุ่ม flush
จะต้องสร้างเหตุการณ์ META_DATA_FLUSH_COMPLETE
รายการและแสดงผล 0 (สําเร็จ)
เปลี่ยน sensors_poll_device_t.common.version
your_poll_device.common.version = SENSORS_DEVICE_API_VERSION_1_3
เพิ่มฟิลด์ใหม่ลงในคําจํากัดความของเซ็นเซอร์
เมื่อกําหนดเซ็นเซอร์แต่ละตัว ให้ระบุข้อมูลต่อไปนี้นอกเหนือจากช่อง sensor_t ปกติ
.name = "My magnetic field Sensor", .vendor = "My company", .version = 1, .handle = mag_handle, .type = SENSOR_TYPE_MAGNETIC_FIELD, .maxRange = 200.0f, .resolution = CONVERT_M, .power = 5.0f, .minDelay = 16667,
นอกจากนี้ คุณยังต้องตั้งค่าช่องใหม่ซึ่งกำหนดไว้ระหว่าง 1_0 ถึง 1_3 ด้วย
.fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .stringType = 0, .requiredPermission = 0, .maxDelay = 200000 .flags = SENSOR_FLAG_CONTINUOUS_MODE,
fifoReservedEventCount: หากไม่ได้ใช้การแบ่งกลุ่ม ให้ตั้งค่านี้เป็น 0
fifoMaxEventCount: หากไม่ได้ใช้การแบ่งกลุ่ม ให้ตั้งค่านี้เป็น 0
stringType: ตั้งค่าเป็น 0 สําหรับเซ็นเซอร์ Android อย่างเป็นทางการทั้งหมด (เซ็นเซอร์ที่กําหนดไว้ใน sensors.h) เนื่องจากเฟรมเวิร์กจะเขียนทับค่านี้ สําหรับเซ็นเซอร์ที่ไม่ใช่ทางการ ให้ดูรายละเอียดวิธีตั้งค่าใน sensor_t
requiredPermission: สิทธิ์นี้เป็นสิ่งที่แอปพลิเคชันต้องมีจึงจะเข้าถึงเซ็นเซอร์ได้ โดยปกติแล้วคุณสามารถตั้งค่านี้เป็น 0 สำหรับเซ็นเซอร์ทั้งหมดได้ แต่เซ็นเซอร์ประเภท HEART_RATE
ต้องตั้งค่านี้เป็น SENSOR_PERMISSION_BODY_SENSORS.
maxDelay: ค่านี้มีความสําคัญและคุณจะต้องกําหนดค่าตามความสามารถของเซ็นเซอร์และไดรเวอร์
ค่านี้กําหนดไว้สําหรับเซ็นเซอร์แบบต่อเนื่องและแบบมีการเปลี่ยนแปลงเท่านั้น ซึ่งเป็นความล่าช้าระหว่างเหตุการณ์เซ็นเซอร์ 2 รายการที่สอดคล้องกับความถี่ต่ำสุดที่เซ็นเซอร์นี้รองรับ เมื่อมีการขอความถี่ที่ต่ำลงผ่านฟังก์ชัน batch
ระบบจะสร้างเหตุการณ์ด้วยความถี่นี้แทน เฟรมเวิร์กหรือแอปพลิเคชันสามารถใช้เพื่อประมาณว่าบัทช์ FIFO อาจเต็มเมื่อใด หากไม่ได้ตั้งค่านี้อย่างถูกต้อง CTS จะดำเนินการไม่สำเร็จ
สําหรับเซ็นเซอร์โหมดการรายงานแบบครั้งเดียวและแบบพิเศษ ให้ตั้งค่า maxDelay
เป็น 0
สําหรับเซ็นเซอร์แบบต่อเนื่อง ให้ตั้งค่าเป็นระยะเวลาการสุ่มตัวอย่างสูงสุดที่อนุญาตเป็นไมโครวินาที
รายการต่อไปนี้ใช้ได้กับ period_ns
, maxDelay
และ minDelay
period_ns
เป็นนาโนวินาที ส่วนmaxDelay
/minDelay
เป็นไมโครวินาทีmaxDelay
ควรอยู่ภายในจำนวนเต็มแบบมีเครื่องหมาย 32 บิตเสมอ มีการประกาศเป็น 64 บิตในสถาปัตยกรรม 64 บิตเพื่อเหตุผลด้านความเข้ากันได้ของไบนารีเท่านั้น
flags: ช่องนี้จะกำหนดโหมดการรายงานของเซ็นเซอร์และระบุว่าเซ็นเซอร์เป็นเซ็นเซอร์ปลุกหรือไม่
หากคุณไม่ได้ใช้การแยกกลุ่ม และกำลังจะเปลี่ยนจาก 1.0 เป็น 1.3 ให้ตั้งค่านี้เป็น
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE
สำหรับเซ็นเซอร์แบบครั้งเดียว
SENSOR_FLAG_CONTINUOUS_MODE
สำหรับเซ็นเซอร์แบบต่อเนื่อง SENSOR_FLAG_ON_CHANGE_MODE
สำหรับเซ็นเซอร์แบบมีการเปลี่ยนแปลง ยกเว้นเซ็นเซอร์ตรวจหาบุคคลในบริเวณใกล้เคียง
SENSOR_FLAG_SPECIAL_REPORTING_MODE
สำหรับเซ็นเซอร์ที่มีโหมดการรายงานพิเศษ ยกเว้นเครื่องตรวจจับการเอียง
SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE
สำหรับเซ็นเซอร์ความใกล้และเซ็นเซอร์ตรวจจับการเอียงอย่างเป็นทางการของ Android
หมายเหตุเมื่ออัปเกรดจาก 1_1 หรือ 1_2
- ตอนนี้ฟังก์ชัน
batch
ทำงานสำเร็จเกือบทุกครั้ง แม้แต่กับเซ็นเซอร์ที่ไม่รองรับการรวมกลุ่ม โดยไม่ขึ้นอยู่กับค่าของอาร์กิวเมนต์การหมดเวลา กรณีเดียวที่batch
ฟังก์ชันอาจไม่ทำงานคือข้อผิดพลาดภายใน หรือsensor_handle,
เป็นค่าที่ไม่ถูกต้องsampling_period_ns
เป็นค่าลบ หรือmax_report_latency_ns
เป็นค่าลบ - เซ็นเซอร์จะรองรับการแบ่งกลุ่มหรือไม่นั้นขึ้นอยู่กับว่ามีค่า
fifoMaxEventCount
มากกว่า 0 หรือไม่ (ในเวอร์ชันก่อนหน้า การดำเนินการจะอิงตามค่าที่แสดงผลของbatch()
) - เซ็นเซอร์ที่รองรับการรวมกลุ่มจะอยู่ในสิ่งที่เราเรียกว่า "โหมดกลุ่ม" เสมอในเวอร์ชันก่อนหน้านี้ แม้ว่าพารามิเตอร์
max_report_latency_ns
จะเท่ากับ 0 แต่เซ็นเซอร์ยังคงต้องรวมกลุ่มอยู่ ซึ่งหมายความว่าต้องจัดเก็บเหตุการณ์ไว้ใน FIFO เมื่อ SoC เข้าสู่โหมดระงับ - ระบบไม่ใช้พารามิเตอร์
flags
ของฟังก์ชันbatch
อีกต่อไป ทั้งDRY_RUN
และWAKE_UPON_FIFO_FULL
เลิกใช้งานแล้ว และจะไม่มีการส่งไปยังฟังก์ชันbatch
- ตอนนี้อาร์กิวเมนต์ระยะหมดเวลาของกลุ่มจะเรียกว่าอาร์กิวเมนต์
max_report_latency