Модули WBIO (работа по GPIO)

Добрый день.
Тема не совсем про UX)
В старых версиях контроллера, когда в настройках указываешь боковые модули, все соответствия GPIO и конкретного модуля записывались в файл /etc/wb-homa-gpio.conf
У нас есть интеграция, которая позволяла управлять боковыми модулями напрямую по GPIO.
В последних обновлениях интеграция перестала работать, т.к. теперь этот файл пустой.
Вопрос заключается в том, куда эти настройки переехали?

Здравствуйте! Теперь настройки должны быть в файле /var/lib/wb-mqtt-gpio/conf.d/system.conf

Этот файл я тоже видел, там нет номеров GPIO
Например вот:
{
“name”: “EXT1_DIR1”,
“gpio”: {
“chip”: “/dev/gpiochip”,
“offset”: 0
},
“direction”: “output”,
“inverted”: false,
“initial_state”: false
}

Было так:

{
“name”: “EXT1_DIR1”,
“gpio”: 160,
“direction”: “output”,
“inverted”: false
}

По новому конфигу можно как то вычислить вот этот номер 160?

Вот тут описано: Работа с GPIO — Wiren Board

Спасибо, понял.
А что нужно запустить, если я отредактирую конфиг wb-hardware.conf, чтобы сгенерился /var/lib/wb-mqtt-gpio/conf.d/system.conf?
Минуя родной веб интерфейс, через BARY будет прописываться

Не до конца видимо понял.
Первым допустим подключен WBIO-DO-R10R-4, у него вся адресация посчиталась верно, все работает.
Далее подключен WBIO-DI-WD14, в конфиге указан 6 чип, следовательно 6х32 = 192, но должно быть 296 (при этом оно вообще не делится на 32) и следовательно не работает (на старой версии контроллера так, на этой если руками создать такой GPIO то адрес корректный)

Так… После редактирования файла следует явно сконфигурировать все модули, например запустив

wb-hwconf-helper config-apply

в процессе применения конфига wb-mqtt-gpio будет автоматически перезапущен, следуя аргументам в (неапример) /usr/share/wb-hwconf-manager/modules/wbio.sh
После чего при перезапуске файл сгенеируется автоматически, вызовом ExecStartPre из описания сервиса.

С этим вопросом понятно, но на данном этапе я пока через веб интерфейс WB конфигурирую, файлы генерятся, но с нумерацией GPIO явно что-то не так, в предыдущем сообщении описал.

i2c устройства - в gpiochip отображаются уже после того как отработает wb-hwconf-manager после загрузки оверлеев DTB.
Поэтому - без вызова wb-hwconf-helper, например - не обойтись. Ну или формировать их самостоятельно.

А разве ваш родной веб интерфейс не делает это автоматически?

Да, конечно делает. Я чуть выше описал как это работает при редактировании конфига вручную.
Может я неправильно вопрос понял? Если вернуться к первому сообщению:
файл /etc/wb-homa-gpio.conf давно не используется для конфигурирования.
Актуальный файл - /var/lib/wb-mqtt-gpio/conf.d/system.conf, который создается автоматически, поэтому редактировать его бессмыссленно.

Вопрос вот этот

Нет. Расчет номеров gpio актуален и работает только для gpio soc. Все прочие, в том числе i2c - отображаются с произвольными номерами, которые могут меняться при перезапусках. Но естественнно это се под капотом и имена топиков не меняются никогда.

Так и прикол в том, что на старых версиях прошивок были номера gpio в файле без формул и все работало, сейчас получается я даже вычислить его по вашим же формулам не могу! Как быть то в итоге?

Формулы относятся только к gpio самого soc. Для них все рекомендации справедливы.
Зачем нужны номера и прочее - когда управление всегда возможно с помощью штатного драйвера? Ну и старое управление gpio в новых ядрах 5.x - уже deprecated.
Чтение, собственно производится в /usr/lib/wb-mqtt-gpio/generate-system-config.sh
Но и еще раз напоминаю - механизм работы может быть в любой момент кардинально изменен и переработан, официальный - это mqtt.

На вопрос зачем ответ простой: меня не устраивает работа с вашим оборудованием через mqtt по множеству причин. Поэтому у нас есть свой драйвер для modbus, 1-wire, gpio итд.
А конкретно в этой теме вопрос про то, как вычислить номера gpio в новой версии ваших драйверов, по тем формулам что вы дали ничего кроме первого устройства не работает.
На старой версии вашего ПО работало. Может тогда просто скажете в какой версии вы стали использовать новый подход, я откачу контроллер и закрою возможность обновления?

Но тогда почему не работать и с i2c своим драйвером? Ну или проще - настраивать отображение в /sys устройств i2c так, как удобно/привычно?

Я уже несколько раз описал как оно работает и как читается.
И, тоже несколько раз указал что “формулы” применяются для gpio soc. И все.
то что работает “первое” устройство - случайность.
Никто не гарантировалчто внутренняя архитектура ПО будет неизменной.

Новый метод вместе с ядром 5. Примерно с весны этого года.

А документация есть? Просто для GPIO уже есть рабочий механизм а для i2c делать придется, но куда деваться.

Так раньше в конфиге тупо номера портов же были, сейчас то как вы с ними работаете не зная номеров? Или уже не GPIO?

Попробую старые версии до 5 ядра тогда

Добрый день! Из вашего сообщения могу сделать вывод, что программировать вы умеете. Пожалуйста откройте наши исходники сервиса wb-mqtt-gpio и посмотрите как он работает. Вам нужна часть вокруг generate-system-config.sh.

Ещё несколько моментов:

  1. Не нужно пользоваться /sys/class/gpio - это много лет как устаревший интерфейс. Нужно использовать новый интерфейс в ядре, который гуглится по “chardev gpio” и “libgpiod”. Этот интерфейс оперирует чипами и смещениями.
  2. Данные про чипы и смещения можно брать не только из DT, как делает скрипт, приведённый выше, Можно взять инофрмацию по label gpio с помощью утилит gpioget/gpioinfo/gpiofind:
root@wirenboard-AHIN3TB:~# gpiofind "A1 IN"
gpiochip0 231
root@wirenboard-AHIN3TB:~# gpioget gpiochip0 231
1
1 лайк

Гениальный вывод, даже спорить не буду.
Эта либа НЕ ставится на старые контроллеры, даже если использовать левый репозиторий, что указан в статье, дебиан слишком старый, а искать устаревшую версию либы которая внезапно окажется совместимой со старым контроллером желания нет никакого.
В любом случае способ как определять номера я нашел (без использования левых утилит).