Сайт | Скачать | Видео | Wiki

Автор Тема: 3G-модем.  (Прочитано 38131 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #105 : 08 Декабрь 2016, 09:53:35 »
А как для прочих?
Надо сделать окно ввода ussd. Оно уже есть готовое, для ввода PIN, надо добавить. Но сначала - кириллица.
Т.е. ответ по русски крякозябрами?
Нет, печатает знаки. Вот текст ответа на запрос:
Код
+CUSD: 0,"004F0043005400410054004F004B002000310034002E0030003900200070002E0020041B04380447043D044B04390020043A043004310438043D043504420020043504490435002004430434043E0431043D043504350020043D04300020006D0079002E00740065006C00650032002E00720075",72

OK
Здесь таблица символов юникода. По ней можно прочитать сообщение если разбить его на четырёхзначные шестнадцатеричные числа (SMS кстати тоже). Но мой декодер ошибается на числах типа 04??, потому и дефективный.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #106 : 08 Декабрь 2016, 16:52:29 »
 "Дефективность" победил. Вот результат:
Код
# ./ussd1

OCTATOK 14.09 p. Целый Портфель 3G интернета в Вашем планшете: 693 б/пп#
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: 3G-модем.
« Ответ #107 : 08 Декабрь 2016, 17:00:40 »
Хорошо бы src и бинарники

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #108 : 08 Декабрь 2016, 17:30:38 »
 Исходник (под tele2)
Код
#include <wctype.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define UNICODE

int main(void) {

    wint_t c;
FILE *fd;
char str[11];
setlocale (LC_ALL, "ru_RU.UTF-8");

if ((fd = fopen("/dev/ttyUSB2","r+"))==NULL) exit(1);
fputs("AT+CUSD=1,AA18AC3602,15\n",fd);
    while ((strstr(str,",72"))==NULL) {
fgets(str,11,fd);
if ((strstr(str,"+CUSD:"))!=NULL) {
while ((strstr(str,",72"))==NULL) {
fgets(str,5,fd);
sscanf(str,"%x", &c);
putwchar(c);
}
}
}
fclose(fd);
printf("\n");

    return 0;
}
После допиливания планирую встроить в tray3Gcsq.
« Последнее редактирование: 08 Декабрь 2016, 17:32:26 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: 3G-модем.
« Ответ #109 : 08 Декабрь 2016, 17:36:57 »
Надо ли встраивать? Чем хуже отдельно вызывать? Может еще где пригодится...

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #110 : 08 Декабрь 2016, 20:29:34 »
Надо ли встраивать?
Можно и не встраивать, а вызывать через system, но тогда дублирующий код будет.
Может еще где пригодится...
Код
# ./ussd1             

Ваша заявка принята.Сбербанкк
Запрос *900*01# кодировал здесь
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #111 : 10 Декабрь 2016, 20:54:33 »
 Следующая часть, ussdhex:
Код
#include <stdio.h>
#include <string.h>

char buf[84];

void septin(int num) {

int i;
char str[2]="";

for(i=6; i>=0; --i) {
sprintf(str,"%d",(num >> i)&1);
strcat(buf,str);
}
}

long bintohex(char *s) {

long n;

while (*s == '0') s++;

if (strlen(s) > 32) return EOF;
else if (*s == '\0') return 0;

for (n = 0; *s != '\0'; s++) {
if (*s == '0') continue;
else if (*s != '1') return EOF;
n += 01 << (strlen(s)-1);
    }
    return n;   
}


int main(int argc, char **argv) {

int c, i, n, p, l;
char str[9], str1[5], buf1[90];
p=strlen(argv[1])-1;
//отправляем в буфер по 7 бит в обратном порядке.
for(p; p>=0; --p) {
sscanf(argv[1]+p,"%c", &c);
septin(c);
}
//вычисляем количество недостающих бит и заполняем нулями до кратного 8
i = strlen(buf);
n = 8-(i-((i/8) * 8));
if(n!=0 && n!=8) { for(n; n>0; --n) strcat(buf1,"0"); }
strcat(buf1,buf);
//читаем по 8 бит бит в обратном порядке, разбиваем пополам и по одному знаку перекодируем в hex
str[sizeof str-1] = '\0';
l = strlen(buf1)-8;
for(l; l>=0; l=l-8) {
strncpy(str,buf1+l,8);
strncpy(str1,str,4);
printf("%lX", bintohex(str1));
printf("%lX", bintohex(str+4));
}
//факт налицо :)
return 0;
}
Работает так:
Код
# ./ussdhex *102#
AA184C3602#
# ./ussdhex *900*01#
AA1C0CA682C546#
Собрал ussd1:
Код
root@pra:live# /mnt/sda3/live/Git/3Gtray/ussd1 *105#
OCTATOK 14.09 p. Целый Портфель 3G интернета в Вашем планшете: 693 б/пп
Как видите, в PRA-retro работает.
« Последнее редактирование: 10 Декабрь 2016, 22:28:47 от DdShurick »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #112 : 11 Декабрь 2016, 17:28:58 »
 Вопросы. У кого модемы не Huawei, какие из них требуют отправки ussd-запроса в виде hex? Делать ли ussd1 работающей автономно или включить в состав 3Gmodem?
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: 3G-модем.
« Ответ #113 : 11 Декабрь 2016, 17:58:58 »
автономно
    баланс tele2
А как для прочих?
Готов прямо сейчас проверить : билайн, хуавей, пра64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #114 : 11 Декабрь 2016, 18:23:18 »
Готов прямо сейчас проверить : билайн, хуавей, пра64
Проверяйте. У меня на PRA64 модем не определился, а на PRA-retro определяется только после перетыкания.
автономно
Хорошо, так даже интереснее, придётся встраивать определитель управляющего порта модема.
Но сейчас меня интересуют другие модемы, например ZTE принимает запрос в виде открытого текста, Huawei только в hex-виде, а другие?
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #115 : 11 Декабрь 2016, 18:59:05 »
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн midnighter

  • Ветеран
  • *****
  • Сообщений: 436
  • Репутация: +15/-0
Re: 3G-модем.
« Ответ #116 : 11 Декабрь 2016, 19:15:28 »
# ./ussd1 *100# 
Пробовал - в ответ тишина.
Пробовал хекс подставлять - ошибка сегментирования.

Оффлайн midnighter

  • Ветеран
  • *****
  • Сообщений: 436
  • Репутация: +15/-0
Re: 3G-модем.
« Ответ #117 : 11 Декабрь 2016, 19:58:10 »
А разница есть в каком режиме модем - modem; ndis?

Оффлайн sfs

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 33965
  • Репутация: +231/-0
    • PuppyRus-A
Re: 3G-модем.
« Ответ #118 : 11 Декабрь 2016, 20:12:06 »
Проверяйте.
http://telecomspec.ru/info-beeline/ussd-komandy/
Код
# ./ussd1_64  *102# 
# ./ussd1_64  *111#
#
т.е. тоже тишина (от root)
 
У меня на PRA64 модем не определился,
Как узнать определился\нет?
Код
# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1
достаточно?

И кстати AT+CSQ\r\n - у меня работает в sh
« Последнее редактирование: 11 Декабрь 2016, 20:15:20 от sfs »

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Автор темы
  • Старый чайник
Re: 3G-модем.
« Ответ #119 : 11 Декабрь 2016, 22:15:20 »
Как узнать определился\нет?
Код
# ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1
достаточно?
Вот их то и нет в PRA64, а в PRA-retro появляются только после перетыкания модема. Причина - porteus. В Richy я делаю udevadm trigger при запуске.
/etc/inittab:
Код
::wait:/bin/mount -a
::wait:/sbin/udevd --daemon
::wait:/sbin/udevadm trigger
::once:/bin/run-parts -a start /etc/init.d
tty1::respawn:/sbin/getty -n -l /bin/autologin 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
Почему в ответ тишина: у вас модем определился как USB0 + USB1 (USB1 - управляющий), а у меня USB2 управляющий, под него и написано. Перекопмилируйте с заменой USB2 на USB1. Чтобы было универсально, надо автоматически определять управляющий порт, циклом пока не получается, виснет, если использовать udev, то зависит от rules и check3Gtty, а вы этого не хотите.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64