การเลิกใช้งานเวอร์ชัน HAL

ใน 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