Отключить зарядку через USB

22

По некоторым причинам, не связанным с временем работы от батареи, мне нужно отключить зарядку батареи, когда USB-хост подключен к моему телефону (укорененный Nexus 4). Взглянув в Интернете ( link1 , link2 ), похоже, я должен изменить системный файл. Я нашел ряд интересных файлов , расположенных в /sys/class/power_supply/batteryи /sys/class/power_supply/usb, которые могут быть правильными , чтобы быть изменен для того , чтобы достичь USB зарядки отключения (например /sys/class/power_supply/usb/present 0/1).

Кто-нибудь пробовал что-то подобное (контролировать зарядку usb через софт и модифицировать такие системные файлы)? Какой лучший способ изменить эти системные файлы? Должен ли я использовать оболочку adb или другой инструмент?

Я попытался использовать приложение «Изучение корня», чтобы изменить эти файлы, однако, когда я изменил файл (после изменения его разрешений), он автоматически вернулся к исходному значению.

Stillen
источник
2
Хотя это может или не может способствовать возникновению вопроса, мне любопытно, почему вы хотите отключить USB-зарядку.
dotVezz
У меня есть нечто похожее на встроенную систему: телефон (USB ACCESSORY) и аппаратное обеспечение (USB HOST), подключенное через USB. Аккумулятор телефона питает подключенное оборудование через определенное соединение (Vdd). Тем не менее, USB-хост должен обеспечивать (или заряжать) телефон через линию USB VBUS. Чего я хочу избежать, так это петли заряда между телефоном и подключенным оборудованием. Несмотря на то, что подключенное оборудование - это HOST, именно Android-телефон обеспечивает всю систему. Надеюсь, мое объяснение было вам ясно.
STILLEN
2
/ sys - это виртуальная файловая система, в которой ядро ​​предоставляет ручки и переключатели для изменения и просмотра конфигурации ядра. Вы не можете изменить права доступа к файлу. Я думаю, что ваш телефон Nexus разблокирован и рутирован. Схема зарядки, вероятно, основана на чипе Maxim, который может быть настроен. Доступны измененные ядра, которые позволяют переопределить обнаружение для зарядки аккумулятора. Обратное также должно быть возможным. Вам может понадобиться исправить и перекомпилировать ядро.
ce4
1
Franco Kernel для Nexus 4 позволяет быстро заряжать, источники доступны. может быть, вы можете взглянуть на него и выяснить, как его отключить: github.com/franciscofranco
ce4

Ответы:

7

Я только что попробовал и обнаружил, что вам нужно изменить файл:
sys/class/power_supply/usb/device/charge

его значение по умолчанию - «1», что означает «включить зарядку», вам нужно установить «0», чтобы «отключить зарядку».

$ su

$ echo 0 > /sys/class/power_supply/usb/device/charge

Я тестировал на Nexus 4, и он успешно работает.

user3395818
источник
Я могу подтвердить, что echo 0 > /sys/class/power_supply/battery/charging_enabledу меня работает, на Sony Z1 Compact с CM11. Спасибо! :)
seanlano
Обратите внимание, что интерфейс / sys является виртуальным и не сохраняется перезагрузок
kevinf
3
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;
Нир Дуан
источник
2

Я не уверен, что он будет работать с зарядным устройством вашего телефона, но часто с кабелями, которые передают и питание, и данные, внутри кабеля есть отдельные шнуры для питания и данных.

Я не особенно заинтересован в том, чтобы порвать зарядное устройство для телефона, чтобы подтвердить мою идею, но вы можете попробовать оторвать часть кабеля, определить и обрезать шнуры питания внутри кабеля и обмотать его изолентой.

Существует вероятно способ проще средство сделать это, но я не знаю об этом.


источник
Обычно в USB есть 4 контакта - 2 для питания 5 В и 2 для данных.
NoBugs
1
Если вы отключите Vbus и Ground, это также остановит работу линий передачи данных. Соединение USB-кабеля определяется по питанию (см. A-разъем, контакты питания немного длиннее, поэтому они будут подключаться первыми).
diidu
1

Я почти уверен, что это не то, что вы можете изменить в программном обеспечении, так как телефон заряжается при подключении к USB-порту компьютера. Вам, вероятно, нужно испачкать руки и замкнуть одно или два соединения на самом телефоне.

Mobilecrackers
источник
Да, это также можно сделать с помощью программного обеспечения. Посмотрите на это приложение для рутированного
STILLeN
1

Вы можете использовать adb shell dumpsys battery set usb 0; // для отключения зарядки от USB и

Батарея ADB Shell Dsdsys комплект батарей USB 1; // для включения зарядки через USB

Химаншу Раутела
источник
1
Это легко, но, к сожалению, не отключает зарядку. Это только делает его похожим, что оно отключено.
diidu
0

Вы можете решить проблему аппаратно, изменив контакты на стороне разъема micro-USB. Один очевидный способ - не подключать контакт № 1 (VBUS), а другой способ - заземлить контакт № 4 (ID), чтобы показать, что ваш хост (ПК) является устройством OTG. Если вы это сделаете, вам придется отключить контакт №1 (VBUS), иначе один, если не оба ваших устройства будут сожжены.

Что касается решения для командной строки, вам просто нужно найти нужные (зависящие от устройства) /sys/...файлы для воспроизведения. Но, как уже упоминалось, для их изменения необходимы права на запись и права root, и что бы вы ни делали, это будет продолжаться только до следующей перезагрузки или смены периферийного устройства USB.

not2qubit
источник
2
Предлагаемое аппаратное решение неверно. Почти у каждого телефона Android есть USB-устройство, которое получает питание от USB-хостов (например, ноутбуков), таким образом, работая в режиме аксессуаров. Если вы обрезаете линию VBUS, передача данных через USB перестает работать. Я проверял это сам. Я бы сказал то же самое для другого пути (идентификационный номер), хотя я не проверял это. Вы правы в отношении программного решения, однако не все телефоны Android имеют /sys/...необходимые для этого файлы (Nexus 4 да, Nexus 5 нет). Другим решением должно быть изменение поведения драйвера зарядки в ядре.
STILLEN
0

Подобно оператору, мой Хост, подключенный через USB, также подключается как фиктивная батарея. Невозможно просто использовать USB-кабель и батарею, Android не загружается, и USB не обеспечивает достаточный ток.

Вы не можете исправить это в программном обеспечении, так как Android будет использовать Vbus во время загрузки. Если только вы не хотите взломать код загрузчика.

Цепь зарядки должна быть изменена, чтобы избежать зарядки USB от петли напряжения батареи.

Я подтвердил, что на Galaxy S3 требуется шина 5 В, чтобы данные (d + d-) были частью стандарта USB.

OTG может решить проблему электрически, но тогда правила хост-клиента не верны. Также этот телефон способен OTG и заряжать (я использую Y-кабель + геймпад)

Изменить ссылку: https://forum.xda-developers.com/showthread.php?t=1863303

kevinf
источник
Буду обновлять, как только я
выясню
0

Я спросил моего коллегу, который является экспертом в области драйверов батареи. На нашем Нут Pro 2, ядро которого версия 4.4.21, узел для зарядки аккумулятора включения / выключения: /sys/class/power_supply/battery/input_suspend.

Бао Хаоцзюнь
источник
0

Вы всегда можете использовать диод Шотки между контактом 1 стороной блокировки к аксессуару. Таким образом, контакт 1 получает сигнал 5 В, поэтому связь работает, но ток не будет течь от аксессуара к вашему телефону. или, если вы хотите по-другому, просто поместите диод в другом направлении.

user300447
источник
-1

Нет, это невозможно на устройствах, которые еще не рутированы. Он использует Settings.System с ADB_ENABLED, но ADB_ENABLED - это параметр Secure-System, который не может быть изменен приложением.

Да, это можно сделать на рутированном телефоне.

Необходимо добавить разрешение android.permission.WRITE_SECURE_SETTINGS. Я знаю, что вы спросите, как мне это сделать: вот ссылка на похожее приложение: https://play.google.com/store/apps/details?id=com.jim2&hl=en.

Равиндра Сахай
источник
1
Что ADB_ENABLEDобщего с зарядкой через USB? Позволяет ли приложение, на которое вы ссылаетесь, отключить зарядку через USB?
Дэн Халм,
Приложение вроде позволяет отключить зарядку USB после изменения настроек безопасности записи.
Равиндра Сахай
"Своего рода"? Какие шаги нужно выполнить?
Дэн Халм,