EdGull » 07 апр 2006, 10:28
Включение телефона
Выключенный телефон не принимает АТ-команд. Однако, в сети Вы без труда найдете "волшебную" последовательность из пяти байт, которая приведет к включению выключенного телефона. Вот эти пять байт:
<05> <02> <07> <06> <0C>
В угловых скобках записаны шестнадцатеричные значения каждого байта. Эта "волшебная" последовательность - BFB-команда. BFB-команды (и ответы телефона на них) передаются на скорости 57600 бод. BFB-команды принимаются телефоном даже в выключенном состоянии, если подано напряжение заряда батареи телефона. Но, не все просто... Если телефоны М35 и С45 всегда принимают BFB-команды (было бы подано напряжение заряда батареи), то телефон МЕ45 принимает BFB-команды только в течении первых пятнадцати секунд после подачи напряжения заряда батареи.
Теперь немного о BFB-командах и о "волшебной" последовательности. Первые три байта - это заголовок:
первый байт - тип команды. В нашем случае - команда типа 5.
второй байт - длина команды (заголовок в подсчет длины не входит). В "волшебной" пятибайтной последовательности - байт длины имеет значение 2, да еще три байта заголовка - итого: пять байт.
третий байт представляет собой поразрядное "исключающее ИЛИ" (сложение по модулю два) первого и второго байтов заголовка (5 xor 2 = 7).
Четвертый байт со значением 06 - и есть собственно команда (называется она - "KeyPress"), за которой следует один аргумент: код клавиши, нажатие на которую мы имитируем с помощью команды. Клавишам с цифрами и клавишам с символами "*" и "#" присвоены коды, совпадающие с кодами ASCII соответствующих символов; остальным клавишам присвоены коды от 01h до 0Fh. Шестнадцатеричное значение 0C соответствует в телефоне красной кнопке, которую мы нажимаем пальцем для того, чтобы включить выключенный телефон. Вот, волшебство и рассеялось...
Итак. Для включения телефона необходимо: настроить устройство последовательного обмена, к которому подключен телефон, на скорость 57600 бод; подать на телефон напряжение заряда батареи; в течении первых пятнадцати секунд после этого передать BFB-команду KeyPress: <05> <02> <07> <06> <0C>.
Телефон в ответ на команду возвращает последовательность из четырех байт: <05> <01> <04> <06>, означающую, что команда принята к исполнению (Вы, надеюсь, уже догадались, что первые три байта - это заголовок, а четвертый байт - код принятой к исполнению команды). Ответ телефоном передается все на той же скорости в 57600 бод. И вот, наконец, телефон включается и переходит в режим приема АТ-команд. Следует предостеречь от слишком быстрого снятия напряжения заряда аккумуляторной батареи: если это напряжение снять сразу же, как только получен ответ от телефона об исполнении BFB-команды KeyPress - телефон М35 не включится; следует ввести некоторую задержку перед снятием напряжения заряда.
Телефон включен и готов к приему АТ-команд... Тут не забыть бы, что работали мы с телефоном на скорости 57600, а вот АТ-команды не все телефоны способны принимать на этой скорости (телефон МЕ45 принимает АТ-команды как на скорости 19200, так и на 57600, но телефоны М35 и С45 принимают АТ-команды только на скорости 19200 бод), поэтому скорость обмена снижаем до 19200.
И вот тут-то нас и поджидает "засада" с телефонами 45-ой серии: при включении эти телефоны требуют подтверждения включения, иначе, примерно, через 30 секунд, не дождавшись подтверждения включения, телефон выключится! Ну, не нажимать же на кнопку телефона пальцем, подтверждая включение... Не солидно как-то... А, почему бы не воспользоваться BFB-командой KeyPress? Хорошая мысль, вот только мы работаем с телефоном уже в АТ-режиме. Как из АТ-режима перейти в режим BFB? Для этого есть недокументированная команда AT^SQWE=x, параметр команды (х), обозначает режим работы телефона, в который он переводится этой командой:
AT^SQWE=0
AT-режим (эта команда потребуется для возврата из режима BFB)
AT^SQWE=1
BFB-режим (это - то, что нам сейчас требуется)
AT^SQWE=2
BFC-режим (это - для владельцев телефонов серии выше 45-ой)
AT^SQWE=3
OBEX (это - для людей знающих, что сие означает)
Итак, переводим телефон в режим BFB и получаем ответ:
AT^SQWE=1<0D>
<0D><0A>OK<0D><0A>
Теперь телефон снова работает в режиме BFB (не забыть бы установить скорость обмена на 57600 бод). Снова воспользуемся командой KeyPress, изменив в "волшебной" последовательности последний байт на код клавиши подтверждения включения. В телефонах С45 и МЕ45 эта клавиша имеет один и тот же код - 01. Осталось разобраться со временем подачи этой команды: с одной стороны - телефону необходимо некоторое время для выхода на ожидание подтверждение включения, с другой стороны - если сильно затянуть с подачей команды, то телефон выключится не дождавшись подтверждения включения. Телефоны С45 и МЕ45 в течение 10 секунд после включения питания выходят на ожидание подтверждения включения, и еще 20 секунд ожидают подтверждение - вот во время этих двадцати секунд и необходимо выдать команду подтверждения включения телефона:
<05> <02> <07> <06> <01>
Получаем от телефона ответ о принятии команды на исполнение (<05> <01> <04> <06>) - телефон включен! Телефон-то включен, но необходимо вернуться в АТ-режим... В BFB-режиме, оказывается, можно управлять телефоном и АТ-командами: для этого используются команды BFB с типом команд 6 - заголовок BFB-команды просто предваряет АТ-команду (впрочем, как и ответ телефона). Т.е. для того, чтобы вернуться в АТ-режим, необходимо передать следующую последовательность байт:
<06><0A><0C>AT^SQWE=0<0D>
и получить (если проделали все правильно и без ошибок) следующий ответ:
<06><06><00><0D><0A>OK<0D><0A>
Не забывайте, что все это происходит на скоростях обмена 57600, и, только, приняв последний ответ телефона, можно переключиться на скорость 19200.
Все! Телефон включен и ожидает АТ-команду!