реклама на сайте
подробности

 
 
> Отправка СМС из памяти в PDU режиме, Отправка СМС из памяти в PDU режиме на произвольный номер
den1s
сообщение May 31 2012, 12:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



Надеюсь, что в правильную тему пишу…
Уважаемые форумчане, помогите… скоро начну биться головой обо что-нибудь)
Делаю GSM-модуль: прибор на базе модуля Quectel M72 и AVR. Прибор отслеживает состояния подключенных датчиков и по наступлению определенных событий отправляет СМСки и щелкает исполнительными элементами. Конфигурируется прибор с компа, но работает самостоятельно. По схеме наверное необходимо отметить, что AVR посредством одного UARTа подключен к M72, а вторым подключается к компу (только для конфигурации). Комп с модемом связи не имеет.
Собственно железных вопросов нет – все слава богу работает, но вот с отправкой СМС проблема. Но тут стоит опять немного пояснений дать. Прибор должен иметь возможность отправлять СМС большому числу абонентов (последовательно) и на каждое из событий предполагается свой текст. При этом тесты СМС и имена абонетов нужно писать на русском. Держать всю эту кучу инфы в слабенькой АВР не представляется возможным, поэтому было принято стратегическое решение номера, имена абонентов а так же тексты СМС хранить в самом М72. А в процессоре держать только индексы телефонной книги и хранилища СМС. Т.е. когда я все это продумывал в теории, думал что будет так: АВРка говорит М72, а оправь-ка СМС № 1 из памяти абоненту № 2 из телефонной книги, а потом СМС № 3 абоненту№ 8.
Но тут оказалась проблема: нет такой АТ-команды. Думаю, ладно, буду считывать телефонный номер абонента в буфер и просто буду подставлять в команду отправки СМС из памяти. Но тут подставил Режим PDU: оказалось там прямо в тексте хранится номер получателя и его нельзя отправить на произвольный номер. Забирать текст PDU из модема и подправлять номер не выходит – этот текст может достигать 300 байт – мне стек в АВР срывает.
Собственно вопрос, можно ли на практике реализовать придуманный мной подход, и как это сделать? Возможно я не до конца разобрался во всех премудростях прекрасного PDU-режима
Очень много написал, извиняюсь. Заранее спасибо.


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CADiLO
сообщение Jun 1 2012, 09:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



Если в текстах будут одинаковые словосочетания типа "уважаемый абонент", то эти части можно хранить отдельно и подставлять при построении фразы чтобы не держать их в каждой фразе. То есть текст стоит оптимально продумать.


--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
den1s
сообщение Jun 1 2012, 09:23
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



Цитата(CADiLO @ Jun 1 2012, 13:10) *
Если в текстах будут одинаковые словосочетания типа "уважаемый абонент", то эти части можно хранить отдельно и подставлять при построении фразы чтобы не держать их в каждой фразе. То есть текст стоит оптимально продумать.

Спасибо за идейку, но к сожалению, тексты СМС записываются пользователем в процессе конфигурации прибора, а что он там напишет мне не известно)))

Цитата(Frolov Kirill @ Jun 1 2012, 13:15) *
Можно не в UCS, а в ISO-8859-5 (ака ГОСТ-кодировке). Тогда байт на символ. В 4 раза компактней, чем PDU.

подскажите, поподробнее, может ссылку каку-нить: т.е. я из этого ИСО могу конвертнуть в PDU и обратно без потери информации? а как это делать?


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Jun 1 2012, 09:33
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(den1s @ Jun 1 2012, 13:23) *
подскажите, поподробнее, может ссылку каку-нить: т.е. я из этого ИСО могу конвертнуть в PDU и обратно без потери информации? а как это делать?


Если код буквы менее 128 -- кодируется как есть (было 0x30 --> стало 0x0030 в UCS2).
Если код буквы более или равен 128 -- прибавляется 0x360: было 0xB0 (русская A заглавная) --> стало 0x410 в UCS2.
Обратно точно также. Работает только для ряда языков стран бывшего СССР: http://en.wikipedia.org/wiki/ISO/IEC_8859-5
Преимуществе перед windows-1251 -- не нужна таблица перекодировки во-первых, во-вторых очень удобно использовать текст прямо в исходниках (он хранится в UTF-8, который легко декодируется до UCS2 и легко же декорируется в ISO-8859-5). В последнем случае смысл в том, что при программировании на языке C тип wchar_t можно сделать 8-битным и практически от библиотеки C не нужна полноценная поддержка Unicode (её обычно в микроконтроллерах и нет). И в качестве wchar можно использовать на самом деле ISO-8859-5, а в качестве char -- UTF-8. И всё будет работать (#define wprintf printf и т.п.) точно также, как и с нормальной C-библиотекой на PC. Но только для русского, украинского, беларусского языков.

Go to the top of the page
 
+Quote Post
den1s
сообщение Jun 1 2012, 10:19
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



Цитата(Frolov Kirill @ Jun 1 2012, 13:33) *
Если код буквы менее 128 -- кодируется как есть (было 0x30 --> стало 0x0030 в UCS2).
Если код буквы более или равен 128 -- прибавляется 0x360: было 0xB0 (русская A заглавная) --> стало 0x410 в UCS2.
Обратно точно также. Работает только для ряда языков стран бывшего СССР: http://en.wikipedia.org/wiki/ISO/IEC_8859-5
Преимуществе перед windows-1251 -- не нужна таблица перекодировки во-первых, во-вторых очень удобно использовать текст прямо в исходниках (он хранится в UTF-8, который легко декодируется до UCS2 и легко же декорируется в ISO-8859-5). В последнем случае смысл в том, что при программировании на языке C тип wchar_t можно сделать 8-битным и практически от библиотеки C не нужна полноценная поддержка Unicode (её обычно в микроконтроллерах и нет). И в качестве wchar можно использовать на самом деле ISO-8859-5, а в качестве char -- UTF-8. И всё будет работать (#define wprintf printf и т.п.) точно также, как и с нормальной C-библиотекой на PC. Но только для русского, украинского, беларусского языков.

Во, блин, класс)). Спасибо! Нужно, конечно еще допилить до формата который можно в М72 отправить: ведь чтобы отправить в него символ с кодом 0х0410 нужно послать в модем 4 АСКИшных символа 0 4 1 0 (или 0х30 0х34 0х31 0х30). Вдруг поможет из тех кто ни знает.


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение Jun 1 2012, 11:10
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(den1s @ Jun 1 2012, 14:19) *
ведь чтобы отправить в него символ с кодом 0х0410 нужно послать в модем 4 АСКИшных символа 0 4 1 0 (или 0х30 0х34 0х31 0х30). Вдруг поможет из тех кто ни знает.


Не факт. Если всё сообщение состоит из ASCII (ну почти, GSM-алфавит немного отличается), то лучше кодирование в 7-битный GSM-алфавит (меньше количество SMS, или больше вмещается в одно сообщение, 160 символов против 70).

Код
unsigned sms_encode_ucs2(char *dest, const wchar_t *msg, unsigned maxsz)
{
unsigned code;
unsigned n;
        n=0;
        while (maxsz && *msg) { /* ISO8859-5 to UCS2 */
                if (! (*msg&0x80)) code=*msg;
                else code=*(const unsigned char*)msg+0x360;
                sprintf(&dest[n], "%4.4X", code);
                n+=4;
                msg++, maxsz--;
        }
        dest[n]=0;
        return n;
}

/* VS */

static uint_fast8_t sms_decode_7bit(
        wchar_t *text, const uint8_t *msg, uint_fast8_t size
) {
uint_fast16_t byte;     /* сдвиговый регистр */
uint_fast8_t nb;        /* число битов в byte */
uint_fast8_t n;         /* число байт записанных в text */
unsigned code;
        n=0; byte=nb=0;
        while (size--) {
                byte=byte | (*msg++ << nb), nb+=8;
                while (nb >= 7) {
                        code=byte&0x7f; byte>>=7;
                        if (code>=128) code-=0x360;  /* UCS2 to ISO8859-5 */
                        switch(code) {
                                case 0: code = '@'; break;
                                case 2: code = '$'; break;
                                default: break;
                        }
                        text[n]=code;
                        n++, nb-=7;
                }
        }
        text[n]=0;
        return n;
}

Go to the top of the page
 
+Quote Post
den1s
сообщение Jun 1 2012, 11:26
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 17-03-11
Пользователь №: 63 677



Цитата(Frolov Kirill @ Jun 1 2012, 15:10) *
Не факт. Если всё сообщение состоит из ASCII (ну почти, GSM-алфавит немного отличается), то лучше кодирование в 7-битный GSM-алфавит (меньше количество SMS, или больше вмещается в одно сообщение, 160 символов против 70).

Это ясно, но в таком случае нужно разбирать в какой кодировке записан текст... это в теории все делается... но на практике не за горами срок сдачи проекта, а работы еще не в проворот. Пока ограничусь только кодировкой UCS и сообщениями в 70 символов. Со временем, надеюсь доделать. Сейчас главное русский текст.


--------------------
"Одной мотивации недостаточно: если у вас есть идиот и вы его мотивировали, то в результате вы получите мотивированного идиота." - Джим Рон
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- den1s   Отправка СМС из памяти в PDU режиме   May 31 2012, 12:52
- - Nixon   Вы ошибаетесь насчет хранения номера в тексте sms....   May 31 2012, 14:20
- - CADiLO   Эта тема поднималась год назад и такая команда был...   May 31 2012, 14:34
- - den1s   Цитата(Nixon @ May 31 2012, 18:20) Вы оши...   May 31 2012, 17:23
- - CADiLO   Команда эта есть в любом модуле, но не в любом она...   May 31 2012, 18:20
|- - den1s   Цитата(CADiLO @ May 31 2012, 22:20) Коман...   May 31 2012, 19:01
|- - Frolov Kirill   Цитата(den1s @ May 31 2012, 23:01) интере...   Jun 1 2012, 09:15
|- - =F8=   Цитата(den1s @ May 31 2012, 22:01) Есть к...   Jun 1 2012, 09:26
|- - Frolov Kirill   Цитата(=F8= @ Jun 1 2012, 13:26) Все изве...   Jun 1 2012, 11:07
|- - =F8=   Цитата(Frolov Kirill @ Jun 1 2012, 14:07)...   Jun 1 2012, 12:29
|- - den1s   Цитата(=F8= @ Jun 1 2012, 16:29) Я сам не...   Jun 1 2012, 13:20
|- - Frolov Kirill   Цитата(=F8= @ Jun 1 2012, 16:29) Какие? В...   Jun 1 2012, 14:16
|- - _Артём_   Цитата(Frolov Kirill @ Jun 1 2012, 17:04)...   Jun 1 2012, 14:52
|- - =F8=   2 Frolov Kirill. Ваша взяла. Посмотрел на цены мла...   Jun 1 2012, 15:06
||- - _Артём_   Цитата(=F8= @ Jun 1 2012, 18:06) Посмотре...   Jun 1 2012, 15:12
||- - =F8=   Цитата(_Артём_ @ Jun 1 2012, 18:12) Еррат...   Jun 1 2012, 15:38
|- - den1s   Цитата(Frolov Kirill @ Jun 1 2012, 18:16)...   Jun 1 2012, 15:44
- - andrewlekar   У вас у AVR сколько памяти? Если вам 300 байт стек...   May 31 2012, 18:30
- - Frolov Kirill   Цитата(den1s @ May 31 2012, 16:52) Забира...   Jun 1 2012, 08:48
|- - den1s   Цитата(Frolov Kirill @ Jun 1 2012, 12:48)...   Jun 1 2012, 09:13
|- - Frolov Kirill   Цитата(den1s @ Jun 1 2012, 13:13) Трудно ...   Jun 1 2012, 09:25
|- - _Артём_   Цитата(Frolov Kirill @ Jun 1 2012, 12:25)...   Jun 1 2012, 13:40
- - den1s   Цитата(den1s @ May 31 2012, 16:52) Забира...   Jun 1 2012, 09:05
|- - Frolov Kirill   Цитата(den1s @ Jun 1 2012, 15:26) Это ясн...   Jun 1 2012, 13:40
- - CADiLO   PIC24 со своими таблицами в самый раз. А PIC16/18 ...   Jun 1 2012, 11:10
- - CADiLO   Тогда проще всего держать в памяти номера абоненто...   Jun 1 2012, 13:28
- - CADiLO   Просто кто к чему привык. Ну и еще два факта - Атм...   Jun 1 2012, 13:51
- - ArtemKAD   ЦитатаПосмотрел на цены младшей 100-й серии STM32 ...   Jun 1 2012, 16:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 03:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01785 секунд с 7
ELECTRONIX ©2004-2016