При отправке 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).