def __init__(self, queue): streamdecks = DeviceManager().enumerate() self.queue = queue self.selected_key = None self.key_images = None self.deck_connected = False if len(streamdecks) > 0: self.deck_connected = True self.deck = streamdecks[0] self.deck.open() self.deck.reset() self.deck.set_brightness(30) self.deck.set_key_callback(self.key_change_callback) self.set_keys([]) else: # no deck found raise DeckMissingError("No deck found connected")
async def setup_decks(): LOGGER.info("Setting up stream decks") devices = DeviceManager().enumerate() LOGGER.info(f"Found {len(devices)} stream decks") for deck in devices: deck.open() deck.reset() if (i_d := deck.id()) in DECKS: controller = DECKS[i_d] else: controller = Controller(deck) DECKS[i_d] = controller deck.set_key_callback_async(controller) await controller.setup() await controller.update_deck()
def IniciarStreamDeck(Datas, FuncionEvento): streamdecks = DeviceManager().enumerate() logger.info( f"Cargando StreamDeck - {len(streamdecks) if len(streamdecks) > 0 else 'No Conectado'}") ListaDeck = [] for Data in Datas: Data['Encontado'] = False for deck in streamdecks: DeckActual = deck DeckActual.open() DeckActual.reset() Brillo = ObtenerValor("data/streamdeck.json", "brillo") DeckActual.set_brightness(Brillo) for Data in Datas: if Data['serial'] == DeckActual.get_serial_number(): logger.info( f"Conectando: {Data['nombre']} - {DeckActual.get_serial_number()}") DeckActual.Serial = DeckActual.get_serial_number() DeckActual.Cantidad = DeckActual.key_count() DeckActual.ID = Data['id'] DeckActual.Nombre = Data['nombre'] DeckActual.File = Data['file'] DeckActual.FuncionEvento = FuncionEvento DeckActual.set_key_callback(ActualizarBoton) ListaDeck.append(DeckActual) Data['encontado'] = True ListaDeck.sort(key=lambda x: x.ID, reverse=False) Cantidad_Base = 0 for deck in ListaDeck: deck.Base = Cantidad_Base Cantidad_Base += deck.Cantidad for Data in Datas: if not Data['encontado']: logger.warning( f"No se encontro: {Data['nombre']} - {Data['serial']}") return ListaDeck
async def mainFunction(): global streamdecks streamdecks = DeviceManager().enumerate() global keyNames global keyStates global keyStatesOld global keyImagesOn global keyImagesOff global innerCycle innerCycle = True if debug: print("Found {} Stream Deck(s).\n".format(len(streamdecks))) for index, deck in enumerate(streamdecks): deck.open() deck.reset() # Set initial screen brightness to 30% deck.set_brightness(100) buttonsImages = os.listdir(imagesDir) for i in range(len(buttonsImages)): splitFileName = buttonsImages[i].split(".") if splitFileName[2] == "off": update_key_image(deck, int(splitFileName[0]), False, imagesDir + buttonsImages[i]) keyNames[int(splitFileName[0])] = splitFileName[1] keyStates[int(splitFileName[0])] = False keyImagesOff[int( splitFileName[0])] = imagesDir + buttonsImages[i] else: keyImagesOn[int( splitFileName[0])] = imagesDir + buttonsImages[i] keyStatesOld = keyStates.copy() deck.set_key_callback(key_change_callback)
def run(config_filename): config = load_config(config_filename) config.validate() streamdecks = DeviceManager().enumerate() print("Found {} Stream Deck(s).\n".format(len(streamdecks))) deck = select_streamdeck(config, streamdecks) deck.open() deck.reset() _key_change_callback = functools.partial(key_change_callback, config, deck) print("Opened '{}' device (serial number: '{}')".format( deck.deck_type(), deck.get_serial_number())) deck.set_brightness(30) deck.set_key_callback(_key_change_callback) for key in range(deck.key_count()): update_key_image(config, deck, key, False) for t in threading.enumerate(): if t is threading.currentThread(): continue if t.is_alive(): t.join()
# Check if the key is changing to the pressed state if state: key_style = get_key_style(deck, key, state) # When an exit button is pressed, close the application if key_style["name"] == "exit": # Reset deck, clearing all button images deck.reset() # Close deck handle, terminating internal worker threads deck.close() if __name__ == "__main__": streamdecks = DeviceManager().enumerate() print("Found {} Stream Deck(s).\n".format(len(streamdecks))) for index, deck in enumerate(streamdecks): deck.open() deck.reset() # Set initial screen brightness to 30% deck.set_brightness(30) # Set initial key images for key in range(deck.key_count()): update_key_image(deck, key, False) # Register callback function for when a key state changes
def init_streamdeck(): deck = DeviceManager().enumerate()[0] deck.open() deck.reset()
def main(): os.makedirs(os.path.join(str(Path.home()), '.devdeck'), exist_ok=True) root = logging.getLogger('devdeck') root.setLevel(logging.DEBUG) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') info_handler = logging.StreamHandler(sys.stdout) info_handler.setLevel(logging.INFO) info_handler.setFormatter(formatter) info_handler.addFilter(InfoFilter()) root.addHandler(info_handler) error_handler = logging.StreamHandler(sys.stderr) error_handler.setLevel(logging.WARNING) error_handler.setFormatter(formatter) root.addHandler(error_handler) fileHandler = RotatingFileHandler(os.path.join(str(Path.home()), '.devdeck', 'devdeck.log'), maxBytes=100000, backupCount=5) fileHandler.setFormatter(formatter) root.addHandler(fileHandler) streamdecks = DeviceManager().enumerate() settings_filename = os.path.join(str(Path.home()), '.devdeck', 'settings.yml') if not os.path.exists(settings_filename): root.warning("No settings file detected!") serial_numbers = [] for index, deck in enumerate(streamdecks): deck.open() serial_numbers.append(deck.get_serial_number()) deck.close() if len(serial_numbers) > 0: root.info("Generating a setting file as none exist: %s", settings_filename) DevDeckSettings.generate_default(settings_filename, serial_numbers) else: root.info( """No stream deck connected. Please connect a stream deck to generate an initial config file. \n If you are having difficulty detecting your stream deck please follow the installation instructions: https://github.com/jamesridgway/devdeck/wiki/Installation""" ) exit(0) try: settings = DevDeckSettings.load(settings_filename) except ValidationError as validation_error: print(validation_error) for index, deck in enumerate(streamdecks): deck.open() root.info('Connecting to deck: %s (S/N: %s)', deck.id(), deck.get_serial_number()) deck_settings = settings.deck(deck.get_serial_number()) if deck_settings is None: root.info("Skipping deck %s (S/N: %s) - no settings present", deck.id(), deck.get_serial_number()) deck.close() continue deck_manager = DeckManager(deck) # Instantiate deck main_deck = deck_settings.deck_class()(None, **deck_settings.settings()) deck_manager.set_active_deck(main_deck) for t in threading.enumerate(): if t is threading.currentThread(): continue if t.is_alive(): try: t.join() except KeyboardInterrupt as ex: deck_manager.close() deck.close() if len(streamdecks) == 0: root.info("No streamdecks detected, exiting.")
with deck: deck.open() deck.set_key_image(0, test_key_image) deck.close() if __name__ == "__main__": logging.basicConfig(level=logging.INFO) parser = argparse.ArgumentParser(description="StreamDeck Library test.") parser.add_argument("--model", help="Stream Deck model name to test") parser.add_argument("--test", help="Stream Deck test to run") args = parser.parse_args() manager = DeviceManager(transport="dummy") streamdecks = manager.enumerate() test_streamdecks = streamdecks if args.model: test_streamdecks = [ deck for deck in test_streamdecks if deck.deck_type() == args.model ] if len(test_streamdecks) == 0: logging.error( "Error: No Stream Decks to test. Known models: {}".format( [d.deck_type() for d in streamdecks])) sys.exit(1) tests = {
def __init__(self): super().__init__() self.mgr = DeviceManager()
def get_manager(cls): if not cls.manager: cls.manager = DeviceManager() return cls.manager
# "default", # "default", # "default", # "default", # ] # sd.putStringArray("Icons", a) buttons = [] for i in range(0, 15): sd.putBoolean(f"Action/{i}", False) sd.putBoolean(f"Status/{i}", False) button = Button(i) buttons.append(button) deck = DeviceManager().enumerate()[0] deck.open() deck.reset() print("Opened '{}' device (serial number: '{}')".format( deck.deck_type(), deck.get_serial_number())) # Set initial screen brightness to 30%. deck.set_brightness(30) # Set initial key images. # for key in range(deck.key_count()): # update_key_image(deck, key, False) # Register callback function for when a key state changes. deck.set_key_callback(key_change_callback) while True:
def enumerate(cls): return [cls(deck) for deck in DeviceManager().enumerate()]