ใน 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 (สำเร็จ)
เปลี่ยน Sensor_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,
fifoReserveEventCount: หากไม่ได้ใช้การจัดกลุ่ม ให้กำหนดค่านี้เป็น 0
fifoMaxEventCount: หากไม่ได้ใช้การจัดกลุ่ม ให้กำหนดค่านี้เป็น 0
stringType: ตั้งค่าเป็น 0 สำหรับเซ็นเซอร์ Android อย่างเป็นทางการทั้งหมด (เซ็นเซอร์ที่กำหนดไว้ใน Sensor.h) เนื่องจากเฟรมเวิร์กนี้จะเขียนทับค่านี้ สำหรับ เซ็นเซอร์ที่ไม่เป็นทางการ โปรดดู sensor_t รายละเอียดเกี่ยวกับวิธีตั้งค่า
requiredPermissions: นี่คือสิทธิ์ที่แอปพลิเคชันจำเป็นต้องมีเพื่อรับ
เข้าถึงเซ็นเซอร์ของคุณ โดยปกติแล้วคุณสามารถตั้งค่าเป็น 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