xm
2020-04-16 6fa9d69da922c8049f5acfcbb9ce9fd26811024c
ZigbeeApp/Shared/Phone/UserCenter/Device/Curtain/AutoOpenDirectionAndLimitSettionForm.cs
@@ -61,7 +61,7 @@
        /// <param name="i_listdevice">窗帘的回路</param>
        public void ShowForm(Rollershade i_CurtainDevice)
        {
            UserView.HomePage.Instance.ScrollEnabled = false;
            this.ScrollEnabled = false;
            this.curtainDevice = i_CurtainDevice;
@@ -99,15 +99,51 @@
                listView.Height = bodyFrameLayout.Height;
                bodyFrameLayout.AddChidren(listView);
                //添加方向行
                this.AddDirectionRow();
                //添加限位行
                this.AddLimitRow();
                //添加重置电机行
                this.AddElectricalMachineryRow();
                //导轨长度为0时
                if (curtainData.CurtainLength <= 0)
                {
                    //电机数据异常,请重置电机
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain));
                    try
                    {
                        //设备异常补救 -> 添加重置电机行
                        this.AddElectricalMachineryRow();
                        return;
                    }
                    catch (Exception ex2)
                    {
                        HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常1");
                        return;
                    }
                }
                //限位数据接收
                this.ReceiveLimitData();
                try
                {
                    //添加方向行
                    this.AddDirectionRow();
                    //添加限位行
                    this.AddLimitRow();
                    //添加重置电机行
                    this.AddElectricalMachineryRow();
                    //限位数据接收
                    this.ReceiveLimitData();
                }
                catch (Exception ex)
                {
                    //Log出力
                    string msg = "当前激活的界面[" + UserCenterResourse.NowActionFormID + "]";
                    HdlLogLogic.Current.WriteLog(ex, msg);
                    //电机数据异常,请重置电机
                    this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uCurtainDataIsErrorPleaseResetCurtain));
                    try
                    {
                        this.listView.RemoveAll();
                        //设备异常补救 -> 添加重置电机行
                        this.AddElectricalMachineryRow();
                    }
                    catch (Exception ex2) { HdlLogLogic.Current.WriteLog(ex2, "开合帘补救异常2"); }
                }
            });
        }
@@ -216,6 +252,8 @@
            frameBack.AddChidren(btnProgressView);
            int progressValue = (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
            //设置百分比的初始值
            curtainData.OpenLimitPersent = progressValue;
            var btnProgress1 = new NormalViewControl(200, 50, true);
            btnProgress1.X = Application.GetRealWidth(200);
            btnProgress1.Y = btnProgressView.Y;
@@ -224,7 +262,7 @@
            btnProgress1.Text = progressValue + "%";
            frameBack.AddChidren(btnProgress1);
            //进度条
            this.openSeekBar = new  SeekBarControl(965);
            this.openSeekBar = new SeekBarControl(965);
            openSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
            openSeekBar.ProgressBarColor = 0xff288bfd;
            openSeekBar.Progress = progressValue;
@@ -334,17 +372,7 @@
                    }
                    oldProValue = nowValue;
                    checking = true;
                    if (curtainData.DeleteOpenLimit == true)
                    {
                        //重置开限位点
                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.UpLimit);
                        if (result == false)
                        {
                            checking = false;
                            continue;
                        }
                        curtainData.DeleteOpenLimit = false;
                    }
                    //将窗帘调整到指定百分比
                    this.sendDiv = 1;
                    curtainDevice.WcdGoToTiltValue(nowValue);
@@ -362,12 +390,15 @@
            string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainOpenLimitMsg);
            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
            {
                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
                if (openValue < 0) { openValue = 0; }
                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
                //执行确认及覆盖上限位点
                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.UpLimit,
                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
                    (int)openValue, (int)closeValue);
                if (result == true)
                {
                    curtainData.DeleteOpenLimit = true;
                    this.receiveOpenlimit = false;
                }
            });
@@ -393,6 +424,8 @@
            frameBack.AddChidren(btnProgressView);
            int progressValue = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100);
            //设置百分比的初始值
            curtainData.CloseLimitPersent = progressValue;
            var btnProgress1 = new NormalViewControl(200, 50, true);
            btnProgress1.X = Application.GetRealWidth(200);
            btnProgress1.Y = btnProgressView.Y;
@@ -401,7 +434,7 @@
            btnProgress1.Text = progressValue + "%";
            frameBack.AddChidren(btnProgress1);
            //进度条
            this.closeSeekBar = new  SeekBarControl(965);
            this.closeSeekBar = new SeekBarControl(965);
            closeSeekBar.Y = btnProgressView.Bottom + Application.GetRealHeight(46);
            closeSeekBar.ProgressBarColor = 0xff288bfd;
            closeSeekBar.Progress = progressValue;
@@ -457,7 +490,7 @@
            frameBack.AddChidren(btnPlus);
            btnPlus.ButtonClickEvent += (sender, e) =>
            {
                if (closeSeekBar.Progress >=100)
                if (closeSeekBar.Progress >= 100)
                {
                    return;
                }
@@ -511,16 +544,7 @@
                    }
                    checking = true;
                    oldProValue = nowValue;
                    if (curtainData.DeleteCloseLimit == true)
                    {
                        //重置合限位点
                        var result = await HdlDeviceCurtainLogic.Current.DeleteCurtainLimitPoint(curtainDevice, Rollershade.LimiType.DownLimit);
                        if (result == false)
                        {
                            continue;
                        }
                        curtainData.DeleteCloseLimit = false;
                    }
                    //将窗帘调整到指定百分比
                    this.sendDiv = 2;
                    curtainDevice.WcdGoToTiltValue(nowValue);
@@ -538,12 +562,16 @@
            string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainCloseLimitMsg);
            this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
            {
                //执行确认及覆盖合限位点
                decimal openValue = ((decimal)curtainData.OpenLimitPersent / 100) * curtainData.CurtainLength;
                decimal closeValue = ((decimal)curtainData.CloseLimitPersent / 100) * curtainData.CurtainLength;
                if (openValue < 0) { openValue = 0; }
                if (closeValue < 0) { closeValue = curtainData.CurtainLength; }
                //执行确认及覆盖上限位点
                var result = await HdlDeviceCurtainLogic.Current.CommitCurtainLimitPoint(curtainDevice, Rollershade.CurtainPrivateInstalledLimi.DownLimit,
                    curtainData.OpenLimitPersent, curtainData.CloseLimitPersent);
                    (int)openValue, (int)closeValue);
                if (result == true)
                {
                    curtainData.DeleteCloseLimit = true;
                    this.receiveCloseLimit = false;
                }
            });
@@ -588,6 +616,10 @@
                        //每10的长度大概是2秒,多预留1次出来
                        int waitCount = ((curtainData.CurtainLength / 10) + 1) * 3;
                        if (waitCount < 12)
                        {
                            waitCount = 12;
                        }
                        int timeCount = 0;
                        while (timeCount <= waitCount)
@@ -627,7 +659,7 @@
            this.receiveCloseLimit = false;
            this.sendDiv = 0;
            bool receiptData = false;
            int receiptDataCount = 0;
            string mainkeys = LocalDevice.Current.GetDeviceMainKeys(curtainDevice);
            HdlGatewayReceiveLogic.Current.AddAttributeEvent("CurtainDeviceAttribute", ReceiveComandDiv.A设备属性上报, (device) =>
            {
@@ -651,23 +683,25 @@
                            //正向
                            curtainData.Direction = false;
                        }
                        receiptDataCount++;
                    }
                    else if (attriBute.AttributeId == 1)
                    {
                        //窗帘总长
                        curtainData.CurtainLength = attriBute.AttriButeData;
                        receiptDataCount++;
                    }
                    else if (attriBute.AttributeId == 16)
                    {
                        //开限位
                        curtainData.OpenLimitValue = attriBute.AttriButeData;
                        receiptDataCount++;
                    }
                    else if (attriBute.AttributeId == 17)
                    {
                        //合限位
                        curtainData.CloseLimitValue = attriBute.AttriButeData;
                        //数据接收结束
                        receiptData = true;
                        receiptDataCount++;
                    }
                }
            });
@@ -675,7 +709,7 @@
            HdlDeviceCurtainLogic.Current.SetGetCurtainLimitSettionComand(curtainDevice);
            int timeCount = 30;
            while (receiptData == false && timeCount >= 0)
            while (receiptDataCount != 4 && timeCount >= 0)
            {
                System.Threading.Thread.Sleep(100);
                timeCount--;
@@ -696,7 +730,7 @@
            HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
            //备份窗帘数据
            if (this.backupCurtainData == true)
            if (this.backupCurtainData == true && curtainData.CurtainLength > 0)
            {
                this.backupCurtainData = false;
                HdlThreadLogic.Current.RunThread(async () =>
@@ -704,7 +738,7 @@
                    //方向备份
                    await HdlDeviceCurtainLogic.Current.BackupCurtainDirection(curtainDevice, curtainData.Direction);
                    //限位备份
                    int uplimit= (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    int uplimit = (int)(curtainData.OpenLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    int downlimit = (int)(curtainData.CloseLimitValue / (curtainData.CurtainLength * 1.0) * 100);
                    await HdlDeviceCurtainLogic.Current.BackupCurtainLimitPoint(curtainDevice, uplimit, downlimit);
                });
@@ -766,8 +800,6 @@
            HdlGatewayReceiveLogic.Current.RemoveEvent("CurtainDeviceAttribute");
            HdlGatewayReceiveLogic.Current.RemoveEvent("ReceiveLimitData");
            UserView.HomePage.Instance.ScrollEnabled = true;
            base.CloseFormBefore();
        }
@@ -784,14 +816,6 @@
            /// false:电机方向正向;true:电机方向反向
            /// </summary>
            public bool Direction = false;
            /// <summary>
            /// 是否重置开限位点
            /// </summary>
            public bool DeleteOpenLimit = true;
            /// <summary>
            /// 是否重置合限位点
            /// </summary>
            public bool DeleteCloseLimit = true;
            /// <summary>
            /// 开限位的值
            /// </summary>