PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Питание

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2017, 17:56   #1
kostyamat
Пользователь
 
Регистрация: 20.04.2016
Возраст: 51
Город: Vera
Регион: Украина
Машина: Dodge Caliber 2.0CRD
Сообщений: 60
kostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the rough
Lightbulb (Инструкция) Автостарт и автовыключение андроид при подключении\отключении ЗУ

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

Итак, суть вопроса: включить (полная загрузка) планшет/смартфон в момент подачи зарядного тока, и отключение при отключении от зарядки (важно для встроенных планшетов).

Автозагрузка при подаче зарядного тока.

Немного теории.
Когда вы подключаете выключенный планшет/смартфон к ЗУ, происходят следующие события: просыпается процессор; происходит инициализация бутлоадера; происходит начало загрузки init; стартует главный стартовый скрипт /init.rc; в init.rc есть секция on charger, в которой прописаны нужные действия и запуск системного процесса, который и отвечает за отображение батарейки с процентами, которую мы и видим на экране.
Итак, как мы видим, происходит частичная загрузка системы. Процесс в секции on charger всегда указывает на какой-то исполняемый файл (бинарник) лежащий где-то в системе. Выглядит примерно это так:
В init.rc объявлен сервис типа charger: service charger /system/bin/charger

То есть, порядок действий такой: смотрим секцию on charger в init.rc, видим там что-то типа start charger или что-то другое, типа class_start charger, могут быть и другие варианты; потом, по имени сервиса, находим в том же init.rc сам сервис service charger /....... и смотрим на какой бинарник он указывает.
Нужно иметь в виду, что нужный сервис может быть объявлен не в init.rc, а в любом другом init.****.rc на вашем устройстве, придется пересмотреть все. Иногда существует даже отдельный скрипт init.charge.rc.

Ок. Бинарник мы нашли, переименовать во что-то другое, а под его именем создаем скрипт (без расширений, в точности как назывался сам бинарник) с таким содержимым:
Код:
#!/system/bin/sh
/system/bin/reboot
Сохраняем и присваиваем ему права 755. Все. Аппарат будет включатся и ребутится в андроид сразу после подачи напряжения.

Тут еще можно добавить секцию, в которой можно описать автозапуск каких либо программ по умолчанию в авто. Хотелось бы узнать каких? И по какому условию (как определить, что ваш аппарат находится именно в машине, вариантом может быть подключение какого-то оборудования, ГПС например, или запуск какой-то программы, любые другие события, придумайте), попробую реализовать?

(продолжение следует)



Вторая часть - выключение при пропадании напряжения зарядки.


Тут есть несколько вариантов реализации, к примеру можно в своем бут включить поддержку скриптов init.d, добавив в конце init.rc (надо разбирать свой boot.img. Как это делать - смотрите на 4pda.ru в теме своего устройства, или обратитесь к РОМоделам. Часто эта функция уже присутствует в большинстве кастомных РОМов.) такие строки:

Код:
service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d
    class main
    user root
    oneshot
    disabled
    
on property:sys.initd=1
    start sysinit
а в файл defaul.prop или /system/build.prop в самом низу дописать строку sys.initd=1
Аналогичным init.d образом работает папка со скриптами /system/su.d, если у вас рут на основе SuperSu. Тогда бут разбирать не надо.
В любом случае, в системе должен быть установлен busybox, иначе скрипты работать НЕ БУДУТ!

Итак, init.d, busybox у нас есть. Создаем скрипт с таким содержимым:

Код:
#!/system/bin/sh

# Copyright by kostyamat http://4pda.ru/forum/index.php?showuser=896398

#Во всех устройствах данные по зарядке находятся по адресу 
#/sys/class/power_supply/*battery/status. 
#Измените переменную FILE, изменив путь к status исходя из названия *battery 
#для вашего аппарата.
#Cостояние файла /sys/class/power_supply/*battery/status может иметь 
#разные значения, без подключенного ЗУ (смотреть свое): 0; Discharging;
# Not on charger и т.п. (в каждом конкретном случае нужно смотреть).
#Вариантов миллион, гляньте какой текст хранится в status с помощью команды 
#cat /sys/class/power_supply/*battery/status (без ЗУ) и впишите ниже, в 
#условие if, вместо Discharging, между "".

FILE="/sys/class/power_supply/dollar_cove_battery/status" 



pch () {
while :
do
vars=`cat $FILE`
if [ "$vars" = "Discharging" ]; then
	  svc power shutdown
	 else
	  echo "Device is charging"
fi
sleep 30
done
}

pch &
Помещаем его в папку /system/init.d или /system/su.d с любым названием и присваиваем ему права 755. Нужно помнить, что скрипту не нужно присваивать никакое расширение имени файла, в том числе и sh. Не выполняются в init.d скрипты, имеющие расширение имени файла. После перезагрузки, планшет будет выключаться автоматически, при пропадании напряжения зарядки. Скрипт безусловен, работает по умолчанию.

Ниже рассмотрим примеры условного выключения, и варианты самих условий. Хотелось бы от Вас услышать возможные условия автоматического выключения, например по наличию подключенной EasyCAP, DAC и тому подобное. Как Вы считаете нужным идентифицировать наличия подключения к машине, соответственно важность автоматического выключения? Жду советов, по возможности, попробую реализовать условия.

(продолжение следует)

Последний раз редактировалось kostyamat; 07.04.2017 в 20:21.
kostyamat вне форума   Ответить с цитированием
Старый 07.04.2017, 21:08   #2
sandr2010
Гуру
 
Регистрация: 13.11.2011
Возраст: 60
Город: Волгоград
Регион: 34
Машина: Mitsubishi RVR, Chery Tiggo
Сообщений: 1,780
sandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the rough
По умолчанию

kostyamat ,
Автовключение это здорово! Завтра попытаю тело. Хм,а автовыключение зачем? Можно ведь программно это делать,да и многие делают с задержкой от 30 минут до нескольких часов. Или это если остаются подключенными устройства,тело при отключении зарядки будет только засыпать,а при отключении устройств и зарядки - выключаться?

Последний раз редактировалось sandr2010; 07.04.2017 в 23:38.
sandr2010 вне форума   Ответить с цитированием
Старый 07.04.2017, 22:59   #3
kostyamat
Пользователь
 
Регистрация: 20.04.2016
Возраст: 51
Город: Vera
Регион: Украина
Машина: Dodge Caliber 2.0CRD
Сообщений: 60
kostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the rough
По умолчанию

Цитата:
Сообщение от sandr2010 Посмотреть сообщение
kostyamat ,
Или это если остаются подключенными устройства,тело при отключении зарядки будет только засыпать,а при отключении устройств и зарядки - выключаться?
И еще вопросик: растиражировать ссылку на этот пост можно или сами может продублируете на 4pda: http://4pda.ru/forum/index.php?showtopic=675183&st=300
Данный вариант простой, безусловный (просто отключается при отключении зарядки) может кому-то быть полезным. Условия, при которых отключать, подскажут форумчане. Можно делать и так, и эдак. Задержку тоже можно вносить от нескольких секунд, до часов, дней, месяцев. Можно, скажем выключать по условию, типа: подключены специфические устройства (EasyCAP к примеру), но планшет забыли в машине, при достижении Н-ного процента батареи - выключить. Суть в том, что это shell, а он очень быстр и легок, не жрет память и ресурсы. Для решения многих задач нужен таки Таскер, а вот такие мелочи можно делать на shell, дополняя Таскер.

На счет тиражирования. Придет время, я сам выложу на 4ПДА в свою тему по портированию. На данный момент, это живет только тут, и нигде иначе. можно дать сюда ссылку на прямой ворос об этих заморочках, не выкладывать\тиражировать где либо - НЕТ! Это было коммерческое задание (автозапуск и автовыключение), мне за него деньги уплатили, и не малые. Клиент пришел с 4ПДА (забугорник), сума предложенная им во много раз превышала интелектуальную стоимость заказа. Прошло только несколько дней, не хочу чтобы человек чувствовал себя напрасно потратившим деньги. Хотя, каких-то спец.договоренностей с ним, на счет закрытости или копирайта, не было. Человеку решили его задачу - человек ушел счастливым. Но все рано, как-то не круто когда купил, а потом где-то даром дали, или сильно цену скинули. По себе знаю.
kostyamat вне форума   Ответить с цитированием
Старый 08.04.2017, 13:27   #4
sandr2010
Гуру
 
Регистрация: 13.11.2011
Возраст: 60
Город: Волгоград
Регион: 34
Машина: Mitsubishi RVR, Chery Tiggo
Сообщений: 1,780
sandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the rough
По умолчанию

Попытал тело. Тело на квалкоме. Просмотрел все init.rc во всех комбинациях. В init.rc есть упоминание: on charger class_start charger,но сервиса нет. Нашел сервис в init.qcom.rc : service charget/charget class charget. Правильно понял,что сервис ссылается на /charget и править нужно его?
sandr2010 вне форума   Ответить с цитированием
Старый 08.04.2017, 15:24   #5
kostyamat
Пользователь
 
Регистрация: 20.04.2016
Возраст: 51
Город: Vera
Регион: Украина
Машина: Dodge Caliber 2.0CRD
Сообщений: 60
kostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the rough
По умолчанию

Да, так и есть. Так же сделано в планшетах на intel z37xxx.
В случае если в корне устройства лежит бинарник /charger - это он и есть. Но бывают разные реализации, поэтому лучше таки убедится, пересмотрев init.rc.
Еще, на некоторых аппаратах, можно просто удалить секцию on charger из init.rc и получить продолжение загрузки, без ребута. С этого можно начать, но нужно иметь ввиду, что флаг on charger, выставленный бутлоадером будет продолжать висеть над системой. Как на него отреагируют системные бинарники и приложения неизвестно. Возможно никак, а возможно и с нюансами. Надо пробовать в каждом конкретном случае.
kostyamat вне форума   Ответить с цитированием
Старый 08.04.2017, 15:46   #6
sandr2010
Гуру
 
Регистрация: 13.11.2011
Возраст: 60
Город: Волгоград
Регион: 34
Машина: Mitsubishi RVR, Chery Tiggo
Сообщений: 1,780
sandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the rough
По умолчанию

С интелом пока никак - размер не подходит,нужно машину менять . Ближе к осени буду заморачиваться.
sandr2010 вне форума   Ответить с цитированием
Старый 09.04.2017, 08:29   #7
sandr2010
Гуру
 
Регистрация: 13.11.2011
Возраст: 60
Город: Волгоград
Регион: 34
Машина: Mitsubishi RVR, Chery Tiggo
Сообщений: 1,780
sandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the rough
По умолчанию

А еще подскажите: включая otg,замыкая 4 и 5 пины микроUSB сама система/процессор это видит или это просто переключает контроллер из одного состояния в другое.
sandr2010 вне форума   Ответить с цитированием
Старый 09.04.2017, 15:41   #8
kostyamat
Пользователь
 
Регистрация: 20.04.2016
Возраст: 51
Город: Vera
Регион: Украина
Машина: Dodge Caliber 2.0CRD
Сообщений: 60
kostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the rough
По умолчанию

Конечно видит. Ведь подключение ОТГ приводит к смене состояния USB. А что именно вы хотите отловить по usb, подробнее?
kostyamat вне форума   Ответить с цитированием
Старый 09.04.2017, 15:48   #9
sandr2010
Гуру
 
Регистрация: 13.11.2011
Возраст: 60
Город: Волгоград
Регион: 34
Машина: Mitsubishi RVR, Chery Tiggo
Сообщений: 1,780
sandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the roughsandr2010 is a jewel in the rough
По умолчанию

У многих планшеты без датчика холла и приходится загонять в сон по зарядке. А можно ведь тогда сделать и по включению/отключению otg режима?
sandr2010 вне форума   Ответить с цитированием
Старый 09.04.2017, 15:56   #10
kostyamat
Пользователь
 
Регистрация: 20.04.2016
Возраст: 51
Город: Vera
Регион: Украина
Машина: Dodge Caliber 2.0CRD
Сообщений: 60
kostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the roughkostyamat is a jewel in the rough
По умолчанию

Ну, вообще-то, я не совсем понимаю зачем использовать датчик холла. Есть команда
input keyevent 26, которая четко гасит экран, с последующим уходом в сон. Она же и будит девайс, если он был во сне - аналог нажатия кнопки Power. А вот по каким условиям это делать, решать владельцу. Реализовать не сложно, нужно только определиться на какое событие реагировать, например: отключение/подключение оборудования; изменение состояния зарядного устройства; приход данных с оборудование и т.п.
Опишите свой частный случай, и какую реакцию системы хотите получить.
kostyamat вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 02:08.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot