Procházet zdrojové kódy

基本实现小米FireTV功能,待确认接口使用后完善剩余工作。

sat23 před 3 roky
rodič
revize
541d885986

+ 1 - 1
FactoryTool_CShare/Business/CommonMethod.cs

@@ -2373,7 +2373,7 @@ namespace MOKA_Factory_Tools
         public static bool GetMIKey(string sn, out MIKey mikey, out string msg)
         {
             msg = "";
-            mikey = null;
+            mikey = new MIKey();
             string strPost = String.Format("{{\"TVSN\":\"{0}\"}}", sn);
             HttpHelper http = new HttpHelper();
             HttpItem item = new HttpItem()

+ 8 - 8
FactoryTool_CShare/Models/StructList.cs

@@ -538,22 +538,22 @@ namespace MOKA_Factory_Tools
     #region 小米FireTVKey;
     public class MIKey
     {
-        public string Batchnum;
         public string TVSN;
-        public string TVMN;
-        public string EthernetMac;
-        public string FWVersion;
-        public string Model;
+        public string Batchnum;
         public string UpdateUser;
         public string UpdateTime;
+        public string FWVersion;
+        public string Model;
+        public string IsPrint;
+        public string FWVersion_2;
+        public string OPName;
+        public string TVMN;
+        public string EthernetMac;        
         public string BTMac;
         public string EAN;
-        public string IsPrint;
         public string SKU;
         public string DeviceID;
-        public string OPName;
         public string OPSN;
-        public string FWVersion_2;
         public string DSN;
     }
 

+ 190 - 34
FactoryTool_CShare/Views/OperationPanel.cs

@@ -49,6 +49,7 @@ namespace MOKA_Factory_Tools
         string availableCount = "unknow";
         // 只有NTF才用该变量, 0试产, 1=量产;
         int nOrderType = -1;
+        MIKey _MiKey = null;
 
         //删除界面指针委托
         public delegate void DisplayUpdateDelegate(IntPtr intPtr);
@@ -1502,6 +1503,139 @@ namespace MOKA_Factory_Tools
             ProductMsg_Text.BackColor = Color.Transparent;
         }
 
+        /// <summary>
+        /// 生成报文;
+        /// </summary>
+        /// <returns></returns>
+        public string GenerateReportInfo()
+        {
+            #region 移除非IDM抄写的Key;
+            if (FunctionSettingNow.MITVEnable && _MiKey != null)
+            {
+                // 配置要抄写的选项;
+                if (_MiKey.EthernetMac != null)
+                    SetCheckboxStatus(WriteMac, false);
+
+                if (_MiKey.BTMac != null)
+                    SetCheckboxStatus(WriteBTMac, false);
+
+                if (_MiKey.DeviceID != null)
+                    SetCheckboxStatus(WriteDID, false);
+
+                if (_MiKey.DSN != null)
+                    SetCheckboxStatus(WriteDSN, false);
+            }
+            #endregion
+
+            #region 生成IDMKey报文;
+            string reportdata = "";
+            if (SN.Trim().Length > 0)
+                reportdata += "sn=" + SN + "&";
+
+            if (WriteDID.Checked)
+                reportdata += "deviceid=" + keyInfo.DID + "&";
+
+            if (WriteMac.Checked)
+                reportdata += "mac=" + keyInfo.Mac + "&";
+
+            if (WriteWifiMac.Checked)
+                reportdata += "wifimac=" + keyInfo.WiFi_MAC + "&";
+
+            if (WriteBTMac.Checked)
+                reportdata += "btmac=" + keyInfo.BT_MAC + "&";
+
+            if (WriteHDCP.Checked)
+                reportdata += "hdcpkey=" + keyInfo.HDCP + "&";
+
+            if (WriteHDCP22.Checked)
+                reportdata += "hdcpkey2=" + keyInfo.HDCP22 + "&";
+
+            if (WriteESN.Checked)
+                reportdata += "netfilxesn=" + keyInfo.ESN + "&";
+
+            if (WriteWiDi.Checked)
+                reportdata += "widi=" + keyInfo.WiDi + "&";
+
+            if (WritePEK.Checked)
+                reportdata += "pek=" + keyInfo.PEK + "&";
+
+            if (WriteYouTube.Checked)
+                reportdata += "youtubekey=" + keyInfo.YouTube_KEY + "&";
+
+            if (WriteWidevine.Checked)
+                reportdata += "widevine=" + keyInfo.Widevine + "&";
+
+            if (WriteCiplus.Checked)
+                reportdata += "cikey=" + keyInfo.CI_plus + "&";
+
+            if (WriteAttestation.Checked)
+                reportdata += "attestationmd5=" + keyInfo.AttestationMD5 + "&";
+
+            if (WriteMGK.Checked)
+                reportdata += "mgk=" + keyInfo.MGK + "&";
+
+            if (WriteFairplay.Checked)
+                reportdata += "fairplay=" + keyInfo.Fairplay + "&";
+
+            if (WriteECP.Checked)
+                reportdata += "ecp=" + keyInfo.ECP + "&";
+
+            if (WriteLEK.Checked)
+                reportdata += "lek=" + keyInfo.LEK + "&";
+
+            if (WritePlayready.Checked)
+                reportdata += "playready=" + keyInfo.Playready + "&";
+
+            if (WriteHash.Checked)
+                reportdata += "hash=" + keyInfo.Hashkey + "&";
+
+            if (WriteEDIDPID.Checked)
+                reportdata += "EDIDPid=" + keyInfo.EDIDPid + "&";
+
+            if (WriteEDIDName.Checked)
+                reportdata += "EDIDModeName=" + keyInfo.EDIDModelName + "&";
+
+            if (WriteACASKey.Checked)
+                reportdata += "acas_tool=" + keyInfo.ACASKey_Tool + "&";
+
+            if (WriteACASKey.Checked)
+                reportdata += "acas_data=" + keyInfo.ACASKey_Data + "&";
+
+            if (ProjectIDNote.Text != LResource.SkipCovering)
+                reportdata += "projectid=" + ProjectIDText.Text + "&";
+
+            if (FunctionSettingNow.WriteWB)
+                reportdata += "wbNormal=" + FunctionSettingNow.NormalRGB[0].ToString() + ":" + FunctionSettingNow.NormalRGB[1].ToString() + ":" + FunctionSettingNow.NormalRGB[2].ToString() + "&" + "wbCool=" + FunctionSettingNow.CoolRGB[0].ToString() + ":" + FunctionSettingNow.CoolRGB[1].ToString() + ":" + FunctionSettingNow.CoolRGB[2].ToString() + "&" + "wbWarm=" + FunctionSettingNow.WarmRGB[0].ToString() + ":" + FunctionSettingNow.WarmRGB[1].ToString() + ":" + FunctionSettingNow.WarmRGB[2].ToString() + "&";
+
+            reportdata += "toolVersion=" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "&";
+
+            return reportdata;
+            #endregion
+        }
+
+        public bool ReportMIInfo(out string msg)
+        {
+            msg = "";
+            // 上报MIKey抄写结果;
+            ReportMIKey reportMIKey = new ReportMIKey();
+            reportMIKey.EthernetMAC = _MiKey.EthernetMac;
+            reportMIKey.BTMAC = _MiKey.BTMac;
+            reportMIKey.HDCP22 = "";
+            reportMIKey.HDCP14 = "";
+            reportMIKey.ChipMN = "";
+            reportMIKey.ChipSN = "";
+            reportMIKey.DSN = "";
+            reportMIKey.TVMN = "";
+            reportMIKey.TVSN = "";
+
+            if (!CommonMethod.ReportMIKey(reportMIKey, out msg))
+            {
+                return false;
+            }
+
+            return true;
+        }
+
         /// <summary>
         /// 执行抄key等动作
         /// </summary>
@@ -1520,9 +1654,6 @@ namespace MOKA_Factory_Tools
             // 3表示抄写成功,特殊:上报MES失败;
             int TestResult = 0;
             string keycontent = "";
-            if (SN != null)
-                if (SN.Trim().Length > 0)
-                    keycontent += "sn=" + SN + "&";
             bool EnterFactoryResult = false;
             byte[] result;
             byte[] data;
@@ -2281,6 +2412,44 @@ namespace MOKA_Factory_Tools
                 Log.WriteInfoLog(string.Format("Get All Keys Elapsed={0}", watch.Elapsed.TotalMilliseconds));
             }
 
+            #region 小米FireTV功能启用;
+            if (FunctionSettingNow.MITVEnable)
+            {
+                // 获取Key;
+                if (!CommonMethod.GetMIKey(SN, out _MiKey, out error))
+                {
+                    ErrMsg = string.Format("GetMIKey error!\r\n{0}", error);
+                    Log.WriteErrorLog(ErrMsg);
+                    goto end;
+                }
+
+                // 配置要抄写的选项;
+                if (_MiKey.EthernetMac != null)
+                {
+                    SetCheckboxStatus(WriteMac, true);
+                    keyInfo.Mac = _MiKey.EthernetMac;
+                }
+
+                if (_MiKey.BTMac != null)
+                {
+                    SetCheckboxStatus(WriteBTMac, true);
+                    keyInfo.BT_MAC = _MiKey.BTMac;
+                }
+
+                if (_MiKey.DeviceID != null)
+                {
+                    SetCheckboxStatus(WriteDID, true);
+                    keyInfo.DID = _MiKey.DeviceID;
+                }
+
+                if (_MiKey.DSN != null)
+                {
+                    SetCheckboxStatus(WriteDSN, true);
+                    keyInfo.DSN = _MiKey.DSN;
+                }
+            }
+            #endregion
+
             // 如果是抄写EDID,则不获取白平衡数据;
             if (CommonMethod.IsEDIDCopy(midListNow))
             {
@@ -2340,7 +2509,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetDeviceID(TVPort, DIDData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writedid);
-                    keycontent += "deviceid=" + keyInfo.DID + "&";
                     Log.WriteInfoLog("Check DID...");
                     if (writeCheckNow.DIDCheckcheck ? SerialCMD.CheckDeviceId(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2403,7 +2571,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetMAC(TVPort, MacData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writemac);
-                    keycontent += "mac=" + keyInfo.Mac + "&";
                     Log.WriteInfoLog("Check Mac...");
                     if (writeCheckNow.MacCheckcheck ? SerialCMD.CheckMAC(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2465,7 +2632,6 @@ namespace MOKA_Factory_Tools
                 Log.WriteInfoLog("Write WifiMac...");
                 if (SerialCMD.SetFireTVWifiMac(TVPort, WifiMacData, out result, out data, out error, SerailDelay))
                 {
-                    keycontent += "wifimac=" + keyInfo.WiFi_MAC + "&";
                     SetsuccessStatus(m_writeWifiMac);
                     Log.WriteInfoLog("Check WifiMac...");
                     if (writeCheckNow.WifiMacCheckcheck ? SerialCMD.CheckFireTVWifiMac(TVPort, out result, out data, out error, SerailDelay) : true)
@@ -2528,7 +2694,6 @@ namespace MOKA_Factory_Tools
                 Log.WriteInfoLog("Write BTMac...");
                 if (SerialCMD.SetFireTVBTMac(TVPort, BTMacData, out result, out data, out error, SerailDelay))
                 {
-                    keycontent += "btmac=" + keyInfo.BT_MAC + "&";
                     SetsuccessStatus(m_writeBTMac);
                     Log.WriteInfoLog("Check BTMac...");
                     if (writeCheckNow.BTMacCheckcheck ? SerialCMD.CheckFireTVBTMac(TVPort, out result, out data, out error, SerailDelay) : true)
@@ -2591,7 +2756,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetHDCPKey(TVPort, HDCPData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writehdcp);
-                    keycontent += "hdcpkey=" + keyInfo.HDCP + "&";
                     Log.WriteInfoLog("Check HDCP...");
                     if (writeCheckNow.HDCPCheckcheck ? SerialCMD.CheckHDCP(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2655,7 +2819,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetHDCPKey22(TVPort, HDCP22Data, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writehdcp22);
-                    keycontent += "hdcpkey2=" + keyInfo.HDCP22 + "&";
                     Log.WriteInfoLog("Check HDCP22...");
                     if (writeCheckNow.HDCP22Checkcheck ? SerialCMD.CheckHDCP22(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2718,7 +2881,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetNetflixESN(TVPort, ESNData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeesn);
-                    keycontent += "netfilxesn=" + keyInfo.ESN + "&";
                     Log.WriteInfoLog("Check ESN...");
                     if (writeCheckNow.ESNCheckcheck ? SerialCMD.CheckNetflixESN(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2782,7 +2944,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetWidi(TVPort, WiDiData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writewidi);
-                    keycontent += "widi=" + keyInfo.WiDi + "&";
                     Log.WriteInfoLog("Check WiDi...");
                     if (writeCheckNow.WiDiCheckcheck ? SerialCMD.CheckWidi(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2845,7 +3006,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVPEK(TVPort, PEKData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writePEK);
-                    keycontent += "pek=" + keyInfo.PEK + "&";
                     Log.WriteInfoLog("Check PEK...");
                     if (writeCheckNow.PEKCheckcheck ? SerialCMD.CheckFireTVPEK(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2908,7 +3068,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVYoutube(TVPort, YouTubeData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeYouTube);
-                    keycontent += "youtubekey=" + keyInfo.YouTube_KEY + "&";
                     Log.WriteInfoLog("Check YouTube_KEY...");
                     if (writeCheckNow.YouTubeCheckcheck ? SerialCMD.CheckFireTVYoutube(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -2971,7 +3130,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetWidevine(TVPort, WidevineData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writewidevine);
-                    keycontent += "widevine=" + keyInfo.Widevine + "&";
                     Log.WriteInfoLog("Check Widevine...");
                     if (writeCheckNow.WidevineCheckcheck ? SerialCMD.CheckWidevine(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3041,7 +3199,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetCiKey(TVPort, CiplusData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeci);
-                    keycontent += "cikey=" + keyInfo.CI_plus + "&";
                     Log.WriteInfoLog("Check CI plus...");
                     if (writeCheckNow.CI_plusCheckcheck ? SerialCMD.CheckCikey(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3110,7 +3267,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetAttestationKey(TVPort, AttestationData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeattestation);
-                    keycontent += "attestationmd5=" + keyInfo.AttestationMD5 + "&";
                     Log.WriteInfoLog("Check Attestation key...");
                     if (writeCheckNow.AttestationCheckcheck ? SerialCMD.CheckAttestationKey(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3180,7 +3336,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetMGKKey(TVPort, MGKData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeMGK);
-                    keycontent += "mgk=" + keyInfo.MGK + "&";
                     Log.WriteInfoLog("Check MGK...");
                     if (writeCheckNow.MGKCheckcheck ? SerialCMD.CheckMGKkey(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3251,7 +3406,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVFairplay(TVPort, FairplayData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeFairplay);
-                    keycontent += "fairplay=" + keyInfo.Fairplay + "&";
                     Log.WriteInfoLog("Check Fairplay...");
                     if (writeCheckNow.FairplayCheckcheck ? SerialCMD.CheckFireTVFairplay(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3313,7 +3467,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetECP(TVPort, ECPData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeECP);
-                    keycontent += "ecp=" + keyInfo.ECP + "&";
                     Log.WriteInfoLog("Check ECP...");
                     if (writeCheckNow.ECPCheckcheck ? SerialCMD.CheckECP(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3375,7 +3528,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVLEK(TVPort, LEKData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeLEK);
-                    keycontent += "lek=" + keyInfo.LEK + "&";
                     Log.WriteInfoLog("Check LEK...");
                     if (writeCheckNow.LEKCheckcheck ? SerialCMD.CheckFireTVLEK(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3437,7 +3589,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVPlayready(TVPort, PlayreadyData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writePlayready);
-                    keycontent += "playready=" + keyInfo.Playready + "&";
                     Log.WriteInfoLog("Check Playready...");
                     if (writeCheckNow.PlayreadyCheckcheck ? SerialCMD.CheckFireTVPlayready(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3507,7 +3658,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetFireTVHashkey(TVPort, HashData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeHash);
-                    keycontent += "hash=" + keyInfo.Hashkey + "&";
                     Log.WriteInfoLog("Check Hash...");
                     if (writeCheckNow.HashCheckcheck ? SerialCMD.CheckFireTVHashkey(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3682,7 +3832,6 @@ namespace MOKA_Factory_Tools
                     if (SerialCMD.SetEDIDPid(TVPort, EDIDPidData, out result, out data, out error, SerailDelay))
                     {
                         SetsuccessStatus(m_writeEDIDPID);
-                        keycontent += "EDIDPid=" + keyInfo.EDIDPid + "&";
                         Log.WriteInfoLog("Read EDID Pid...");
                         if (readCheckNow.EDIDPIDReadcheck ? SerialCMD.ReadEDIDPid(TVPort, out result, out data, out error, SerailDelay) : true)
                         {
@@ -3737,7 +3886,6 @@ namespace MOKA_Factory_Tools
                     if (SerialCMD.SetEDIDModelName(TVPort, EDIDNameData, out result, out data, out error, SerailDelay))
                     {
                         SetsuccessStatus(m_writeEDIDName);
-                        keycontent += "EDIDModeName=" + keyInfo.EDIDModelName + "&";
                         Log.WriteInfoLog("Read EDID Mode Name...");
                         if (readCheckNow.EDIDModeNameReadcheck ? SerialCMD.ReadEDIDModelName(TVPort, out result, out data, out error, SerailDelay) : true)
                         {
@@ -3792,7 +3940,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetACASKeyTool(TVPort, ACASKeyTool, out result, out data, out error, SerailDelay))
                 {
                     //SetsuccessStatus(m_writeACASKey);
-                    keycontent += "acas_tool=" + keyInfo.ACASKey_Tool+ "&";
                     Log.WriteInfoLog("Check ACAS Key Tool...");
                     if (writeCheckNow.ACASKeyCheckcheck ? SerialCMD.CheckACASKeyTool(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3843,7 +3990,6 @@ namespace MOKA_Factory_Tools
                 if (SerialCMD.SetACASKeyData(TVPort, ACASKeyData, out result, out data, out error, SerailDelay))
                 {
                     SetsuccessStatus(m_writeACASKey);
-                    keycontent += "acas_data=" + keyInfo.ACASKey_Data + "&";
                     Log.WriteInfoLog("Check ACAS Key Data...");
                     if (writeCheckNow.ACASKeyCheckcheck ? SerialCMD.CheckACASKeyData(TVPort, out result, out data, out error, SerailDelay) : true)
                     {
@@ -3895,7 +4041,6 @@ namespace MOKA_Factory_Tools
             if (ProjectIDNote.Text != LResource.SkipCovering)
             {
                 Log.WriteInfoLog("Write projectID...");
-                keycontent += "projectid=" + ProjectIDText.Text + "&";
                 if (ProjectIDNote.Text == LResource.Covering || ProjectIDNote.Text == LResource.SkipReadCheck)
                 {
                     SetspecificText(ProjectIDNote, ProjectIDNote.Text, Color.FromArgb(128, 255, 128));
@@ -4073,7 +4218,6 @@ namespace MOKA_Factory_Tools
                     Log.WriteErrorLog(ErrMsg);
                     goto end;
                 }
-
             }
 
             //白平衡赋值
@@ -4096,7 +4240,6 @@ namespace MOKA_Factory_Tools
                             Log.WriteErrorLog(ErrMsg);
                             goto end;
                         }
-                        keycontent += "wbNormal=" + FunctionSettingNow.NormalRGB[0].ToString() + ":" + FunctionSettingNow.NormalRGB[1].ToString() + ":" + FunctionSettingNow.NormalRGB[2].ToString() + "&" + "wbCool=" + FunctionSettingNow.CoolRGB[0].ToString() + ":" + FunctionSettingNow.CoolRGB[1].ToString() + ":" + FunctionSettingNow.CoolRGB[2].ToString() + "&" + "wbWarm=" + FunctionSettingNow.WarmRGB[0].ToString() + ":" + FunctionSettingNow.WarmRGB[1].ToString() + ":" + FunctionSettingNow.WarmRGB[2].ToString() + "&";
                     }
                     else
                     {
@@ -4534,7 +4677,8 @@ namespace MOKA_Factory_Tools
                 Log.WriteInfoLog(string.Format("Write DSN Elapsed={0}", watch.Elapsed.TotalMilliseconds));
             }
 
-            keycontent += "toolVersion=" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "&";
+            // 生成IDM报文;
+            keycontent = GenerateReportInfo();
 
             //自定义指令发送
             if (FunctionSettingNow.CustomCMD != null)
@@ -4576,7 +4720,7 @@ namespace MOKA_Factory_Tools
 
             //数据上传
             if (midListNow.host == "LocalPC" && !preloadNow)
-            {
+            {// 离线抄写
                 if (GetLocalKeyCount.DeleteLocalKeys(keypath, keyStream, keyReader))
                 {
                     TestResult = 1;
@@ -4591,7 +4735,7 @@ namespace MOKA_Factory_Tools
                 }
             }
             else if (preloadNow)
-            {
+            {// 预绑定抄写;
                 //更新DB抄写状态
                 if (SQLiteHelper.UpdateCopyStatus(localDBNow, SN, out string copydate))
                 {
@@ -4607,7 +4751,6 @@ namespace MOKA_Factory_Tools
                 //上传抄写状态
                 if (midListNow.host != "LocalPC")
                     CommonMethod.UploadPreloadCopyResult(MidAddressNow.host, copydate, SN, localDBNow, errorDBNow, false, "", FunctionSettingNow.ReportTimeOut);
-
             }
             else if (!CommonMethod.HTTPChecker(midListNow.host))
             {
@@ -4617,7 +4760,7 @@ namespace MOKA_Factory_Tools
                 UpdateKeys(midListNow.keytype, false);
             }
             else
-            {
+            {// 在线抄写;
                 if (WriteDID.Checked)
                 {
                     if (CommonMethod.UploadCopyResult(keycontent + "sversionid=" + midListNow.version + "&clienttype=" + midListNow.clienttype + "&ordernum=" + orderNow, midListNow.host + "/report.do?", errorDBNow, orderNow, false, "", FunctionSettingNow.ReportTimeOut))
@@ -4674,6 +4817,19 @@ namespace MOKA_Factory_Tools
                 CommonMethod.ExportSNACASID(orderNow, SN, Encoding.ASCII.GetString(data));
             }
 
+            #region 小米FireTV功能;
+            if ( FunctionSettingNow.MITVEnable )
+            {
+                if ( !ReportMIInfo(out error) )
+                {
+                    TestResult = 0;
+                    ErrMsg = string.Format("{0}  ReportMIInfo ini fail! {1}", SN, error);
+                    Log.WriteErrorLog(ErrMsg);
+                    goto end;
+                }
+            }
+            #endregion
+
             SetsuccessStatus(ResultStatus);
             Thread.Sleep(FunctionSettingNow.Wait_after_completion);
         end: