Example #1
0
        /// <summary>
        /// 开关
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PowerButton_Click(object sender, EventArgs e)
        {
            Button powerBtn  = (Button)sender;
            int    groupId   = 0;
            int    addressId = 0;

            HelperTool.GetControllerAddressId(powerBtn.Tag.ToString(), out groupId, out addressId);

            currentControllerItem = GetCurrentController(groupId, addressId);
            if (currentControllerItem == null)
            {
                return;
            }

            byte powerByte = 0x01;

            if (currentControllerItem.PowerState)
            {
                powerByte = 0x00;
                powerBtn.BackgroundImage = Properties.Resources.powerOff;
            }
            else
            {
                powerBtn.BackgroundImage = Properties.Resources.powerOn;
            }

            currentControllerItem.PowerState = !currentControllerItem.PowerState;

            byte[] txData = { (byte)currentControllerItem.GroupId, (byte)currentControllerItem.AddressId, 0x10, 0x10, 0x01, powerByte };

            SerialPortHelper.SendData(serialPort, txData);
        }
Example #2
0
        private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // 读取控制器信息
            ComboBox comboBox = (ComboBox)sender;

            int groupId   = 0;
            int addressId = 0;

            HelperTool.GetControllerAddressId(comboBox.Text, out groupId, out addressId);

            if (groupId == 0 || addressId == 0)
            {
                return;
            }

            ControllerItem selectedControllerItem = GetCurrentController(groupId, addressId);

            nameTextBox.Text = selectedControllerItem.Name;
            zoneTextBox.Text = selectedControllerItem.Zone;

            panel1.Visible = false;

            // 读取数据
            ReadSelectedComData(groupId, addressId);
        }
        /// <summary>
        /// Register entity controller.
        /// </summary>
        /// <param name="type">Type of entity.</param>
        /// <param name="controller">Controller name for entity.</param>
        /// <param name="area">Area name for entity.</param>
        public void RegisterController(Type type, string controller, string area = null)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (controller == null)
            {
                throw new ArgumentNullException("controller");
            }
            if (area != null)
            {
                if (_Items.Count(t => t.Area == area.ToLower() && t.Controller == controller.ToLower()) > 0)
                {
                    throw new ArgumentException("Detected the same route of entity.");
                }
            }
            else
            {
                if (_Items.Count(t => t.Controller == controller.ToLower()) > 0)
                {
                    throw new ArgumentException("Detected the same route of entity.");
                }
            }
            ControllerItem item = new ControllerItem();

            item.EntityType = type;
            item.Controller = controller.ToLower();
            if (area != null)
            {
                item.Area = area.ToLower();
            }
            _Items.Add(item);
        }
Example #4
0
        /// <summary>
        /// Constructor, initialize the UI
        /// </summary>
        public SettingsWindow()
        {
            InitializeComponent();

            var controllers          = Controllers.ListControllers();
            var activeControllerName = HexLight.Properties.Settings.Default.Controller;

            // Populate the listbox
            cbDrivers.Items.Clear();

            //cbDrivers.Items.Add(ControllerItem.NullController);
            //if (activeControllerName == null || activeControllerName == "")
            //    cbDrivers.SelectedIndex = 0;

            foreach (var controllerType in controllers)
            {
                var item = new ControllerItem(controllerType);
                cbDrivers.Items.Add(item);
                if (controllerType.FullName == activeControllerName)
                {
                    cbDrivers.SelectedItem = item;
                }
            }

            //TODO: Use ValueConverters and Bindings ?
        }
Example #5
0
        private void ReadControllerData(SerialPort serialPort, int controllerIndex)
        {
            if (controllerIndex < controllerItems.Count())
            {
                controllerToRead = controllerItems[controllerToReadIndex];

                SerialPortHelper.ReadAllData(serialPort, controllerToRead.GroupId, controllerToRead.AddressId);
            }
        }
        private void load()
        {
            MessageBoxResult result = MessageBox.Show("¿Desea cargar los datos?", "", MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (result.Equals(MessageBoxResult.Yes))
            {
                controller = new ControllerItem();
                showItemsFromDatabase();
            }
        }
Example #7
0
        public static string GenerateDocumentPath(ControllerItem controllerItem, ActionItem actionItem)
        {
            var path = $"{DocusaurusServiceCollection.Options.DocumentPath}/docs/{controllerItem.Name.ToLower()}_{actionItem.Path.Replace("/", "").ToLower()}.md";

            if (path.Contains("{"))
            {
                var index = path.IndexOf("{");
                path = path.Substring(0, index) + ".md";
            }
            return(path);
        }
Example #8
0
        public static string GenerateDocumentName(ControllerItem controllerItem, ActionItem actionItem)
        {
            var name = $"{controllerItem.Name.ToLower()}_{actionItem.Path.Replace("/", "").ToLower()}";

            if (name.Contains("{"))
            {
                var index = name.IndexOf("{");
                name = name.Substring(0, index);
            }
            return(name);
        }
        /// <summary>
        /// Unregister entity controller.
        /// </summary>
        /// <param name="type">Type of entity.</param>
        public void UnregisterController(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            ControllerItem item = _Items.SingleOrDefault(t => t.EntityType == type);

            if (item != null)
            {
                _Items.Remove(item);
            }
        }
Example #10
0
 private void RenderItem(ControllerItem i)
 {
     if (i is Button b)
     {
         RenderButton(b);
     }
     if (i is Stick s)
     {
         RenderStick(s);
     }
     if (i is Trigger t)
     {
         RenderTrigger(t);
     }
 }
Example #11
0
 private void RenderItem(ControllerItem i, int itemidx)
 {
     if (i is Button)
     {
         RenderButton(itemidx);
     }
     if (i is Stick)
     {
         RenderStick(itemidx);
     }
     if (i is Trigger)
     {
         RenderTrigger(itemidx);
     }
 }
Example #12
0
        /// <summary>
        /// 发送命令到设备
        /// </summary>
        /// <param name="controllerItem"></param>
        private void SendSettingToDevice(ControllerItem controllerItem)
        {
            controllerItem.SortTimers();

            // 起始地址
            int         startAddress = 0x20;
            List <byte> txData       = new List <byte>()
            {
                (byte)controllerItem.GroupId, (byte)controllerItem.AddressId, 0x10, (byte)startAddress, 0x50
            };

            // 添加关断定时器数据
            for (int i = 0; i < maxTimePointCount; i++)
            {
                if (i >= controllerItem.OffTimerCount)
                {
                    txData.AddRange(new byte[] { 0xff, 0xff });

                    continue;
                }

                byte[] minutesBytes = BitConverter.GetBytes(controllerItem.OffTimersMinutes[i]);

                txData.AddRange(new byte[] { minutesBytes[0], minutesBytes[1] });
            }

            // 添加打开定时器
            for (int i = 0; i < maxTimePointCount; i++)
            {
                if (i >= controllerItem.OnTimerCount)
                {
                    txData.AddRange(new byte[] { 0xff, 0xff, 0, 0, 0, 0, 0, 0 });

                    continue;
                }

                byte[] minutesBytes = BitConverter.GetBytes(controllerItem.OnTimersMinutes[i]);

                txData.AddRange(new byte[] { minutesBytes[0], minutesBytes[1] });

                foreach (var item in controllerItem.OnTimersColorValues[i])
                {
                    txData.Add((byte)item);
                }
            }

            SerialPortHelper.SendData(serialPort, txData.ToArray());
        }
Example #13
0
        private void LoadControllerItems()
        {
            var items = HelperTool.ReadControllersFromFile <ControllerItem>();

            if (items != null)
            {
                controllersDataGridView.DataSource = items;
            }

            controllersDataGridView.Columns["GroupName"].Visible = false;

            if (items.Count() > 0)
            {
                currentControllerItem = items[0];
            }
        }
Example #14
0
        public void Initialize()
        {
            string xmlFileContent = File.ReadAllText(options.XmlFilePath);
            Doc    docsAssembly   = Helpers.ParseXml(xmlFileContent);
            var    controllers    = Helpers.GetClasses(options.ProjectAssembly);
            List <ControllerItem> controllerItems = new List <ControllerItem>();

            foreach (var controller in controllers)
            {
                ControllerItem controllerItem = new ControllerItem(controller);
                controllerItem.Description = docsAssembly.Members.Member.FirstOrDefault(x => x.Name == $"T:{controller.Namespace}.{controller.Name}").Summary;
                controllerItem.Description = controllerItem.Description.Trim().Replace("\n", "");
                var actions = Helpers.GetMethods(controller);
                foreach (var action in actions)
                {
                    ActionItem actionItem    = new ActionItem(controllerItem, action);
                    string     actionXmlName = $"M:{controller.Namespace}.{controller.Name}.{action.Name}";
                    actionItem.Description = docsAssembly.Members.Member.FirstOrDefault(x => x.Name == actionXmlName)?.Summary;
                    actionXmlName         += "(";
                    var parameters = Helpers.GetParameters(action);
                    foreach (var parameter in parameters)
                    {
                        if (String.IsNullOrEmpty(actionItem.Description))
                        {
                            actionXmlName += parameter.ParameterType + ",";
                        }
                        bool          isVariable    = parameter.ParameterType.BaseType == typeof(ValueType);
                        ParameterItem parameterItem = new ParameterItem(parameter);
                        if (!isVariable)
                        {
                            AppendSubProperties(ref parameterItem, parameter);
                        }
                        actionItem.Parameters.Add(parameterItem);
                    }
                    if (String.IsNullOrEmpty(actionItem.Description))
                    {
                        actionXmlName          = actionXmlName.TrimEnd(',') + ")";
                        actionItem.Description = docsAssembly.Members.Member.FirstOrDefault(x => x.Name == actionXmlName)?.Summary;
                    }
                    actionItem.Description = actionItem.Description?.Trim().Replace("\n", "");
                    controllerItem.Actions.Add(actionItem);
                }
                controllerItems.Add(controllerItem);
            }
            options.DocumentWriter.WriteDocument(controllerItems);
        }
Example #15
0
        private void AddButton_Click(object sender, EventArgs e)
        {
            AddControllerFrom addControllerFrom = new AddControllerFrom();

            addControllerFrom.PassGroupAddressId = (int groupId, int addressId, string name, string zone) =>
            {
                ControllerItem controllerItem = new ControllerItem()
                {
                    Name      = name,
                    Zone      = zone,
                    GroupId   = groupId,
                    AddressId = addressId
                };

                var items = HelperTool.ReadControllersFromFile <ControllerItem>().ToList();

                foreach (var item in items)
                {
                    if (item.GroupId == groupId && item.AddressId == addressId)
                    {
                        MessageBox.Show("已经添加,不能重复添加!");
                        return(false);
                    }
                }

                items.Add(controllerItem);

                Stream          stream          = File.Open("controllers.dat", FileMode.Open);
                BinaryFormatter binaryFormatter = new BinaryFormatter();

                binaryFormatter.Serialize(stream, items.ToArray());

                stream.Close();

                currentPageIndex = 0;
                controllerItems.Add(controllerItem);
                LoadControllerItems(controllerItems.ToArray(), 0);

                return(true);
            };

            addControllerFrom.StartPosition = FormStartPosition.CenterParent;
            addControllerFrom.ShowDialog();
        }
Example #16
0
        /// <summary>
        /// 导入配置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ImportButton_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "*.dat|*.dat";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                Stream          stream          = File.Open(openFileDialog.FileName, FileMode.Open);
                BinaryFormatter binaryFormatter = new BinaryFormatter();

                ControllerItem controllerItem = binaryFormatter.Deserialize(stream) as ControllerItem;

                stream.Close();

                // 发送到灯具
                SendSettingToDevice(controllerItem);

                ReadSelectedComData(controllerItem.GroupId, controllerItem.AddressId);
            }
        }
Example #17
0
        public SettingControllerForm(SerialPort serialPort, ControllerItem controllerItem, ControllerItem[] controllerItems)
        {
            InitializeComponent();

            refreshSettingDisplay = RefreshSettingDisplay;

            this.serialPort            = serialPort;
            this.currentControllerItem = controllerItem;
            this.controllerItems       = controllerItems;

            this.trackBars = new TrackBar[] { trackBar1, trackBar2, trackBar3, trackBar4, trackBar5 };
            this.labels    = new Label[] { label8, label9, label10, label11, label12 };

            // 控制器列表
            foreach (var item in HelperTool.ReadControllersFromFile <ControllerItem>().OrderBy(m => m.GroupId))
            {
                comboBox1.Items.Add(item.GroupId + "," + item.AddressId);
            }

            comboBox1.Text = currentControllerItem.GroupId + "," + currentControllerItem.AddressId;
        }
Example #18
0
        /// <summary>
        /// 选择控制器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void controllersDataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            DataGridView dataGridView = (DataGridView)sender;
            var          items        = HelperTool.ReadControllersFromFile <ControllerItem>();

            if (items == null || items.Count() == 0)
            {
                return;
            }

            if (dataGridView.CurrentRow == null)
            {
                return;
            }

            Console.WriteLine("选择了第 {0} 行!", dataGridView.CurrentRow.Index);
            currentControllerItem = items[dataGridView.CurrentRow.Index];

            // 读取当前设备的设置
            ReadCurrentControllerAllData(currentControllerItem);
        }
Example #19
0
        private void CreateTimePointList(ControllerItem item)
        {
            //if (item.OnTimersMinutes == null)
            //{
            //    CreateAddTimePointRow(timePanel, new Point(7, 20 + 0), rowHeight, "Add Time Point", 0, addTurnOnTimePointBtnTag);
            //    return;
            //}

            //if (item.OffTimersMinutes == null)
            //{
            //    CreateAddTimePointRow(timePanel, new Point(299, 20 + 0), rowHeight, "Add Turn Off Time", 299, addTurnOffTimePointBtnTag);
            //    return;
            //}

            timePanel.Controls.Clear();
            turnOffTimerLabels.Clear();
            turnOnTimerLabels.Clear();
            // 创建打开定时器
            for (int i = 0; i < item.OnTimersMinutes.Count; i++)
            {
                var onTimer = item.OnTimersMinutes[i];

                CreateTimePointRow(timePanel, 10000, i, rowHeight, HelperTool.ConverMinutes2DateTime(onTimer), 0);
            }

            // 创建增加打开定时器按钮
            CreateAddTimePointRow(timePanel, new Point(7, 20 + item.OnTimersMinutes.Count * rowHeight), rowHeight, "Add Time Point", 0, addTurnOnTimePointBtnTag);

            // 创建关闭定时器
            for (int i = 0; i < item.OffTimersMinutes.Count; i++)
            {
                var offTimer = item.OffTimersMinutes[i];

                CreateTimePointRow(timePanel, 20000, i, rowHeight, HelperTool.ConverMinutes2DateTime(offTimer), 299);
            }

            // 创建增加关闭定时器按钮
            CreateAddTimePointRow(timePanel, new Point(299, 20 + item.OffTimersMinutes.Count * rowHeight), rowHeight, "Add Turn Off Time", 299, addTurnOffTimePointBtnTag);
        }
Example #20
0
 private void RenderItem(ControllerItem i)
 {
     if (i is Button b)
     {
         RenderButton(b);
     }
     if (i is RangeButton rb)
     {
         RenderRangeButton(rb);
     }
     if (i is Stick s)
     {
         RenderStick(s);
     }
     if (i is Trigger t)
     {
         RenderTrigger(t);
     }
     if (i is Detail d)
     {
         RenderDetail(d);
     }
 }
Example #21
0
        static void Main(string[] args)
        {
            int       pilihan  = 0;
            Item      item     = new Item();
            MyContext _context = new MyContext();

            Console.WriteLine("==========Item Data==========");
            Console.WriteLine("1. Mangae Suppliers");
            Console.WriteLine("2. Manage Items");
            Console.WriteLine("3. Transaction");
            Console.WriteLine("====================================");
            Console.Write("Pilihanmu : ");
            pilihan = int.Parse(Console.ReadLine());
            Console.WriteLine("====================================");
            switch (pilihan)
            {
            case 1:
                ControllerSupplier bebas = new ControllerSupplier();
                bebas.ManageSupplier();
                break;

            case 2:
                ControllerItem namanyaapa = new ControllerItem();
                namanyaapa.ManageItem();
                break;

            case 3:
                controllerTransaction bingung = new controllerTransaction();
                bingung.ManageTransaction();
                break;

            default:
                Console.WriteLine("Your Choice is not found, try again see you later good bye.");
                break;
            }
            Console.Read();
        }
Example #22
0
        /// <summary>
        /// 设置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SettingButton_Click(object sender, EventArgs e)
        {
            Button settingBtn = (Button)sender;
            int    groupId    = 0;
            int    addressId  = 0;

            HelperTool.GetControllerAddressId(settingBtn.Tag.ToString(), out groupId, out addressId);

            currentControllerItem = GetCurrentController(groupId, addressId);
            if (currentControllerItem == null)
            {
                return;
            }

            SettingControllerForm settingControllerForm = new SettingControllerForm(serialPort, currentControllerItem, controllerItems.ToArray());

            settingControllerForm.saveSetting = () =>
            {
                // 刷新控制器列表
                Invoke(reLoadControllerItems);
            };

            settingControllerForm.ShowDialog();
        }
Example #23
0
 public ControllerData(ControllerItem controller, byte[] data)
 {
     Controller = controller;
     Data = data;
 }
Example #24
0
 private void SpawnControllerListenerTask()
 {
     Task.Run(() =>
     {
         lock (m_lock)
         {
             try
             {
                 m_controllerListener = new TcpListener(IPAddress.Any, m_settingsModel.ControllerPort);
                 m_controllerListener.AllowNatTraversal(true);
                 m_controllerListener.Start();
             }
             catch
             {
                 m_controllerListener = null;
                 return;
             }
         }
         Program.SaveWriteLine("* Listening for controller clients on port: " + m_settingsModel.ControllerPort);
         while (m_running)
         {
             try
             {
                 var client = m_controllerListener.AcceptTcpClient(new TimeSpan(1000));
                 var tokenBytes = new byte[TOKEN_SIZE];
                 var stream = client.GetStream();
                 var tokenSize = stream.Read(tokenBytes, 0, TOKEN_SIZE);
                 if (tokenSize == TOKEN_SIZE)
                 {
                     var ascii = new ASCIIEncoding();
                     var token = ascii.GetString(tokenBytes);
                     if (token == m_settingsModel.Token)
                     {
                         token = Guid.NewGuid().ToString();
                         if (token.Length < TOKEN_SIZE)
                             for (int i = token.Length; i < TOKEN_SIZE; ++i)
                                 token += " ";
                         else if (token.Length > TOKEN_SIZE)
                             token = token.Substring(0, TOKEN_SIZE);
                         lock (m_controllerClientsLock)
                         {
                             if (m_controllerClients.ContainsKey(token))
                                 stream.WriteByte(0);
                             else
                             {
                                 var permissionsBytes = new byte[4];
                                 stream.Read(permissionsBytes, 0, 4);
                                 m_controllerClients[token] = new ControllerItem(token, client, (ControllerPermissions)BitConverter.ToInt32(permissionsBytes, 0));
                                 tokenBytes = ascii.GetBytes(token);
                                 stream.Write(tokenBytes, 0, tokenBytes.Length);
                                 Program.SaveWriteLine("* Controller connected: " + token);
                                 client.ReceiveTimeout = 1000;
                                 client.NoDelay = true;
                                 SpawnControllerReceiverTask(token);
                             }
                         }
                     }
                 }
             }
             catch { }
             Thread.Sleep(100);
         }
         lock (m_lock)
         {
             if (m_controllerListener != null)
                 m_controllerListener.Stop();
             m_controllerListener = null;
         }
         Program.SaveWriteLine("* Stop listening for controller clients");
     });
 }
Example #25
0
        private void ReadCurrentControllerAllData(ControllerItem controllerItem)
        {
            byte[] txData = { (byte)controllerItem.GroupId, (byte)controllerItem.AddressId, 0x03, 0x10, (byte)dataToRead };

            SendData(txData, false);
        }
Example #26
0
        /// <summary>
        /// 解析数据
        /// </summary>
        /// <param name="controllerItem"></param>
        /// <param name="rcDataLength"></param>
        /// <param name="reDatas"></param>
        private void ParseReData(ref ControllerItem controllerItem, int rcDataLength, byte[] reDatas)
        {
            if (rcDataLength == 0)
            {
                return;
            }

            if (isReadAll == false)
            {
                return;
            }

            receDataLength = receDataLength + rcDataLength;
            Console.WriteLine("接收数据长度:" + receDataLength);
            if (recData == null)
            {
                recData = new List <byte>();
            }

            recData.AddRange(reDatas);
            if ((receDataLength + 1) == (headLength + dataToRead + checkCodeLength))
            {
                receDataLength = -1;
                // 接收完毕,开始解析
                int startIndex = 5;

                // 解析开关状态
                controllerItem.PowerState = recData[startIndex] == 0 ? false : true;

                // 解析各路数据
                controllerItem.LightsColorValues = new List <int>();
                for (int i = 0; i < 6; i++)
                {
                    startIndex = startIndex + 2;
                    int prev = (recData[startIndex] << 8);
                    int next = recData[startIndex - 1];
                    controllerItem.LightsColorValues.Add(prev | next);
                }

                startIndex = startIndex + 4;
                // 解析关闭定时器
                controllerItem.OffTimerCount    = 0;
                controllerItem.OffTimersMinutes = new List <int>();
                for (int i = 0; i < 8; i++)
                {
                    if (recData[startIndex + 1] == 255 || recData[startIndex] == 255)
                    {
                        startIndex = startIndex + 2;
                        continue;
                    }

                    int prev = (recData[startIndex + 1] << 8);
                    int next = recData[startIndex];
                    controllerItem.OffTimersMinutes.Add(prev | next);

                    startIndex = startIndex + 2;

                    controllerItem.OffTimerCount++;
                }

                // 解析打开定时器
                controllerItem.OnTimerCount        = 0;
                controllerItem.OnTimersMinutes     = new List <int>();
                controllerItem.OnTimersColorValues = new List <List <int> >();
                for (int i = 0; i < 8; i++)
                {
                    if (recData[startIndex + 1] == 255 || recData[startIndex] == 255)
                    {
                        startIndex = startIndex + 8;
                        continue;
                    }

                    int prev = (recData[startIndex + 1] << 8);
                    int next = recData[startIndex];
                    controllerItem.OnTimersMinutes.Add(prev | next);

                    List <int> colorValues = new List <int>();
                    for (int j = 0; j < 6; j++)
                    {
                        colorValues.Add(recData[startIndex + 2]);
                        startIndex = startIndex + 1;
                    }

                    controllerItem.OnTimersColorValues.Add(colorValues);
                    controllerItem.OnTimerCount++;
                    startIndex = startIndex + 2;
                }

                Console.WriteLine("解析完毕");

                recData = null;

                //// 颜色条设置
                Invoke(setTrackBar, currentControllerItem.LightsColorValues);

                //// 设置关闭定时器信息
                Invoke(setOffTimerDataGridView, currentControllerItem.OffTimerCount, currentControllerItem.OffTimersMinutes);

                //// 设置打开定时器信息
                Invoke(setOnTimerDataGridView, currentControllerItem.OnTimerCount, currentControllerItem.OnTimersMinutes, currentControllerItem.OnTimersColorValues);
            }
        }
Example #27
0
        private void DrawChart(ControllerItem item)
        {
            List <LineModel> lineModels = new List <LineModel>();

            for (int i = 0; i < item.OnTimerCount; i++)
            {
                var model = new LineModel()
                {
                    XAxis        = item.OnTimersMinutes[i],
                    IsTurnOn     = true,
                    ColorPercent = item.OnTimersColorValues[i]
                };

                lineModels.Add(model);
            }

            for (int i = 0; i < item.OffTimerCount; i++)
            {
                var model = new LineModel()
                {
                    XAxis        = item.OffTimersMinutes[i],
                    IsTurnOn     = false,
                    ColorPercent = new List <int>(channelNum)
                    {
                        0, 0, 0, 0
                    }
                };

                lineModels.Add(model);
            }

            lineModels.Sort((x, y) => x.XAxis.CompareTo(y.XAxis));

            if (lineModels == null || lineModels.Count <= 0)
            {
                return;
            }

            timePointChart.Series.Clear();
            for (int i = 0; i < channelNum; i++)
            {
                Series series = timePointChart.Series.Add("Channel" + i.ToString());

                series.ChartType   = SeriesChartType.Line;
                series.MarkerStyle = MarkerStyle.Circle;
                series.XAxisType   = AxisType.Primary;

                series.Points.Add(new DataPoint(0, lineModels[lineModels.Count - 1].ColorPercent[i]));
                series.Points.Add(new DataPoint(lineModels[0].XAxis, lineModels[lineModels.Count - 1].ColorPercent[i]));
                for (int j = 0; j < lineModels.Count; j++)
                {
                    var model = lineModels[j];
                    series.Points.Add(new DataPoint(model.XAxis, model.ColorPercent[i]));

                    if (j + 1 < lineModels.Count)
                    {
                        series.Points.Add(new DataPoint(lineModels[j + 1].XAxis, model.ColorPercent[i]));
                    }
                }

                series.Points.Add(new DataPoint(1439, lineModels[lineModels.Count - 1].ColorPercent[i]));
            }
        }