Пример #1
0
        public TalkbackHandler(UDPDuplex behringer, GpioController controller, TalkbackSetting talkbackSetting)
        {
            this.talkbackSetting = talkbackSetting;
            this.behringer       = behringer;
            this.controller      = controller;

            var talkbackPathBuilder = new StringBuilder();

            talkbackPathBuilder.Append("/ch/");
            talkbackPathBuilder.Append(talkbackSetting.channel.ToString("D2"));
            talkbackPathBuilder.Append("/mix/");
            talkbackPathBuilder.Append(talkbackSetting.bus.ToString("D2"));
            talkbackPathBuilder.Append("/tap");
            talkbackPath = talkbackPathBuilder.ToString();

            try
            {
                controller.OpenPin(talkbackSetting.gpio, PinMode.InputPullUp);
                controller.RegisterCallbackForPinValueChangedEvent(talkbackSetting.gpio, PinEventTypes.Falling, TalkbackEnabled);
                controller.RegisterCallbackForPinValueChangedEvent(talkbackSetting.gpio, PinEventTypes.Rising, TalkbackDisabled);
            }
            catch (Exception e)
            {
                log.Info(e, $"Could not connect to pin {talkbackSetting.gpio}");
                throw;
            }
        }
Пример #2
0
        public DcaHandler(UDPDuplex behringer, GpioController controller, DcaSetting dcaSetting)
        {
            this.dcaSetting = dcaSetting;
            this.behringer  = behringer;
            this.controller = controller;

            var dcaPathBuilder = new StringBuilder();

            dcaPathBuilder.Append("/dca/");
            dcaPathBuilder.Append(dcaSetting.dca.ToString("D1"));
            dcaPathBuilder.Append("/fader");
            dcaPath = dcaPathBuilder.ToString();

            try
            {
                controller.OpenPin(dcaSetting.gpio, PinMode.InputPullUp);
                controller.RegisterCallbackForPinValueChangedEvent(dcaSetting.gpio, PinEventTypes.Falling, dcaDown);
                controller.RegisterCallbackForPinValueChangedEvent(dcaSetting.gpio, PinEventTypes.Rising, dcaUp);
            }
            catch (Exception e)
            {
                log.Info(e, $"Could not connect to pin {dcaSetting.gpio}");
                throw;
            }
        }
Пример #3
0
        public MuteHandler(UDPDuplex behringer, GpioController controller, MuteSetting muteSetting)
        {
            this.muteSetting = muteSetting;
            this.behringer   = behringer;
            this.controller  = controller;

            var mutePathBuilder = new StringBuilder();

            mutePathBuilder.Append("/ch/");
            mutePathBuilder.Append(muteSetting.channel.ToString("D2"));
            mutePathBuilder.Append("/mix/on");
            mutePath = mutePathBuilder.ToString();

            try
            {
                controller.OpenPin(muteSetting.gpio, PinMode.InputPullUp);
                controller.RegisterCallbackForPinValueChangedEvent(muteSetting.gpio, PinEventTypes.Falling, MuteEnabled);
                controller.RegisterCallbackForPinValueChangedEvent(muteSetting.gpio, PinEventTypes.Rising, MuteDisabled);
            }
            catch (Exception e)
            {
                log.Info(e, $"Could not connect to pin {muteSetting.gpio}");
                throw;
            }
        }
Пример #4
0
        public TallyHandler(UDPDuplex behringer, GpioController controller, TallySetting tallySetting)
        {
            var levelPathBuilder = new StringBuilder();

            levelPathBuilder.Append("/ch/");
            levelPathBuilder.Append(tallySetting.channel.ToString("D2"));
            levelPathBuilder.Append("/mix/fader");
            levelPath = levelPathBuilder.ToString();

            var mutePathBuilder = new StringBuilder();

            mutePathBuilder.Append("/ch/");
            mutePathBuilder.Append(tallySetting.channel.ToString("D2"));
            mutePathBuilder.Append("/mix/on");
            mutePath = mutePathBuilder.ToString();

            level = 0;
            muted = true;

            this.tallySetting = tallySetting;
            this.behringer    = behringer;
            this.controller   = controller;

            try
            {
                controller.OpenPin(tallySetting.gpio, PinMode.Output);
            }
            catch (Exception e)
            {
                log.Info(e, $"Could not connect to pin {tallySetting.gpio}");
                throw;
            }

            behringer.OscPacketCallback += Callback;
            ForceUpdate();
        }
Пример #5
0
        protected override Task ExecuteAsync(CancellationToken cancellationToken)
        {
            /**
             * Callback handle that will handle
             * every message recieved from Behringer X Air */
            return(Task.Run(() =>
            {
                try
                {
                    log.LogInformation($"Connected to Behringer IP: {host} Port: {port} over UDP");
                    behringer = new UDPDuplex(host, port, clientPort, callback);

                    log.LogInformation($"Connecting to GpioController");
                    GpioController controller = new GpioController(PinNumberingScheme.Logical);

                    log.LogInformation($"Starting Background Thread for keepalive");
                    new Thread(() => KeepAlive())
                    {
                        IsBackground = true
                    }.Start();

                    if (tallySettings is List <TallySetting> )
                    {
                        foreach (var tallySetting in tallySettings)
                        {
                            var handler = new TallyHandler(behringer, controller, tallySetting);
                            tallyHandlers.Add(handler);
                        }
                    }

                    if (muteSettings is List <MuteSetting> )
                    {
                        foreach (var muteSetting in muteSettings)
                        {
                            var handler = new MuteHandler(behringer, controller, muteSetting);
                            muteHandlers.Add(handler);
                        }
                    }

                    if (muteGroupSettings is List <MuteGroupSetting> )
                    {
                        foreach (var muteGroupSetting in muteGroupSettings)
                        {
                            var handler = new MuteGroupHandler(behringer, controller, muteGroupSetting);
                            muteGroupHandlers.Add(handler);
                        }
                    }

                    if (talkbackSettings is List <TalkbackSetting> )
                    {
                        foreach (var talkbackSetting in talkbackSettings)
                        {
                            var handler = new TalkbackHandler(behringer, controller, talkbackSetting);
                            talkbackHandlers.Add(handler);
                        }
                    }

                    if (dcaSettings is List <DcaSetting> )
                    {
                        foreach (var dcaSetting in dcaSettings)
                        {
                            var handler = new DcaHandler(behringer, controller, dcaSetting);
                            dcaHandlers.Add(handler);
                        }
                    }
                }
                catch (Exception e)
                {
                    log.LogError(e, "BehringerService crashed while running");
                    throw;
                }

                cancellationToken.WaitHandle.WaitOne();

                try
                {
                    foreach (var handler in tallyHandlers)
                    {
                        handler.Close();
                    }

                    foreach (var handler in muteHandlers)
                    {
                        handler.Close();
                    }

                    foreach (var handler in muteHandlers)
                    {
                        handler.Close();
                    }

                    foreach (var handler in talkbackHandlers)
                    {
                        handler.Close();
                    }

                    foreach (var handler in dcaHandlers)
                    {
                        handler.Close();
                    }

                    log.LogInformation("UDP connection closed.");
                    behringer.Close();
                }
                catch (Exception e)
                {
                    log.LogError(e, "BehringerService crashed while terminating");
                    throw;
                }
            }));
        }