И опять таки здравствуйте, поклонники ковыряния в носу и разных девайсах. Сразу хочу предупредить всех любителей покритиковать и последователей Дональда Кнута – я стоматолог, а не программист. То, что сам узнал, то и стараюсь рассказать как можно более понятно. Возможно где-то и проскальзывала статейка по этому поводу, но я её не читал. Итак, сегодня мы попробуем чуть-чуть покодить для Сименсов. Для этого нам будут нужны прямые руки (как всегда), 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!