Segundo round, ampliamos ventaja: Arduino 0 - OpenDomo 2

Esta tarde he tenido dos horas libres que he dedicado a pelearme un poco más con este divertido artilugio, y he decidido ir a por una de las funcionalidades más duras, que intenté evitar en el primer round: la configuración persistente. El resultado, otra vez, me ha sorprendido; sin muchas dificultades he podido guardar la configuración en la pequeña EEPROM de Arduino y recargarla.

Para hacerlo he implementado dos nuevas funciones sav y loa (recordar que el sistema emplea comandos de ancho fijo a 3 bytes), entre otras que se suman a las creadas en el primer round, lst y set. Viendo que el número de comandos soportados va creciendo a buen ritmo, voy a aprovechar esta misma entrada para esbozar una pequeña referencia, que quedará abierta a discusión de cara a la implementación final.

Referencia de OpenDomo para Arduino v.0.0.2

Los comandos soportados hasta el momento son los siguientes:

  • lst: lista todos los puertos del dispositivo, indicando su estado y sus características
  • set [puerto] [valor]: asigna un valor al puerto indicado; tal puerto debe ser de salida, y el valor acorde a su tipo (on/off para los digitales, 000-100 para los analógicos)
  • sav: guarda la configuración en la EEPROM (configuración de los puertos, enlaces, etc.)
  • loa: carga la configuración almacenada en la EEPROM 
  • ech(o): activa o desactiva el eco local, para facilitar depuración; la última "o" es ignorada.
  • cfg [puerto] [i/o] [d/a] [nombre]: permite configurar un puerto en particular; esta función está siendo revisada y su sintaxis puede cambiar en cualquier momento
  • lnk [in_port] [out_port]: crea un enlace entre un puerto de entrada y uno de salida.
  • unl [in_port] [out_port]: borra un enlace entre dos puertos
  • lln: lista todos los enlaces existentes

Los enlaces aún están siendo probados, por lo que no publicaré el código con los últimos cambios que activan esta funcionalidad hasta que me asegure de que funcionan perfectamente. Por otro lado, el mapa de memoria de la EEPROM está siendo rediseñado en vistas a la versión 2.0, de modo que una configuración guardada con la versión actual del software probablemente no funcionará con la versión final. De todos modos, os invito a hacer algunas pruebas con él!

En cuanto a la referencia, ¿qué funciones echáis de menos? ¿Alguna sintaxis os parece demasiado confusa? ¿Alguna petición para el siguiente round?