Работа с модемом

Добрый день!

Пишу программу для переключения sim в модеме. Контроллер HW: 6.7.2I/1 (S/N: AN4PGJ6W).
Ситуация такая - модем работает, пинг через ppp0 проходит.
Прочитал раздел GSM/GPRS — Wiren Board

Команда “echo $WB_GPIO_GSM_SIMSELECT” выводит пустую строку, а “ls -la /sys/class/gpio” выдаёт:
drwxr-xr-x 2 root root 0 Jun 22 13:56 .
drwxr-xr-x 49 root root 0 Jun 22 13:56 …
–w------- 1 root root 4096 Jun 22 14:02 export
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio121 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio121
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio122 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio122
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio123 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio123
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio133 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio133
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio134 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio134
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio135 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio135
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio136 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio136
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpio139 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio139
lrwxrwxrwx 1 root root 0 Jun 22 14:02 gpio34 → …/…/devices/platform/soc/1c20800.pinctrl/gpiochip0/gpio/gpio34
lrwxrwxrwx 1 root root 0 Jun 22 13:56 gpiochip0 → …/…/devices/platform/soc/1c20800.pinctrl/gpio/gpiochip0
–w------- 1 root root 4096 Jun 22 13:56 unexport

Соответственно, вопрос - какой алгоритм универсального переключения sim карт в контроллерах?

Добрый день.
Контроллер такой же, модем сконфигурирован:

echo $WB_GPIO_GSM_SIMSELECT
88

И, ессно, 88 есть:

 ls -la /sys/class/gpio
итого 0
drwxr-xr-x  2 root root    0 июн 23 06:59 .
drwxr-xr-x 51 root root    0 июн 23 06:59 ..
--w-------  1 root root 4096 июн 22 13:42 export
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio116 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpiochip3/gpio/gpio116
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio119 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpiochip3/gpio/gpio119
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio128 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio128
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio130 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio130
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio132 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpiochip4/gpio/gpio132
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio23 -> ../../devices/platform/soc/2000000.bus/209c000.gpio/gpiochip0/gpio/gpio23
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio83 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio83
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio84 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio84
lrwxrwxrwx  1 root root    0 июн 23 07:00 gpio88 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpiochip2/gpio/gpio88
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip0 -> ../../devices/platform/soc/2000000.bus/209c000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip128 -> ../../devices/platform/soc/2000000.bus/20ac000.gpio/gpio/gpiochip128
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip32 -> ../../devices/platform/soc/2000000.bus/20a0000.gpio/gpio/gpiochip32
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip64 -> ../../devices/platform/soc/2000000.bus/20a4000.gpio/gpio/gpiochip64
lrwxrwxrwx  1 root root    0 июн 23 06:59 gpiochip96 -> ../../devices/platform/soc/2000000.bus/20a8000.gpio/gpio/gpiochip96
--w-------  1 root root 4096 июн 20 09:53 unexport

Проверьте в файле /run/wb_env.cache - там лежат экспортированные переменные.
А какой релиз стоит на контроллере?

После конфигурации модема контроллер не перезагружали, возможно поэтому “echo $WB_GPIO_GSM_SIMSELECT” выдавало пустую строку. Сейчас выводится 34. И описанная схема не работает:

echo 1 > /sys/class/gpio/gpio34/value
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value возвращается в 0.

Для 6.7 все же GPIO 88.
Какой релиз ПО на контроллере установлен? У вас точно 6.7 контроллер? Точно ли не от WB7? Только на нем для sim_sel используется 34.

Да, видимо WB7, хотя на нём наклейка с надписью HW: 6.7.2I/1

А какой релиз?

А как его узнать?

https://wirenboard.com/wiki/Wiren_Board_Firmware_Update#Какой_релиз_на_вашем_контроллере

Выложите пожалуйста фото платы контроллера и наклейки с номером.

На скриншоте в предыдущем моём сообщении тоже было написано:

Release name

wb-2201

Release suite

stable

Да, 7.2
Обновите ПО до актуального, текущий релиз 2204

Обновили контроллер до 2204.
“echo $WB_GPIO_GSM_SIMSELECT” выдаёт 34. Если делать по алгоритму:

echo 1 > /sys/class/gpio/gpio34/value
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value возвращается в 0.

Повторил ещё раз. Для модема в файле провайдера прописан /dev/ttyUSB2. AT-команды отправляю через /dev/ttyGSM, т.е. делаю по инструкции GSM/GPRS — Wiren Board

После выполнения:
AT+CFUN=0
AT+CFUN=1

Значение в /sys/class/gpio/gpio34/value опять возвращается в 0, и через несколько секунд модем выключается (гаснет зелёная лампочка).

gpio соответствующий просто переэкспортируется. Воспроизвел. Вообще - баг, сделал задачу на исправление.

Хорошо, а как тогда sim-карты переключать, в случае отсутствия связи на одной из них?

Думаю на днях будет фикс, пока в качестве костыля можно явсно устанавливать значение gpio, например раз в секунду.

Здравствуйте!
Проблема исправлена в пакете wb-utils v3.6.1. Пакет доступен в репозитории тестинг: Обновление прошивки контроллера Wiren Board — Wiren Board.

Проверьте, пожалуйста, работу после обновления ПО. Напишите, решилась ли проблема после обновления.

1 Like