Direwolf: GPIO + bookworm

Si estás pensando en instalar o actualizar tu software Direwolf y ya de paso, la versión del sistema operativo a Raspberry Pi OS v12 (Bookworm), te vas a encontrar una pequeña sorpresa, al no poder utilizar las Entradas/Salidas GPIO como hasta ahora.

Todo se debe a un cambio motivado por una mejora de la seguridad de la Raspberry Pi, por el que no permite acceder directamente en modo escritura a las entradas/salidas de GPIO, utilizados habitualmente para sacar la señal de PTT y en algunos casos la de DCD.

La primera solución que encontré, se basaba en desactualizar el firmware de la Raspberry. Claro. Vamos a una versión anterior en la que no se protegían… y todo vuelve a funcionar. Pero así, también dejamos de tener parches de seguridad que seguramente sea interesante tener.

En éste tiempo, como el problema se ha generalizado, los programadores ya han sacado una (e incluso dos) versión de desarrollo con las modificaciones necesarias, y es lo que os voy a contar.

A partir de ahora, para acceder al GPIO tendremos que hacerlo a través de la librería gpiod.

Lo primero es instalarla, para ello lo haremos de la forma habitual:

$ sudo apt install gpiod

No voy a entrar más en gpiod ya que nuestro objetivo, es que Direwolf pueda hacer PTT.

Para instalar la versión de Direwolf necesaria para que funcione todo, tendremos que seleccionar el hilo «DEV ó development» y no el «STABLE» que hasta ahora sonaba como la mejor opción para todos aquellos que no queríamos emociones fuertes… Esto se hace con el comando:

$ git checkout dev

Este comando, lo damos justo después del git clone ya de sobra conocido.

En mi caso, tenía ya gpiod instalado, pero faltaban las librerías, por lo que salía el error al hacer el cmake. Si te pasa ésto, instala con el comando:

$ sudo apt-get install libgpiod-dev

Solo me resta indicar, qué es lo que pondremos en el fichero de configuración, para que todo ésto funcione correctamente.

Deberemos sustituir la línea donde indicamos por que pin sacamos el PTT, escribiendo lo siguiente:

PTT GPIOD gpiochip0 25

El ejemplo, es para usar la linea 25 del GPIO. Si tienes otra, pones lo que corresponda.

Con la línea de DCD, que es de salida también, ocurre exactamente lo mismo.

En éste momento, ya está publicado Direwolf v1.8-DEV que es la que usaremos. De todas formas, igual cuando leas todo ésto, ya se ha pasado al canal estable esta implementación de gpiod (suena lo más posible…), así que comprueba cual es la versión más reciente, trata de usarla, y si no funciona, haz lo que he detallado.