Exemplo n.º 1
0
    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")
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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()
Exemplo n.º 8
0
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.")
Exemplo n.º 9
0
    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 = {
Exemplo n.º 10
0
 def __init__(self):
     super().__init__()
     self.mgr = DeviceManager()
Exemplo n.º 11
0
 def get_manager(cls):
     if not cls.manager:
         cls.manager = DeviceManager()
     return cls.manager
Exemplo n.º 12
0
#     "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:
Exemplo n.º 13
0
 def enumerate(cls):
     return [cls(deck) for deck in DeviceManager().enumerate()]