И опять таки здравствуйте, поклонники ковыряния в носу и разных девайсах. Сразу хочу предупредить всех любителей покритиковать и последователей Дональда Кнута – я стоматолог, а не программист. То, что сам узнал, то и стараюсь рассказать как можно более понятно. Возможно где-то и проскальзывала статейка по этому поводу, но я её не читал. Итак, сегодня мы попробуем чуть-чуть покодить для Сименсов. Для этого нам будут нужны прямые руки (как всегда), Delphi (версии 5.0 и выше), шнурок для COM порта и компонентик для работы с этим самым COM портом под названием XComDrv. Снова хочу сказать кул кодерам – я умею управлять как последовательными, так и параллельными портами и без компонентов, но данная статья призвана показать принцип работы с мобилой и не является руководством по WinAPI. Руки, я надеюсь, ты отрастил из нужного места (а если нет, то скорей всего ты заспиртован в банке, а тобой любуются студентки-медики на местной кафедре патологической анатомии :), шнурок купил или отмутил у приятеля, а компонент забрал с
http://xcomdrv.host.sk или утащил
с любимого Хакера.

Те, кто знает, как устанавливать компоненты в среду Delphi могут не читать следующий абзац. А остальным я расскажу: после того, как все скачанные файлы угнездились на винте и Делфя запущена, то мы лезем в меню Component->Install Component. 

В появившемся окне щёлкаем на закладку Into new package. В поле Unit file name вводим путь к файлу reg.pas из состава XComDrv, а в поле Package file name вводим любую туфту. После этого на все провокационные вопросы отвечаем OK или Yes.

Вот мы и подошли к главному. Немного теории. Телефон воспринимается нашей программой как модем, а следовательно с ним можно (и нужно!) общаться AT командами. Некоторые команды стандартные (такие как ATZ), а некоторые специфические для Сименсов. Специфические сименсовские команды описаны в очень интересном документе
AT Commands Set Reference Manual (GSM 07.07, GSM 07.05).
Очень рекомендую с ним познакомится. 

Итак, перед нами девственно чистая форма, которую мы быстренько испоганим. Кидаем туда Listbox – 1 шт, кнопка – 1 шт, Xmodem из нашего свежеустановленного компонента – тоже 1 шт. 

Займёмся нашим компонентом Xmodem1 и поменяем некоторые его свойства. Свойство DeviceName заменим на COM1 (именно к этому порту я подключил кабель), а свойство BaudRate на br19200. Такая скорость обусловлена тем, что в принципе все модели Сименсов на ней работают. Однако никто не мешает Вам потом усложнить программу, написав к ней код, меняющий конфигурацию. Меняем также надпись на кнопке на «Получить знание».

Теперь опять теория. Для облегчения примера мы будем работать в командном режиме, т.е. отослал команду – получил ответ. 

В обработчике ONCLICK кнопки пишем:

procedure TForm1.Button1Click(Sender: TObject);
begin
listbox1.Clear; //
Очищаем список
xmodem1.OpenDevice; //
открываем порт
xmodem1.EnterCommandState; //
Входим в командный режим
XMODEM1.SendCommand('AT+CGMI'); //
Производитель
xmodem1.WaitForAT(1500); //
Ждём ответа
XMODEM1.SendCommand('AT+CGMM'); //
Модель
xmodem1.WaitForAT(1500);
XMODEM1.SendCommand('AT+CGMR'); //
Версия прошивки
sleep(1500);
xmodem1.WaitForAT(1500);
XMODEM1.SendCommand('AT+CGSN'); //
IMEI
sleep(1500);
xmodem1.WaitForAT(1500);
XMODEM1.SendCommand('AT+CIMI'); //
IMSI
sleep(1500);
xmodem1.WaitForAT(1500);
xmodem1.ExitCommandState; //
Выходим из командного режима
xmodem1.CloseDevice; //
Закрываем порт
Showmessage(‘Данные приняты, хозяин’);
end;

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

procedure TForm1.XModem1HayesAT(Sender: TObject; AT: THayesAT);
begin
if at.Command='AT+CGMI' then listbox1.Items.add('Производитель: '+at.data);
if at.Command='AT+CGMM' then listbox1.Items.add('Модель: '+at.data);
if at.Command='AT+CGMR' then listbox1.Items.add('Версия прошивки: '+at.data);
if at.Command='AT+CGSN' then listbox1.Items.add('IMEI: '+at.data);
if at.Command='AT+CIMI' then listbox1.Items.add('IMSI: '+at.data);
end;

Вот, собственно говоря, и всё. Чтобы развить программу в полноценный продукт, Вам надо проштудировать AT Commands Set Reference Manual и будет вам счастье
:).

Данный пример работает практически со всеми моделями Siemens, кроме A50, т.к. там чего-то урезали. Ну, и напоследок, подкину пару полезных команд:

AT+COPS – Оператор сотовой связи (ОпСоС)
AT+CBC – степень зарядки аккумулятора
AT+CCLK – Дата и время
AT^SCID – Серийный номер СИМ-карты
AT+CSCA – SMS-центр

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

Короче – RTFM!

Исходники

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии