מצב השעיה

מצבי כוח SoC

מצבי הכוח של המערכת בשבב (SoC) הם: מופעל, סרק והשהיה. "מופעל" הוא כאשר ה-SoC פועל. "לא פעיל" הוא מצב הספק בינוני שבו ה-SoC מופעל אך אינו מבצע שום משימות. "השעיה" הוא מצב בעל צריכת חשמל נמוכה שבו ה-SoC אינו מופעל. צריכת החשמל של המכשיר במצב זה היא בדרך כלל פחותה פי 100 מאשר במצב "מופעל".

חיישנים שאינם מתעוררים

חיישנים שאינם מתעוררים הם חיישנים שאינם מונעים מה-SoC לעבור למצב השעיה ואינם מעירים את ה-SoC כדי לדווח על נתונים. בפרט, אסור לנהגים להחזיק בלוק. באחריות האפליקציות לשמור על נעילת התעוררות חלקית אם הם רוצים לקבל אירועים מחיישנים שאינם מתעוררים בזמן שהמסך כבוי. בזמן שה-SoC נמצא במצב השעיה, החיישנים חייבים להמשיך לתפקד וליצור אירועים, המוכנסים ל-FIFO של חומרה. (ראה אצווה לפרטים נוספים.) האירועים ב-FIFO נמסרים ליישומים כאשר ה-SoC מתעורר. אם ה-FIFO קטן מכדי לאחסן את כל האירועים, האירועים הישנים יותר יאבדו; הנתונים הישנים ביותר נשמטים כדי להכיל את הנתונים העדכניים ביותר. במקרה הקיצוני שבו ה-FIFO אינו קיים, כל האירועים שנוצרו בזמן שה-SoC במצב השעיה אובדים. חריג אחד הוא האירוע האחרון מכל חיישן ב-change: האירוע האחרון חייב להישמר מחוץ ל-FIFO כך שלא ניתן לאבד אותו.

ברגע שה-SoC יוצא ממצב השעיה, כל האירועים מה-FIFO מדווחים והפעולות מתחדשות כרגיל.

יישומים המשתמשים בחיישנים שאינם מתעוררים צריכים להחזיק נעילת ערה כדי להבטיח שהמערכת לא תעבור להשהיה, לבטל את הרישום מהחיישנים כאשר הם אינם זקוקים להם, או לצפות לאבד אירועים בזמן שה-SoC במצב השעיה.

חיישני התעוררות

בניגוד לחיישנים שאינם מתעוררים, חיישני השכמה מבטיחים שהנתונים שלהם מועברים ללא תלות במצב ה-SoC. בזמן שה-SoC ער, חיישני ההתעוררות מתנהגים כמו חיישני לא-התעוררות. כאשר ה-SoC רדום, חיישני התעוררות חייבים להעיר את ה-SoC כדי לספק אירועים. הם עדיין חייבים לתת ל-SoC להיכנס למצב השעיה, אבל חייבים גם להעיר אותו כשצריך לדווח על אירוע. כלומר, החיישן חייב להעיר את ה-SoC ולספק את האירועים לפני שהשהיית הדיווח המקסימלית חלפה או שה-FIFO החומרה יתמלא. ראה אצווה לפרטים נוספים.

כדי להבטיח שלאפליקציות יש זמן לקבל את האירוע לפני שה-SoC יחזור למצב שינה, על הנהג להחזיק "נעילת פסק זמן ערה" למשך 200 אלפיות השנייה בכל פעם שמדווח על אירוע. כלומר, אסור לאפשר ל-SoC לחזור לישון ב-200 מילישניות שלאחר הפרעת השכמה. הדרישה הזו תיעלם במהדורה עתידית של אנדרואיד, ואנו זקוקים לנעילת השכמה לזמן קצוב עד אז.

כיצד להגדיר חיישני התעוררות ולא התעוררות?

עד ל-KitKat, אם חיישן היה חיישן השכמה או חיישן שאינו מתעורר, הוכתב על ידי סוג החיישן: רובם היו חיישנים שאינם מתעוררים, למעט חיישן הקרבה וגלאי התנועה המשמעותי .

החל מ-L, האם חיישן נתון הוא חיישן התעוררות או לא מצוין על ידי דגל בהגדרת החיישן. ניתן להגדיר את רוב החיישנים על ידי זוגות של גרסאות התעוררות ולא התעוררות של אותו חיישן, ובמקרה זה הם חייבים להתנהג כשני חיישנים עצמאיים, שאינם באינטראקציה זה עם זה. ראה אינטראקציה לפרטים נוספים.

אלא אם צוין אחרת בהגדרת סוג החיישן, מומלץ ליישם חיישן התעוררות אחד וחיישן אחד ללא התעוררות עבור כל סוג חיישן המופיע בסוגי חיישנים . בכל הגדרת סוג חיישן, ראה איזה חיישן (התעוררות או אי-התעוררות) יוחזר על ידי SensorManager.getDefaultSensor(sensorType) . זהו החיישן שרוב היישומים ישתמשו בו.