diff --git a/apps/gateway/main/Kconfig.projbuild b/apps/gateway/main/Kconfig.projbuild index ce6411d..4877909 100644 --- a/apps/gateway/main/Kconfig.projbuild +++ b/apps/gateway/main/Kconfig.projbuild @@ -4,7 +4,7 @@ menu "DALI Settings" config GATEWAY_CHANNEL_COUNT int "Gateway channel count" - range 1 2 + range 1 16 default 2 help Number of logical DALI gateway channels exposed by the native gateway. @@ -225,6 +225,1252 @@ config GATEWAY_CHANNEL2_SERIAL_QUERY_TIMEOUT_MS endmenu +menu "Gateway Channel 3" + +config GATEWAY_CHANNEL3_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 3 + range 0 255 + default 5 + +choice GATEWAY_CHANNEL3_PHY + prompt "Channel 3 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 3 + default GATEWAY_CHANNEL3_PHY_DISABLED + +config GATEWAY_CHANNEL3_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL3_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL3_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL3_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL3_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 3 && GATEWAY_CHANNEL3_PHY_NATIVE + range 0 15 + default 2 + +config GATEWAY_CHANNEL3_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 3 && GATEWAY_CHANNEL3_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL3_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 3 && GATEWAY_CHANNEL3_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL3_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 3 && GATEWAY_CHANNEL3_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL3_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL3_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL3_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL3_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL3_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL3_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 3 && (GATEWAY_CHANNEL3_PHY_UART1 || GATEWAY_CHANNEL3_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 4" + +config GATEWAY_CHANNEL4_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 4 + range 0 255 + default 6 + +choice GATEWAY_CHANNEL4_PHY + prompt "Channel 4 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 4 + default GATEWAY_CHANNEL4_PHY_DISABLED + +config GATEWAY_CHANNEL4_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL4_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL4_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL4_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL4_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 4 && GATEWAY_CHANNEL4_PHY_NATIVE + range 0 15 + default 3 + +config GATEWAY_CHANNEL4_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 4 && GATEWAY_CHANNEL4_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL4_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 4 && GATEWAY_CHANNEL4_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL4_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 4 && GATEWAY_CHANNEL4_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL4_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL4_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL4_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL4_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL4_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL4_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 4 && (GATEWAY_CHANNEL4_PHY_UART1 || GATEWAY_CHANNEL4_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 5" + +config GATEWAY_CHANNEL5_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 5 + range 0 255 + default 7 + +choice GATEWAY_CHANNEL5_PHY + prompt "Channel 5 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 5 + default GATEWAY_CHANNEL5_PHY_DISABLED + +config GATEWAY_CHANNEL5_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL5_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL5_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL5_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL5_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 5 && GATEWAY_CHANNEL5_PHY_NATIVE + range 0 15 + default 4 + +config GATEWAY_CHANNEL5_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 5 && GATEWAY_CHANNEL5_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL5_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 5 && GATEWAY_CHANNEL5_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL5_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 5 && GATEWAY_CHANNEL5_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL5_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL5_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL5_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL5_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL5_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL5_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 5 && (GATEWAY_CHANNEL5_PHY_UART1 || GATEWAY_CHANNEL5_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 6" + +config GATEWAY_CHANNEL6_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 6 + range 0 255 + default 8 + +choice GATEWAY_CHANNEL6_PHY + prompt "Channel 6 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 6 + default GATEWAY_CHANNEL6_PHY_DISABLED + +config GATEWAY_CHANNEL6_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL6_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL6_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL6_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL6_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 6 && GATEWAY_CHANNEL6_PHY_NATIVE + range 0 15 + default 5 + +config GATEWAY_CHANNEL6_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 6 && GATEWAY_CHANNEL6_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL6_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 6 && GATEWAY_CHANNEL6_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL6_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 6 && GATEWAY_CHANNEL6_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL6_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL6_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL6_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL6_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL6_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL6_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 6 && (GATEWAY_CHANNEL6_PHY_UART1 || GATEWAY_CHANNEL6_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 7" + +config GATEWAY_CHANNEL7_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 7 + range 0 255 + default 9 + +choice GATEWAY_CHANNEL7_PHY + prompt "Channel 7 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 7 + default GATEWAY_CHANNEL7_PHY_DISABLED + +config GATEWAY_CHANNEL7_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL7_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL7_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL7_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL7_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 7 && GATEWAY_CHANNEL7_PHY_NATIVE + range 0 15 + default 6 + +config GATEWAY_CHANNEL7_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 7 && GATEWAY_CHANNEL7_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL7_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 7 && GATEWAY_CHANNEL7_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL7_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 7 && GATEWAY_CHANNEL7_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL7_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL7_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL7_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL7_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL7_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL7_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 7 && (GATEWAY_CHANNEL7_PHY_UART1 || GATEWAY_CHANNEL7_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 8" + +config GATEWAY_CHANNEL8_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 8 + range 0 255 + default 10 + +choice GATEWAY_CHANNEL8_PHY + prompt "Channel 8 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 8 + default GATEWAY_CHANNEL8_PHY_DISABLED + +config GATEWAY_CHANNEL8_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL8_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL8_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL8_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL8_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 8 && GATEWAY_CHANNEL8_PHY_NATIVE + range 0 15 + default 7 + +config GATEWAY_CHANNEL8_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 8 && GATEWAY_CHANNEL8_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL8_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 8 && GATEWAY_CHANNEL8_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL8_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 8 && GATEWAY_CHANNEL8_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL8_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL8_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL8_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL8_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL8_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL8_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 8 && (GATEWAY_CHANNEL8_PHY_UART1 || GATEWAY_CHANNEL8_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 9" + +config GATEWAY_CHANNEL9_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 9 + range 0 255 + default 11 + +choice GATEWAY_CHANNEL9_PHY + prompt "Channel 9 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 9 + default GATEWAY_CHANNEL9_PHY_DISABLED + +config GATEWAY_CHANNEL9_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL9_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL9_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL9_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL9_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 9 && GATEWAY_CHANNEL9_PHY_NATIVE + range 0 15 + default 8 + +config GATEWAY_CHANNEL9_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 9 && GATEWAY_CHANNEL9_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL9_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 9 && GATEWAY_CHANNEL9_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL9_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 9 && GATEWAY_CHANNEL9_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL9_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL9_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL9_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL9_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL9_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL9_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 9 && (GATEWAY_CHANNEL9_PHY_UART1 || GATEWAY_CHANNEL9_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 10" + +config GATEWAY_CHANNEL10_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 10 + range 0 255 + default 12 + +choice GATEWAY_CHANNEL10_PHY + prompt "Channel 10 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 10 + default GATEWAY_CHANNEL10_PHY_DISABLED + +config GATEWAY_CHANNEL10_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL10_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL10_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL10_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL10_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 10 && GATEWAY_CHANNEL10_PHY_NATIVE + range 0 15 + default 9 + +config GATEWAY_CHANNEL10_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 10 && GATEWAY_CHANNEL10_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL10_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 10 && GATEWAY_CHANNEL10_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL10_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 10 && GATEWAY_CHANNEL10_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL10_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL10_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL10_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL10_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL10_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL10_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 10 && (GATEWAY_CHANNEL10_PHY_UART1 || GATEWAY_CHANNEL10_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 11" + +config GATEWAY_CHANNEL11_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 11 + range 0 255 + default 13 + +choice GATEWAY_CHANNEL11_PHY + prompt "Channel 11 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 11 + default GATEWAY_CHANNEL11_PHY_DISABLED + +config GATEWAY_CHANNEL11_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL11_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL11_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL11_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL11_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 11 && GATEWAY_CHANNEL11_PHY_NATIVE + range 0 15 + default 10 + +config GATEWAY_CHANNEL11_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 11 && GATEWAY_CHANNEL11_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL11_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 11 && GATEWAY_CHANNEL11_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL11_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 11 && GATEWAY_CHANNEL11_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL11_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL11_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL11_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL11_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL11_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL11_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 11 && (GATEWAY_CHANNEL11_PHY_UART1 || GATEWAY_CHANNEL11_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 12" + +config GATEWAY_CHANNEL12_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 12 + range 0 255 + default 14 + +choice GATEWAY_CHANNEL12_PHY + prompt "Channel 12 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 12 + default GATEWAY_CHANNEL12_PHY_DISABLED + +config GATEWAY_CHANNEL12_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL12_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL12_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL12_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL12_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 12 && GATEWAY_CHANNEL12_PHY_NATIVE + range 0 15 + default 11 + +config GATEWAY_CHANNEL12_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 12 && GATEWAY_CHANNEL12_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL12_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 12 && GATEWAY_CHANNEL12_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL12_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 12 && GATEWAY_CHANNEL12_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL12_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL12_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL12_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL12_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL12_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL12_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 12 && (GATEWAY_CHANNEL12_PHY_UART1 || GATEWAY_CHANNEL12_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 13" + +config GATEWAY_CHANNEL13_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 13 + range 0 255 + default 15 + +choice GATEWAY_CHANNEL13_PHY + prompt "Channel 13 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 13 + default GATEWAY_CHANNEL13_PHY_DISABLED + +config GATEWAY_CHANNEL13_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL13_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL13_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL13_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL13_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 13 && GATEWAY_CHANNEL13_PHY_NATIVE + range 0 15 + default 12 + +config GATEWAY_CHANNEL13_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 13 && GATEWAY_CHANNEL13_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL13_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 13 && GATEWAY_CHANNEL13_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL13_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 13 && GATEWAY_CHANNEL13_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL13_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL13_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL13_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL13_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL13_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL13_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 13 && (GATEWAY_CHANNEL13_PHY_UART1 || GATEWAY_CHANNEL13_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 14" + +config GATEWAY_CHANNEL14_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 14 + range 0 255 + default 16 + +choice GATEWAY_CHANNEL14_PHY + prompt "Channel 14 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 14 + default GATEWAY_CHANNEL14_PHY_DISABLED + +config GATEWAY_CHANNEL14_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL14_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL14_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL14_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL14_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 14 && GATEWAY_CHANNEL14_PHY_NATIVE + range 0 15 + default 13 + +config GATEWAY_CHANNEL14_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 14 && GATEWAY_CHANNEL14_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL14_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 14 && GATEWAY_CHANNEL14_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL14_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 14 && GATEWAY_CHANNEL14_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL14_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL14_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL14_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL14_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL14_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL14_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 14 && (GATEWAY_CHANNEL14_PHY_UART1 || GATEWAY_CHANNEL14_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 15" + +config GATEWAY_CHANNEL15_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 15 + range 0 255 + default 17 + +choice GATEWAY_CHANNEL15_PHY + prompt "Channel 15 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 15 + default GATEWAY_CHANNEL15_PHY_DISABLED + +config GATEWAY_CHANNEL15_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL15_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL15_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL15_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL15_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 15 && GATEWAY_CHANNEL15_PHY_NATIVE + range 0 15 + default 14 + +config GATEWAY_CHANNEL15_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 15 && GATEWAY_CHANNEL15_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL15_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 15 && GATEWAY_CHANNEL15_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL15_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 15 && GATEWAY_CHANNEL15_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL15_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL15_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL15_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL15_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL15_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL15_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 15 && (GATEWAY_CHANNEL15_PHY_UART1 || GATEWAY_CHANNEL15_PHY_UART2) + range 10 5000 + default 500 + +endmenu + +menu "Gateway Channel 16" + +config GATEWAY_CHANNEL16_GW_ID + int "Gateway id" + depends on GATEWAY_CHANNEL_COUNT >= 16 + range 0 255 + default 18 + +choice GATEWAY_CHANNEL16_PHY + prompt "Channel 16 PHY" + depends on GATEWAY_CHANNEL_COUNT >= 16 + default GATEWAY_CHANNEL16_PHY_DISABLED + +config GATEWAY_CHANNEL16_PHY_DISABLED + bool "Disabled" + +config GATEWAY_CHANNEL16_PHY_NATIVE + bool "Native DALI GPIO" + +config GATEWAY_CHANNEL16_PHY_UART1 + bool "Serial PHY on UART1" + +config GATEWAY_CHANNEL16_PHY_UART2 + bool "Serial PHY on UART2" + +endchoice + +config GATEWAY_CHANNEL16_NATIVE_BUS_ID + int "Native DALI bus id" + depends on GATEWAY_CHANNEL_COUNT >= 16 && GATEWAY_CHANNEL16_PHY_NATIVE + range 0 15 + default 15 + +config GATEWAY_CHANNEL16_NATIVE_TX_PIN + int "Native DALI TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 16 && GATEWAY_CHANNEL16_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL16_NATIVE_RX_PIN + int "Native DALI RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 16 && GATEWAY_CHANNEL16_PHY_NATIVE + range -1 48 + default -1 + +config GATEWAY_CHANNEL16_NATIVE_BAUDRATE + int "Native DALI baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 16 && GATEWAY_CHANNEL16_PHY_NATIVE + range 400 2400 + default 1200 + +config GATEWAY_CHANNEL16_SERIAL_TX_PIN + int "Serial PHY TX pin" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL16_SERIAL_RX_PIN + int "Serial PHY RX pin" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range -1 48 + default -1 + +config GATEWAY_CHANNEL16_SERIAL_BAUDRATE + int "Serial PHY baudrate" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range 1200 921600 + default 9600 + +config GATEWAY_CHANNEL16_SERIAL_RX_BUFFER + int "Serial PHY RX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range 128 4096 + default 512 + +config GATEWAY_CHANNEL16_SERIAL_TX_BUFFER + int "Serial PHY TX buffer bytes" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range 0 4096 + default 512 + +config GATEWAY_CHANNEL16_SERIAL_QUERY_TIMEOUT_MS + int "Serial PHY query timeout ms" + depends on GATEWAY_CHANNEL_COUNT >= 16 && (GATEWAY_CHANNEL16_PHY_UART1 || GATEWAY_CHANNEL16_PHY_UART2) + range 10 5000 + default 500 + +endmenu + menu "Gateway Cache" config GATEWAY_CACHE_SUPPORTED @@ -333,7 +1579,7 @@ config GATEWAY_DALI_BAUDRATE endmenu -menu "Gateway Startup Services" +menu "Connectivity Startup" config GATEWAY_BLE_SUPPORTED bool "BLE gateway transport is supported" @@ -427,6 +1673,8 @@ config GATEWAY_ETHERNET_IGNORE_INIT_FAILURE Disable this for strict hardware bring-up where Ethernet failure should abort application startup. + endmenu + menu "Gateway Wired Ethernet" depends on GATEWAY_ETHERNET_SUPPORTED @@ -500,12 +1748,18 @@ config GATEWAY_ETHERNET_RX_TASK_STACK_SIZE endmenu +menu "Bridge Runtime" + config GATEWAY_BRIDGE_SUPPORTED bool "dali_cpp bridge runtime is supported" default y help Enables per-channel dali_cpp bridge model provisioning, execution, and protocol adapter state. +endmenu + +menu "Modbus Settings" + config GATEWAY_MODBUS_BRIDGE_SUPPORTED bool "Modbus bridge is supported" depends on GATEWAY_BRIDGE_SUPPORTED @@ -609,6 +1863,10 @@ config GATEWAY_MODBUS_SERIAL_RS485_DE_PIN range -1 48 default -1 +endmenu + +menu "BACnet Settings" + config GATEWAY_BACNET_BRIDGE_SUPPORTED bool "BACnet/IP bridge is supported" depends on GATEWAY_BRIDGE_SUPPORTED && (GATEWAY_WIFI_SUPPORTED || GATEWAY_ETHERNET_SUPPORTED) @@ -624,6 +1882,8 @@ config GATEWAY_START_BACNET_BRIDGE_ENABLED help Starts configured BACnet/IP object bindings at boot. Disabled by default so the UDP BACnet/IP port is opened only after provisioning or explicit runtime start. +endmenu + menu "KNX Settings" config GATEWAY_KNX_INSTANCE_COUNT @@ -996,6 +2256,8 @@ config GATEWAY_BRIDGE_KNX_TASK_PRIORITY endmenu +menu "Cloud Settings" + config GATEWAY_CLOUD_BRIDGE_SUPPORTED bool "MQTT cloud bridge is supported" depends on GATEWAY_BRIDGE_SUPPORTED && (GATEWAY_WIFI_SUPPORTED || GATEWAY_ETHERNET_SUPPORTED) @@ -1061,6 +2323,10 @@ config GATEWAY_CLOUD_LTE_UART_BAUDRATE range 1200 921600 default 115200 +endmenu + +menu "Bridge Task Settings" + config GATEWAY_BRIDGE_MODBUS_TASK_STACK_SIZE int "Modbus bridge task stack bytes" depends on GATEWAY_MODBUS_BRIDGE_SUPPORTED @@ -1085,6 +2351,10 @@ config GATEWAY_BRIDGE_BACNET_TASK_PRIORITY range 1 10 default 5 +endmenu + +menu "USB Setup" + choice GATEWAY_USB_STARTUP_MODE prompt "USB Serial/JTAG startup mode" default GATEWAY_USB_STARTUP_DEBUG_JTAG @@ -1102,7 +2372,7 @@ endchoice config GATEWAY_USB_SETUP_CHANNEL_INDEX int "USB setup DALI channel index" depends on GATEWAY_USB_STARTUP_SETUP_SERIAL - range 0 1 + range 0 15 default 0 help Native zero-based DALI channel used for short raw USB setup frames on the single USB stream. @@ -1125,6 +2395,10 @@ config GATEWAY_USB_SETUP_READ_TIMEOUT_MS range 1 1000 default 20 +endmenu + +menu "UART0 Control" + config GATEWAY_485_CONTROL_ENABLED bool "Enable UART0 Lua control bridge" default n diff --git a/apps/gateway/main/app_main.cpp b/apps/gateway/main/app_main.cpp index bf31ad4..9280151 100644 --- a/apps/gateway/main/app_main.cpp +++ b/apps/gateway/main/app_main.cpp @@ -12,6 +12,7 @@ #include "esp_log.h" #include "sdkconfig.h" +#include #include #include #include @@ -525,57 +526,245 @@ struct ChannelBindingConfig { bool enabled{false}; bool native_phy{false}; bool serial_phy{false}; + uint8_t channel_index{0}; uint8_t gateway_id{0}; uint8_t native_bus_id{0}; uint32_t native_baudrate{0}; + int native_tx_pin{-1}; + int native_rx_pin{-1}; int uart_port{-1}; + int serial_tx_pin{-1}; + int serial_rx_pin{-1}; + uint32_t serial_baudrate{0}; + size_t serial_rx_buffer_size{0}; + size_t serial_tx_buffer_size{0}; + uint32_t serial_query_timeout_ms{0}; }; +ChannelBindingConfig NativeChannelConfig(uint8_t channel_index, uint8_t gateway_id, + uint8_t bus_id, int tx_pin, int rx_pin, + uint32_t baudrate) { + ChannelBindingConfig channel{}; + channel.enabled = true; + channel.native_phy = true; + channel.channel_index = channel_index; + channel.gateway_id = gateway_id; + channel.native_bus_id = bus_id; + channel.native_tx_pin = tx_pin; + channel.native_rx_pin = rx_pin; + channel.native_baudrate = baudrate; + return channel; +} + +[[maybe_unused]] ChannelBindingConfig SerialChannelConfig(uint8_t channel_index, uint8_t gateway_id, + int uart_port, int tx_pin, int rx_pin, + uint32_t baudrate, size_t rx_buffer_size, + size_t tx_buffer_size, + uint32_t query_timeout_ms) { + ChannelBindingConfig channel{}; + channel.enabled = true; + channel.serial_phy = true; + channel.channel_index = channel_index; + channel.gateway_id = gateway_id; + channel.uart_port = uart_port; + channel.serial_tx_pin = tx_pin; + channel.serial_rx_pin = rx_pin; + channel.serial_baudrate = baudrate; + channel.serial_rx_buffer_size = rx_buffer_size; + channel.serial_tx_buffer_size = tx_buffer_size; + channel.serial_query_timeout_ms = query_timeout_ms; + return channel; +} + +#define GATEWAY_CONFIGURE_NATIVE_CHANNEL(slot, number) \ + channels[slot] = NativeChannelConfig( \ + static_cast(slot), static_cast(CONFIG_GATEWAY_CHANNEL##number##_GW_ID), \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_NATIVE_BUS_ID), \ + CONFIG_GATEWAY_CHANNEL##number##_NATIVE_TX_PIN, \ + CONFIG_GATEWAY_CHANNEL##number##_NATIVE_RX_PIN, \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_NATIVE_BAUDRATE)) + +#define GATEWAY_CONFIGURE_SERIAL_CHANNEL(slot, number, uart) \ + channels[slot] = SerialChannelConfig( \ + static_cast(slot), static_cast(CONFIG_GATEWAY_CHANNEL##number##_GW_ID), \ + uart, CONFIG_GATEWAY_CHANNEL##number##_SERIAL_TX_PIN, \ + CONFIG_GATEWAY_CHANNEL##number##_SERIAL_RX_PIN, \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_SERIAL_BAUDRATE), \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_SERIAL_RX_BUFFER), \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_SERIAL_TX_BUFFER), \ + static_cast(CONFIG_GATEWAY_CHANNEL##number##_SERIAL_QUERY_TIMEOUT_MS)) + +std::array BuildChannelBindings() { + std::array channels{}; + +#if CONFIG_GATEWAY_CHANNEL1_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(0, 1); +#elif CONFIG_GATEWAY_CHANNEL1_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(0, 1, 1); +#elif CONFIG_GATEWAY_CHANNEL1_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(0, 1, 2); +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 2 +#if CONFIG_GATEWAY_CHANNEL2_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(1, 2); +#elif CONFIG_GATEWAY_CHANNEL2_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(1, 2, 1); +#elif CONFIG_GATEWAY_CHANNEL2_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(1, 2, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 3 +#if CONFIG_GATEWAY_CHANNEL3_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(2, 3); +#elif CONFIG_GATEWAY_CHANNEL3_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(2, 3, 1); +#elif CONFIG_GATEWAY_CHANNEL3_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(2, 3, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 4 +#if CONFIG_GATEWAY_CHANNEL4_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(3, 4); +#elif CONFIG_GATEWAY_CHANNEL4_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(3, 4, 1); +#elif CONFIG_GATEWAY_CHANNEL4_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(3, 4, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 5 +#if CONFIG_GATEWAY_CHANNEL5_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(4, 5); +#elif CONFIG_GATEWAY_CHANNEL5_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(4, 5, 1); +#elif CONFIG_GATEWAY_CHANNEL5_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(4, 5, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 6 +#if CONFIG_GATEWAY_CHANNEL6_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(5, 6); +#elif CONFIG_GATEWAY_CHANNEL6_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(5, 6, 1); +#elif CONFIG_GATEWAY_CHANNEL6_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(5, 6, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 7 +#if CONFIG_GATEWAY_CHANNEL7_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(6, 7); +#elif CONFIG_GATEWAY_CHANNEL7_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(6, 7, 1); +#elif CONFIG_GATEWAY_CHANNEL7_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(6, 7, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 8 +#if CONFIG_GATEWAY_CHANNEL8_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(7, 8); +#elif CONFIG_GATEWAY_CHANNEL8_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(7, 8, 1); +#elif CONFIG_GATEWAY_CHANNEL8_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(7, 8, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 9 +#if CONFIG_GATEWAY_CHANNEL9_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(8, 9); +#elif CONFIG_GATEWAY_CHANNEL9_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(8, 9, 1); +#elif CONFIG_GATEWAY_CHANNEL9_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(8, 9, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 10 +#if CONFIG_GATEWAY_CHANNEL10_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(9, 10); +#elif CONFIG_GATEWAY_CHANNEL10_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(9, 10, 1); +#elif CONFIG_GATEWAY_CHANNEL10_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(9, 10, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 11 +#if CONFIG_GATEWAY_CHANNEL11_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(10, 11); +#elif CONFIG_GATEWAY_CHANNEL11_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(10, 11, 1); +#elif CONFIG_GATEWAY_CHANNEL11_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(10, 11, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 12 +#if CONFIG_GATEWAY_CHANNEL12_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(11, 12); +#elif CONFIG_GATEWAY_CHANNEL12_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(11, 12, 1); +#elif CONFIG_GATEWAY_CHANNEL12_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(11, 12, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 13 +#if CONFIG_GATEWAY_CHANNEL13_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(12, 13); +#elif CONFIG_GATEWAY_CHANNEL13_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(12, 13, 1); +#elif CONFIG_GATEWAY_CHANNEL13_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(12, 13, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 14 +#if CONFIG_GATEWAY_CHANNEL14_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(13, 14); +#elif CONFIG_GATEWAY_CHANNEL14_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(13, 14, 1); +#elif CONFIG_GATEWAY_CHANNEL14_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(13, 14, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 15 +#if CONFIG_GATEWAY_CHANNEL15_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(14, 15); +#elif CONFIG_GATEWAY_CHANNEL15_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(14, 15, 1); +#elif CONFIG_GATEWAY_CHANNEL15_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(14, 15, 2); +#endif +#endif + +#if CONFIG_GATEWAY_CHANNEL_COUNT >= 16 +#if CONFIG_GATEWAY_CHANNEL16_PHY_NATIVE + GATEWAY_CONFIGURE_NATIVE_CHANNEL(15, 16); +#elif CONFIG_GATEWAY_CHANNEL16_PHY_UART1 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(15, 16, 1); +#elif CONFIG_GATEWAY_CHANNEL16_PHY_UART2 + GATEWAY_CONFIGURE_SERIAL_CHANNEL(15, 16, 2); +#endif +#endif + + return channels; +} + bool ValidateChannelBindings() { if (k485ControlEnabled && kConsoleOnUart0) { ESP_LOGE(kTag, "485 control bridge requires moving the ESP-IDF console off UART0"); return false; } - ChannelBindingConfig channels[CONFIG_GATEWAY_CHANNEL_COUNT] = {}; - -#if CONFIG_GATEWAY_CHANNEL1_PHY_NATIVE - channels[0].enabled = true; - channels[0].native_phy = true; - channels[0].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL1_GW_ID); - channels[0].native_bus_id = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_BUS_ID); - channels[0].native_baudrate = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_BAUDRATE); -#elif CONFIG_GATEWAY_CHANNEL1_PHY_UART1 - channels[0].enabled = true; - channels[0].serial_phy = true; - channels[0].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL1_GW_ID); - channels[0].uart_port = 1; -#elif CONFIG_GATEWAY_CHANNEL1_PHY_UART2 - channels[0].enabled = true; - channels[0].serial_phy = true; - channels[0].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL1_GW_ID); - channels[0].uart_port = 2; -#endif - -#if CONFIG_GATEWAY_CHANNEL_COUNT >= 2 -#if CONFIG_GATEWAY_CHANNEL2_PHY_NATIVE - channels[1].enabled = true; - channels[1].native_phy = true; - channels[1].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL2_GW_ID); - channels[1].native_bus_id = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_BUS_ID); - channels[1].native_baudrate = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_BAUDRATE); -#elif CONFIG_GATEWAY_CHANNEL2_PHY_UART1 - channels[1].enabled = true; - channels[1].serial_phy = true; - channels[1].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL2_GW_ID); - channels[1].uart_port = 1; -#elif CONFIG_GATEWAY_CHANNEL2_PHY_UART2 - channels[1].enabled = true; - channels[1].serial_phy = true; - channels[1].gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL2_GW_ID); - channels[1].uart_port = 2; -#endif -#endif + const auto channels = BuildChannelBindings(); bool any_enabled = false; bool saw_native = false; @@ -586,6 +775,11 @@ bool ValidateChannelBindings() { continue; } any_enabled = true; + if (channels[i].native_phy && + (channels[i].native_tx_pin < 0 || channels[i].native_rx_pin < 0)) { + ESP_LOGE(kTag, "native DALI channel %d requires TX and RX GPIO pins", i + 1); + return false; + } for (int j = i + 1; j < CONFIG_GATEWAY_CHANNEL_COUNT; ++j) { if (!channels[j].enabled) { continue; @@ -695,83 +889,43 @@ bool ValidateChannelBindings() { esp_err_t BindConfiguredChannels(gateway::DaliDomainService& dali_domain, const gateway::GatewayRuntime& runtime) { -#if CONFIG_GATEWAY_CHANNEL1_PHY_NATIVE - gateway::DaliHardwareBusConfig channel1{}; - channel1.channel_index = 0; - channel1.gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL1_GW_ID); - channel1.bus_id = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_BUS_ID); - channel1.tx_pin = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_TX_PIN); - channel1.rx_pin = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_RX_PIN); - channel1.baudrate = static_cast(CONFIG_GATEWAY_CHANNEL1_NATIVE_BAUDRATE); - channel1.name = runtime.gatewayName(channel1.gateway_id); - esp_err_t err = dali_domain.bindHardwareBus(channel1); - LogBindError("channel1 native DALI", err); - if (err != ESP_OK) { - return err; + for (const auto& channel : BuildChannelBindings()) { + if (!channel.enabled) { + continue; + } + if (channel.native_phy) { + gateway::DaliHardwareBusConfig config{}; + config.channel_index = channel.channel_index; + config.gateway_id = channel.gateway_id; + config.bus_id = channel.native_bus_id; + config.tx_pin = static_cast(channel.native_tx_pin); + config.rx_pin = static_cast(channel.native_rx_pin); + config.baudrate = channel.native_baudrate; + config.name = runtime.gatewayName(config.gateway_id); + const esp_err_t err = dali_domain.bindHardwareBus(config); + LogBindError(config.name.c_str(), err); + if (err != ESP_OK) { + return err; + } + } else if (channel.serial_phy) { + gateway::DaliSerialBusConfig config{}; + config.channel_index = channel.channel_index; + config.gateway_id = channel.gateway_id; + config.uart_port = channel.uart_port; + config.tx_pin = channel.serial_tx_pin; + config.rx_pin = channel.serial_rx_pin; + config.baudrate = channel.serial_baudrate; + config.rx_buffer_size = channel.serial_rx_buffer_size; + config.tx_buffer_size = channel.serial_tx_buffer_size; + config.query_timeout_ms = channel.serial_query_timeout_ms; + config.name = runtime.gatewayName(config.gateway_id); + const esp_err_t err = dali_domain.bindSerialBus(config); + LogBindError(config.name.c_str(), err); + if (err != ESP_OK) { + return err; + } + } } -#elif CONFIG_GATEWAY_CHANNEL1_PHY_UART1 || CONFIG_GATEWAY_CHANNEL1_PHY_UART2 - gateway::DaliSerialBusConfig channel1{}; - channel1.channel_index = 0; - channel1.gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL1_GW_ID); -#if CONFIG_GATEWAY_CHANNEL1_PHY_UART1 - channel1.uart_port = 1; -#else - channel1.uart_port = 2; -#endif - channel1.tx_pin = CONFIG_GATEWAY_CHANNEL1_SERIAL_TX_PIN; - channel1.rx_pin = CONFIG_GATEWAY_CHANNEL1_SERIAL_RX_PIN; - channel1.baudrate = static_cast(CONFIG_GATEWAY_CHANNEL1_SERIAL_BAUDRATE); - channel1.rx_buffer_size = static_cast(CONFIG_GATEWAY_CHANNEL1_SERIAL_RX_BUFFER); - channel1.tx_buffer_size = static_cast(CONFIG_GATEWAY_CHANNEL1_SERIAL_TX_BUFFER); - channel1.query_timeout_ms = - static_cast(CONFIG_GATEWAY_CHANNEL1_SERIAL_QUERY_TIMEOUT_MS); - channel1.name = runtime.gatewayName(channel1.gateway_id); - esp_err_t err1 = dali_domain.bindSerialBus(channel1); - LogBindError("channel1 serial DALI", err1); - if (err1 != ESP_OK) { - return err1; - } -#endif - -#if CONFIG_GATEWAY_CHANNEL_COUNT >= 2 -#if CONFIG_GATEWAY_CHANNEL2_PHY_NATIVE - gateway::DaliHardwareBusConfig channel2{}; - channel2.channel_index = 1; - channel2.gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL2_GW_ID); - channel2.bus_id = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_BUS_ID); - channel2.tx_pin = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_TX_PIN); - channel2.rx_pin = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_RX_PIN); - channel2.baudrate = static_cast(CONFIG_GATEWAY_CHANNEL2_NATIVE_BAUDRATE); - channel2.name = runtime.gatewayName(channel2.gateway_id); - esp_err_t err2 = dali_domain.bindHardwareBus(channel2); - LogBindError("channel2 native DALI", err2); - if (err2 != ESP_OK) { - return err2; - } -#elif CONFIG_GATEWAY_CHANNEL2_PHY_UART1 || CONFIG_GATEWAY_CHANNEL2_PHY_UART2 - gateway::DaliSerialBusConfig channel2{}; - channel2.channel_index = 1; - channel2.gateway_id = static_cast(CONFIG_GATEWAY_CHANNEL2_GW_ID); -#if CONFIG_GATEWAY_CHANNEL2_PHY_UART1 - channel2.uart_port = 1; -#else - channel2.uart_port = 2; -#endif - channel2.tx_pin = CONFIG_GATEWAY_CHANNEL2_SERIAL_TX_PIN; - channel2.rx_pin = CONFIG_GATEWAY_CHANNEL2_SERIAL_RX_PIN; - channel2.baudrate = static_cast(CONFIG_GATEWAY_CHANNEL2_SERIAL_BAUDRATE); - channel2.rx_buffer_size = static_cast(CONFIG_GATEWAY_CHANNEL2_SERIAL_RX_BUFFER); - channel2.tx_buffer_size = static_cast(CONFIG_GATEWAY_CHANNEL2_SERIAL_TX_BUFFER); - channel2.query_timeout_ms = - static_cast(CONFIG_GATEWAY_CHANNEL2_SERIAL_QUERY_TIMEOUT_MS); - channel2.name = runtime.gatewayName(channel2.gateway_id); - esp_err_t err2 = dali_domain.bindSerialBus(channel2); - LogBindError("channel2 serial DALI", err2); - if (err2 != ESP_OK) { - return err2; - } -#endif -#endif return ESP_OK; } @@ -880,18 +1034,11 @@ extern "C" void app_main(void) { static_cast(CONFIG_GATEWAY_BRIDGE_MODBUS_TASK_PRIORITY); bridge_config.allow_modbus_uart0 = kModbusAllowUart0 && !kConsoleOnUart0 && !k485ControlEnabled; bridge_config.allow_knx_uart0 = !kConsoleOnUart0 && !k485ControlEnabled; - #if CONFIG_GATEWAY_CHANNEL1_PHY_UART1 - bridge_config.reserved_uart_ports.push_back(1); - #elif CONFIG_GATEWAY_CHANNEL1_PHY_UART2 - bridge_config.reserved_uart_ports.push_back(2); - #endif - #if CONFIG_GATEWAY_CHANNEL_COUNT >= 2 - #if CONFIG_GATEWAY_CHANNEL2_PHY_UART1 - bridge_config.reserved_uart_ports.push_back(1); - #elif CONFIG_GATEWAY_CHANNEL2_PHY_UART2 - bridge_config.reserved_uart_ports.push_back(2); - #endif - #endif + for (const auto& channel : BuildChannelBindings()) { + if (channel.enabled && channel.serial_phy) { + bridge_config.reserved_uart_ports.push_back(channel.uart_port); + } + } if (kModbusBridgeSupported) { gateway::GatewayModbusConfig default_modbus; #if defined(CONFIG_GATEWAY_MODBUS_DEFAULT_TRANSPORT_RTU) diff --git a/apps/gateway/sdkconfig b/apps/gateway/sdkconfig index 0e081a9..e45be5b 100644 --- a/apps/gateway/sdkconfig +++ b/apps/gateway/sdkconfig @@ -605,7 +605,7 @@ CONFIG_GATEWAY_CHANNEL_COUNT=2 # # Gateway Channel 1 # -CONFIG_GATEWAY_CHANNEL1_GW_ID=3 +CONFIG_GATEWAY_CHANNEL1_GW_ID=0 # CONFIG_GATEWAY_CHANNEL1_PHY_DISABLED is not set CONFIG_GATEWAY_CHANNEL1_PHY_NATIVE=y # CONFIG_GATEWAY_CHANNEL1_PHY_UART1 is not set diff --git a/apps/gateway/sdkconfig.old b/apps/gateway/sdkconfig.old index 9944e6c..0d5c434 100644 --- a/apps/gateway/sdkconfig.old +++ b/apps/gateway/sdkconfig.old @@ -696,7 +696,7 @@ CONFIG_GATEWAY_KNX_INSTANCE_COUNT=1 CONFIG_GATEWAY_KNX_BRIDGE_SUPPORTED=y CONFIG_GATEWAY_START_KNX_BRIDGE_ENABLED=y CONFIG_GATEWAY_KNX_DATA_SECURE_SUPPORTED=y -# CONFIG_GATEWAY_KNX_IP_SECURE_SUPPORTED is not set +CONFIG_GATEWAY_KNX_IP_SECURE_SUPPORTED=y CONFIG_GATEWAY_KNX_SECURITY_DEV_ENDPOINTS=y CONFIG_GATEWAY_KNX_SECURITY_PLAIN_NVS=y CONFIG_GATEWAY_KNX_OEM_MANUFACTURER_ID=0x01e5 @@ -712,7 +712,16 @@ CONFIG_GATEWAY_KNX_UDP_PORT=3671 CONFIG_GATEWAY_KNX_MULTICAST_ADDRESS="224.0.23.12" CONFIG_GATEWAY_KNX_IP_INTERFACE_INDIVIDUAL_ADDRESS=65281 CONFIG_GATEWAY_KNX_INDIVIDUAL_ADDRESS=65534 -# CONFIG_GATEWAY_KNX_OAM_ROUTER_SUPPORTED is not set +CONFIG_GATEWAY_KNX_OAM_ROUTER_SUPPORTED=y +CONFIG_GATEWAY_KNX_OAM_ROUTER_ENABLED=y +CONFIG_GATEWAY_KNX_OAM_ROUTER_OEM_MANUFACTURER_ID=0x00FA +CONFIG_GATEWAY_KNX_OAM_ROUTER_HARDWARE_ID=0x0001 +CONFIG_GATEWAY_KNX_OAM_ROUTER_APPLICATION_NUMBER=0xA11F +CONFIG_GATEWAY_KNX_OAM_ROUTER_APPLICATION_VERSION=0x07 +CONFIG_GATEWAY_KNX_OAM_ROUTER_INDIVIDUAL_ADDRESS=65282 +CONFIG_GATEWAY_KNX_OAM_ROUTER_TUNNEL_ADDRESS_BASE=65296 +CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO=-1 +CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO=-1 CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO=0 CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_ACTIVE_LOW=y CONFIG_GATEWAY_KNX_PROGRAMMING_LED_GPIO=10 diff --git a/components/gateway_bridge/src/gateway_bridge.cpp b/components/gateway_bridge/src/gateway_bridge.cpp index c435818..3d3f24a 100644 --- a/components/gateway_bridge/src/gateway_bridge.cpp +++ b/components/gateway_bridge/src/gateway_bridge.cpp @@ -16,6 +16,7 @@ #include "gateway_modbus.hpp" #include "gateway_provisioning.hpp" #include "log.hpp" +#include "esp_idf_platform.h" #include "security_storage.h" #include "cJSON.h" @@ -25,7 +26,6 @@ #endif #include "esp_log.h" #include "nvs.h" -#include "nvs_flash.h" #include "sdkconfig.h" #include "freertos/semphr.h" #include "lwip/inet.h" @@ -415,32 +415,11 @@ std::optional QueryKnxInstanceId(std::string_view query) { return ValidKnxInstanceId(QueryInt(query, "instanceId", "instance").value_or(0)); } -bool EnsureBridgeNvsReady() { - const esp_err_t err = nvs_flash_init(); - if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) { - if (nvs_flash_erase() != ESP_OK) { - return false; - } - return nvs_flash_init() == ESP_OK; - } - return err == ESP_OK || err == ESP_ERR_INVALID_STATE; -} - -bool EraseOpenKnxEeprom(const std::string& nvs_namespace) { - if (nvs_namespace.empty() || !EnsureBridgeNvsReady()) { +bool EraseOpenKnxRuntimeData(const std::string& nvs_namespace) { + if (nvs_namespace.empty()) { return false; } - nvs_handle_t handle = 0; - esp_err_t err = nvs_open(nvs_namespace.c_str(), NVS_READWRITE, &handle); - if (err != ESP_OK) { - return err == ESP_ERR_NVS_NOT_FOUND; - } - err = nvs_erase_key(handle, "eeprom"); - if (err == ESP_OK) { - err = nvs_commit(handle); - } - nvs_close(handle); - return err == ESP_OK || err == ESP_ERR_NVS_NOT_FOUND; + return openknx::EraseOpenKnxPropertyStorage(nvs_namespace); } std::optional JsonIntAny(const cJSON* parent, const char* primary, const char* fallback) { @@ -4975,7 +4954,7 @@ GatewayBridgeHttpResponse GatewayBridgeService::handlePost( if (instance_id.value() != 0) { nvs_namespace += "_" + std::to_string(instance_id.value()); } - if (!EraseOpenKnxEeprom(nvs_namespace)) { + if (!EraseOpenKnxRuntimeData(nvs_namespace)) { return ErrorResponse(ESP_FAIL, "failed to erase KNX runtime data"); } diff --git a/components/gateway_controller/src/gateway_controller.cpp b/components/gateway_controller/src/gateway_controller.cpp index 5674325..a259693 100644 --- a/components/gateway_controller/src/gateway_controller.cpp +++ b/components/gateway_controller/src/gateway_controller.cpp @@ -742,6 +742,14 @@ void GatewayController::dispatchCommand(const std::vector& command) { const uint8_t opcode = command[3]; const uint8_t addr = command[4]; const uint8_t data = command[5]; + if (opcode == 0x09 && addr == 0x00) { + const auto ids = gatewayIds(); + const auto count = std::min(ids.size(), 16); + std::vector payload{0x09, static_cast(count)}; + payload.insert(payload.end(), ids.begin(), ids.begin() + count); + publishPayload(gateway_id, payload); + return; + } if (!hasGateway(gateway_id)) { ESP_LOGW(kTag, "command for unknown gateway=%u opcode=0x%02x", gateway_id, opcode); return; diff --git a/components/gateway_knx/include/gateway_knx_internal.h b/components/gateway_knx/include/gateway_knx_internal.h index a63278e..e6e0acd 100644 --- a/components/gateway_knx/include/gateway_knx_internal.h +++ b/components/gateway_knx/include/gateway_knx_internal.h @@ -72,8 +72,9 @@ inline constexpr uint8_t kReg1DaliProgramVersion[5] = { static_cast(kReg1DaliApplicationNumber & 0xff), kReg1DaliApplicationVersion}; +inline constexpr uint32_t kDaliMaxKnxInstanceCount = 16; inline constexpr uint32_t kReg1DaliSerialMacIncrement = 0; -inline constexpr uint32_t kOamRouterSerialMacIncrement = 1; +inline constexpr uint32_t kOamRouterSerialMacIncrement = kDaliMaxKnxInstanceCount; inline constexpr uint16_t kOamRouterDeviceDescriptor = 0x091A; inline constexpr uint16_t kOamRouterManufacturerId = static_cast(CONFIG_GATEWAY_KNX_OAM_ROUTER_OEM_MANUFACTURER_ID); diff --git a/knx b/knx index d2bdeb1..ae36452 160000 --- a/knx +++ b/knx @@ -1 +1 @@ -Subproject commit d2bdeb14b655cb659b78e798464e3e59e8da2e22 +Subproject commit ae3645239f917e5b8fe036b3aeb2df30417f5f6d