Что нужно?
- Root
- ADB (или любое приложение Terminal на телефоне)
Шаги
Подключение
Подключитесь к телефону через ADB и в открывшейся консоли переключитесь в режим Super User:
$ adb shell
$ su
Теперь мы можем общаться с модемом телефона, используя AT команды.
Но сначала нужно понять в какое устройство эти команды отправлять.
Тут в зависимости от модема могут быть разные варианты: /dev/smd[0,7]
(Qualcomm) или /dev/radio/atci[0-9]
(MTK)
Проверить можно командой ls
:
# ls -la /dev/smd* || ls -la /dev/radio/atci*
crw-rw---- 1 radio radio 244, 7 1972-12-20 09:23 /dev/smd11
crw-rw---- 1 bluetooth bluetooth 244, 5 1972-12-20 09:23 /dev/smd7
crw------- 1 root root 244, 6 1972-12-20 09:23 /dev/smd8
crw-r----- 1 radio radio 244, 4 1972-12-20 09:23 /dev/smdcntl8
Тут ещё нужно разобраться. В разных источниках видел, что обычно посылают команды в
smd0
илиsmd7
, но в моём случае владелецradio
только у устройства/dev/smd11
. Команды отправлять и принимать удаётся, врочем как и вsmd7
у которого владелецbluetooth
. Если кто-то объяснит почему так, буду признателен.Я в примерах дальше буду использовать
smd11
, не забудьте исправить на свой.
Отправлять команды модему можно через echo
, а слушать ответ через cat
.
Чтобы проверить что вы нашли правильный девайс выполните команды:
# cat /dev/smd11 &
# echo -e "AT\r" > /dev/smd11
OK
Если в ответ не вывелось никакое сообщение, проверьте, что не забыли символ перевода каретки (\r
) в конце команды.
Если видите OK
, значит девайс может принимать AT команды.
Каждый раз писать конструкцию с echo
не хочется, поэтому напишем однострочную функцию для отправки AT команд:
# function AT() { echo -e "AT$*\r" > /dev/sdm11; }
# AT
OK
Вместо
$*
в эту функцию будут подставляться все аргументы, которые мы передадим при вызове
Меняем номер
Теперь когда мы мониторим вывод через cat
и можем посылать команды через AT
, можем приступать к изменению номера.
Нам понадобятся следующие команды:
AT+CPBS
(PhoneBook Storage) - Для выбора области телефонной книги SIM-карты в которую хотим внести измененияAT+CPBW
(PhoneBook Write) - Для записи номера в SIM-картуAT+CNUM
- Для проверки, что номер привязан к SIM-карте
Общий для AT команд синтаксис который нужно знать. Если после команды добавить
?
, будет выведено текущее значение илиERROR
, если команда не поддерживает вывод значения. Если добавить=?
будет выведена справка по параметрам, которые принимает команда. Чтобы выполнить каманду с параметрами, нужно добавить=
и перечислить параметры через запятую,
.
- Нас интересует область телефонной книги
ON
(Own Numbers), проверим можно ли выбрать эту область:
# AT +CPBS=?
+CPBS: ("SM","DC","MC","ME","RC","EN")
OK
В моём случае выбрать ON
оказалось нельзя.
Нагуглил, что нужно выставить свойство AT$QCPBMPREF
в значение 1
, чтобы сделать область ON
доступной:
# AT '$QCPBMPREF=1'
OK
# AT +CPBS=?
+CPBS: ("DC","FD","MC","ME","RC","EN","ON")
OK
# AT '+CPBS="ON"'
OK
# AT +CPBS?
+CPBS: "ON",0,2
OK
Обязательно нужно либо заключать команду в одинарные кавычки, либо экранировать символы
"
и$
через слеш\
, иначе они не долетят.
Из вывода команды +CPBS?
видно, что сейчас выбрана область телефонной книги ON
и в ней лежат 0 из 2-х возможных номеров.
Запишем номер:
# AT '+CPBW=1,"+79991234567"'
OK
# AT +CNUM
+CNUM: ,"+79991234567",145
OK
Теперь нужно обязательно перезагрузить телефон и номер отобразится в настройках в секции "О телефоне".