Bläddra i källkod

1、在【固件下载】项,如果有USB配置下载更新,更新后需要复位USB设备,并重连设备
2、由于touchtool在合并打包.ini/.cfg/.bin这三个文件时,合并顺序不固定,所以要判断三个文件的合并顺序,然后根据文件的后缀来对应获取文件内容

robbin 1 månad sedan
förälder
incheckning
596f4d371f

+ 2 - 2
app/build.gradle

@@ -7,14 +7,14 @@ android {
         minSdkVersion 18
         targetSdkVersion 28
         versionCode 1
-        versionName "3.0.0C"
+        versionName "3.0.0E"
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
     }
     android.applicationVariants.all {
         variant ->
             variant.outputs.all{
                 //此处指定生成的apk文件名
-                outputFileName = "WingCoolAPK_V3.0.0C_20250331_debug.apk"
+                outputFileName = "WingCoolAPK_V3.0.0E_20250409_debug.apk"
             }
     }
     lintOptions {

+ 42 - 21
app/src/main/java/com/example/administrator/wingcool_gt9_apk/FirmwareUpdate.java

@@ -88,7 +88,7 @@ public class FirmwareUpdate extends AppCompatActivity
     private byte[] mSendData = new byte[1024];
     private byte[] mConfigData = new byte[1024];
     private String[] mVersionShow = new String[16];
-    byte[] mGt293xFirmwareData = new byte[500 * 1024];
+    byte[] mGt293xFirmwareData = new byte[400 * 1024];
 
     private boolean isReceiverMessage = true;
     private boolean isSendMessage = true;
@@ -634,7 +634,7 @@ public class FirmwareUpdate extends AppCompatActivity
                     mBytes[3] = 0x07;
                     mBytes[4] = 0x0B;
                     mBytes[5] = 0x00;
-                    iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes,0,6);
+                    iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes,0,6);
 
 
                     //read [0x10175] = 0x80,config is ready
@@ -675,7 +675,7 @@ public class FirmwareUpdate extends AppCompatActivity
                     mBytes[3] = 0x08;
                     mBytes[4] = 0x0C;
                     mBytes[5] = 0x00;
-                    iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes, 0, 6);
+                    iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes, 0, 6);
 
                     //read [0x10175] = 0x80,config is ready
                     //do {
@@ -1275,11 +1275,11 @@ public class FirmwareUpdate extends AppCompatActivity
     }
 
     //发送命令,使得S8xx可以通过IIC向GT79xx的固定地址写任意bytes的数据
-    private  boolean iicWrite32Bits(byte addrfirstbyte,byte addrsecondbyte,byte addrthirdbyte,byte[] wBuffer,int offset, int length) {
+    private  boolean iicWrite32Bits(byte addrfirstbyte,byte addrsecondbyte,byte addrthirdbyte,byte subCommand,byte[] wBuffer,int offset, int length) {
 
         int i;
 
-        iicWriteData[1] = (byte)0x8f; //7bit:0-read,1-write;other:command
+        iicWriteData[1] = (byte)(0x80 | subCommand);//0x0f; //7bit:0-read,1-write;other:command
         //iicWriteData[2] = 0x0f; //no command
         iicWriteData[2] = addrfirstbyte;
         iicWriteData[3] = addrsecondbyte;
@@ -1295,13 +1295,13 @@ public class FirmwareUpdate extends AppCompatActivity
         int address2 = addrthirdbyte&0xff;
         int address = address1|address2;
 
-        int sendTimes = length / 57 + 1;  //预计是向下取整,所以+1
+        int sendTimes = length/57 + 1;  //预计是向下取整,所以+1
 
         //iicByteData[5] = (byte)(length>>8);
         //iicByteData[6] = (byte)length;  //length 一次接收63个数据
 
         for (int k = 0; k < sendTimes; k++) {
-            int finalOffset = offset + k * 57; //每次只能发57bytes数据
+            int finalOffset = offset + k*57; //每次只能发57bytes数据
 
             if(length - (finalOffset -offset) < 57) {
 
@@ -1318,7 +1318,7 @@ public class FirmwareUpdate extends AppCompatActivity
             i = mUsbDeviceConnection.bulkTransfer(mUsbEndpointOut, iicWriteData, 0, 0x40, 100);
 
             if (i != 0x40) {
-                //editname.setText("iicWrite Failed");
+                //mShow.setText("iicWrite Failed");
                 return false;
 
             }
@@ -3028,7 +3028,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 mdata = (byte)0xFF;
 
                 IicWriteOneByte(addrfirstbyte, addrsecondbyte, addrthirdbyte, msubcommand, mdata);
-                //iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,byte[] wBuffer, 0, 1);
+                //iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,(byte)0x0f, byte[] wBuffer, 0, 1);
                 SystemClock.sleep(20);
                 //if (0xFF == gpI2C1->I2CByteRead(0xD807))
                 iicRead32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,msubcommand,mBytes, 1);
@@ -3095,7 +3095,7 @@ public class FirmwareUpdate extends AppCompatActivity
             addrthirdbyte = 0x00;
 
             //if (!gpI2C1->I2CWrite(BLB_ISP_RAM_ADDR, tmp_fw_info.p_fw_data, tmp_fw_info.fw_len))
-            if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,mGt293xFirmwareData,fw_data_index, fw_len))
+            if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mGt293xFirmwareData,fw_data_index, fw_len))
             {
                 Update_log = "[FW update]Update ISP Code Fail!";
                 mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
@@ -3120,7 +3120,7 @@ public class FirmwareUpdate extends AppCompatActivity
             addrthirdbyte = 0x00;
 
             //if (!gpI2C1->I2CWrite(BLD_ISP_RAM_ADDR, tmp_fw_info.p_fw_data, tmp_fw_info.fw_len))
-            if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,mGt293xFirmwareData,fw_data_index, fw_len))
+            if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mGt293xFirmwareData,fw_data_index, fw_len))
             {
                 return false;
             }
@@ -3156,7 +3156,7 @@ public class FirmwareUpdate extends AppCompatActivity
         addrfirstbyte = 0x01;
         addrsecondbyte = 0x00;
         addrthirdbyte = 0x00;
-        if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBytes, 0, 8)) {
+        if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mBytes, 0, 8)) {
             return false;
         }
         SystemClock.sleep(20);
@@ -3265,7 +3265,7 @@ public class FirmwareUpdate extends AppCompatActivity
                     addrfirstbyte = 0x01;
                     addrsecondbyte = 0x34;
                     addrthirdbyte = 0x10;
-                    if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,pbSendBuf,0, nLen + 4))
+                    if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,(byte)0x0f, pbSendBuf,0, nLen + 4))
                     //if (!gpI2C1->I2CWrite(BLB_CMD_DATA_ADDR, pbSendBuf, nLen + 4))
                     {
                         ret = false;
@@ -3277,7 +3277,7 @@ public class FirmwareUpdate extends AppCompatActivity
                     addrfirstbyte = 0x01;
                     addrsecondbyte = 0x24;
                     addrthirdbyte = 0x10;
-                    if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,pbSendBuf,0, nLen + 4))
+                    if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,(byte)0x0f, pbSendBuf,0, nLen + 4))
                     //if (!gpI2C1->I2CWrite(BLD_CMD_DATA_ADDR, pbSendBuf, nLen + 4))
                     {
                         ret = false;
@@ -3330,7 +3330,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 addrfirstbyte = 0x01;
                 addrsecondbyte = 0x34;
                 addrthirdbyte = 0x00;
-                if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,mBytes,0, 13))
+                if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,(byte)0x0f, mBytes,0, 13))
                 //if (!gpI2C1->I2CWrite(BLB_CMD_ADDR, cmd, 13))
                 {
                     ret = false;
@@ -3360,7 +3360,7 @@ public class FirmwareUpdate extends AppCompatActivity
                 addrfirstbyte = 0x01;
                 addrsecondbyte = 0x24;
                 addrthirdbyte = 0x00;
-                if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,mBytes,0, 13))
+                if (!iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte,(byte)0x0f, mBytes,0, 13))
                 //if (!gpI2C1->I2CWrite(BLD_CMD_ADDR, cmd, 13))
                 {
                     ret = false;
@@ -3485,7 +3485,7 @@ public class FirmwareUpdate extends AppCompatActivity
 
         //send 0x00 to [0x10174],清除标志
         mBytes[0] = 0x00;
-        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes,0,1);
+        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes,0,1);
         SystemClock.sleep(15);
 
         //send 0x00 0x00 0x04 0x04 0x08 0x00 to [0x10174],通知GT29XX,send cfg
@@ -3495,7 +3495,7 @@ public class FirmwareUpdate extends AppCompatActivity
         mBytes[3] = 0x04;
         mBytes[4] = 0x08;
         mBytes[5] = 0x00;
-        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes,0,6);
+        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes,0,6);
 
         //30ms一次轮询[0x10174],如果是0x80,说明GT29XX已准备好,可以send cfg
         do {
@@ -3565,7 +3565,7 @@ public class FirmwareUpdate extends AppCompatActivity
             addrthirdbyte = (byte)0x8C;
         }
 
-        iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, mBufferData,0,iconfiglen + 64);
+        iicWrite32Bits(addrfirstbyte, addrsecondbyte, addrthirdbyte, (byte)0x0f, mBufferData,0,iconfiglen + 64);
 
         SystemClock.sleep(30);
 
@@ -3587,7 +3587,7 @@ public class FirmwareUpdate extends AppCompatActivity
         mBytes[3] = 0x05;
         mBytes[4] = 0x09;
         mBytes[5] = 0x00;
-        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes,0,6);
+        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes,0,6);
 
         //30ms一次轮询[0x10174],如果是0x80,说明GT29XX已接收配置
         do {
@@ -3617,7 +3617,7 @@ public class FirmwareUpdate extends AppCompatActivity
         mBytes[3] = 0x06;
         mBytes[4] = 0x0A;
         mBytes[5] = 0x00;
-        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, mBytes,0,6);
+        iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)0x0f, mBytes,0,6);
 
         //30ms一次轮询[0x10174],如果是0x80,说明GT29XX已完成
         do {
@@ -3631,6 +3631,27 @@ public class FirmwareUpdate extends AppCompatActivity
             }
         }while(mBytes[0] != (byte)0x80);
 
+        SystemClock.sleep(100);
+
+        if (stringArr.length > iconfiglen + 64)  //有USB配置
+        {
+            SystemClock.sleep(500);
+            //strtemplog= "[Cfg update]Update cfg of S8xxx...\n";
+            //strUpdateCfgInfoLog = strUpdateCfgInfoLog.concat(strtemplog);
+
+            iicWrite32Bits((byte)0x01, (byte)0x01, (byte)0x74, (byte)49, mBufferData, iconfiglen + 64,24);
+
+            SystemClock.sleep(150);
+
+            IicWriteOneByte((byte)0x01, (byte)0x01, (byte)0x74, (byte)35,(byte)0);
+
+            SystemClock.sleep(150);
+
+            isNeedFindDevice = true;
+
+            openDevices();
+        }
+
         //mShow.setText("Send cfg finish!!");
         Update_log = "[Config update]Send config finish!! Config Version:0x" + Integer.toHexString(mBufferData[34]);
         mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);

+ 169 - 57
app/src/main/java/com/example/administrator/wingcool_gt9_apk/SensorTest.java

@@ -844,48 +844,39 @@ public class SensorTest extends AppCompatActivity
                     if ((byte)holetppocketdatastring.charAt(i + strtemp.length()) == 0x31)
                     {
                         bOnlyTestTpFlag = true;
+                        bForceUpdateFlag = false;
+                        bVersionCheckFlag = false;
                     }
 
                     if (bForceUpdateFlag || bVersionCheckFlag)  //选择有强制升级或者检测版本后升级
                     {
+                        int ini_index, cfg_index = 0, bin_index = 0;
+
+                        strtemp = ".\0i\0n\0i\0";  //找到特殊字符,.ini
+
+                        ini_index = holetppocketdatastring.indexOf(strtemp);
+
                         //判断是否选择cfg文件进行更新
                         strtemp = "GTxxxx.cfg=";
 
                         i = holetppocketdatastring.indexOf(strtemp);
 
-                        if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31)
-                        {
+                        if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31) {
                             bChooseCfgFlag = true;
 
-                            strtemp = "Sample Times=";  //找到特殊字符
+                            //strtemp = "Sample Times=";  //找到特殊字符
 
-                            i = holetppocketdatastring.indexOf(strtemp);
+                            //j = holetppocketdatastring.indexOf(strtemp, i);
 
                             strtemp = ".\0c\0f\0g\0";  //找到特殊字符,小写的cfg
 
-                            j = holetppocketdatastring.indexOf(strtemp, i);
+                            cfg_index = holetppocketdatastring.indexOf(strtemp);
 
-                            if (j == -1)
-                            {
+                            if (cfg_index == -1) {
                                 strtemp = ".\0C\0F\0G\0";  //找到特殊字符,大写的CFG
 
-                                j = holetppocketdatastring.indexOf(strtemp, i);
-                            }
-
-                            j = j + strtemp.length() + 8;
-
-                            //如果有选择Cfg,先存储出来,用于后续升级
-                            String strcfgdata = holetppocketdatastring.substring(j, holetppocketdatastring.length() - 1);
-
-                            strcfgdata = strcfgdata.replaceAll("0x", ""); //0x转换为没有
-                            String[] stringcfgarray = strcfgdata.split(",");
-
-                            for (int b = 0; b < stringcfgarray.length; b++) {
-                                byte aByte = (byte) Integer.parseInt(stringcfgarray[b], 16);
-                                byGt293xConfigDataArray[b] = aByte;
+                                cfg_index = holetppocketdatastring.indexOf(strtemp);
                             }
-
-                            iCfgDataLen = stringcfgarray.length;
                         }
 
                         //判断是否选择fw文件进行更新
@@ -893,10 +884,21 @@ public class SensorTest extends AppCompatActivity
 
                         i = holetppocketdatastring.indexOf(strtemp);
 
-                        if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31)
-                        {
+                        if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31) {
                             bChooseFwFlag = true;
 
+                            strtemp = ".\0b\0i\0n\0";  //找到特殊字符,小写的cfg
+
+                            bin_index = holetppocketdatastring.indexOf(strtemp);
+
+                            if (bin_index == -1) {
+                                strtemp = ".\0B\0I\0N\0";  //找到特殊字符,大写的CFG
+
+                                bin_index = holetppocketdatastring.indexOf(strtemp);
+                            }
+
+                            bin_index = bin_index + strtemp.length() + 8;
+
                             //如果有选择Fw,先存储出来,用于后续升级
                             if (resultData != null) {
                                 uri = resultData.getData();
@@ -908,9 +910,57 @@ public class SensorTest extends AppCompatActivity
 
                             for (int b = 0; b < 0x3e200; b++)
                             {
-                                byGt293xFirmwareDataArray[b] = byGt293xFirmwareDataArray[0x4c + b];
+                                byGt293xFirmwareDataArray[b] = byGt293xFirmwareDataArray[bin_index + b];
                             }
                         }
+
+                        if (bChooseCfgFlag)  //如果有选择Cfg,先存储出来,用于后续升级
+                        {
+                            strtemp = ".\0c\0f\0g\0";  //找到特殊字符,小写的cfg
+
+                            cfg_index = cfg_index + strtemp.length() + 8;
+
+                            //int iConfigSize = 64 + (int)(mBytes[60] & 0xFF) * 256 + (mBytes[59] & 0xFF);   //the head lend is 64
+
+                            String strcfgdata = "";
+
+                            if (cfg_index > ini_index && cfg_index > bin_index)  //.tp文件里cfg合并在最后
+                            {
+                                strcfgdata = holetppocketdatastring.substring(cfg_index, holetppocketdatastring.length() - 1);
+                            }
+                            else if (cfg_index < ini_index && cfg_index < bin_index)  //.tp文件里cfg合并在最前
+                            {
+                                if (bin_index < ini_index)  //bin在中间,ini在最后
+                                {
+                                    strcfgdata = holetppocketdatastring.substring(cfg_index, bin_index - strtemp.length() - 8 - 61);  //前面获取Bin文件内容时加了 strtemp.length() + 8,此处要减掉
+                                }
+                                else  //ini在中间,bin在最后
+                                {
+                                    strcfgdata = holetppocketdatastring.substring(cfg_index, ini_index - 13);
+                                }
+                            }
+                            else  //.tp文件里cfg合并在中间
+                            {
+                                if (bin_index < ini_index)  //bin在最前,ini在最后
+                                {
+                                    strcfgdata = holetppocketdatastring.substring(cfg_index, ini_index - 13);
+                                }
+                                else  //ini在最前,bin在最后
+                                {
+                                    strcfgdata = holetppocketdatastring.substring(cfg_index, bin_index - strtemp.length() - 8 - 61);  //前面获取Bin文件内容时加了 strtemp.length() + 8,此处要减掉
+                                }
+                            }
+
+                            strcfgdata = strcfgdata.replaceAll("0x", ""); //0x转换为没有
+                            String[] stringcfgarray = strcfgdata.split(",");
+
+                            for (int b = 0; b < stringcfgarray.length; b++) {
+                                byte aByte = (byte) Integer.parseInt(stringcfgarray[b], 16);
+                                byGt293xConfigDataArray[b] = aByte;
+                            }
+
+                            iCfgDataLen = stringcfgarray.length;
+                        }
                     }
 
                     if (bMaxMinValueTestFlag)  //选择了最大最小值测试
@@ -1824,48 +1874,39 @@ public class SensorTest extends AppCompatActivity
             if ((byte)holetppocketdatastring.charAt(i + strtemp.length()) == 0x31)
             {
                 bOnlyTestTpFlag = true;
+                bForceUpdateFlag = false;
+                bVersionCheckFlag = false;
             }
 
             if (bForceUpdateFlag || bVersionCheckFlag)  //选择有强制升级或者检测版本后升级
             {
+                int ini_index, cfg_index = 0, bin_index = 0;
+
+                strtemp = ".\0i\0n\0i\0";  //找到特殊字符,.ini
+
+                ini_index = holetppocketdatastring.indexOf(strtemp);
+
                 //判断是否选择cfg文件进行更新
                 strtemp = "GTxxxx.cfg=";
 
                 i = holetppocketdatastring.indexOf(strtemp);
 
-                if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31)
-                {
+                if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31) {
                     bChooseCfgFlag = true;
 
-                    strtemp = "Sample Times=";  //找到特殊字符
+                    //strtemp = "Sample Times=";  //找到特殊字符
 
-                    i = holetppocketdatastring.indexOf(strtemp);
+                    //j = holetppocketdatastring.indexOf(strtemp, i);
 
                     strtemp = ".\0c\0f\0g\0";  //找到特殊字符,小写的cfg
 
-                    j = holetppocketdatastring.indexOf(strtemp, i);
+                    cfg_index = holetppocketdatastring.indexOf(strtemp);
 
-                    if (j == -1)
-                    {
+                    if (cfg_index == -1) {
                         strtemp = ".\0C\0F\0G\0";  //找到特殊字符,大写的CFG
 
-                        j = holetppocketdatastring.indexOf(strtemp, i);
+                        cfg_index = holetppocketdatastring.indexOf(strtemp);
                     }
-
-                    j = j + strtemp.length() + 8;
-
-                    //如果有选择Cfg,先存储出来,用于后续升级
-                    String strcfgdata = holetppocketdatastring.substring(j, holetppocketdatastring.length() - 1);
-
-                    strcfgdata = strcfgdata.replaceAll("0x", ""); //0x转换为没有
-                    String[] stringcfgarray = strcfgdata.split(",");
-
-                    for (int b = 0; b < stringcfgarray.length; b++) {
-                        byte aByte = (byte) Integer.parseInt(stringcfgarray[b], 16);
-                        byGt293xConfigDataArray[b] = aByte;
-                    }
-
-                    iCfgDataLen = stringcfgarray.length;
                 }
 
                 //判断是否选择fw文件进行更新
@@ -1876,6 +1917,18 @@ public class SensorTest extends AppCompatActivity
                 if ((byte) holetppocketdatastring.charAt(i + strtemp.length()) == 0x31) {
                     bChooseFwFlag = true;
 
+                    strtemp = ".\0b\0i\0n\0";  //找到特殊字符,小写的cfg
+
+                    bin_index = holetppocketdatastring.indexOf(strtemp);
+
+                    if (bin_index == -1) {
+                        strtemp = ".\0B\0I\0N\0";  //找到特殊字符,大写的CFG
+
+                        bin_index = holetppocketdatastring.indexOf(strtemp);
+                    }
+
+                    bin_index = bin_index + strtemp.length() + 8;
+
                     //如果有选择Fw,先存储出来,用于后续升级
                     FileInputStream fw = new FileInputStream(externalStorageDirectory.toString() + "/GT29xx_wingcool.tp");
                     fw.read(byGt293xFirmwareDataArray);
@@ -1883,9 +1936,57 @@ public class SensorTest extends AppCompatActivity
 
                     for (int b = 0; b < 0x3e200; b++)
                     {
-                        byGt293xFirmwareDataArray[b] = byGt293xFirmwareDataArray[0x4c + b];
+                        byGt293xFirmwareDataArray[b] = byGt293xFirmwareDataArray[bin_index + b];
                     }
                 }
+
+                if (bChooseCfgFlag)  //如果有选择Cfg,先存储出来,用于后续升级
+                {
+                    strtemp = ".\0c\0f\0g\0";  //找到特殊字符,小写的cfg
+
+                    cfg_index = cfg_index + strtemp.length() + 8;
+
+                    //int iConfigSize = 64 + (int)(mBytes[60] & 0xFF) * 256 + (mBytes[59] & 0xFF);   //the head lend is 64
+
+                    String strcfgdata = "";
+
+                    if (cfg_index > ini_index && cfg_index > bin_index)  //.tp文件里cfg合并在最后
+                    {
+                        strcfgdata = holetppocketdatastring.substring(cfg_index, holetppocketdatastring.length() - 1);
+                    }
+                    else if (cfg_index < ini_index && cfg_index < bin_index)  //.tp文件里cfg合并在最前
+                    {
+                        if (bin_index < ini_index)  //bin在中间,ini在最后
+                        {
+                            strcfgdata = holetppocketdatastring.substring(cfg_index, bin_index - strtemp.length() - 8 - 61);  //前面获取Bin文件内容时加了 strtemp.length() + 8,此处要减掉
+                        }
+                        else  //ini在中间,bin在最后
+                        {
+                            strcfgdata = holetppocketdatastring.substring(cfg_index, ini_index - 13);
+                        }
+                    }
+                    else  //.tp文件里cfg合并在中间
+                    {
+                        if (bin_index < ini_index)  //bin在最前,ini在最后
+                        {
+                            strcfgdata = holetppocketdatastring.substring(cfg_index, ini_index - 13);
+                        }
+                        else  //ini在最前,bin在最后
+                        {
+                            strcfgdata = holetppocketdatastring.substring(cfg_index, bin_index - strtemp.length() - 8 - 61);  //前面获取Bin文件内容时加了 strtemp.length() + 8,此处要减掉
+                        }
+                    }
+
+                    strcfgdata = strcfgdata.replaceAll("0x", ""); //0x转换为没有
+                    String[] stringcfgarray = strcfgdata.split(",");
+
+                    for (int b = 0; b < stringcfgarray.length; b++) {
+                        byte aByte = (byte) Integer.parseInt(stringcfgarray[b], 16);
+                        byGt293xConfigDataArray[b] = aByte;
+                    }
+
+                    iCfgDataLen = stringcfgarray.length;
+                }
             }
 
             if (bMaxMinValueTestFlag)  //选择了最大最小值测试
@@ -5725,6 +5826,7 @@ public class SensorTest extends AppCompatActivity
         return true;
     }
 
+    private byte byCfgCompareResult = 0;
     private boolean GT29xxupdateProcHandle() {
 
        // new Thread(new Runnable() {
@@ -5732,7 +5834,7 @@ public class SensorTest extends AppCompatActivity
        //     public void run() {
                 int iConfigSize = 0;
                 byte addrfirstbyte, addrsecondbyte, addrthirdbyte;
-                byte by_cfg_compare_result = 0;
+                byCfgCompareResult = 0;
                 boolean b_fw_version_compare_ok = true;
 
                 SystemClock.sleep(100);
@@ -5855,7 +5957,7 @@ public class SensorTest extends AppCompatActivity
                         {
                             if (byConfigBak[i] != byGt293xConfigDataArray[i])
                             {
-                                by_cfg_compare_result |= 0x01;
+                                byCfgCompareResult |= 0x01;
                                 break;
                             }
                         }
@@ -5865,18 +5967,18 @@ public class SensorTest extends AppCompatActivity
 
                             for (int i = 0; i < 24; i++) {
                                 if (mBytes[i] != byGt293xConfigDataArray[iConfigSize + i]) {
-                                    by_cfg_compare_result |= 0x02;
+                                    byCfgCompareResult |= 0x02;
                                     break;
                                 }
                             }
                         }
 
-                        if (by_cfg_compare_result > 0) {
+                        if (byCfgCompareResult > 0) {
                             strUpdateCfgInfoLog = getResources().getString(R.string.needtoupdatecfg);
                             mHandler.sendEmptyMessage(UPDATE_CFG_MESSAGE);
                             SystemClock.sleep(100);
 
-                            if (!UpdateConfigProc(by_cfg_compare_result)) {
+                            if (!UpdateConfigProc(byCfgCompareResult)) {
                                 bUpdateSuccessFlag = false;
                             }
                         }
@@ -5908,14 +6010,14 @@ public class SensorTest extends AppCompatActivity
 
                     if (bChooseCfgFlag)  //Choose Cfg File
                     {
-                        by_cfg_compare_result = 0x03;
+                        byCfgCompareResult = 0x03;
                         strUpdateCfgInfoLog = getResources().getString(R.string.enforceupdatecfg);
                         //edtUpdateCfgInformation.setText(strUpdateCfgInfoLog);
                         mHandler.sendEmptyMessage(UPDATE_CFG_MESSAGE);
 
                         SystemClock.sleep(50);
 
-                        if (!UpdateConfigProc(by_cfg_compare_result)) {
+                        if (!UpdateConfigProc(byCfgCompareResult)) {
                             bUpdateSuccessFlag = false;
                             return false;
                         }
@@ -6196,6 +6298,16 @@ public class SensorTest extends AppCompatActivity
 
                         btn_Test.setEnabled(true);
 
+                        if ((byCfgCompareResult & 0x02) == 0x02)   //如果更新了USB配置,需要复位USB设备
+                        {
+                            IicWriteOneByte((byte) 0x01, (byte) 0x01, (byte) 0x74, (byte) 35, (byte) 0);
+
+                            SystemClock.sleep(150);
+
+                            isNeedFindDevice = true;
+
+                            openDevices();
+                        }
                     }
                 }
                 break;

+ 1 - 1
app/src/main/res/values-en/strings.xml

@@ -119,7 +119,7 @@
     <string name="companyaddr">Address:Room 2006, Chuangxingda Business Building, No.36 Liuxian 3rd Road, Baoan District, Shenzhen</string>
     <string name="telephonenum">Telephone:186 8896 1937</string>
     <string name="emailaddr">Email:robbin@wingcool.cn</string>
-    <string name="version">APK Version:v3.0.0C_20250331-Debug Version</string>
+    <string name="version">APK Version:v3.0.0E_20250409-Debug Version</string>
 
     <!-- other -->
     <string name="app_name">WingCoolAPK</string>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -119,7 +119,7 @@
     <string name="companyaddr">地址:深圳市宝安区留仙三路 36 号创兴达商务大厦 2006 室</string>
     <string name="telephonenum">电话:186 8896 1937</string>
     <string name="emailaddr">邮箱:robbin@wingcool.cn</string>
-    <string name="version">APK版本:v3.0.0C_20250331-debug版本</string>
+    <string name="version">APK版本:v3.0.0E_20250409-debug版本</string>
 
     <!-- other -->
     <string name="app_name">WingCoolAPK</string>