Редактирование телефонной книги и отправка коротких сообщений (SMS) при помощи data-кабеля, соединяющего мобильный телефон и компьютер.

 

Большинство современных мобильных телефонов подключаются к компьютеру через data-кабель либо через инфракрасный порт. Это обеспечивает дополнительные возможности: например, можно поменять логотип на экране телефона, загрузить понравившуюся мелодию, быстро отредактировать телефонную книгу. Кроме того, набирать короткие сообщения (SMS) на нормальной клавиатуре гораздо удобнее. Сразу понимаешь, что 160 символов - это совсем немного…

 

Для работы с мобильным телефоном через data-кабель или инфракрасный порт существует множество программ - удобных и не очень. Подобрать оптимальное ПО на все случаи жизни довольно сложно: посредством одной программы удобнее отправлять SMS, при помощи другой - редактировать телефонную книгу и т. п. Неудивительно поэтому, что хочется написать собственную программу для работы с телефоном, тем более что я, например, так и не нашел программы для отправки SMS на русском языке для своего Siemens C35i. Пришлось писать самому. А ведь большинство современных моделей принимают - правда, далеко не все отправляют - сообщения в кириллице. И читать такие сообщения гораздо приятнее. При наличии data-кабеля проблема ввода кирилличных сообщений может быть решена.


В этой статье мы рассмотрим отправку коротких сообщений (SMS) и работу с телефонной книгой при помощи data-кабеля для аппаратов, имеющих встроенный модем и поддерживающих систему команд V.25 (или подобную). Все примеры опробованы на телефоне модели Siemens С35i.


"Общение" между компьютером и телефоном происходит посредством команд AT+С. Полный перечень этих команд есть на сайте производителя телефона. Я пользовался описанием фирмы Siemens для телефона модели S25.


В этой статье мы покажем на примере, как можно использовать команды для редактирования телефонной книги и отправки SMS-сообщений.


Работа с телефонной книгой


Последовательность работы с телефоном такова: отправляем команду (запрос) на COM-порт, к которому подключен телефон, и ждем подтверждения ее выполнения телефоном.


В подавляющем большинстве случаев телефонная книга расположена на SIM-карте. Чтобы получить к ней доступ, необходимо послать телефону команду AT+CPBS с соответствующим параметром:


Запрос:
AT+CPBS="SM"


Ответ:
OK

 

Получив доступ к телефонной книге, можно определить количество занятых записей и их общее число:

 

Запрос:
AT+CPBS?


Ответ:
+CPBS: "SM",18,100
OK

 

Из полученного сообщения следует, что телефонная книга на SIM-карте рассчитана на 100 номеров, из которых занято 18. Следует учесть, что записи в телефонной книге могут располагаться не по порядку, между занятыми могут находиться пустые.


Для чтения конфигурации и содержимого телефонной книги используется команда AT+CPBR:

 

Запрос:
AT+CPBR=?


Ответ:
+CPBR: (1-100),20,14
OK

 

В данном случае телефонная книга рассчитана на 100 номеров, максимальная длина номера составляет 20 символов, максимальная длина имени - 14 символов.


Теперь посмотрим, кто записан у нас в первой ячейке телефонной книги:

 

Запрос:
AT+CPBR=1


Ответ:
+CPBR: 1,"+380671234567",129,"Ivanov"
OK

 

Как видим, это - некто Ivanov с номером телефона +380671234567. Подобным образом можно опросить и остальные ячейки. Но, чтобы не перебирать все сто ячеек (это может занять довольно много времени), можно посчитать количество заполненных записей (в нашем случае их 18) в процессе чтения и прекратить запросы, когда эти записи будут исчерпаны.


Если какая-либо ячейка - например, 25-я - окажется пустой, то ответ телефона будет выглядеть так:

 

Запрос:
AT+CPBR=25


Ответ:
AT+CPBR=25
OK

 

Теперь внесем в 24-ю ячейку абонента по фамилии Petrov. Для этого используется команда AT+CPBW.

 

Запрос:
AT+CPBW=24,"+380676543210",129,"Petrov"


Ответ:
OK

 

Приведенных выше примеров вполне достаточно для любых модификаций телефонной книги.

 

Отправка сообщений


Для отправки SMS нам будет необходим телефон сервисного центра. Его можно узнать следующим образом:


Запрос:
AT+CSCA?


Ответ:
+CSCA: "+380672021111",145
OK

 

Все запросы должны заканчиваться символом 0Dh. В случае их нормального завершения выдается строка Ok, в случае ошибки - ERROR.


Теперь у нас есть вся необходимая информация для составления и отправки коротких сообщений. Рассмотрим структуру SMS-сообщения и действия для его отправки. Большую часть информации я нашел в руководстве разработчика, написанного Siemens для владельцев телефонов S-серии.


Существует два типа коротких сообщений (SMS): текстовые и PDU (Protocol Data Unit). В режиме отправки текстовых сообщений можно передавать только буквы английского алфавита. Для передачи русских символов необходимо использовать формат PDU, поэтому нас будет интересовать именно он. Различают входящие (рис. 1) и исходящие сообщения (рис. 2). Назначение полей описано в таблице. Всем неиспользуемым битам присваивается значение 0.

 

 


Назначение полей PDU-сообщения

  • SCA - номер SMSC (SMS-центра)
  • PDU-Type - поле данных протокола
  • MR - количество успешно переданных с телефона сообщений (0..255)
  • OA - телефон-источник
  • DA - телефон-приемник
  • PID - идентификатор протокола — указывает SMSC, как обрабатывать сообщение
  • DCS - схема кодирования данных в поле данных
  • SCTS - время получения сообщения SMS-сервером
  • VP - время действия сообщения (если сообщения не будет получено абонентом в течение этого времени, SMSC не будет его передавать)
  • UDL - длина поля данных
  • UD - поле данных
  • RP - указывает на наличие поля ответа
  • UDHI - указывает на наличие заголовка в поле UD
  • SRI - требование приемника получить статус сообщения
  • SRR - требование источника получить статус сообщения
  • VPF - флаг наличия поля VP
  • MMS - количество не отправленных сообщений в SMSC
  • RD - удалить дубликаты
  • MTI - тип сообщения: 00 — входящее, 01 — исходящее

Все эти поля, за исключением битовых,- шестнадцатеричные, но в телефон они попадают в виде символов. Например, если поле имеет значение 4Eh, то передаются два символа: 34h ("4") и 45h ("E"). Рассмотрим назначение некоторых полей более подробно.


SCA (Service Center Adress). Телефонный номер SMSC (SMS-центра). Это поле состоит из двух частей: собственно телефонного номера (от 0 до 6 байт) и типа этого номера (1 байт): 81h (национальный) или 91h (международный). С украинскими операторами рекомендую использовать 91h. Поле номера кодируются следующим образом: каждая пара цифр меняется местами. Если номер состоит из нечетного количества цифр, то в конце добавляется 0Fh. Например, для SMSC-оператора UMC 38050000501 поле SCA будет выглядеть так: 07918350000005F1. Если длина поля равна 0, то телефон возьмет номер SMSC из своих настроек. Но во избежание ошибок лучше указывать номер SMSC явно.


PDU Type (Protocol Data Unit Type). Поля данных протокола. Все они устанавливаются в 0, за исключением SRI и MMS, которым присваивается номер SMSC, и MTI, которое может принимать два значения: 00 - входящее сообщение, 01 - исходящее.


OA и DA (Originator Address, Destination Address). Источник и приемник сообщения. Формируются аналогично полю SCA.


PID (Protocol Identifier). Идентификатор протокола: указывает SMSC, как обрабатывать сообщение. Сообщает транспортному уровню, какой протокол высшего уровня должен обрабатывать это сообщение. Например, 00h - обрабатывать сообщение как обычное, 41h - замещать сообщение типа 1, 42h - замещать сообщение типа 2 и т. д. до 47h - замещать сообщение типа 7.


DCS (Data Coding Scheme).Схема кодирования данных в поле данных. Мы будем использовать только два варианта значений поля: 80h - режим кодировки UCS2 (70 знаков) и 00h - режим 7-разрядной кодировки (160 знаков, только английские символы).


UDL (User Data Length). Длина поля данных в байтах. Если сообщение состоит из одного символа UCS2, то его длина составляет 2 байта, а если из одного символа в 7-разрядной кодировке, то 1 байт.


UD (User Data). Поле данных пользователя. В этом поле, собственно, и содержится текст передаваемого сообщения в заданной кодировке. Кодировка UCS2 повторяет Unicode. Для символов латиницы просто добавляется 00h. Для символов кириллицы (от С0h до FFh - в кодировке Windows) можно использовать такое правило: из байта вычитается C0h и прибавляется 410h (кроме букв "ё" и "Ё", коды которых - 0451h и 0401h).


В 7-разрядной кодировке коды букв латиницы не отличаются от 8-разрядной. Упаковка 160 символов в 140 байт производится следующим образом:

  • первый байт: старший бит берется из младшего бита 2-го байта, 7 остальных бит - биты первого символа;
  • второй байт: два старших бита берутся из младших разрядов 3-го байта, а шесть младших - из оставшихся битов второго символа и т. д.

Рассмотрим в качестве примера кодирование слова hellohello (рис. 3).

 


Пример формирования сообщения


Вот код сообщения:


07918350000005F131000C918350103254670008AA0С041F044004380432043504421A

 

Что он означает?


Рассмотрим его по порядку:

  • 07 - 6 байт для номера SMSC + 1 байт интернациональности SMSC;
  • 91 - интернациональный код SMSC;
  • 8350000005F1 - номер +38050000501, F - признак окончания номера;
  • 31 - поле данных протокола;
  • 01 - MTI: исходящий SMS плюс сообщение о доставке SMS;
  • 00 - MR: параметр, который устанавливается в SMSC;
  • 0C - длина номера получателя, уменьшенная на 1 (в номере 12 знаков);
  • 91 - получатель сообщения находится в другой стране;
  • 835010325467 - номер получателя +380501234567;
  • 00 - PID: идентификатор номера протокола. Если бы он не был равен 0, то должен был бы равняться 41..47, чтобы замещать сообщения с теми же номерами протокола;
  • 08 - DCS: схема кодирования данных - кириллица;
  • AA - максимальное время действия;
  • 0С - длина сообщения;
  • 041F04400438043204350442 - содержание сообщения: "Привет";
  • 1A - признак конца сообщения - символ 1Ah.

Для того чтобы отправить это сообщение, используем команду AT+CMGS:


Запрос:
AT+CMGS=140
 >
07918350000005F131000C918350103254670008AA0С041F04400438043204350442< 1Ah >


Ответ:
+CMGS: 47
OK

 

Все приведенные примеры были использованы для написания программы, внешний вид которой представлен на рис. 4. Программа написана для компилятора C++ Builder, но используются только API-функции Windows. Программа позволяет выбрать порт, к которому через data-кабель подключен телефон, загрузить в компьютер телефонную книгу, отправить SMS на русском языке. Получателя сообщения можно выбрать из телефонной книги либо ввести вручную. Соответственно, программа состоит, в основном, из двух блоков - загрузка телефонной книги и отправка SMS. Ее исходные тексты можно загрузить отсюда.

 

2004.06.25
19.03.2009
В IV квартале 2008 г. украинский рынок серверов по сравнению с аналогичным периодом прошлого года сократился в денежном выражении на 34% – до $30 млн (в ценах для конечных пользователей), а за весь календарный год – более чем на 5%, до 132 млн долл.


12.03.2009
4 марта в Киеве компания Telco провела конференцию "Инновационные телекоммуникации", посвященную новым эффективным телекоммуникационным технологиям для решения задач современного бизнеса.


05.03.2009
25 февраля в Киеве компания IBM, при информационной поддержке "1С" и Canonical, провела конференцию "Как сохранить деньги в условиях кризиса?"


26.02.2009
18-19 февраля в Киеве прошел юбилейный съезд ИТ-директоров Украины. Участниками данного мероприятия стали ИТ-директора, ИТ-менеджеры, поставщики ИТ-решений из Киева, Николаева, Днепропетровска, Чернигова и других городов Украины...


19.02.2009
10 февраля в Киеве состоялась пресс-конференция, посвященная итогам деятельности компании "DiaWest – Комп’ютерний світ" в 2008 году.


12.02.2009
С 5 февраля 2009 г. в Киеве начали работу учебные курсы по использованию услуг "электронного предприятия/ учреждения" на базе сети информационно-маркетинговых центров (ИМЦ).


04.02.2009
29 января 2009 года в редакции еженедельника "Computer World/Украина" состоялось награждение победителей акции "Оформи подписку – получи приз!".


29.01.2009
22 января в Киеве компания "МУК" и представительство компании Cisco в Украине провели семинар для партнеров "Обзор продуктов и решений Cisco Small Business"

 

 
 
Copyright © 1997-2008 ИД "Комиздат".