สภาพแวดล้อมรันไทม์ของฮับบริบท (CHRE)

สมาร์ทโฟนมีโปรเซสเซอร์หลายตัว ซึ่งแต่ละตัวได้รับการเพิ่มประสิทธิภาพเพื่อทำงาน ที่แตกต่างกัน อย่างไรก็ตาม Android จะทำงานบนโปรเซสเซอร์เพียงตัวเดียวเท่านั้น นั่นคือโปรเซสเซอร์แอปพลิเคชัน (AP) AP ได้รับการปรับแต่งเพื่อมอบประสิทธิภาพที่ยอดเยี่ยมสำหรับกรณีการใช้งานที่หน้าจอเปิดอยู่ เช่น การเล่นเกม แต่ใช้พลังงานมากเกินไปที่จะรองรับฟีเจอร์ที่ต้องมีการประมวลผลแบบสั้นๆ บ่อยๆ ตลอดเวลา แม้ว่าหน้าจอจะปิดอยู่ก็ตาม โปรเซสเซอร์ขนาดเล็กกว่าจะจัดการปริมาณงานเหล่านี้ได้อย่างมีประสิทธิภาพมากกว่า โดยจะทำงานให้เสร็จโดยไม่ส่งผลกระทบต่ออายุการใช้งานแบตเตอรี่อย่างเห็นได้ชัด อย่างไรก็ตาม สภาพแวดล้อมของซอฟต์แวร์ในโปรเซสเซอร์ที่ใช้พลังงานต่ำเหล่านี้มีข้อจำกัดมากกว่าและอาจแตกต่างกันอย่างมาก ทำให้การพัฒนาข้ามแพลตฟอร์มเป็นเรื่องยาก

Context Hub Runtime Environment (CHRE) มีแพลตฟอร์มทั่วไปสำหรับเรียกใช้ แอปในโปรเซสเซอร์ที่ใช้พลังงานต่ำ พร้อม API ที่เรียบง่าย ได้มาตรฐาน และเหมาะสำหรับอุปกรณ์ฝังตัว CHRE ช่วยให้ OEM ของอุปกรณ์และพาร์ทเนอร์ที่เชื่อถือได้ สามารถลดภาระการประมวลผลจาก AP เพื่อประหยัดแบตเตอรี่และปรับปรุงด้านต่างๆ ของประสบการณ์ของผู้ใช้ รวมถึงเปิดใช้ฟีเจอร์ที่พร้อมใช้งานเสมอและรับรู้บริบท โดยเฉพาะฟีเจอร์ที่เกี่ยวข้องกับการใช้ แมชชีนเลิร์นนิงกับการตรวจจับสภาพแวดล้อม

หัวข้อสำคัญ

CHRE คือสภาพแวดล้อมซอฟต์แวร์ที่แอปที่มาพร้อมเครื่องขนาดเล็กซึ่งเรียกว่าแอปนาโนทำงานบนโปรเซสเซอร์ที่ใช้พลังงานต่ำและโต้ตอบกับระบบพื้นฐานผ่าน CHRE API ทั่วไป เพื่อเร่งการติดตั้งใช้งาน API ของ CHRE อย่างเหมาะสม เราจึงรวมการติดตั้งใช้งาน CHRE อ้างอิงแบบข้ามแพลตฟอร์มไว้ใน AOSP การติดตั้งใช้งานอ้างอิงประกอบด้วยโค้ดและการแยกส่วนทั่วไปสำหรับฮาร์ดแวร์และซอฟต์แวร์พื้นฐานผ่านชุดเลเยอร์การแยกส่วนแพลตฟอร์ม (PAL) โดยส่วนใหญ่แล้ว Nanoapp จะเชื่อมโยงกับแอปไคลเอ็นต์อย่างน้อย 1 รายการที่ทำงานใน Android ซึ่งโต้ตอบกับ CHRE และ Nanoapp ผ่าน ContextHubManager API ของระบบที่มีการจำกัดการเข้าถึง

ในภาพรวม เราสามารถเปรียบเทียบสถาปัตยกรรมของ CHRE กับ Android ทั้งระบบได้ แต่ก็มีความแตกต่างที่สำคัญบางประการดังนี้

  • CHRE รองรับการเรียกใช้เฉพาะนาโนแอปที่พัฒนาในโค้ดเนทีฟ (C หรือ C++) เท่านั้น โดยไม่รองรับ Java
  • เนื่องจากข้อจำกัดด้านทรัพยากรและความปลอดภัย CHRE จึงไม่เปิดให้แอป Android ของบุคคลที่สามใช้ มีเพียงแอปที่ระบบเชื่อถือเท่านั้นที่เข้าถึงได้

นอกจากนี้ ยังมีข้อแตกต่างที่สำคัญระหว่างแนวคิดของ CHRE กับฮับเซ็นเซอร์ แม้ว่าโดยทั่วไปจะใช้ฮาร์ดแวร์เดียวกันเพื่อติดตั้งใช้งาน ฮับเซ็นเซอร์และ CHRE แต่ CHRE เองไม่ได้ให้ความสามารถของเซ็นเซอร์ ที่ HAL ของเซ็นเซอร์ Android ต้องการ CHRE เชื่อมโยงกับ Context Hub HAL และทำหน้าที่เป็นไคลเอ็นต์ของเฟรมเวิร์กเซ็นเซอร์เฉพาะอุปกรณ์ เพื่อรับข้อมูลเซ็นเซอร์โดยไม่ต้องเกี่ยวข้องกับ AP

สถาปัตยกรรมเฟรมเวิร์ก CHRE

รูปที่ 1 สถาปัตยกรรมเฟรมเวิร์ก CHRE

HAL ของฮับบริบท

Hardware Abstraction Layer (HAL) ของ Context Hub คืออินเทอร์เฟซระหว่าง เฟรมเวิร์ก Android กับการติดตั้งใช้งาน CHRE ของอุปกรณ์ ซึ่งกำหนดไว้ที่ hardware/interfaces/contexthub Context Hub HAL จะกำหนด API ที่เฟรมเวิร์ก Android ใช้เพื่อค้นหา Context Hub ที่พร้อมใช้งานและ Nanoapp ของ Context Hub นั้นๆ โต้ตอบกับ Nanoapp เหล่านั้นผ่านการส่งข้อความ รวมถึงอนุญาตให้โหลดและ เลิกโหลด Nanoapp การใช้งานอ้างอิงของ Context Hub HAL ที่ทำงานร่วมกับการใช้งานอ้างอิงของ CHRE มีอยู่ที่ system/chre/host

ในกรณีที่เอกสารนี้ขัดแย้งกับคำจำกัดความของ HAL คำจำกัดความของ HAL จะมีผลบังคับใช้

การเริ่มต้น

เมื่อ Android บูตขึ้นมา ContextHubService จะเรียกใช้ฟังก์ชัน HAL ของ getHubs() เพื่อพิจารณาว่ามีฮับบริบทใดบ้าง ที่พร้อมใช้งานในอุปกรณ์ การเรียกนี้เป็นการเรียกแบบบล็อกครั้งเดียว ดังนั้นจึงต้องดำเนินการให้เสร็จอย่างรวดเร็วเพื่อไม่ให้การบูตล่าช้า และต้องแสดงผลลัพธ์ที่ถูกต้อง เนื่องจากไม่สามารถเปิดตัวฮับบริบทใหม่ได้ในภายหลัง

โหลดและเลิกโหลดนาโนแอป

Context Hub อาจมีชุดของ Nanoapp ที่รวมอยู่ในอิมเมจของอุปกรณ์ และจะโหลดเมื่อ CHRE เริ่มทำงาน ซึ่งเรียกว่านาโนแอปที่โหลดไว้ล่วงหน้า และควรอยู่ในคำตอบแรกที่เป็นไปได้สำหรับ queryApps()

นอกจากนี้ HAL ของ Context Hub ยังรองรับการโหลดและเลิกโหลดแอปนาโนแบบไดนามิกในเวลาเรียกใช้ผ่านฟังก์ชัน loadNanoApp() และ unloadNanoApp() Nanoapp จะส่งไปยัง HAL ในรูปแบบไบนารีที่เฉพาะเจาะจงกับการใช้งานฮาร์ดแวร์ CHRE และ ซอฟต์แวร์ของอุปกรณ์

หากการติดตั้งใช้งานสำหรับการโหลด Nanoapp เกี่ยวข้องกับการเขียนลงในหน่วยความจำแบบไม่ลบเลือน เช่น ที่เก็บข้อมูลแฟลชที่เชื่อมต่อกับโปรเซสเซอร์ที่เรียกใช้ CHRE การติดตั้งใช้งาน CHRE จะต้องบูตขึ้นพร้อมกับ Nanoapp แบบไดนามิกเหล่านี้ในสถานะ ปิดใช้เสมอ ซึ่งหมายความว่าจะไม่มีการเรียกใช้โค้ดของ Nanoapp จนกว่าจะได้รับenableNanoapp()คำขอผ่าน HAL Nanoapp ที่โหลดไว้ล่วงหน้าจะ เริ่มต้นในสถานะที่เปิดใช้

การรีสตาร์ทฮับบริบท

แม้ว่า CHRE จะไม่น่าจะรีสตาร์ทในระหว่างการทำงานตามปกติ แต่ก็อาจจำเป็นต้องรีสตาร์ทเพื่อกู้คืนจากสภาวะที่ไม่คาดคิด เช่น ความพยายามที่จะเข้าถึงที่อยู่หน่วยความจำที่ไม่ได้แมป ในกรณีเหล่านี้ CHRE จะรีสตาร์ท โดยไม่ขึ้นอยู่กับ Android HAL จะแจ้งให้ Android ทราบเรื่องนี้ผ่านเหตุการณ์ RESTARTED ซึ่งจะต้องส่งหลังจากที่ CHRE ได้รับการเริ่มต้นใหม่จนถึงจุดที่รับคำขอใหม่ได้ เช่น queryApps()

ภาพรวมระบบ CHRE

CHRE ได้รับการออกแบบโดยอิงตามสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ ซึ่งหน่วยการคำนวณหลักคือเหตุการณ์ที่ส่งไปยังจุดแรกเข้าของการจัดการเหตุการณ์ของนาโนแอป แม้ว่าเฟรมเวิร์ก CHRE จะเป็นแบบมัลติเธรด แต่ระบบจะไม่เรียกใช้ Nanoapp จากหลายเธรดพร้อมกัน เฟรมเวิร์ก CHRE จะโต้ตอบกับนาโนแอปที่กำหนด ผ่านหนึ่งใน 3 จุดแรกเข้าของนาโนแอป (nanoappStart(), nanoappHandleEvent() และ nanoappEnd()) หรือผ่านการเรียกกลับที่ระบุในการเรียก API ของ CHRE ก่อนหน้า และนาโนแอปจะโต้ตอบกับเฟรมเวิร์ก CHRE และ ระบบพื้นฐานผ่าน CHRE API CHRE API มีชุดความสามารถพื้นฐาน รวมถึงสิ่งอำนวยความสะดวกสำหรับการเข้าถึงสัญญาณตามบริบท ซึ่งรวมถึง เซ็นเซอร์, GNSS, Wi-Fi, WWAN และเสียง และสามารถขยายความสามารถเพิ่มเติม เฉพาะของผู้ให้บริการเพื่อใช้โดยนาโนแอปเฉพาะของผู้ให้บริการ

ระบบบิลด์

แม้ว่า HAL ของ Context Hub และคอมโพเนนต์อื่นๆ ที่จำเป็นฝั่ง AP จะสร้างขึ้น ควบคู่ไปกับ Android แต่โค้ดที่ทำงานภายใน CHRE อาจมีข้อกำหนดที่ทำให้ ไม่สามารถใช้งานร่วมกับระบบบิลด์ของ Android ได้ เช่น ความจำเป็นในการใช้ เครื่องมือเฉพาะ ดังนั้น โปรเจ็กต์ CHRE ใน AOSP จึงมีระบบบิลด์ที่เรียบง่ายซึ่งอิงตาม GNU Make เพื่อคอมไพล์ nanoapp และคอมไพล์เฟรมเวิร์ก CHRE เป็นไลบรารีที่ผสานรวมกับระบบได้ (ไม่บังคับ) ผู้ผลิตอุปกรณ์ที่เพิ่มการรองรับ CHRE ควรผสานรวมการรองรับระบบบิลด์สำหรับอุปกรณ์เป้าหมายเข้ากับ AOSP

CHRE API เขียนขึ้นตามมาตรฐานภาษา C99 และการอ้างอิง การใช้งานใช้ชุดย่อยที่จำกัดของ C++11 ซึ่งเหมาะสำหรับแอปที่มีทรัพยากรจำกัด

CHRE API

CHRE API คือชุดไฟล์ส่วนหัว C ที่กำหนดอินเทอร์เฟซซอฟต์แวร์ ระหว่าง nanoapp กับระบบ โดยออกแบบมาเพื่อให้โค้ดของนาโนแอป เข้ากันได้กับอุปกรณ์ทั้งหมดที่รองรับ CHRE ซึ่งหมายความว่า ไม่จำเป็นต้องแก้ไขซอร์สโค้ดของนาโนแอปเพื่อรองรับอุปกรณ์ประเภทใหม่ แต่อาจต้องคอมไพล์ใหม่โดยเฉพาะสำหรับชุดคำสั่งของโปรเซสเซอร์หรืออินเทอร์เฟซไบนารีของแอปพลิเคชัน (ABI) ของอุปกรณ์เป้าหมาย สถาปัตยกรรมและการออกแบบ API ของ CHRE ยังช่วยให้มั่นใจได้ว่า Nanoapp จะเข้ากันได้แบบไบนารี ใน API ของ CHRE เวอร์ชันต่างๆ ซึ่งหมายความว่า Nanoapp ไม่ จำเป็นต้องคอมไพล์ใหม่เพื่อเรียกใช้ในระบบที่ใช้ API ของ CHRE เวอร์ชันอื่น เมื่อเทียบกับ API เป้าหมายที่ใช้คอมไพล์ Nanoapp กล่าวคือ หากไบนารีของนาโนแอปทํางานบนอุปกรณ์ที่รองรับ CHRE API v1.3 และอุปกรณ์นั้นได้รับการอัปเกรดให้รองรับ CHRE API v1.4 ไบนารีของนาโนแอปเดียวกัน จะยังคงทํางานต่อไป ในทำนองเดียวกัน Nanoapp สามารถทำงานบน CHRE API v1.2 และสามารถระบุได้ในขณะรันไทม์ว่าต้องใช้ความสามารถจาก API v1.3 เพื่อให้บรรลุการใช้งาน หรือสามารถทำงานได้หรือไม่ ซึ่งอาจมีการลดระดับฟีเจอร์อย่างราบรื่น

เราจะเปิดตัว CHRE API เวอร์ชันใหม่พร้อมกับ Android แต่เนื่องจากการใช้งาน CHRE เป็นส่วนหนึ่งของการใช้งานของผู้ให้บริการ เวอร์ชัน CHRE API ที่รองรับในอุปกรณ์จึงไม่จำเป็นต้องลิงก์กับ Android เวอร์ชันใดเวอร์ชันหนึ่ง

สรุปเวอร์ชัน

เช่นเดียวกับรูปแบบการกำหนดเวอร์ชัน HIDL ของ Android CHRE API จะใช้การกำหนดเวอร์ชันเชิงความหมาย เวอร์ชันหลักจะระบุความเข้ากันได้ของไบนารี ส่วนเวอร์ชันย่อยจะเพิ่มขึ้นเมื่อมีการเปิดตัวฟีเจอร์ที่เข้ากันได้แบบย้อนหลัง CHRE API มีคำอธิบายประกอบในซอร์สโค้ดเพื่อระบุเวอร์ชันที่เปิดตัวฟังก์ชัน หรือพารามิเตอร์ เช่น @since v1.1

การใช้งาน CHRE ยังแสดงเวอร์ชันแพตช์เฉพาะแพลตฟอร์มผ่าน chreGetVersion() ซึ่งจะระบุเมื่อมีการแก้ไขข้อบกพร่องหรือการอัปเดตเล็กๆ น้อยๆ ในการใช้งาน

เวอร์ชัน 1.0 (Android 7)

รวมถึงรองรับเซ็นเซอร์และความสามารถหลักของ Nanoapp เช่น เหตุการณ์และ ตัวจับเวลา

เวอร์ชัน 1.1 (Android 8)

เปิดตัวความสามารถด้านตำแหน่งผ่านตำแหน่ง GNSS และการวัดผลดิบ การสแกน Wi-Fi และข้อมูลเครือข่ายมือถือ พร้อมการปรับแต่งทั่วไป เพื่อเปิดใช้การสื่อสารจากนาโนแอปสู่นาโนแอป และการปรับปรุงอื่นๆ

เวอร์ชัน 1.2 (Android 9)

เพิ่มการรองรับข้อมูลจากไมโครโฟนที่ใช้พลังงานต่ำ การวัดระยะ RTT ของ Wi-Fi, การแจ้งเตือนการปลุกและการพักของ AP และการปรับปรุงอื่นๆ

เวอร์ชัน 1.3 (Android 10)

ปรับปรุงความสามารถที่เกี่ยวข้องกับข้อมูลการปรับเทียบเซ็นเซอร์ เพิ่มการรองรับ การล้างข้อมูลเซ็นเซอร์ที่ประมวลผลเป็นกลุ่มตามต้องการ กำหนดประเภทเซ็นเซอร์ตรวจจับการก้าว และ ขยายเหตุการณ์ตำแหน่ง GNSS ด้วยช่องความแม่นยำเพิ่มเติม

เวอร์ชัน 1.4 (Android 11)

เพิ่มการรองรับข้อมูลเซลล์ 5G, การดัมพ์การแก้ไขข้อบกพร่องของ Nanoapp และการปรับปรุงอื่นๆ

ฟีเจอร์ของระบบที่ต้องมี

แม้ว่าแหล่งที่มาของสัญญาณตามบริบท เช่น เซ็นเซอร์ จะจัดอยู่ในหมวดหมู่ฟีเจอร์ที่ไม่บังคับ แต่ฟังก์ชันหลักบางอย่างจำเป็นต้องมีในการติดตั้งใช้งาน CHRE ทั้งหมด ซึ่งรวมถึง API ของระบบหลัก เช่น API สำหรับการตั้งค่า ตัวจับเวลา การส่งและรับข้อความไปยังไคลเอ็นต์ในโปรเซสเซอร์แอปพลิเคชัน การบันทึก และอื่นๆ ดูรายละเอียดทั้งหมดได้ที่ส่วนหัวของ API

นอกเหนือจากฟีเจอร์หลักของระบบที่ระบุไว้ใน CHRE API แล้ว ยังมี ฟีเจอร์ระดับระบบ CHRE ที่จำเป็นซึ่งระบุไว้ที่ระดับ Context Hub HAL ด้วย ความสามารถที่สำคัญที่สุดคือความสามารถในการโหลดและยกเลิกการโหลด นาโนแอปแบบไดนามิก

ไลบรารีมาตรฐาน C/C++

การติดตั้งใช้งาน CHRE ต้องรองรับเฉพาะชุดย่อยของไลบรารี C และ C++ มาตรฐาน รวมถึงฟีเจอร์ภาษาที่ต้องรองรับรันไทม์ เพื่อลดการใช้หน่วยความจำและความซับซ้อนของระบบ ตามหลักการเหล่านี้ ฟีเจอร์บางอย่างจึงถูกยกเว้นอย่างชัดเจนเนื่องจากมีการพึ่งพาหน่วยความจำและระดับ OS อย่างกว้างขวาง และฟีเจอร์อื่นๆ ถูกยกเว้นเนื่องจากมี API เฉพาะ CHRE ที่เหมาะสมกว่ามาแทนที่ แม้ว่ารายการต่อไปนี้จะไม่ใช่รายการที่ครอบคลุมทั้งหมด แต่ความสามารถต่อไปนี้ไม่ได้มีไว้สำหรับแอปนาโน

  • ข้อยกเว้น C++ และข้อมูลประเภทรันไทม์ (RTTI)
  • การรองรับการทำงานแบบมัลติเธรดของไลบรารีมาตรฐาน รวมถึงส่วนหัว C++11 <thread>, <mutex>, <atomic>, <future>
  • ไลบรารีอินพุต/เอาต์พุตมาตรฐานของ C และ C++
  • Standard Template Library (STL) ของ C++
  • ไลบรารีนิพจน์ทั่วไปมาตรฐาน C++
  • การจัดสรรหน่วยความจำแบบไดนามิกผ่านฟังก์ชันมาตรฐาน (เช่น malloc, calloc, realloc, free, operator new) และฟังก์ชันไลบรารีมาตรฐานอื่นๆ ที่ใช้การจัดสรรแบบไดนามิกโดยธรรมชาติ เช่น std::unique_ptr
  • การรองรับการแปลและอักขระ Unicode
  • ไลบรารีวันที่และเวลา
  • ฟังก์ชันที่แก้ไขโฟลว์โปรแกรมปกติ รวมถึง <setjmp.h>, <signal.h>, abort, std::terminate
  • การเข้าถึงสภาพแวดล้อมโฮสต์ รวมถึง system, getenv
  • POSIX และไลบรารีอื่นๆ ที่ไม่ได้รวมอยู่ในมาตรฐานภาษา C99 หรือ C++11

ในหลายกรณี ฟังก์ชัน CHRE API และไลบรารียูทิลิตีจะมีความสามารถที่เทียบเท่ากัน เช่น chreLog สามารถใช้สำหรับการบันทึกการแก้ไขข้อบกพร่อง ที่กำหนดเป้าหมายไปยังระบบ Logcat ของ Android ซึ่งโปรแกรมแบบดั้งเดิมอาจ ใช้ printf หรือ std::cout

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

  • ยูทิลิตีสตริงและอาร์เรย์: memcmp, memcpy, memmove, memset, strlen
  • ไลบรารีคณิตศาสตร์: ฟังก์ชันทศนิยมแบบลอยจุดความแม่นเดี่ยวที่ใช้กันโดยทั่วไป

    • การดำเนินการพื้นฐาน: ceilf, fabsf, floorf, fmaxf, fminf, fmodf, roundf, lroundf, remainderf
    • ฟังก์ชันเลขชี้กำลังและฟังก์ชันยกกำลัง: expf, log2f, powf, sqrtf
    • ฟังก์ชันตรีโกณมิติและไฮเพอร์โบลิก: sinf, cosf, tanf, asinf, acosf, atan2f, tanhf

แม้ว่าแพลตฟอร์มพื้นฐานบางแพลตฟอร์มจะรองรับความสามารถเพิ่มเติม แต่ระบบจะไม่ถือว่า Nanoapp สามารถพกพาไปใช้ในการติดตั้งใช้งาน CHRE ได้ เว้นแต่จะจำกัด การอ้างอิงภายนอกไว้ที่ฟังก์ชัน CHRE API และฟังก์ชันไลบรารีมาตรฐานที่ได้รับอนุมัติ

ฟีเจอร์เสริม

CHRE API แบ่งออกเป็นฟีเจอร์ต่างๆ เพื่อโปรโมตฮาร์ดแวร์และซอฟต์แวร์ ซึ่งถือว่าเป็นตัวเลือกจากมุมมองของ API แม้ว่าฟีเจอร์เหล่านี้ อาจไม่จำเป็นต่อการรองรับการติดตั้งใช้งาน CHRE ที่เข้ากันได้ แต่ก็อาจ จำเป็นต่อการรองรับ nanoapp บางรายการ แม้ว่าแพลตฟอร์มจะไม่รองรับชุด API ที่กำหนด แต่แอปนาโนที่อ้างอิงฟังก์ชันเหล่านั้นต้องสร้างและโหลดได้

เซ็นเซอร์

CHRE API ช่วยให้ขอข้อมูลจากเซ็นเซอร์ได้ ซึ่งรวมถึง ตัวตรวจวัดความเร่ง เครื่องวัดการหมุน แม่เหล็กวัดแสง เซ็นเซอร์วัดแสงแวดล้อม และพร็อกซิมิตี API เหล่านี้มีไว้เพื่อมอบชุดฟีเจอร์ที่คล้ายกับ Android Sensors APIs ซึ่งรวมถึงการรองรับการจัดกลุ่มตัวอย่างเซ็นเซอร์เพื่อลดการใช้พลังงาน การประมวลผลข้อมูลเซ็นเซอร์ภายใน CHRE ช่วยให้ใช้พลังงานน้อยลงมากและมีความหน่วงต่ำกว่า การประมวลผลสัญญาณการเคลื่อนไหวเมื่อเทียบกับการทำงานบน AP

GNSS

CHRE มี API สำหรับขอข้อมูลตำแหน่งจากระบบดาวเทียมนำทางทั่วโลก (GNSS) ซึ่งรวมถึง GPS และกลุ่มดาวเทียมอื่นๆ ซึ่งรวมถึงคำขอตำแหน่งที่แก้ไขเป็นระยะๆ รวมถึงข้อมูลการวัดผลดิบ แม้ว่าทั้ง 2 อย่างจะเป็นความสามารถที่แยกกันก็ตาม เนื่องจาก CHRE มีลิงก์โดยตรงไปยังระบบย่อย GNSS จึงใช้พลังงานน้อยกว่าคำขอ GNSS ที่อิงตาม AP เพราะ AP สามารถอยู่ในโหมดสลีปได้ตลอดวงจรของเซสชันตำแหน่ง

Wi-Fi

CHRE ช่วยให้โต้ตอบกับชิป Wi-Fi ได้ โดยมีจุดประสงค์หลักเพื่อ ระบุตำแหน่ง แม้ว่า GNSS จะทำงานได้ดีในสถานที่กลางแจ้ง แต่ผลการสแกน Wi-Fi ก็ให้ข้อมูลตำแหน่งที่แม่นยำในอาคารและในพื้นที่ที่พัฒนาแล้วได้ นอกจากจะช่วยประหยัดค่าใช้จ่ายในการเปิด AP เพื่อทำการสแกนแล้ว CHRE ยังสามารถ ฟังผลการสแกน Wi-Fi ที่เฟิร์มแวร์ Wi-Fi ดำเนินการเพื่อวัตถุประสงค์ในการเชื่อมต่อได้ด้วย ซึ่งโดยปกติแล้วจะไม่ส่งผลการสแกนไปยัง AP เพื่อเหตุผลด้านพลังงาน การใช้ประโยชน์จากการสแกนการเชื่อมต่อเพื่อวัตถุประสงค์ตามบริบทจะช่วยลดจำนวนการสแกน Wi-Fi ทั้งหมดที่ดำเนินการ ซึ่งจะช่วยประหยัดพลังงาน

เราได้เพิ่มการรองรับ Wi-Fi ใน CHRE API v1.1 ซึ่งรวมถึงความสามารถในการตรวจสอบ ผลการสแกนและทริกเกอร์การสแกนตามต้องการ ความสามารถเหล่านี้ได้รับการขยายใน v1.2 ด้วยความสามารถในการวัด เวลาในการรับส่ง (RTT) เทียบกับจุดเข้าใช้งานที่รองรับฟีเจอร์นี้ ซึ่งช่วยให้ กำหนดตำแหน่งสัมพัทธ์ได้อย่างแม่นยำ

WWAN

CHRE API ช่วยให้ดึงข้อมูลการระบุเซลล์ สำหรับเซลล์ที่ให้บริการและเซลล์ข้างเคียง ซึ่งโดยทั่วไปจะใช้เพื่อ วัตถุประสงค์ด้านตำแหน่งแบบหยาบ

เสียง

CHRE สามารถประมวลผลข้อมูลเสียงเป็นชุดจากไมโครโฟนที่ใช้พลังงานต่ำ ซึ่ง โดยทั่วไปจะใช้ประโยชน์จากฮาร์ดแวร์ที่ใช้เพื่อติดตั้งใช้งาน HAL ของ SoundTrigger การประมวลผลข้อมูลเสียงใน CHRE จะช่วยให้สามารถผสานรวมกับข้อมูลอื่นๆ เช่น เซ็นเซอร์ตรวจจับความเคลื่อนไหวได้

การใช้งานอ้างอิง

โค้ดอ้างอิงสำหรับเฟรมเวิร์ก CHRE จะรวมอยู่ใน AOSP ในsystem/chre โปรเจ็กต์ ซึ่งใช้ใน C++11 แม้ว่าไม่จำเป็นอย่างเคร่งครัด แต่เราขอแนะนำให้การติดตั้งใช้งาน CHRE ทั้งหมดอิงตามโค้ดเบสนี้ เพื่อช่วยให้มั่นใจถึงความสอดคล้องและเร่งการนำความสามารถใหม่ๆ มาใช้ โค้ดนี้ถือเป็น สิ่งที่คล้ายกับเฟรมเวิร์กหลักของ Android ตรงที่เป็นการ ใช้งาน API แบบโอเพนซอร์สที่แอปใช้ ซึ่งทำหน้าที่เป็นพื้นฐานและมาตรฐาน เพื่อความเข้ากันได้ แม้ว่าจะปรับแต่งและขยายความสามารถเฉพาะของผู้ให้บริการได้ แต่เราขอแนะนำให้คงโค้ดทั่วไปไว้ให้ใกล้เคียงกับโค้ดอ้างอิงมากที่สุด การใช้งานอ้างอิง CHRE จะใช้การแยกแพลตฟอร์มต่างๆ เพื่อให้ปรับใช้กับอุปกรณ์ใดก็ได้ที่ตรงตามข้อกำหนดขั้นต่ำ ซึ่งคล้ายกับ HAL ของ Android

โปรดดูรายละเอียดทางเทคนิคและคำแนะนำในการย้ายข้อมูลใน README ที่รวมอยู่ในโปรเจ็กต์ system/chre