Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с GSM телефоном

Автор: Danya
Дата сообщения: 09.08.2005 12:12
MoKC0DeR
Если я ошибаюсь то поправте меня, но в сотовом телефоне SMS хранятся в UCS2 а не в win1251. И поэтому API здесь не поможет, т.к Винь не работает с данной кодировкой.
Автор: MoKC0DeR
Дата сообщения: 09.08.2005 14:38
Danya
Для начала я не стал бы говорить что
Цитата:
в сотовом телефоне SMS хранятся в UCS2
я лучше скажу что в некоторых сотовых телефонах SMS хранятся в UCS2. Чтоб преобразовать текстовую строку в unicode есть функция MultiByteToWideChar.
И скажу больше для NT систем UNICODE является основной кодировкой
Автор: Dzar
Дата сообщения: 10.08.2005 05:58

Цитата:
Dzar
Подскажи пожалуйста как ты получил
Цитата:041F044004380432043504420021

все просто a..я = 0430..044F А..Я=0410..042А
а вообще послал чебе смс на русском прочитал и посмотрел что приходит....
Автор: MoKC0DeR
Дата сообщения: 10.08.2005 07:14
Dzar
hxxp://www.unicode.org/versions/Unicode4.0.0/ch07.pdf - раздел 7.3
Автор: Danya
Дата сообщения: 10.08.2005 08:37
MoKC0DeR
Спасибо.
Автор: FireZone
Дата сообщения: 16.08.2005 22:52

Цитата:
Проблема продолжается.... смс отправляется вот так
AT+CSCS="UCS2"
AT+CMGF=1
AT+CMGS="8916*******"
041F044004380432043504420021
то заместо слова "привет!" приходит " !"
может кто сталкивался?

Установи командой AT+CSMP параметры текстового режима.
Например, так
AT+CSMP=17,167,0,8
Последняя цифра - схема кодирования:
8 - UCS2,
0 - 7битное кодирование
240 - флэш смс в 7битном кодировании
и т.д.
Автор: Dzar
Дата сообщения: 17.08.2005 04:26
FireZone
Cпасибо тебе большое!!!! получилось... остался последний вопрос ...
Как отправить длинную СМС...(когда текст не влазит в одну SMS-ку)
Если текст сообщения не влазиет в одну SMS -ку то возвращается ошибка и смс не уходит....
жедательно сделать так как это сам телефон делает... при отправке длиную смску разбивает по 160 символов (латиницей), но при получении собирает в одну СМС....
было бы здорово.......
заранее спасибо
Автор: FireZone
Дата сообщения: 18.08.2005 17:08

Цитата:
Как отправить длинную СМС...(когда текст не влазит в одну SMS-ку)

Такая СМС отправляется двумя (и более) раздельными СМС. Доку на эту тему я пока не курил. Как это делается в текстовом режиме - не знаю (подозреваю, что никак). Беглый разбор PDU формата склеенной СМС показал следующее:
Во-первых, в каждой из частей склеенной смс установлен бит UDHI в байте PDU-type, что означает, что тело смс содержит заголовок. Заголовок сей был успешно обнаружен. В моем случае он состоял из шести байт:
050003C70201 - заголовок первой части
050003C70202 - заголовок второй части
Т.е., тело каждой части начинается с 6-байтного заголовка, а оставшиеся 134 байта - собственно само сообщение.
Предполагаю, что 050003C7 - это некий идентификатор, одинаковый для всех частей одной склеенной смс, а 0201 и 0202 - количество частей + номер части.
Во-вторых, все в том же байте PDU-type установлен так же бит MMS, означающий, что будут отправляться еще смс. Если я не ошибаюсь, временной интервал между отправкой частей не должен превышать 5 секунд.
В-третьих, бит запроса подтверждения установлен только в последней части.
Когда разберусь до конца - отпишусь. Но видимо не скоро: сильно занят.
Если разберешься с PDU, думаю, сам все поймешь.
P.S. Телефон выдает заголовок и в текстовом режиме. Попробуй считать с телефона все смс. Если найдутся сообщения с одинаковыми первыми пятью байтами - то это части одного склеенного сообщения. А шестой байт - номер части. Вроде так.
Автор: FireZone
Дата сообщения: 21.08.2005 21:41
Прочитал доку. Первый байт заголовка - это длина заголовка, все остальное - это блоки вида "тип-длина-данные". Если в заголовке есть блок с типом 00, то это сообщение есть часть склеенной СМС.
Т.е., в нашем случае 050003C70201 разбирается так:
05 - длина заголовка
00 - означает, что это часть склеенного сообщения
03 - длина сопутствующих данных
C7 - первый байт сопутствующих данных, выбирается случайным образом, одинаков для всех частей склеенной СМС.
02 - второй байт сопутствующих данных, количество частей
01 - третий байт сопутствующих данных, порядковый номер части

Чтобы послать склеенную СМС, нужно во-первых в байте PDU-Type каждой части установить бит UDHI, который будет означать, что сообщение содержит заголовок, во-вторых, соорудить заголовок для каждой из частей согласно приведенному формату.
Автор: Dzar
Дата сообщения: 26.08.2005 11:42
FireZone

Спасибо! БОЛЬШОЕ!! все работает
Автор: Ontarion
Дата сообщения: 26.08.2005 12:16
Качайте исходники проекта FMA на fma.sourceforge.net. Сорцы на Делфи. Эо лучшая на данный момент программа своего класса, притом что opensource.
Автор: Dzar
Дата сообщения: 01.09.2005 06:32
где находится бит PDU-type?
незабывай что мы работаем в тектовом режиме
Автор: FireZone
Дата сообщения: 01.09.2005 18:56
Dzar

Цитата:
где находится бит PDU-type?
незабывай что мы работаем в тектовом режиме

Сначала приведу пример, потом объясню. Итак, пример.
Сначала даем команду AT+CSMP=81,167,0,8
Потом командой AT+CMGS отправляем в текстовом режиме первую часть сообщения:
AT+CMGS="+79*********",<CR>050003010201041A0430043A002004430442043E043C043
804420435043B044C043D043E0020043F0440043804340443043C044B043204300442044C002
004420435043A0441044200200434043B044F0020043F04400438043C04350440043000200434
043B0438043D043D043E0433043E00200441043A043B04350435043D043D043E0433043E002
00441<ctrl+z>
Теперь даем команду AT+CSMP=81,167,0,8 и затем отправляем вторую часть:
AT+CMGS="+79*********",<CR>050003010202043E043E043104490435043D0438044F0020003A0029<ctrl+z>
В результате этих манипуляций получателю придет обычная склеенная СМС с текстом
"Как утомительно придумывать текст для примера длинного склеенного сообщения :)"
Теперь пояснения.
Разберем команду AT+CSMP. Первый параметр этой команды как раз и есть тот самый PDU-Type (в документации обозначается как <fo>), второй параметр - период действия сообщения (<vp>), третий параметр так называемый PID (<pid>), четвертый - схема кодирования (<dcs>).

Перед отправкой первой части мы поставили параметры 81,167,0,8.
Разберем PDU-Type по битам:
81 (51h):
0 - RP (Reply Path, не используем, ставим ноль)
1 - UDHI (означает, что тело сообщения содержит заголовок)
0 - SRR (Status report request, не запрашиваем отчет о доставке)
10 - VPF (Validity Period Format, ставим всегда эти два бита в состояние 10)
0 - RD (Reject Duplicates, много писать, читаем доку :). Ставим ноль и не напрягаемся)
01 - MTI (Message Type Indicator, 01 - это SMS-SUBMIT, т.е., исходящее сообщение)
Собственно всё. Перед отправкой второй части ставим флаг SRR.
О заголовке и схеме кодирования я писал выше.
Автор: Dzar
Дата сообщения: 08.09.2005 04:16
FireZone

Спасибо за объяснение... все понятно..
Автор: FireZone
Дата сообщения: 09.09.2005 16:03

Цитата:
Спасибо за объяснение... все понятно..

Получилось? Работает? Если нужно что-то осветить подробнее, или есть еще вопросы, или нужны еще примеры - спрашивай.
Автор: Dzar
Дата сообщения: 14.09.2005 04:03
Пока не пробывал... некогда....
А с английскими длинными СМСками ты разбирался ?
Там заголовок другой
Автор: GreyGendalf
Дата сообщения: 19.10.2005 15:36
всем привет.

не могу разобрать PDU пришедшего SMS.

читаю командой at+cmgl+4 пришедшие SMS, получаю PDU = '07913700390003F002E40B913700176547F0500191907191425001912195334200', начинаю разбирать,

вот здесь и вот здесь описание формата пришедшего SMS.
действую согласно его, итак.

07 - длина адреса СМС центра
913700390003F0 - адрес СМС центра
02 - First octet of this SMS-DELIVER message. (тип сообщения: TP-MTI, TP-MMS, TP-SRI, TP-UDHI, TPRP)
E4 - непонятная хрень
0B - длина адреса отправителя
913733440401 - адрес отправителя
и т.д.

так вот, что такое E4? самое главное в стадарте его нет. сразу после октета с TP-MTI, TP-MMS, TP-SRI, TP-UDHI, TPRP идет адрес отправителя.

у кого какие мысли будут?
может найденный мной стандарт устарел?
Автор: GreyGendalf
Дата сообщения: 11.02.2006 09:51
поднимаю тему
Автор: OdesitVadim
Дата сообщения: 01.03.2006 12:24
GreyGendalf
вот полная расшифровка твоего сообщения

Цитата:

PDU LENGTH IS 33 BYTES
ADDRESS OF DELIVERING SMSC
    NUMBER IS :    +73009300300
    TYPE OF NR. :    International
    NPI :    ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS
    MESSAGE TYPE :    SMS STATUS REPORT
    MSGS WAITING IN SC :    YES
    RESULT OF A :    SMS SUBMIT
    MSG REFERENCE NR. :    228 (0xE4)

RECIPIENTS ADDRESS
    NUMBER IS :    +73007156740
    TYPE OF NR. :    International
    NPI :    ISDN/Telephone (E.164/163)

SMSC TIMESTAMP :    19.10.05 9:17 GMT+6,00

DISCHARGE TIMESTAMP :    19.10.05 12:59 GMT+6,00

STATUS OF MESSAGE :    (0) TRANSACTION COMPLETED
    THIS MEANS :    SM received by SME

По поводу E4 - это ссылка на сообщение. Когда ты отправляеш сообщение, то смс центр присваивает ему номер(вроде он, хотя по другим сведеньям - телефон, и мне кажеться это так). Телефон использует эту ссылку, чтобы определить на какое сообщение пришёл отчёт
Автор: FireZone
Дата сообщения: 01.03.2006 13:30
OdesitVadim
Подскажи какую тулзу заюзал для расшифровки.
Автор: OdesitVadim
Дата сообщения: 01.03.2006 16:10
pduspy
Где качал - не помню, если что - залью на почту (меньше пол метра)
Автор: FireZone
Дата сообщения: 01.03.2006 17:04
Нашел я этот самый PDUspy (478кБ), если кому еще надо. Полезная штучка для разработчика. Сайт программы здесь . Правда, немецкий. Там есть еще другие интересные программки.
Автор: OdesitVadim
Дата сообщения: 01.03.2006 17:11
Попутно вопрос в тему. Отправляю две смс подрят. Вторая не доходит. Причина оказалась банальна - тока телефон не получит ответ от смс центра, он не будет отправлять другие смс. На этот ответ нужно от 2-5 сек обычно. В случае плохой связи - больше. Так вот интересно, что в тот момент, когда ожидается отправка смс он свободно принимает AT команды и справно отвечает на них. А вот команды отправики смс он почему то "глотает" тоесть он мне говорит "OK", но смс утеряна. Может кто знает, есть ли команда проверки какая-либо?
Автор: FireZone
Дата сообщения: 02.03.2006 09:39
OdesitVadim
А что надо проверять? Когда смс уйдет, телефон ответит +СMGS: nn, после чего можно слать следующее сообщение. nn - Message Reference. Т.е., та самая ссылка, которая позже придет в уведомлении о доставке (если оно было заказано соответствующим флажком при отправке).
Автор: OdesitVadim
Дата сообщения: 02.03.2006 10:45
FireZone
Он просто пришлёт? Тоесть мне необходимо просто чуточку подождать и опрашивать порт? Это многое меняет.
А если не ушла - Error?
Автор: FireZone
Дата сообщения: 02.03.2006 11:05
OdesitVadim

Цитата:
Он просто пришлёт? Тоесть мне необходимо просто чуточку подождать и опрашивать порт?

Я для этих целей завожу отдельный поток и в нем жду данные с порта. Как только сообщение отправится, телефон выдаст в порт +CMGS: nn. Если ошибка, то выдаст +CMS ERROR mm (код ошибки; его расшифровку можно узнать в документации)
Автор: OdesitVadim
Дата сообщения: 02.03.2006 12:21
FireZone
Большое спасибо. На данный момент я решал всё с помощью таймаутов. Но они не решали всех проблем. А поток... Да с этого я и начинал писать.
У меня есть книга по стандарту смс емс и ммс. Но AT команды там описаны в пару страниц. Скоро буду сканить, так что обращаётесь, если кому надо.

Есть ещё одна интересная проблема. В параметрах смс выставляю получения отчёта. На телефоне, подключённому к компьютеру работает правильно. Тестировал на GSM шлюзе(марка по документации - "eccom basis gsm900/1800", на AT команды о запросе производителя и марки отвечает "wavecom modem multiband 900 E 1800"). Он ответы (отчёты о доставке) не отображает. Приходящие смс - без проблем. Как решать - не знаю
Автор: FireZone
Дата сообщения: 02.03.2006 14:25
OdesitVadim

Цитата:
Скоро буду сканить

В инете хватает инфы по смс и ат-командам. Вот для примера.
GSM 07.07 - детальная дока по ат-командам
GSM 03.40 - детальная дока по SMS
GSM 03.38 - дока по схемам кодирования
И немного про EMS

Цитата:
Он ответы (отчёты о доставке) не отображает.

В каком смысле "не отображает": не пишутся на сим-карту? Я так понимаю, дисплея у него нет.
Автор: OdesitVadim
Дата сообщения: 02.03.2006 15:25
Я ожидаю, что они прийдут и запишуться на сим карту
А их нет.

Цитата:
В инете хватает инфы по смс и ат-командам. Вот для примера

Не для всех английский второй родной.....
Автор: FireZone
Дата сообщения: 02.03.2006 17:31
OdesitVadim

Цитата:
Я ожидаю, что они прийдут и запишуться на сим карту
А их нет.

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

Цитата:
Не для всех английский второй родной.....

чо верно то верно...

Страницы: 12345678

Предыдущая тема: Как удалять проекты в Builder 6.0?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.