Example #1
0
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;

            if (data.TryGetValue(DataElements.Pan, out value))
            {
                this.pan = ((double)value).Limit(0, 540);
            }

            if (data.TryGetValue(DataElements.Tilt, out value))
            {
                this.tilt = ((double)value).Limit(0, 270);
            }

#if TRACE_IDATA
            int id = 0;
            foreach (var kvp in data)
            {
                id++;
                this.log.Verbose("{3} {0}. {1} = {2}", id, kvp.Key, kvp.Value, this.Name);
            }
#endif
        }
Example #2
0
        protected virtual void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            object value;
            bool   masterPower       = true;
            var    masterPowerDevice = logicalDevice as IHasMasterPower;

            if (masterPowerDevice != null)
            {
                masterPower = masterPowerDevice.MasterPower;
            }

            if (data.TryGetValue(DataElements.Brightness, out value))
            {
                this.colorBrightness.Brightness = (double)value * (masterPower ? 1 : 0);
            }
            else
            {
                bool?power = data.GetValue <bool>(DataElements.Power);
                if (power.HasValue)
                {
                    this.colorBrightness.Brightness = (power.Value && masterPower) ? 1 : 0;
                }
            }

            if (data.TryGetValue(DataElements.Color, out value))
            {
                this.colorBrightness.Color = (Color)value;
            }
        }
Example #3
0
 protected virtual void SetModel(ILogicalDevice model)
 {
     _model            = model;
     DeviceNumber      = _model.DeviceNumber;
     DeviceName        = _model.DeviceName;
     DeviceDescription = _model.DeviceDescription;
 }
Example #4
0
        protected virtual void OutputFromIData(ILogicalDevice logicalDevice, IData data)
        {
            if (data.TryGetValue(DataElements.Command, out object value))
            {
                if (value is byte[] arr)
                {
                    byte lastByte = this.autoResetCommand;

                    lock (this)
                    {
                        foreach (byte b in arr)
                        {
                            DmxOutputPort.SendDimmerValue(this.startDmxChannel, b);

                            lastByte = b;
                        }
                    }

                    if (this.autoResetAfter.HasValue && lastByte != this.autoResetCommand)
                    {
                        this.resetTimer.Change(this.autoResetAfter.Value, TimeSpan.FromMilliseconds(-1));
                    }
                    else
                    {
                        this.resetTimer.Change(Timeout.Infinite, Timeout.Infinite);
                    }
                }
            }
        }
Example #5
0
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;
            if (data.TryGetValue(DataElements.StrobeSpeed, out value))
                this.strobeSpeed = (double)value;
        }
Example #6
0
        private void StopCurrentTask(ILogicalDevice device, Cue.CueParts cuePart)
        {
            if (this.currentInstance == null)
            {
                return;
            }

            this.currentInstance.StopExistingTask(device, cuePart);
        }
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;
            if (data.TryGetValue(DataElements.Pan, out value))
                this.pan = ((double)value).Limit(0, 540);

            if (data.TryGetValue(DataElements.Tilt, out value))
                this.tilt = ((double)value).Limit(0, 270);
        }
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;

            if (data.TryGetValue(DataElements.StrobeSpeed, out value))
            {
                this.strobeSpeed = (double)value;
            }
        }
Example #9
0
        public TestLight(Switch logicalDevice)
        {
            Executor.Current.Register(this);

            this.logicalDevice = logicalDevice;

            logicalDevice.PowerChanged += (sender, e) =>
            {
                this.control.Color = e.NewState ? Color.Green : Color.Black;
            };
        }
Example #10
0
            public void StopExistingTask(ILogicalDevice device, Cue.CueParts cuePart)
            {
                var key = Tuple.Create(device, cuePart);

                Task existingTask;

                if (this.tasks.TryGetValue(key, out existingTask))
                {
                    // Stop existing
                    Executor.Current.StopManagedTask(existingTask);
                }
            }
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            if (data.ContainsKey(DataElements.ColorAmber) ||
                data.ContainsKey(DataElements.ColorRGB) ||
                data.ContainsKey(DataElements.ColorUltraViolet) ||
                data.ContainsKey(DataElements.ColorWhite))
            {
                object value;

                componentMaster = (this.colorBrightness.Brightness * (1 - Executor.Current.Blackout.Value)).GetByteScale();

                Color colorRGB;
                if (data.TryGetValue(DataElements.ColorRGB, out value))
                {
                    colorRGB = (Color)value;
                }
                else
                {
                    colorRGB = this.colorBrightness.Color;
                }

                componentRed   = colorRGB.R;
                componentGreen = colorRGB.G;
                componentBlue  = colorRGB.B;

                //TODO: WhiteOut
                if (data.TryGetValue(DataElements.ColorAmber, out value))
                {
                    componentAmber = ((double)value).GetByteScale();
                }
                if (data.TryGetValue(DataElements.ColorWhite, out value))
                {
                    componentWhite = ((double)value).GetByteScale();
                }
                if (data.TryGetValue(DataElements.ColorUltraViolet, out value))
                {
                    componentUV = ((double)value).GetByteScale();
                }
            }
            else
            {
                var rgbaw = RgbConverter.GetRGBAW(this.colorBrightness.Color);

                componentMaster = this.colorBrightness.Brightness.GetByteScale();
                componentRed    = rgbaw.R;
                componentGreen  = rgbaw.G;
                componentBlue   = rgbaw.B;
                componentAmber  = rgbaw.A;
                componentWhite  = rgbaw.W;
            }
        }
Example #12
0
        public TestLight(Dimmer logicalDevice)
        {
            this.logicalDevice = logicalDevice;

            logicalDevice.BrightnessChanged += (sender, e) =>
            {
                this.control.Color = Color.FromArgb(e.NewBrightness.GetByteScale(), e.NewBrightness.GetByteScale(), e.NewBrightness.GetByteScale());
                this.control.Text = string.Format("{0:0%}", e.NewBrightness);
            };

            WireUpStrobe(logicalDevice as StrobeDimmer);
        }
Example #13
0
        public TestPixel1D(IUpdateActionParent parent, IPixel1D2 logicalDevice)
            : this(parent, logicalDevice.Pixels)
        {
            this.logicalDevice = logicalDevice;

            logicalDevice.ImageChanged.Subscribe(x =>
            {
                this.outputBitmap = new Bitmap(x);

                this.newDataAvailable = true;
            });
        }
Example #14
0
        public TestPixel2D(IUpdateActionParent parent, IPixel2D2 logicalDevice)
            : this(parent, logicalDevice.PixelWidth, logicalDevice.PixelHeight)
        {
            this.logicalDevice = logicalDevice;

            logicalDevice.ImageChanged.Subscribe(x =>
            {
                this.outputBitmap = new Bitmap(x);

                this.newDataAvailable = true;
            });
        }
Example #15
0
 protected override void SetModel(ILogicalDevice model)
 {
     base.SetModel(model);
     (_model as IRuntimeDevice).TcpDeviceConnection.ConnectionRestoredAction += OnConnectionRestored;
     (_model as IRuntimeDevice).TcpDeviceConnection.ConnectionLostAction     += OnConnectionLost;
     (_model as IRuntimeDevice).DeviceInitialized   += OnDeviceInitialized;
     (_model as IRuntimeDevice).DeviceValuesUpdated += OnDeviceValuesUpdated;
     DefectStateViewModel.Model = (_model as IRuntimeDevice).DefectState;
     AnalogDataViewModel.Model  = (_model as IRuntimeDevice).AnalogData;
     (_model as IRuntimeDevice).TcpDeviceConnection.TransactionCompleteAction += () =>
     {
         QueryIndicatorViewModel?.BeginIndication();
     };
 }
Example #16
0
        public TestLight(ColorDimmer logicalDevice)
        {
            this.logicalDevice = logicalDevice;

            logicalDevice.ColorChanged += (sender, e) =>
            {
                var hsv = new HSV(e.NewColor);
                hsv.Value = hsv.Value * e.NewBrightness;

                this.control.Color = hsv.Color;
                this.control.Text = string.Format("{0:0%}", e.NewBrightness);
            };

            WireUpStrobe(logicalDevice as StrobeColorDimmer);
        }
Example #17
0
            /// <summary>
            /// Adds the given element to the collection
            /// </summary>
            /// <param name="item">The item to add</param>
            public override void Add(IModelElement item)
            {
                IPhysicalDevice physicalDeviceCasted = item.As <IPhysicalDevice>();

                if ((physicalDeviceCasted != null))
                {
                    this._parent.PhysicalDevice.Add(physicalDeviceCasted);
                }
                ILogicalDevice logicalDeviceCasted = item.As <ILogicalDevice>();

                if ((logicalDeviceCasted != null))
                {
                    this._parent.LogicalDevice.Add(logicalDeviceCasted);
                }
            }
Example #18
0
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;

            if (data.TryGetValue(DataElements.Pan, out value))
            {
                this.pan = ((double)value).Limit(0, 540);
            }

            if (data.TryGetValue(DataElements.Tilt, out value))
            {
                this.tilt = ((double)value).Limit(0, 270);
            }
        }
Example #19
0
        private void MibCheck(int cueId, ILogicalDevice device)
        {
            //FIXME: Doesn't check for bounce/loop

            var brightnessDevice = device as IReceivesBrightness;

            if (brightnessDevice == null)
            {
                return;
            }

            if (brightnessDevice.Brightness > 0)
            {
                // Not black
                return;
            }

            for (int i = cueId + 1; i < this.cues.Count; i++)
            {
                var cue = this.cues[i];

                var panTiltDevice = device as IReceivesPanTilt;

                bool moved = false;
                if (panTiltDevice != null)
                {
                    if (cue.PartPan != null && cue.PartPan.MoveInBlack)
                    {
                        GetControlledObserverPan(panTiltDevice).OnNext(cue.PartPan.Destination);
                        moved = true;
                    }

                    if (cue.PartTilt != null && cue.PartTilt.MoveInBlack)
                    {
                        GetControlledObserverTilt(panTiltDevice).OnNext(cue.PartTilt.Destination);
                        moved = true;
                    }
                }

                if (moved)
                {
                    break;
                }
            }
        }
Example #20
0
            /// <summary>
            /// Removes the given item from the collection
            /// </summary>
            /// <returns>True, if the item was removed, otherwise False</returns>
            /// <param name="item">The item that should be removed</param>
            public override bool Remove(IModelElement item)
            {
                IPhysicalDevice physicalDeviceItem = item.As <IPhysicalDevice>();

                if (((physicalDeviceItem != null) &&
                     this._parent.PhysicalDevice.Remove(physicalDeviceItem)))
                {
                    return(true);
                }
                ILogicalDevice logicalDeviceItem = item.As <ILogicalDevice>();

                if (((logicalDeviceItem != null) &&
                     this._parent.LogicalDevice.Remove(logicalDeviceItem)))
                {
                    return(true);
                }
                return(false);
            }
Example #21
0
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            if (data.ContainsKey(DataElements.ColorAmber) ||
                data.ContainsKey(DataElements.ColorRGB) ||
                data.ContainsKey(DataElements.ColorUltraViolet) ||
                data.ContainsKey(DataElements.ColorWhite))
            {
                object value;

                componentMaster = (this.colorBrightness.Brightness * (1 - Executor.Current.Blackout.Value)).GetByteScale();

                Color colorRGB;
                if (data.TryGetValue(DataElements.ColorRGB, out value))
                    colorRGB = (Color)value;
                else
                    colorRGB = this.colorBrightness.Color;

                componentRed = colorRGB.R;
                componentGreen = colorRGB.G;
                componentBlue = colorRGB.B;

                //TODO: WhiteOut
                if (data.TryGetValue(DataElements.ColorAmber, out value))
                    componentAmber = ((double)value).GetByteScale();
                if (data.TryGetValue(DataElements.ColorWhite, out value))
                    componentWhite = ((double)value).GetByteScale();
                if (data.TryGetValue(DataElements.ColorUltraViolet, out value))
                    componentUV = ((double)value).GetByteScale();
            }
            else
            {
                var rgbaw = RgbConverter.GetRGBAW(this.colorBrightness.Color);

                componentMaster = this.colorBrightness.Brightness.GetByteScale();
                componentRed = rgbaw.R;
                componentGreen = rgbaw.G;
                componentBlue = rgbaw.B;
                componentAmber = rgbaw.A;
                componentWhite = rgbaw.W;
            }
        }
Example #22
0
        protected virtual void SetPumpFromIData(ILogicalDevice logicalDevice, IData data)
        {
            bool masterPower = true;

            if (logicalDevice is IHasMasterPower masterPowerDevice)
            {
                masterPower = masterPowerDevice.MasterPower;
            }

            if (data.TryGetValue(DataElements.Throughput, out object value))
            {
                this.pumpThroughput = (double)value * (masterPower ? 1 : 0);
            }
            else
            {
                bool?power = data.GetValue <bool>(DataElements.Power);
                if (power.HasValue)
                {
                    this.pumpThroughput = (power.Value && masterPower) ? 1 : 0;
                }
            }
        }
Example #23
0
            public void AddNewTask(ILogicalDevice device, Cue.CueParts cuePart, Task task, Action mibCheck = null)
            {
                var key = Tuple.Create(device, cuePart);

                this.tasks[key] = task;

                task.ContinueWith(x =>
                {
                    this.tasks.Remove(key);
                });

                if (mibCheck != null)
                {
                    task.ContinueWith(x =>
                    {
                        if (!x.IsCanceled)
                        {
                            mibCheck();
                        }
                    });
                }
            }
Example #24
0
        protected override void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            base.SetFromIData(logicalDevice, data);

            object value;
            if (data.TryGetValue(DataElements.Pan, out value))
                this.pan = ((double)value).Limit(0, 540);

            if (data.TryGetValue(DataElements.Tilt, out value))
                this.tilt = ((double)value).Limit(0, 270);

            #if TRACE_IDATA
            int id = 0;
            foreach (var kvp in data)
            {
                id++;
                log.Trace("{3} {0}. {1} = {2}", id, kvp.Key, kvp.Value, this.Name);
            }
            #endif
        }
Example #25
0
        public TestPixel1D(Pixel1D logicalDevice)
        {
            Executor.Current.Register(this);

            this.logicalDevice = logicalDevice;
            this.numberOfPixels = logicalDevice.Pixels;

            logicalDevice.PixelChanged += (sender, e) =>
                {
                    var hsv = new HSV(e.NewColor);
                    hsv.Value = hsv.Value * e.NewBrightness;
                    Color c = hsv.Color;

                    lock (lockObject)
                    {
                        if (!this.changedPixels.Any())
                            this.firstChange.Restart();

                        this.pixelData[e.Channel] = c;

                        this.changedPixels.Add((byte)e.Channel);
                        receivedUpdates++;
                    }

                };

            logicalDevice.MultiPixelChanged += (sender, e) =>
                {
                    var newColors = new Color[e.NewValues.Length];
                    for(int i = 0; i < e.NewValues.Length; i++)
                    {
                        var hsv = new HSV(e.NewValues[i].Color);
                        hsv.Value = hsv.Value * e.NewValues[i].Brightness;
                        newColors[i] = hsv.Color;
                    }

                    lock (lockObject)
                    {
                        if (!this.changedPixels.Any())
                            this.firstChange.Restart();

                        int readOffset = 0;
                        for (int i = 0; i < newColors.Length; i++)
                        {
                            int dataOffset = e.StartChannel + i;

                            this.pixelData[dataOffset] = newColors[readOffset++];

                            this.changedPixels.Add((byte)(e.StartChannel + i));
                        }
                        receivedUpdates++;
                    }
                };

            this.changedPixels = new HashSet<byte>();
            this.cancelSource = new System.Threading.CancellationTokenSource();
            this.firstChange = new System.Diagnostics.Stopwatch();
            this.pixelData = new Color[this.numberOfPixels];

            this.senderTask = new Task(x =>
            {
                while (!this.cancelSource.IsCancellationRequested)
                {
                    lock (lockObject)
                    {
                        if (this.changedPixels.Any())
                        {
                            this.firstChange.Stop();
                            this.sentUpdates++;
                            //Console.WriteLine("Sending {0} changes to SIM. Oldest {1:N2}ms. Recv: {2}   Sent: {3}",
                            //    this.changedPixels.Count, this.firstChange.Elapsed.TotalMilliseconds,
                            //    receivedUpdates, sentUpdates);

                            if (this.changedPixels.Count <= 2)
                            {
                                foreach (var channel in this.changedPixels)
                                {
                                    control.SetPixel(channel, this.pixelData[channel]);
                                }
                            }
                            else
                            {
                                // Send everything
                                control.SetPixels(0, this.pixelData);
                            }
                            this.changedPixels.Clear();
                        }
                    }

                    System.Threading.Thread.Sleep(10);
                }
            }, this.cancelSource.Token, TaskCreationOptions.LongRunning);

            this.senderTask.Start();
        }
Example #26
0
            public void StopExistingTask(ILogicalDevice device, Cue.CueParts cuePart)
            {
                var key = Tuple.Create(device, cuePart);

                Task existingTask;
                if (this.tasks.TryGetValue(key, out existingTask))
                {
                    // Stop existing
                    Executor.Current.StopManagedTask(existingTask);
                }
            }
Example #27
0
            public void AddNewTask(ILogicalDevice device, Cue.CueParts cuePart, Task task, Action mibCheck = null)
            {
                var key = Tuple.Create(device, cuePart);

                this.tasks[key] = task;

                task.ContinueWith(x =>
                    {
                        this.tasks.Remove(key);
                    });

                if (mibCheck != null)
                {
                    task.ContinueWith(x =>
                        {
                            if (!x.IsCanceled)
                                mibCheck();
                        });
                }
            }
Example #28
0
        private void StopCurrentTask(ILogicalDevice device, Cue.CueParts cuePart)
        {
            if (this.currentInstance == null)
                return;

            this.currentInstance.StopExistingTask(device, cuePart);
        }
Example #29
0
        private void MibCheck(int cueId, ILogicalDevice device)
        {
            //FIXME: Doesn't check for bounce/loop

            var brightnessDevice = device as IReceivesBrightness;
            if (brightnessDevice == null)
                return;

            if (brightnessDevice.Brightness > 0)
                // Not black
                return;

            for (int i = cueId + 1; i < this.cues.Count; i++)
            {
                var cue = this.cues[i];

                var panTiltDevice = device as IReceivesPanTilt;

                bool moved = false;
                if (panTiltDevice != null)
                {
                    if (cue.PartPan != null && cue.PartPan.MoveInBlack)
                    {
                        GetControlledObserverPan(panTiltDevice).OnNext(cue.PartPan.Destination);
                        moved = true;
                    }

                    if (cue.PartTilt != null && cue.PartTilt.MoveInBlack)
                    {
                        GetControlledObserverTilt(panTiltDevice).OnNext(cue.PartTilt.Destination);
                        moved = true;
                    }
                }

                if (moved)
                    break;
            }
        }
Example #30
0
        protected virtual void SetFromIData(ILogicalDevice logicalDevice, IData data)
        {
            object value;
            bool masterPower = true;
            var masterPowerDevice = logicalDevice as IHasMasterPower;
            if (masterPowerDevice != null)
                masterPower = masterPowerDevice.MasterPower;

            if (data.TryGetValue(DataElements.Brightness, out value))
                this.colorBrightness.Brightness = (double)value * (masterPower ? 1 : 0);
            else
            {
                bool? power = data.GetValue<bool>(DataElements.Power);
                if (power.HasValue)
                    this.colorBrightness.Brightness = (power.Value && masterPower) ? 1 : 0;
            }

            if (data.TryGetValue(DataElements.Color, out value))
                this.colorBrightness.Color = (Color)value;
        }