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