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