From 212c3e62974b313e9300a2cb70ca33463183531d Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sun, 28 Mar 2021 23:57:33 -0500 Subject: [PATCH] Add universe_size field to E1.31 configuration to set number of channels per universe --- Controllers/E131Controller/E131ControllerDetect.cpp | 6 ++++++ Controllers/E131Controller/RGBController_E131.cpp | 13 ++++++++----- Controllers/E131Controller/RGBController_E131.h | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Controllers/E131Controller/E131ControllerDetect.cpp b/Controllers/E131Controller/E131ControllerDetect.cpp index 072bdc1c..ce3e4cb6 100644 --- a/Controllers/E131Controller/E131ControllerDetect.cpp +++ b/Controllers/E131Controller/E131ControllerDetect.cpp @@ -52,6 +52,7 @@ void DetectE131Controllers(std::vector &rgb_controllers) dev.matrix_height = 0; dev.start_channel = 1; dev.start_universe = 1; + dev.universe_size = 512; if(e131_settings["devices"][device_idx].contains("name")) { @@ -164,6 +165,11 @@ void DetectE131Controllers(std::vector &rgb_controllers) dev.matrix_height = e131_settings["devices"][device_idx]["matrix_height"]; } + if(e131_settings["devices"][device_idx].contains("universe_size")) + { + dev.universe_size = e131_settings["devices"][device_idx]["universe_size"]; + } + if(e131_settings["devices"][device_idx].contains("type")) { std::string type_val = e131_settings["devices"][device_idx]["type"]; diff --git a/Controllers/E131Controller/RGBController_E131.cpp b/Controllers/E131Controller/RGBController_E131.cpp index ceecdc65..3ca7d91f 100644 --- a/Controllers/E131Controller/RGBController_E131.cpp +++ b/Controllers/E131Controller/RGBController_E131.cpp @@ -56,7 +56,8 @@ RGBController_E131::RGBController_E131(std::vector device_list) for(unsigned int device_idx = 0; device_idx < devices.size(); device_idx++) { - unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / 512.0f ); + float universe_size = devices[device_idx].universe_size; + unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / universe_size ); for(unsigned int univ_idx = 0; univ_idx < total_universes; univ_idx++) { @@ -141,7 +142,8 @@ RGBController_E131::RGBController_E131(std::vector device_list) /*-----------------------------------------*\ | Add Universes | \*-----------------------------------------*/ - unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / 512.0f ); + float universe_size = devices[device_idx].universe_size; + unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / universe_size ); for (unsigned int univ_idx = 0; univ_idx < total_universes; univ_idx++) { @@ -161,7 +163,7 @@ RGBController_E131::RGBController_E131(std::vector device_list) e131_packet_t packet; e131_addr_t dest_addr; - e131_pkt_init(&packet, universe, 512); + e131_pkt_init(&packet, universe, universe_size); if(multicast) { @@ -363,7 +365,8 @@ void RGBController_E131::DeviceUpdateLEDs() for(std::size_t device_idx = 0; device_idx < devices.size(); device_idx++) { - unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / 512.0f ); + float universe_size = devices[device_idx].universe_size; + unsigned int total_universes = ceil( ( ( devices[device_idx].num_leds * 3 ) + devices[device_idx].start_channel ) / universe_size ); unsigned int channel_idx = devices[device_idx].start_channel; unsigned int led_idx = 0; unsigned int rgb_idx = 0; @@ -377,7 +380,7 @@ void RGBController_E131::DeviceUpdateLEDs() { if(!done && (universes[packet_idx] == universe)) { - while(!done && (channel_idx <= 512)) + while(!done && (channel_idx <= universe_size)) { switch(rgb_idx) { diff --git a/Controllers/E131Controller/RGBController_E131.h b/Controllers/E131Controller/RGBController_E131.h index 94c41839..3cd06c3d 100644 --- a/Controllers/E131Controller/RGBController_E131.h +++ b/Controllers/E131Controller/RGBController_E131.h @@ -51,6 +51,7 @@ struct E131Device zone_type type; unsigned int matrix_width; unsigned int matrix_height; + unsigned int universe_size; e131_matrix_order matrix_order; };