- Главный топик на 4pda
- Поиск базовых станций, GUI & API
- ArcGIS API call example
- Секретная статья на Sohabr
- Примеры утилит для работы с Huawei 3372 API на Bash
- Пример работы с Huawei 3372 API на python3
Что я сделал, чтобы подружить модем с антенной?
- Взял стоковый модем, запустил виртуалку 2015 года с WindowsXP (песочницу), там уже были дрова Huawei, но в Мобильном ассистенте общаться с модемом не удалось.
- Скачал c 4pda Pupdatewiz и подходящую прошивку.
- Запустил Pupdatewiz — вуаля!
После прошивки стало:
Device name: E3372
Serial number: G4################
IMEI: ###############
Hardware version: CL2E3372HM
Software version: 22.333.01.00.00
Web UI version: 17.100.13.112.03 (17.100.13.01.03_Mod1.12)
LAN MAC address: BA:AB:DE:AD:BE:EF
- Выключил винду, на маке использовал mode_switch и переключил модем на вечный debug mode.
- Снова загрузил винду, в ней стал доступен Терминал.exe.
Вот этими командами восстанавливается убитая в ходе прошивки имеюшка. Тут как повезет либо AT^CIMEI
, либо AT^NVWREX
. Первая команда, как я понял, не всегда доступна, для успешного использования в второй надо предварительно воспользоваться утилитой imei_converter и вместо нулей записать то что надо. Команда AT^INFORBU
нужна имхо для применения долгосрочной записи в NVRAM.
AT^CIMEI="###############"
AT^NVWREX=0,0,16,08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
AT^INFORBU
AT^RESET
Код imei_converter.c приведен ниже:
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[]) {
int i;
const size_t imei_length = 15;
if (argc == 2 && strlen(argv[1]) == imei_length)
{
for (i = 0; i < imei_length; i++)
{
printf("0%i ", argv[1][i] - '0');
}
printf("00");
return 0;
}
else
{
printf("Usage: imei_converter imei\n");
return -1;
}
}
- На фоне модем плевался мне подобными сообщениями в терминал:
^RSSI:26
^HCSQ:"LTE",61,51,146,22
^RSSI:24
^HCSQ:"LTE",56,51,151,22
+CREG: 1,"#####","#########"
Последнее событие — событие IMSI Attach.
- Самая полезная команда —
AT^LOCINFO?
, она выдает сразу MCC, MCN, LAC, CID. C этими данными можно сразу смело идти на https://xinit.ru/bs/ и получать данные базовой станции.
AT^LOCINFO?
^LOCINFO:25001,0x#####,0xA,0x#######
0x#####h == #####d
0x#######h == #######d
curl --request GET 'https://xinit.ru/api/bs/250/01/#####/##########' \
-H 'referer: https://xinit.ru/bs/' \
-H 'accept-language: en-US,en;q=0.9'
{"average":{"lat":xx,"lon":yy},"yandex":{"lat":xx,"lon":yy},"google":null,"mylnikov":{"lat":xx,"lon":yy},"opencellid":null,"cell2gps":null}
curl 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?outSR=4326&returnIntersection=true&location=30.00%2C60.00&f=json'
- Но под виндой сидеть было грустно. После перепрошивки на маке/линуксе можно сделать telnet 192.168.8.1 и засылать AT-команды в
/dev/appvcom1
либо просто слушатьcat < /dev/appvcom1
Первый способ — если не нужен интерактив
echo -e "AT^LOCINFO?\r" > /dev/appvcom1
echo -e "at^reset\r" > /dev/appvcom1
Второй способ — двухсторонний обмен с модемом, он не очень удобен, т.к. обычно происходит много событий.
telnet 192.168.8.1
busybox sh
cat < /dev/appvcom1 & cat | busybox tr "\n" "\r" > /dev/appvcom1
Наиболее удобная для меня система — слушать события в отдельном терминале, а в другом кидать команды:
telnet 192.168.8.1
busybox sh
cat < /dev/appvcom1
telnet 192.168.8.1
busybox sh
cat | busybox tr "\n" "\r" > /dev/appvcom1
- RSRP, SINR и все-все-все
RSRP – средний уровень сигнала принимаемого с базовой станции оператора. Измеряется по логарифмической шкале в дБм (dBm) и отображается в виде отрицательных значений. Чем значение ближе к нулю, тем выше уровень принимаемого сигнала. Например, значение сигнала RSRP равное -65 dBm, намного лучше, чем значение -97 dBm.
SINR - отношение уровня полезного сигнала к уровню шума (соотношение сигнал/шум). Измеряется в дБ (dB). Чем выше данное значение, тем лучше качество сигнала. При значениях SINR ниже 0 скорость подключения будет очень низкой, т.к. это означает, что в принимаемом сигнале шума больше, чем полезной части.
Считается, что параметр сигнал\шум (SINR) в ряде случаев может быть важнее, чем уровень сигнала. При SINR в интервале 15-20 (dB) модем выдаст все, на что способна данная БС, даже при посредственном, около -70...-80 dBm, уровне RSRP, если сама БС окажется не перегружена в момент тестирования.
Значения параметров | RSSI | SINR (Ec/Io) |
---|---|---|
Отличные | -30...-50 dBm | 30 dB и выше |
Хорошие | -50...-70 dBm | от 20 dB до 30 dB |
Удовлетворительные | -70...-85 dBm | от 10 dB до 20 dB |
Плохие | -85...-110 dBm | менее 10 dB |
Есть две разновидности прошивок: Stick
и HiLink
. С прошивкой Stick
модем будет видеться AT-модемом, для подключения к интернету нужно «дозваниваться». С HiLink-прошивкой модем представляется сетевой картой Ethernet, и не требует настроек в ОС.
По умолчанию, модем находится в режиме HiLink
, такой типа роутер, с красивым веб-интерфейсом.
$ lsusb | grep Huawei
Bus 001 Device 010: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
# Здесь 12d1 это идентификатор производителя а 1506 это режим сетевой карты.
# Если не 1506, то надо переключить.
sudo minicom -D /dev/ttyUSB0
AT^NVWREX=50502,0,128,8F 29 FF 8E A8 CA 34 89 78 73 18 BA 9E F5 9C 64 0B A4 DB 81 DC 03 45 6E 72 DA EC 6A 0C 7C 90 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8B 8C F4 B5 AF 0C F2 2C FE E0 F4 46 9C CF 47 95 36 71 1F 1C BF 05 7F 84 AB A9 F2 92 89 33 3C 12 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AT^DATALOCK="00000000"
AT^CIMEI="#############"
Для прошивки под Linux используется утилита balong_flash.
- https://github.com/forth32/balongflash (Программа для прошивки модемов фирмы Huawei на чипсете Balong v7)
- https://github.com/forth32/balong-fbtools (Утилиты для работы с flash модемов на платформе Balong)
- https://github.com/forth32/balong-usbdload (Утилита для аварийной USB-загрузки модемов на чипсете Balong V7)
- https://github.com/forth32/balong-nvtool (Утилита для обработки образов NVRAM устройств на чипсете Hisilicon Balong)
В отличие от Linux, нa Macintosh адрес, скорее всего, будет не /dev/ttyUSB0
, а /dev/tty.HUAWEIMobile-Diag
.
Достоверно узнать адрес устройства можно с помощью команды ls /dev | grep HUA
.
$ ./balong_flash -h
Утилита предназначена для прошивки модемов на чипсете Balong V7
./balong_flash [ключи] <имя файла для загрузки или имя каталога с файлами>
Допустимы следующие ключи:
-p <tty> - последовательный порт для общения с загрузчиком (по умолчанию /dev/ttyUSB0)
-n - режим мультифайловой прошивки из указанного каталога
-g# - установка режима цифровой подписи (-gl - описание параметров)
-m - вывести карту файла прошивки и завершить работу
-e - разобрать файл прошивки на разделы без заголовков
-s - разобрать файл прошивки на разделы с заголовками
-k - не перезагружать модем по окончании прошивки
-r - принудительно перезагрузить модем без прошивки разделов
-f - прошить даже при наличии ошибок CRC в исходном файле
Распаковать архив, поместить нужную прошивку (.exe или .bin) в папку с командным файлом go.cmd и запустить его.
https://4pda.ru/forum/index.php?showtopic=582284&view=findpost&p=41114446
В модеме имеется хранилище различной конфигурационной информации - NVRAM. Оно организовано в виде набора записей переменной длины. Каждая запись имеет номер - от 0 до 65535, но не все номера записей физически присутствуют в модеме. Чтобы узнать длину конкретной записи, используется команда:
at^nvrdlen=<item>
<item>
- номер записи. В ответ модем выдает ее длину:
at^nvrdlen=8268
^NVRDLEN: 12
Посмотреть содержимое конкретной записи можно командой:
at^nvrdex=<item>,<offset>,<len>
<offset>
- смещение от начала записи до интересующего нас фрагмента (0 - с начала)
<len>
- длина выводимого фрагмента, должна быть не больше полной длины записи минус смещение.
Пример:
at^nvrdex=8268,0,12
^NVRD: 8268,0,12,01 00 00 00 01 00 00 00 0A 00 00 00
Данный модем обладает уникальным свойством - он умеет делать поиск всех окружающих базовых станций (БС). Причем не только БС оператора вставленной в него симкарты, а вообще все БС всех операторов, сигнал от которых достигает антенны модема. Для каждой найденной БС выводится ее CID и уровень принимаемого от нее сигнала. Это позволяет выбрать оператора с наивысшим уровнем сигнала, а также выбрать конкретную БС для наведения на нее внешней антенны. Единственный недостаток данного модема - он умеет искать только БС 2G и 3G. LTE-соты искать он не умееет.
Если в округе имеется сигнал LTE, то следует перевести модем в режим 2G3G командой AT^SYSCFGEX="0201",3FFFFFFF,1,2,800C5,, или в настройках веб-интерфейса. Также обратите внимание, что эту команду можно ввдить только через порт управления (PCUI). Если ее ввести через порт, предназначенный для установки РРР-соединения (modem), то команда будет выдавать пустой ответ (просто ОК и все). Формат команды: AT^NETSCAN=num,level,mode num - число находимых БС, от 1 до 20. Если будет найдено больше num БС, то станции с самым слабым сигналом будут исключены из списка level - минимальный уровень сигнала БС, включаемых в список. Задается в дБ, от -110 (самый низкий уровень) до -47 (самый высокий уровень). Станции с уровнем сигнала меньше level в список включаться не будут. mode - тип БС. 0 -поиск 2G-станций, 1 - поиск 3G-станций.
Пример команды:
at^netscan=20,-108,1
^NETSCAN: 10638,,,1e7e,250,02,0,-78,8b77,400000
^NETSCAN: 10687,,,1e7e,250,02,0,-79,d5c8,400000
^NETSCAN: 10662,,,1e7e,250,02,0,-82,8ade,400000
^NETSCAN: 10587,,,4cf8,250,20,0,-105,d4fc,400000
^NETSCAN: 10563,,,4cf8,250,20,0,-106,d4f9,400000
В этом примере заказывается поиск 3G БС с уровнем сигнала не ниже -108 дБ. Результат выдается в виде списка, отсортированного по уровню сигнала. Самая верхняя БС - самая мощная, нижняя - самая слабая. Формат элемента списка:
^NETSCAN: 10638,,,1e7e,250,02,0,-78,8b77,400000
1e7e - LAC станции
250 - MCC (Россия)
02 - MNC (В данном случае - МТС).
0 - хотел бы я сам знать что это, из дизассемблированного кода я так и не понял смысла этого поля.
-78 - уровень сигнала данной БС
8b77 - CID станции
400000 - диапазнон, в котором принимается сигнал БС (как в команде ^syscfgex).
По результатам данного примера можно сделать вывод, что самый сильный сигнал в данной местности - у МТС, а антенну надо направлять на БС с CID=8b77 LAC=1e7e. Координату БС можно посмотреть на сайте xinit.ru.
Прочие полезные команды из https://github.com/pixelspark/tymodem
AT+COPS
- информация о текущем оператореRecieve: +COPS: (1,"MTS-RUS","MTS","25001",0),(2,"MTS-RUS","MTS","25001",2),,(0,1,2,3,4),(0,1,2)
AT^PLMN?
- Query the connected network code (MNC/MCC).AT^LOCINFO?
- Query network location info.AT^CREG?