На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Мобильное » Телефоны

Мобильник, усиленный ПК

Большинство современных мобильных телефонов подключаются к компьютеру через 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.

Рис.1 Формат входящего PDU-сообщения
Байты
1-12 1 2-12 1 1 7 1 0-140
SCA PDU-type OA PID DCS SCTS UDL UD
Биты поля PDU-type
7 6 5 4 3 2 1 0
RP UDHI SRI не используются MMS MTI

Рис.2 Формат исходящего PDU-сообщения
Байты
1-12 1 1 1-12 1 1 0, 1 или 7 1 0-140
SCA PDU-type MR DA PID DCS VP UDL UD
Биты поля PDU-type
7 6 5 4 3 2 1 0
RP UDHI SRR VPF RD MTI

Таблица. Назначение полей 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).

Рис.3 Пример упаковки слова в 8-разрядном формате
7-разрядная запись слова hellohello
H e L L o h e l l o
68 65 68 68 6F 68 65 68 68 6F
1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111
Девять 8-разрядных байтов со словом hellohello
11101000 00110010 10011011 11111101 01000110 10010111 11011001 11101100 110111
E8 32 9B FD 46 97 D9 EC 37

Пример формирования сообщения
Вот код сообщения:

    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. Ее исходные тексты можно загрузить отсюда.

Юрий Горский
КомИздат

Другие разделы
Сотовое чтиво
Телефоны
Новое в разделе
КПК
Ноутбуки
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100