public CachedHidClient(IStreamDeckHid deckHid, IHardwareInternalInfos hardwareInformation)
            : base(deckHid, hardwareInformation)
        {
            imageQueue = new ConcurrentBufferedQueue <int, byte[]>(RelativeTimeSource.Default, hardwareInformation.KeyCooldown);

            writerTask = StartBitmapWriterTask();
        }
        private CachedHidClient(IStreamDeckHid deckHid, IHardwareInternalInfos hardwareInformation)
            : base(deckHid, hardwareInformation)
        {
            imageQueue = new ConcurrentBufferedQueue <int, byte[]>(RelativeTimeSource.Default, 75);

            writerTask     = StartBitmapWriterTask();
            keyPollingTask = StartKeyPollingTask();
        }
        public BasicHidClient(IStreamDeckHid deckHid, IHardwareInternalInfos hardwareInformation)
        {
            DeckHid = deckHid;
            Keys    = hardwareInformation.Keys;

            deckHid.ConnectionStateChanged += (s, e) => ConnectionStateChanged?.Invoke(this, e);
            deckHid.ReportReceived         += DeckHid_ReportReceived;

            HardwareInfo = hardwareInformation;
            Buffer       = new byte[deckHid.OutputReportLength];
            keyStates    = new byte[Keys.Count];
        }
        public BasicHidClient(IStreamDeckHid deckHid, IHardwareInternalInfos hardwareInformation)
        {
            this.deckHid = deckHid;
            Keys         = hardwareInformation.Keys;

            deckHid.ConnectionStateChanged += (s, e) => ConnectionStateChanged?.Invoke(this, e);

            this.hardwareInformation = hardwareInformation;
            keyStates = new byte[Keys.Count];

            reportGenerator = new OutputReportGenerator(
                deckHid.OutputReportLength,
                hardwareInformation.ReportSize,
                hardwareInformation.StartReportNumber
                );
        }