Режим ожидания

Состояния питания SoC

Состояния питания системы на кристалле (SoC): включено, простаивает и приостановлено. «Вкл» - это когда SoC работает. «Холостой ход» - это режим средней мощности, при котором SoC получает питание, но не выполняет никаких задач. «Suspend» - это режим с низким энергопотреблением, при котором SoC не получает питания. Энергопотребление устройства в этом режиме обычно в 100 раз меньше, чем в режиме «Вкл».

Датчики без пробуждения

Датчики без пробуждения - это датчики, которые не препятствуют переходу SoC в режим ожидания и не пробуждают SoC для передачи данных. В частности, водителям не разрешается держать блокировку слежения. Приложения несут ответственность за частичную блокировку пробуждения, если они хотят получать события от датчиков без пробуждения, когда экран выключен. Пока SoC находится в режиме ожидания, датчики должны продолжать функционировать и генерировать события, которые помещаются в аппаратный FIFO. (Подробнее см. Пакетная обработка .) События в FIFO доставляются приложениям, когда SoC просыпается. Если FIFO слишком мал для хранения всех событий, более старые события теряются; самые старые данные удаляются, чтобы вместить самые свежие данные. В крайнем случае, когда FIFO не существует, все события, сгенерированные, когда SoC находится в режиме ожидания, теряются. Единственным исключением является последнее событие от каждого датчика изменения: последнее событиедолжно быть сохранено вне FIFO, чтобы его нельзя было потерять.

Как только SoC выходит из режима ожидания, сообщается обо всех событиях из FIFO, и работа возобновляется в обычном режиме.

Приложения, использующие датчики без пробуждения, должны либо удерживать блокировку пробуждения, чтобы гарантировать, что система не переходит в режим ожидания, отменять регистрацию датчиков, когда они им не нужны, либо ожидать потери событий, пока SoC находится в режиме ожидания.

Датчики пробуждения

В отличие от датчиков без пробуждения, датчики пробуждения обеспечивают доставку своих данных независимо от состояния SoC. Пока SoC находится в активном состоянии, датчики пробуждения ведут себя как датчики без пробуждения. Когда SoC спит, датчики пробуждения должны активировать SoC для доставки событий. Они по-прежнему должны позволить SoC перейти в режим ожидания, но также должны разбудить его, когда необходимо сообщить о событии. То есть датчик должен разбудить SoC и доставить события до того, как истечет максимальная задержка отчетов или аппаратный FIFO не заполнится. См. Раздел « Пакетная обработка» для получения более подробной информации.

Чтобы у приложений было время получить событие до того, как SoC снова перейдет в спящий режим, драйвер должен удерживать «тайм-аут срабатывания блокировки» в течение 200 миллисекунд каждый раз, когда о событии сообщается. То есть SoC не должно быть разрешено снова перейти в спящий режим в течение 200 миллисекунд после прерывания пробуждения. Это требование исчезнет в будущем выпуске Android, и до тех пор нам понадобится эта временная блокировка пробуждения.

Как определить датчики срабатывания и без пробуждения?

Вплоть до KitKat, был ли датчик активным или нет, зависело от типа датчика: большинство из них были датчиками без пробуждения, за исключением датчика приближения и детектора значительного движения .

Начиная с L, является ли данный датчик датчиком пробуждения или нет, указывается флагом в определении датчика. Большинство датчиков можно определить как пары вариантов одного и того же датчика с активным и неактивным режимом, и в этом случае они должны вести себя как два независимых датчика, не взаимодействуя друг с другом. См. « Взаимодействие» для более подробной информации.

Если в определении типа датчика не указано иное, рекомендуется использовать один датчик пробуждения и один датчик без пробуждения для каждого типа датчика, указанного в разделе Типы датчиков . В каждом определении типа датчика посмотрите, какой датчик ( SensorManager.getDefaultSensor(sensorType) или неактивный) будет возвращен SensorManager.getDefaultSensor(sensorType) . Это датчик, который будет использовать большинство приложений.