@@ -108,7 +108,7 @@ impl ArtNetInterface {
108108 match c {
109109 ChannelWithResolution :: LoRes ( single_channel) => {
110110 let target_channel =
111- ( * single_channel + f. start_channel - 1 ) as usize ;
111+ ( * single_channel - 1 + f. start_channel - 1 ) as usize ;
112112 let scaled_value = ( ( control_macro. current_value as f32
113113 / u16:: MAX as f32 )
114114 * 255.0 )
@@ -120,15 +120,17 @@ impl ArtNetInterface {
120120 control_macro. current_value,
121121 scaled_value
122122 ) ;
123- self . channels [ target_channel - 1 ] = scaled_value;
123+ self . channels [ target_channel] = scaled_value;
124124 }
125125 ChannelWithResolution :: HiRes ( ( c1, c2) ) => {
126126 // Assume coarse+fine 16-bit values are "big endian" (be):
127127 let [ b1, b2] = control_macro. current_value . to_be_bytes ( ) ;
128128 // coarse channel:
129- self . channels [ ( * c1 + f. start_channel - 2 ) as usize ] = b1;
129+ self . channels [ ( * c1 - 1 + f. start_channel - 1 ) as usize ] =
130+ b1;
130131 // fine channel:
131- self . channels [ ( * c2 + f. start_channel - 2 ) as usize ] = b2;
132+ self . channels [ ( * c2 - 1 + f. start_channel - 1 ) as usize ] =
133+ b2;
132134 }
133135 }
134136 }
@@ -146,21 +148,24 @@ impl ArtNetInterface {
146148 // Convert all rgb values from "opaque" version (ignoring alpha)
147149 let opaque = colour_macro. current_value . to_opaque ( ) ;
148150 for c in red. iter ( ) {
149- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. r ( ) ;
151+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
152+ opaque. r ( ) ;
150153 }
151154 for c in green. iter ( ) {
152- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. g ( ) ;
155+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
156+ opaque. g ( ) ;
153157 }
154158 for c in blue. iter ( ) {
155- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. b ( ) ;
159+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
160+ opaque. b ( ) ;
156161 }
157162
158163 // Use inverse of alpha for "white mix" , i.e.
159164 // alpha = 100% => full saturation, no white
160165 // alpha = 0% => RGB the same, but mix in full white
161166 let white_inverse = 255 - colour_macro. current_value . a ( ) ;
162167 for c in white. iter ( ) {
163- self . channels [ ( * c + f. start_channel ) as usize ] =
168+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
164169 white_inverse;
165170 }
166171 }
@@ -178,15 +183,18 @@ impl ArtNetInterface {
178183 let opaque = colour_macro. current_value . to_opaque ( ) ;
179184
180185 for channel in cyan. iter ( ) {
181- self . channels [ ( * channel + f. start_channel ) as usize ] =
186+ self . channels
187+ [ ( * channel - 1 + f. start_channel - 1 ) as usize ] =
182188 255 - opaque. r ( ) ;
183189 }
184190 for channel in magenta. iter ( ) {
185- self . channels [ ( * channel + f. start_channel ) as usize ] =
191+ self . channels
192+ [ ( * channel - 1 + f. start_channel - 1 ) as usize ] =
186193 255 - opaque. g ( ) ;
187194 }
188195 for channel in yellow. iter ( ) {
189- self . channels [ ( * channel + f. start_channel ) as usize ] =
196+ self . channels
197+ [ ( * channel - 1 + f. start_channel - 1 ) as usize ] =
190198 255 - opaque. b ( ) ;
191199 }
192200 }
@@ -217,13 +225,16 @@ impl ArtNetInterface {
217225 // Convert all rgb values from "opaque" version (ignoring alpha)
218226 let opaque = colour_macro. current_value . to_opaque ( ) ;
219227 for c in red. iter ( ) {
220- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. r ( ) ;
228+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
229+ opaque. r ( ) ;
221230 }
222231 for c in green. iter ( ) {
223- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. g ( ) ;
232+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
233+ opaque. g ( ) ;
224234 }
225235 for c in blue. iter ( ) {
226- self . channels [ ( * c + f. start_channel ) as usize ] = opaque. b ( ) ;
236+ self . channels [ ( * c - 1 + f. start_channel - 1 ) as usize ] =
237+ opaque. b ( ) ;
227238 }
228239 // Ignore lime, since we don't represent it in standard colour macros
229240 }
0 commit comments