การเลิกใช้งานเวอร์ชัน 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 (สำเร็จ)

เปลี่ยน 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