การเลิกใช้งานเวอร์ชัน 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 : ค่านี้มีความสำคัญและคุณจะต้องตั้งค่าตามความสามารถของเซ็นเซอร์และไดรเวอร์

ค่านี้ถูกกำหนดไว้สำหรับเซ็นเซอร์ต่อเนื่องและที่มีการเปลี่ยนแปลงเท่านั้น เป็นการหน่วงเวลาระหว่างเหตุการณ์เซ็นเซอร์สองตัวที่สอดคล้องกับความถี่ต่ำสุดที่เซ็นเซอร์นี้รองรับ เมื่อมีการร้องขอความถี่ที่ต่ำกว่าผ่านฟังก์ชัน batch เหตุการณ์จะถูกสร้างขึ้นที่ความถี่นี้แทน เฟรมเวิร์กหรือแอปพลิเคชันสามารถใช้เพื่อประเมินว่าเมื่อใดที่ FIFO แบบแบตช์อาจเต็ม หากตั้งค่านี้ไม่ถูกต้อง CTS จะล้มเหลว สำหรับเซ็นเซอร์แบบช็อตเดียวและโหมดการรายงานพิเศษ ให้ตั้งค่า maxDelay เป็น 0

สำหรับเซ็นเซอร์ต่อเนื่อง ให้ตั้งค่าเป็นระยะเวลาการสุ่มตัวอย่างสูงสุดที่อนุญาตในหน่วยไมโครวินาที

ข้อมูลต่อไปนี้ใช้ได้กับ period_ns , maxDelay และ minDelay :

  • period_ns อยู่ในหน่วยนาโนวินาทีในขณะที่ maxDelay / minDelay อยู่ในหน่วยไมโครวินาที
  • maxDelay ควรพอดีกับจำนวนเต็มที่ลงนามแบบ 32 บิตเสมอ ได้รับการประกาศให้เป็น 64 บิตบนสถาปัตยกรรม 64 บิตด้วยเหตุผลด้านความเข้ากันได้แบบไบนารีเท่านั้น

ธง : ฟิลด์นี้กำหนดโหมดการรายงานของเซ็นเซอร์และเซ็นเซอร์เป็นเซ็นเซอร์ปลุกหรือไม่

หากคุณไม่ได้ใช้การแบทช์ และเพิ่งเปลี่ยนจาก 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 ไปที่โหมด Suspend .
  • พารามิเตอร์ flags ของฟังก์ชัน batch ไม่ได้ใช้อีกต่อไป DRY_RUN และ WAKE_UPON_FIFO_FULL เลิกใช้งานแล้ว และจะไม่ถูกส่งไปยังฟังก์ชัน batch
  • อาร์กิวเมนต์การหมดเวลาของแบตช์ตอนนี้เรียกว่าอาร์กิวเมนต์ max_report_latency