Example #1
0
        public async Task <bool> SetCombinedInputMode(byte modeCombinationIndex, uint delta = 1, bool notify = true)
        {
            if (Capabilities.HasFlag(PortCapabilities.Input) && Capabilities.HasFlag(PortCapabilities.Combinable))
            {
                var modeCombination = ModeCombinations.ElementAtOrDefault(modeCombinationIndex);

                if (modeCombination != default)
                {
                    // combined input
                    SendMessage(new PortInputFormatSetupCombinedMessage(Port, PortInputFormatSetupSubCommands.Lock_LPF2_Device_For_Setup));

                    IsLocked = true;

                    await Task.Delay(1000);

                    InputModes.Clear();

                    var modeAndDatasetCombinations = new List <byte>();

                    foreach (var mode in modeCombination.ToModes())
                    {
                        SendMessage(new PortInputFormatSetupSingleMessage(Port, mode, delta, notify));

                        for (int i = 1; i <= ModeInformation[mode].ValueFormat[0]; i++)
                        {
                            var modeAndDatasetInfo = mode << 4;

                            modeAndDatasetInfo |= (i - 1);

                            modeAndDatasetCombinations.Add((byte)modeAndDatasetInfo);
                        }

                        do
                        {
                            await Task.Delay(500);
                        }while (!InputModes.ContainsKey(mode));
                    }

                    SendMessage(new PortInputFormatSetupCombinedSetModeDatasetMessage(Port, modeCombinationIndex, modeAndDatasetCombinations));

                    do
                    {
                        await Task.Delay(500);
                    }while (IsLocked);

                    InputMode = modeCombination;

                    return(true);
                }
            }

            return(false);
        }