@@ -164,35 +164,35 @@ def resize(self, size: int):
164164 self .update ()
165165
166166
167+
167168class Device (utils .RGBContainer ):
168- '''
169+ """
169170 A class to represent an RGB Device
170- '''
171+ """
171172
172- def __init__ (self , data : utils .ControllerData , device_id : int , network_client : NetworkClient ):
173+ def __init__ (self , data :utils .ControllerData , device_id : int , network_client : NetworkClient ):
173174 self .leds : list [LED ] = [None for i in data .leds ] # type: ignore
174175 self .zones : list [Zone ] = [None for i in data .zones ] # type: ignore
175176 self .id = device_id
176177 self .device_id = device_id
177178 self .comms = network_client
179+ self .enabled = True
178180 self ._update (data )
179181
180- def _update (self , data : utils .ControllerData ):
182+ def _update (self , data :utils .ControllerData ):
181183 self .name = data .name
182184 self .metadata = data .metadata
183185 self .type = data .device_type
184186 if len (self .leds ) != len (data .leds ):
185187 self .leds = [None for i in data .leds ] # type: ignore
186188 for x in range (len (data .leds )):
187189 if self .leds [x ] is None :
188- self .leds [x ] = LED (data .leds [x ], data .colors [x ],
189- x , self .device_id , self .comms )
190+ self .leds [x ] = LED (data .leds [x ], data .colors [x ], x , self .device_id , self .comms )
190191 else :
191192 self .leds [x ]._update (data .leds [x ], data .colors [x ])
192193 for x in range (len (data .zones )):
193194 if self .zones [x ] is None :
194- self .zones [x ] = Zone (
195- data .zones [x ], x , self .device_id , self .comms )
195+ self .zones [x ] = Zone (data .zones [x ], x , self .device_id , self .comms )
196196 else :
197197 self .zones [x ]._update (data .zones [x ]) # type: ignore
198198 self .modes = data .modes
@@ -201,165 +201,155 @@ def _update(self, data: utils.ControllerData):
201201 self .active_mode = data .active_mode
202202 self .data = data
203203
204- def _set_device_color (self , color : utils .RGBColor , fast : bool = False ):
205- '''
204+ def _set_device_color (self , color :utils .RGBColor , fast : bool = False ):
205+ """
206206 Sets the device's color
207207
208208 :param color: the color to set the LED(s) to
209209 :param fast: If you care more about quickly setting colors than having correct internal state data, then set :code:`fast` to :code:`True`
210- '''
211- self .comms .send_header (
212- self .id ,
213- utils .PacketType .RGBCONTROLLER_UPDATELEDS ,
214- struct .calcsize (f"IH{ 3 * (len (self .leds ))} b{ len (self .leds )} x" )
215- )
216- buff = struct .pack ("H" , len (self .leds )) + (color .pack ())* len (self .leds )
217- buff = struct .pack ("I" , len (buff ) + struct .calcsize ("I" )) + buff
218- self .comms .send_data (buff )
219- if not fast :
220- self .update ()
210+ """
211+ if self .enabled :
212+ self .comms .send_header (
213+ self .id ,
214+ utils .PacketType .RGBCONTROLLER_UPDATELEDS ,
215+ struct .calcsize (f"IH{ 3 * (len (self .leds ))} b{ len (self .leds )} x" ),
216+ )
217+ buff = struct .pack ("H" , len (self .leds )) + (color .pack ()) * len (self .leds )
218+ buff = struct .pack ("I" , len (buff ) + struct .calcsize ("I" )) + buff
219+ self .comms .send_data (buff )
220+ if not fast :
221+ self .update ()
221222
222223 def _set_device_colors (self , colors : list [utils .RGBColor ], fast : bool = False ):
223- '''
224+ """
224225 Sets the devices LEDs' colors
225226
226227 :param colors: the list of colors, one per LED
227228 :param fast: If you care more about quickly setting colors than having correct internal state data, then set :code:`fast` to :code:`True`
228- '''
229- if len ( colors ) != len ( self .leds ) :
230- raise IndexError ( "Number of colors doesn't match number of LEDs" )
231- self . comms . send_header (
232- self .id ,
233- utils . PacketType . RGBCONTROLLER_UPDATELEDS ,
234- struct . calcsize ( f"IH { 3 * ( len ( self . leds )) } b { len ( self . leds ) } x" )
235- )
236- buff = struct . pack ( "H" , len ( self . leds )) + \
237- b'' .join ((color .pack () for color in colors ))
238- buff = struct .pack ("I" , len (buff ) + struct .calcsize ("I" )) + buff
239- self .comms .send_data (buff )
240- if not fast :
241- self .update ()
242-
243- def _set_mode_color (self , color : utils .RGBColor ):
244- '''
229+ """
230+ if self .enabled :
231+ if len ( colors ) != len ( self . leds ):
232+ raise IndexError ( "Number of colors doesn't match number of LEDs" )
233+ self .comms . send_header (
234+ self . id ,
235+ utils . PacketType . RGBCONTROLLER_UPDATELEDS ,
236+ struct . calcsize ( f"IH { 3 * ( len ( self . leds )) } b { len ( self . leds ) } x" ),
237+ )
238+ buff = struct . pack ( "H" , len ( self . leds )) + b"" .join ((color .pack () for color in colors ))
239+ buff = struct .pack ("I" , len (buff ) + struct .calcsize ("I" )) + buff
240+ self .comms .send_data (buff )
241+ if not fast :
242+ self .update ()
243+
244+ def _set_mode_color (self , color :utils .RGBColor ):
245+ """
245246 Sets the mode-specific color, if possible
246247
247248 :param color: the color to set the LED(s) to
248- '''
249- active_mode = self .modes [self .active_mode ]
250- assert active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC
251- assert active_mode .colors is not None
252- active_mode .colors = [color ]* active_mode .colors_max # type: ignore
253- self .set_mode (active_mode )
249+ """
250+ if self .enabled :
251+ active_mode = self .modes [self .active_mode ]
252+ assert active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC
253+ assert active_mode .colors is not None
254+ active_mode .colors = [color ] * active_mode .colors_max # type: ignore
255+ self .set_mode (active_mode )
254256
255257 def _set_mode_colors (self , colors : list [utils .RGBColor ]):
256- '''
258+ """
257259 Sets the mode-specific color, if possible
258260
259261 :param color: the color to set the LED(s) to
260- '''
261- active_mode = self .modes [ self . active_mode ]
262- assert active_mode . color_mode == utils . ModeColors . MODE_SPECIFIC
263- assert active_mode .colors is not None
264- assert active_mode . colors_min <= len ( # type: ignore
265- colors ) <= active_mode .colors_max
266- active_mode .colors = colors
267- self .set_mode (active_mode )
268-
269- def set_color (self , color : utils .RGBColor , fast : bool = False ):
270- '''
262+ """
263+ if self .enabled :
264+ active_mode = self . modes [ self . active_mode ]
265+ assert active_mode .color_mode == utils . ModeColors . MODE_SPECIFIC
266+ assert active_mode . colors is not None
267+ assert active_mode . colors_min <= len ( colors ) <= active_mode .colors_max # type: ignore
268+ active_mode .colors = colors
269+ self .set_mode (active_mode )
270+
271+ def set_color (self , color :utils .RGBColor , fast : bool = False ):
272+ """
271273 Sets the color of the device whether the current mode is per-led or
272274 mode-specific
273275
274276 :param colors: the list of colors, one per LED
275277 :param fast: If you care more about quickly setting colors than having correct internal state data, then set :code:`fast` to :code:`True` (only applies when not setting a mode-specific color)
276- '''
277- active_mode = self .modes [self .active_mode ]
278- if active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC :
279- self ._set_mode_color (color )
280- elif active_mode .color_mode == utils .ModeColors .PER_LED :
281- self ._set_device_color (color , fast )
278+ """
279+ if self .enabled :
280+ active_mode = self .modes [self .active_mode ]
281+ if active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC :
282+ self ._set_mode_color (color )
283+ elif active_mode .color_mode == utils .ModeColors .PER_LED :
284+ self ._set_device_color (color , fast )
282285
283286 def set_colors (self , colors : list [utils .RGBColor ], fast : bool = False ):
284- '''
287+ """
285288 Sets the colors of the device whether the current mode is per-led or
286289 mode-specific
287290
288291 :param colors: the list of colors, one per LED or per mode-specific color
289292 :param fast: If you care more about quickly setting colors than having correct internal state data, then set :code:`fast` to :code:`True` (only applies when not setting a mode-specific color)
290- '''
291- active_mode = self .modes [self .active_mode ]
292- if active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC :
293- self ._set_mode_colors (colors )
294- elif active_mode .color_mode == utils .ModeColors .PER_LED :
295- self ._set_device_colors (colors , fast )
296-
297- def set_mode (self , mode : Union [str , int , utils .ModeData ], save : bool = False ):
298- '''
293+ """
294+ if self .enabled :
295+ active_mode = self .modes [self .active_mode ]
296+ if active_mode .color_mode == utils .ModeColors .MODE_SPECIFIC :
297+ self ._set_mode_colors (colors )
298+ elif active_mode .color_mode == utils .ModeColors .PER_LED :
299+ self ._set_device_colors (colors , fast )
300+
301+ def set_mode (self , mode : Union [str , int ,utils .ModeData ], save : bool = False ):
302+ """
299303 Sets the device's mode
300304
301- :param mode: the name, id, or the ModeData object itself to set as the mode
302- '''
303- if isinstance (mode , str ):
304- try :
305- mode = next (
306- (m for m in self .modes if m .name .lower () == mode .lower ()))
307- except StopIteration as e :
308- raise ValueError (
309- f"Mode `{ mode } ` not found for device `{ self .name } `" ) from e
310- elif isinstance (mode , int ):
311- mode = self .modes [mode ]
312- elif isinstance (mode , utils .ModeData ):
313- pass
314- else :
315- raise TypeError ()
316- data = mode .pack (self .comms ._protocol_version ) # type: ignore
317- self .comms .send_header (
318- self .id ,
319- utils .PacketType .RGBCONTROLLER_UPDATEMODE ,
320- len (data )
321- )
322- self .comms .send_data (data )
323- if save :
324- self .comms .send_header (
325- self .id ,
326- utils .PacketType .RGBCONTROLLER_SAVEMODE ,
327- len (data )
328- )
305+ :param mode: the name, id, or theutils.ModeData object itself to set as the mode
306+ """
307+ if self .enabled :
308+ if isinstance (mode , str ):
309+ try :
310+ mode = next ((m for m in self .modes if m .name .lower () == mode .lower ()))
311+ except StopIteration as e :
312+ raise ValueError (f"Mode `{ mode } ` not found for device `{ self .name } `" ) from e
313+ elif isinstance (mode , int ):
314+ mode = self .modes [mode ]
315+ elif isinstance (mode ,utils .ModeData ):
316+ pass
317+ else :
318+ raise TypeError ()
319+ data = mode .pack (self .comms ._protocol_version ) # type: ignore
320+ self .comms .send_header (self .id ,utils .PacketType .RGBCONTROLLER_UPDATEMODE , len (data ))
329321 self .comms .send_data (data )
330- self .update ()
322+ if save :
323+ self .comms .send_header (self .id ,utils .PacketType .RGBCONTROLLER_SAVEMODE , len (data ))
324+ self .comms .send_data (data )
325+ self .update ()
331326
332327 def set_custom_mode (self ):
333- '''
328+ """
334329 Sets the mode to whatever the device supports that provides the most
335330 granular control
336- '''
337- self .comms .send_header (
338- self .id ,
339- utils .PacketType .RGBCONTROLLER_SETCUSTOMMODE ,
340- 0
341- )
342- self .update ()
343- self .set_mode (self .active_mode )
331+ """
332+ if self .enabled :
333+ self .comms .send_header (self .id ,utils .PacketType .RGBCONTROLLER_SETCUSTOMMODE , 0 )
334+ self .update ()
335+ self .set_mode (self .active_mode )
344336
345337 def save_mode (self ):
346- '''
338+ """
347339 Saves the currently selected mode
348- '''
349- data = self .modes [self .active_mode ].pack (self .comms ._protocol_version )
350- self .comms .send_header (
351- self .id ,
352- utils .PacketType .RGBCONTROLLER_SAVEMODE ,
353- len (data )
354- )
355- self .comms .send_data (data )
340+ """
341+ if self .enabled :
342+ data = self .modes [self .active_mode ].pack (self .comms ._protocol_version )
343+ self .comms .send_header (self .id , utils .PacketType .RGBCONTROLLER_SAVEMODE , len (data ))
344+ self .comms .send_data (data )
356345
357346 def off (self ):
358- '''
347+ """
359348 Turns off device by setting the custom mode and then calling :any:`RGBObject.clear`
360- '''
361- self .set_custom_mode ()
362- self .clear ()
349+ """
350+ if self .enabled :
351+ self .set_custom_mode ()
352+ self .clear ()
363353
364354
365355class OpenRGBClient (utils .RGBObject ):
0 commit comments