Вы находитесь здесь: Главная > Мобильная связь > Pdu формат в мобильной связи

Pdu формат в мобильной связи

Краткий экскурс…
Использовать мобильные аппараты средней цены невыгодно, а вот “бросовые” самое оно… НО, как правило в таких аппаратах доступен лишь PDU формат отправки сообщений в UNICODE кодировке.
Все вроде – бы ничего: преобразуй в UCS2 и посылай… но толковых готовых решений не оказалось, даже пресловутый PDUspy [5] не оправдал ожиданий по конвертации sms.

Формат однобайтовой кодировки SMS в статье не рассматривается, ввиду отсутствия в ней поддержки кириллицы.

Решение
Состав полей и алгоритм формирования PDU-SMS виден из текста ниже (в терминах си- компилятора контроллера приведенный код будет гораздо компактней) …

function cpdu(ksz,sz,num,msg: string): string;
begin
result:= inttohex(length(sz),2) + // 07=длина номера SMSC
’91’ + // 91=интернациональность номера SMSC
cnv(ksz + sz) + // 97103701F0=+790173100 плюс признак окончания номера F
’01’ + // 01=PDU Type: MTI=01 -> исходящий SMS
’00’ + // 00=MR — параметр, который устанавливается в SMSC
inttohex(length(num)-1,2) + // длина номера получателя-1
’91’ + // 91=интернациональность получателя
cnv(num) + // номер получателя
’00’ + // 00=PID идентификатор номера протокола
tcod + // 18/08=DCS схема кодирования на экран/вну: кириллическое
inttohex(length(msg)*2,2)+ // длина сообщения
ucs2(msg) // сообщение
end;

Формирование номера оправки и sms – центра осуществим по простому принципу: переставляем соседние цифры местами, если номер нечетный то добавляем Fh …

function cnv(s: string):string;
var i: integer;
begin
delete(s,1,1);
if length(s) mod 2>0 then s:=s + ‘F’;
i:= 1;
while (i=192 then k:= k + 1040 — 192;
result:= result + inttohex(k,4)
end
end;

Теперь дело за малым – проверим как работает:

sendcom(‘AT+CMGS=’+inttostr(length(txt.text)*2)+#13+#10); // 0Dh
sendcom(pdu.Text+#26); // символ конца строки 1Ah

Практика
Итак, имеем сформированное “100% отправляемое” кириллическое PDU сообщение:

AT+CMGS=54x0d
079183609310000001000C91835050391443000836041D043504420020043F043804420430043D0438044F0020043A043E043D04420440043E043B043B043504400430002000470053004Dx1a

… разберем подробно!!!
AT+CMGS=54 — длина в dec
07 91 836093100000 01 00 0C 91 835050391443 00 08 36
041D043504420020043F043804420430043D0438044F0020043A043E043D04420440043E043B043B043504400430002000470053004D

06 для номера SMSC + 1 байт интернациональности
91 интернациональность SMSC
836093100000 номер sms центра плюс признак окончания номера (перестановка)
01 PDU Type: исходящий SMS
00 MR — параметр, который устанавливается в SMSC
0C длина номера получателя-1 в hex
91 интернациональность получателя
835050391443 номер получателя (перестановка +380505934134)
00 PID идентификатор номера протокола
08 [18/08] = [на экран – flash / вну] DCS 2-x байтная схема кодирования данных
36 длина текста сообщения!!! заметьте- это длина в hex (каждый символ по 2-байта)
… текст сообщения

Полные исходные тексты проекта в AVR на ATTiny с дозвоном доступны по согласованию с автором.

  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • LinkedIn
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Digg
  • БобрДобр
  • MisterWong.RU
  • Memori.ru
  • МоёМесто.ru
  • Сто закладок

Теги: , , ,

Комментарии закрыты.