Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM900B МТС->Skylink портится кодировка сообщения
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Frolov Kirill
При отправке SMS с использованием модема SIM900B и SIM-карты МТС (только такое сочетание) на телефоне Skylink портится кодировка сообщения. Сообщение отправляется в PDU (AT+CMGF=0), кодировка UCS2. Поле DCS содержит код 9.

При отправке точно такого же сообщения с модема SIM300 проблемы не имеем. При отправке с мобильных телефонов проблемы не имеем.

Самое интересное. При отправке в текстовом виде (AT+CMGF=1, через AT+CSMP выставили тот же DSC код 9) тоже проблемы не имеем.

При получении всех русскоязычных SMS на обычные GSM-телефоны имеем в DCS код 8 (что немного странно...) Независимо от оператора. Кстати, для всплываемых поверх экрана сообщений Skylink тоже портит кодировку. Т.е. ему нельзя отправлять с DCS кодами 0x10 или 0x18. Только 1 или 9 (не помню почему так, если 4 бит сброшен -- то можно 0 и 8 стало быть, но это вызывало проблемы с SIM300, вроде, и какими-то операторами).

К сожалению, невозможно посмотреть в "сыром виде" SMS на стороне Skylink, только с экрана почитать (телефон, к компьютеру не подключается).

Почему такое может происходить, ваши мнения? Насколько я понимаю, сообщение в телефоне или модеме, вне зависимости от AT+CMGF и способа его передачи в телефон, в любом случае далее кодируется в PDU для передачи на уровне SM-TL (см. ETSI TS 100 901 V7.4.0, также http://books.google.com/books?id=AWQgapsAIvoC), с использованием значений переданных в команде AT+CSMP и с использованием текущей кодировки заданной AT+CSCS (всегда UCS2). Далее добавляется заголовок SL-RL уровня (RP-MO-DATA) и далее оно через ещё один уровень... отправляется в сеть. На уровне SL-RL и нижележащих нет ничего, что бы говорило о кодировках и т.п.

Можно предположить, что SIM900B как-то иначе кодирует сообщение в случае с CMGF=1, чем оно кодируется в PDU программой (или вручную). Может там другой DCS-код или что-то ещё. Но странно, что если принимать два сообщения на GSM-телефоне (любой оператор, кроме Skylink, который не-GSM), посланные сообщения, одно с CMGF=1, другое с CMGF=0, то они будут различаться только штампом времени. Но с точки зрения Skylink они различны.

Можно предположить, что SMSC как-то "исправляет" сообщения (например поле DCS -- почему оно у принятых сообщений всегда 8, вместо оригинального 9) для передачи GSM-абонентам. А для передачи в Skylink этого не происходит. Тогда можно объяснить, почему другие (не МТС) операторы не вызывают сбоя -- у них другие SMSC. И скорей всего сообщения отправленные в SIM900B в режиме CMGF=1 отличаются чем-то на уровне PDU (несмотря на то, что при приёме уже не отличаются -- SMSC что-то исправляет). Но что может отличаться? Я вижу только поле DCS. Но насколько код 9 здесь некорректен? Тем более, что он задаётся в CSMP тоже (тоже 9).
CADiLO
Для начала неплохо бы было указать версию прошивки модуля.
В первых прошивках было разночтение с кодированием UCS2, потом поправили.

Второе - пинать оператора на предмет того как реально он принимает русскоязычные тексты. Точнее, стоит ли у него юникод или нет.
>>> http://forum.sgh.ru/topic36665.html
Frolov Kirill
Цитата(CADiLO @ Aug 23 2011, 10:56) *
Для начала неплохо бы было указать версию прошивки модуля.


B05 с памятью Samsung. B08 с памятью ST.

Цитата
Второе - пинать оператора на предмет того как реально он принимает русскоязычные тексты.


И как это делать? Ни звонок, ни письмо не уйдёт дальше службы технической поддержки с девочками путающими Факс и GPRS. За редким исключением.

Цитата
Точнее, стоит ли у него юникод или нет.


Это не важно. По крайней мере до шлюза GSM -> Skylink (не знаю как там...) Потому, что SMS получатель в том же виде получает, как её отправляет отправитель. Не совсем так, но очень приближенно к действительности.

Цитата


И USSD здесь совершенно ни при чём.

Выяснилось что. При отправке с DCS=8 всё успешно. При отправке с DCS=9 -- сбой. Только на МТС (стало быть, DCS исправляется, как предположено, в SMSC?). А шлюз в Skylink не умеет правильно интерпретировать DCS, кроме нескольких типовых значений.

В силу чего длительное время использовались DCS 1 и 9 (вместо 0 и 8) установить уже невозможно. С SIM300 это не вызывало проблем (в связке с Skylink). Может сам SIM300 исправлял DCS. Получается SIM900B исправляет DCS при отправке в режиме +CMGF=1 и не исправляет в режиме +CMGF=0? Странно.
CADiLO
Последние B07 с памятью Samsung. B09 с памятью ST.

>>>И как это делать? Ни звонок, ни письмо не уйдёт дальше службы технической поддержки с девочками путающими Факс и GPRS. За редким исключением.

А с техотделом вместо девочек пообщаться не пробовали? Мне технари наших операторов не отказывали в помощи.

>>>А шлюз в Skylink не умеет правильно интерпретировать DCS, кроме нескольких типовых значений.

Вот это и спрашиваем - не думаю что это настолько секретно чтобы Вам не помогли.

>>>Потому, что SMS получатель в том же виде получает, как её отправляет отправитель. Не совсем так, но очень приближенно к действительности.
>>>И USSD здесь совершенно ни при чём.

Если кодировка изначально представлена неверно, то глюк будет в любом тексте. Никогда не видели когда отправляете в русском, а приходит транслитом SMS? Оператору оказывается было проще поставить транслитерацию чем правильно настроить юникод.
Многие это уже излечили, но иногда встречается.

Владимир О.
Так и в другую сторону те же грабли.
Раньше сообщения Скайлинка нормально на телефон МТС приходили, теперь кракозябрами.
Похоже, это у Скайлинка айтишники травы перекурили.
stream
DCS 9 вообще-то некорректен

Код
Bit 4    
0    Bits 1 and 0 are reserved and have no message class meaning
1    Bits 1 and 0 have a message class meaning

Bit 1    Bit 0    Message class    Description
0    0    Class 0    Immediate display (alert)
0    1    Class 1    ME specific
1    0    Class 2    SIM specific
1    1    Class 3    TE specific

Какой смысл выставлять бит 0, если бит 4 не разрешает его использование? Получается "reserved" комбинация с непредсказуемыми последствиями.
Frolov Kirill
Цитата(stream @ Aug 24 2011, 11:09) *
DCS 9 вообще-то некорректен


Не обоснованное утверждение.

Цитата
Какой смысл выставлять бит 0, если бит 4 не разрешает его использование?


Там сказано, что "не имеет смысла". А не "не разрешено использование".
И нигде не сказано, что если "reserved", то должен быть обязательно 0, а не 1, например.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.