roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 23:21

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 08:06 
Не в сети

Зарегистрирован: 14 июл 2009, 08:00
Сообщения: 10
Пишу (разыскиваю готовую) функцию по перекодированию текста в PDU формат для отправки SMS. В программировании на СИ новичек :oops:
Поделитесь информацией, пожалуйста, кто что делал :beer:

PS: сообщения будут динамические. Если бы нужно было определенное слово конвертнуть в PDU, я бы заюзал прогу PDUSpy :)
Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 08:43 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Я делел вот такую конструкцию: viewtopic.php?f=35&t=4786&start=15
Если что, могу поделиться опытом :)

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 09:19 
Не в сети

Зарегистрирован: 14 июл 2009, 08:00
Сообщения: 10
Спасибо за предложение помочь! Опыт это сила!
А Вы пожалуй писали ф-ю по декодированию СМС из PDU (а Ваш сименс текстовый формат точно не поддерживает)?
Либо Вы просто загоняли НЕХ принятый в массив, и потом сравнивали на предмет соответствия шаблону? Я вот что имею ввиду: предположим команд 8мь. Следовательно принятая СМС будет тоже неизменна, можно класть ее в массив и сравнивать побайтно к какой команде относится та или иная СМС (парсить по совпадению на шаблон)...как-то так...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 09:26 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
можно сравнивать по размеру sms текста: radiokot

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 12:10 
Не в сети

Зарегистрирован: 14 июл 2009, 08:00
Сообщения: 10
У меня инфа будет поступать с СОМ порта сервера на МК (всякая всячина которую скрипты шлют: температура, свободное дисковое пространство на различных серверах и тд). На СОМ порту у меня висим моя приблуда на МК, и присылаемый текст конвертит в PDU и отсылает в виде СМС на ной номер телефона. Поэтому текст каждый раз разный.

PS: разумеется возле МК есть и телефон (у меня Siemens C35).

PS: нужно написать ф-ю по конвертированию текста в PDU.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 15:08 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Omega писал(а):
А Вы пожалуй писали ф-ю по декодированию СМС из PDU (а Ваш сименс текстовый формат точно не поддерживает)?

Да, писал две функции кодирования и декодирования PDU. (попозже выложу, если интересно)
Omega писал(а):
предположим команд 8мь.

Количество команд ограничено ножками МК :)
Omega писал(а):
сравнивать побайтно к какой команде относится та или иная СМС

Да именно так.

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 15:36 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
позвольте,
Omega писал(а):
А Вы пожалуй писали ф-ю по декодированию СМС из PDU ... Либо Вы просто ... сравнивали на предмет соответствия шаблону?

вот я и говорю, что можно хранить не побайтный шаблон команды, а только размер сообщения, содержащего её. соотвественно для каждой команды свой размер.

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 14 июл 2009, 15:59 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Вот обещанная функция :)
Преобразует текстовый массив sms_message[] в массив PDU pdu_data[] готовый к отправке.
(написана в CV AVR)

Код:
///////////////////////// Создаем PDU ///////////////////////////////////////////////
void create_pdu(void)
{
unsigned char i, offset, length, n;
pdu_data[0] = 0x00;
pdu_data[1] = 0x01;  //исходящее сообщение
pdu_data[2] = 0x00;
pdu_data[3] = sms_dest[0] << 1; //число цифр номера
if ((sms_dest[sms_dest[0]] & 0x0F) == 0x0F) pdu_data[3]--;
pdu_data[4] = 0x91; //интернациональный номер
for (i=1; i <= sms_dest[0]; i++)
   {
        pdu_data[i+4] = (sms_dest[i] << 4)|(sms_dest[i] >> 4);
   }
offset = sms_dest[0]+5;
pdu_data[offset++] = 0x00;  //PID
pdu_data[offset++] = 0x00;  //DCS
length = offset++;
i = 0;
n = 0;
while (sms_message[i] != 0) //преобразуем восьмибитную запись символов в 7ми битную
   {   
        if (n == 0) pdu_data[offset+i] = sms_message[i] & 0x7F;
        else
           {
                pdu_data[offset+i-1] |= sms_message[i] << (8-n);
                pdu_data[offset+i] = sms_message[i] >> n;
           }
        if (n++ > 6)
           {
                n = 0;
                offset--;
           }
        i++;
   }
pdu_data[length] = i; //число букв
pdu_len = offset+i;
}
/////////////////////////////////////////////////////////////////////////////////////////


Добавлено спустя 17 минут 10 секунд:
MiBBiM писал(а):
вот я и говорю, что можно хранить не побайтный шаблон команды, а только размер сообщения, содержащего её. соотвественно для каждой команды свой размер.

Конечно можно и так.
Только команда будет исполняться не только от определённого сообщения, а и от любого другого имеющего эту длинну, а это не айс :(

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 16 июл 2009, 12:21 
Не в сети

Зарегистрирован: 14 июл 2009, 08:00
Сообщения: 10
...тогда поидее можно последние несколько символов в сообщении сравнивать. Первые-то всеравно служебные (номера СМС цента, абонента, формат номера, длина сообщения и тд). Правильно? :)
Хотя это уже вариации на тему :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 16 июл 2009, 19:16 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Omega писал(а):
...тогда поидее можно последние несколько символов в сообщении сравнивать. Первые-то всеравно служебные (номера СМС цента, абонента, формат номера, длина сообщения и тд). Правильно?

Немного не так. Есть функция расшифровки PDU (могу выложить если кому интересно), так вот она всё лишнее отрезает, и оставляет только текст. Его и надо сравнивать.

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 20 окт 2009, 23:02 
Не в сети

Зарегистрирован: 16 май 2008, 07:43
Сообщения: 4
Откуда: Н.Новгород
ФИО: Гущин Стас
Евгений огромная просьба выложить функцию проверки полученной SMS .
Я только начал в этом разбираться.
у меня не выходит проверка полученной sms.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 20 окт 2009, 23:13 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Пожалуйста :)
Код:
//////////////////////////////// Расшифровка PDU ///////////////////////////////////////////////   
void decode_pdu(void)
{
   char n, length, offset, i, b, mask;
   offset = pdu_data[0]+2; //позиция в массиве
     length = pdu_data[offset]/2+(pdu_data[offset] % 2);
     offset += 2;
     sms_orig[0] = length;
     //номер телефона, с которого отрправлена SMS'ka
     for (i = 0; i < length; i++) sms_orig[i+1] = (pdu_data[i+offset] << 4)|(pdu_data[i+offset] >> 4);
     if ((sms_orig[1] & 0xF0) != 0x70) sms_orig[1] = (sms_orig[1] & 0x0F) | 0x70;
     offset += length+9;
     length = pdu_data[offset++];
     if (length > sizeof(sms_message)-1) length = sizeof(sms_message)-1;
     n = 0;
   b = 0;
     mask = 0x3F;
     i = 0;
     //декодирование сообщения (7 бит - 8 бит)
   do {
         if (n == 0) sms_message[b] = pdu_data[offset+i] & 0x7F;
           else
            {
                 sms_message[b] = (pdu_data[offset+i-1] >> (8-n))|((pdu_data[offset+i] & mask) << n); //!!!!
                  mask >>= 1;
            }
         if (n++ > 5)
            {
               if (++b >= length) break;
               sms_message[b] = pdu_data[offset+i] >> 1;
               n = 0;
               mask = 0x3F;
            }
        i++;
       }
   while (b++ < length);
   sms_message[b] = 0;
}

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 20 окт 2009, 23:47 
Не в сети

Зарегистрирован: 16 май 2008, 07:43
Сообщения: 4
Откуда: Н.Новгород
ФИО: Гущин Стас
Спасибо,буду разбираться.
Для меня это пока сложно,но попытаюсь...

Добавлено спустя 26 минут 46 секунд:
Евгений,для меня все таки это пока сложно.
Если можно , то разъясни некоторые моменты?
Как загнать в массив "pdu_data" значение UDR ?
я проверяю так
void sms() // Функция КОГДА пришла SMS
{
if (getchar() == 0x2B){ //1
if (getchar() == 0X43){ //2
if (getchar() == 0X4D){ //3
if (getchar() == 0X54){ //4
if (getchar() == 0X49){ //5
if (getchar() == 0X3A){ //6
if (getchar() == 0X20){ //7 //получили SMS +CMTI: "SM",1
if (getchar() == 0X22){ //8
if (getchar() == 0X53){ //9
if (getchar() == 0X4d){ //10
if (getchar() == 0X22){ //11
if (getchar() == 0X2C){ //12
if (getchar() == 0X31){ //13

compare_1(); //дальше также


}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 20 окт 2009, 23:57 
Не в сети
Аватара пользователя

Зарегистрирован: 23 окт 2007, 22:03
Сообщения: 3037
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец
Дык, UDR это регистр приемника. Сначала надо принять информацию из UDR в промежуточный буфер, в зависимости от длинны посылки (например data[]), а затем уже оперировать полученным массивом.

_________________
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SMS в PDU формате
СообщениеДобавлено: 21 окт 2009, 10:58 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
http://www.codeproject.com/KB/mobile/smspdulib.aspx?display=PrintAll&fid=348333&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=76&select=2288608
:good: оч неплохая сишная либа для работы с пду.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO