예제 #1
0
        public LorImport(string filename)
        {
            var deserializer = new XmlSerializer(typeof(LMS.sequence));

            LMS.sequence sequence;
            using (TextReader textReader = new StreamReader(filename))
            {
                sequence = (LMS.sequence)deserializer.Deserialize(textReader);
            }

            this.eventPeriodInMilliseconds = 50;
            this.effectsPerChannel         = (int)(sequence.channels.Max(x => x.centiseconds) * 10 / this.eventPeriodInMilliseconds);

            foreach (var channel in sequence.channels)
            {
                if (channel.deviceType != null && channel.deviceType != "LOR")
                {
                    this.log.Warning("Not supporting device type {0} yet", channel.deviceType);
                    continue;
                }

                var channelIdentity = new UnitCircuit(channel.unit, channel.circuit);
                AddChannelData(channelIdentity, new ChannelData(channel.name));

                var channelEffectData = new byte[this.effectsPerChannel];

                for (int pos = 0; pos < this.effectsPerChannel; pos++)
                {
                    long centiSeconds = pos * this.eventPeriodInMilliseconds / 10;
                    if (channel.effect != null)
                    {
                        foreach (var effect in channel.effect)
                        {
                            if (effect.startCentisecond > centiSeconds)
                            {
                                break;
                            }

                            if (centiSeconds >= effect.startCentisecond && centiSeconds < effect.endCentisecond)
                            {
                                channelEffectData[pos] = (byte)(short.Parse(effect.intensity) * 255 / 100);
                                break;
                            }
                        }
                    }
                }
                effectDataPerChannel[channelIdentity] = channelEffectData;
            }
        }
예제 #2
0
        public void LoadFromFile(string filename)
        {
            var deserializer = new XmlSerializer(typeof(LMS.sequence));

            LMS.sequence sequence;
            using (TextReader textReader = new StreamReader(filename))
            {
                sequence = (LMS.sequence)deserializer.Deserialize(textReader);
            }

            foreach (var channel in sequence.channels)
            {
                if (channel.deviceType != null && channel.deviceType != "LOR")
                {
                    this.log.Warning("Not supporting device type {0} yet", channel.deviceType);
                    continue;
                }

                if (channel.unit == 0 && channel.circuit == 0)
                {
                    continue;
                }

                var channelIdentity = new UnitCircuit(channel.unit, channel.circuit, channel.savedIndex);
                var channelData     = new ChannelData(channel.name);

                AddChannelData(channelIdentity, channelData);

                var channelEffects = new List <ChannelEffect>();
                if (channel.effect != null)
                {
                    foreach (var effect in channel.effect)
                    {
                        channelData.HasEffects = true;

                        channelEffects.AddRange(GetChannelEffects(effect));
                    }
                }

                channelEffectsPerChannel[channelIdentity] = channelEffects;
            }
        }
예제 #3
0
        public void LoadFromFile(string filename)
        {
            var deserializer = new XmlSerializer(typeof(LMS.sequence));

            LMS.sequence sequence;
            using (TextReader textReader = new StreamReader(filename))
            {
                sequence = (LMS.sequence)deserializer.Deserialize(textReader);
            }

            foreach (var channel in sequence.channels)
            {
                if (channel.deviceType != null && channel.deviceType != "LOR")
                {
                    log.Warn("Not supporting device type {0} yet", channel.deviceType);
                    continue;
                }

                if (channel.unit == 0 && channel.circuit == 0)
                    continue;

                var channelIdentity = new UnitCircuit(channel.unit, channel.circuit, channel.savedIndex);
                var channelData = new ChannelData(channel.name);

                AddChannelData(channelIdentity, channelData);

                var channelEffects = new List<ChannelEffect>();
                if (channel.effect != null)
                {
                    foreach (var effect in channel.effect)
                    {
                        channelData.HasEffects = true;

                        channelEffects.AddRange(GetChannelEffects(effect));
                    }
                }

                channelEffectsPerChannel[channelIdentity] = channelEffects;
            }
        }
예제 #4
0
        public LorImport(string filename)
        {
            var deserializer = new XmlSerializer(typeof(LMS.sequence));

            LMS.sequence sequence;
            using (TextReader textReader = new StreamReader(filename))
            {
                sequence = (LMS.sequence)deserializer.Deserialize(textReader);
            }

            this.eventPeriodInMilliseconds = 50;
            this.effectsPerChannel = (int)(sequence.channels.Max(x => x.centiseconds) * 10 / this.eventPeriodInMilliseconds);

            foreach (var channel in sequence.channels)
            {
                if (channel.deviceType != null &&channel.deviceType != "LOR")
                {
                    log.Warn("Not supporting device type {0} yet", channel.deviceType);
                    continue;
                }

                var channelIdentity = new UnitCircuit(channel.unit, channel.circuit);
                AddChannelData(channelIdentity, new ChannelData(channel.name));

                var channelEffectData = new byte[this.effectsPerChannel];

                for (int pos = 0; pos < this.effectsPerChannel; pos++)
                {
                    long centiSeconds = pos * this.eventPeriodInMilliseconds / 10;
                    if (channel.effect != null)
                    {
                        foreach (var effect in channel.effect)
                        {
                            if (effect.startCentisecond > centiSeconds)
                                break;

                            if (centiSeconds >= effect.startCentisecond && centiSeconds < effect.endCentisecond)
                            {
                                channelEffectData[pos] = (byte)(short.Parse(effect.intensity) * 255 / 100);
                                break;
                            }
                        }
                    }
                }
                effectDataPerChannel[channelIdentity] = channelEffectData;
            }
        }