Procházet zdrojové kódy

主配置能成功读取和下发
扩展配置能读取,但下发有问题,暂时不下发

robbin před 4 roky
rodič
revize
86084bb92d

+ 311 - 118
app/src/main/java/com/example/administrator/wingcool_gt9_apk/Config.java

@@ -42,6 +42,8 @@ import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.google.android.gms.common.server.converter.StringToIntConverter;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -50,6 +52,8 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.RandomAccessFile;
 import java.io.Reader;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -2076,61 +2080,49 @@ public class Config extends AppCompatActivity
                 int productId = usbDevice.getProductId();
                 if (productId == 0x0818 || productId == 0x0001 || productId == 0x0616) {  //0x0001是奕力的PID
                     if (mUsbManager.hasPermission(usbDevice)) {
+                        UsbInterface usbInterface = usbDevice.getInterface(1);
+
+                        for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
+                            UsbEndpoint ep = usbInterface.getEndpoint(i);
+
+                            //if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
+                            if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
+                                //mUsbEndpointIn = ep;
+                                mUsbEndpointOut = ep;
+                            } else {
+                                //mUsbEndpointOut = ep;
+                                mUsbEndpointIn = ep;
+                            }
+                            //}
+                            //else{
+                            // mHandler.sendEmptyMessage(CONNECTED_SUCCESS);
+                            //}
+                        }
 
-                                    mUsbDeviceConnection = mUsbManager.openDevice(usbDevice);
-                                    if (mUsbDeviceConnection != null) {
-
-                            int interfaceCount = usbDevice.getInterfaceCount();
-                           // for (int interfaceIndex = 0; interfaceIndex < interfaceCount; interfaceIndex++)
-                            {
-                               // UsbInterface usbInterface = usbDevice.getInterface(interfaceIndex);
-                                UsbInterface usbInterface = usbDevice.getInterface(1);
-
-                                if(UsbConstants.USB_CLASS_HID != usbInterface.getInterfaceClass())
-                                {
-                                    // continue;
-                                }
-
-                                for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
-                                    UsbEndpoint ep = usbInterface.getEndpoint(i);
-
-                                    if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
-                                        if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
-                                            //mUsbEndpointIn = ep;
-                                            mUsbEndpointOut = ep;
-                                        } else {
-                                            //mUsbEndpointOut = ep;
-                                            mUsbEndpointIn = ep;
-                                        }
-                                    }
-                                    else{
-                                        // mHandler.sendEmptyMessage(CONNECTED_SUCCESS);
-                                    }
-                                }
-
-                                if ((null == mUsbEndpointIn) || (null == mUsbEndpointOut)) {
-                                    int i = mUsbDeviceConnection.controlTransfer(0x00, 0x09,
-                                            0x002, 0, null, 0, 100);
-                                    SystemClock.sleep(1000);
-                                     if(i>=0){
-                                         //mHandler.sendEmptyMessage(DEBUG_MESSAGE_SUCCESS);
-                                         }
-                                         else{
-                                         //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
-                                         }
-
+                        if ((null == mUsbEndpointIn) || (null == mUsbEndpointOut)) {
+                            mUsbDeviceConnection = mUsbManager.openDevice(usbDevice);
+                            if (mUsbDeviceConnection!=null) {
+                                int i = mUsbDeviceConnection.controlTransfer(0x00, 0x09,
+                                        0x002, 0, null, 0, 100);
+                                SystemClock.sleep(1000);
+                                if (i >= 0) {
+                                    //mHandler.sendEmptyMessage(DEBUG_MESSAGE_SUCCESS);
                                 } else {
-                                    isNeedFindDevice = false;
-                                    mUsbInterface = usbInterface;
-                                    mUsbDeviceConnection = mUsbManager.openDevice(usbDevice);
-                                    if(null != mUsbEndpointIn){
-                                        mHandler.sendEmptyMessage(CONNECTED_SUCCESS);
-                                    }
+                                    //mHandler.sendEmptyMessage(DEBUG_MESSAGE_ERROR);
                                 }
                             }
-
+                        } else {
+                            isNeedFindDevice = false;
+                            mUsbInterface = usbInterface;
+                            mUsbDeviceConnection = mUsbManager.openDevice(usbDevice);
+                            mUsbDeviceConnection.claimInterface(mUsbInterface, true);
+                            if(null != mUsbEndpointIn){
+                                mHandler.sendEmptyMessage(CONNECTED_SUCCESS);
+                            }
                         }
-                    } else {
+
+                    }
+                    else {
                         mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(""), 0));
                     }
                 }
@@ -2140,6 +2132,7 @@ public class Config extends AppCompatActivity
         }
     }
 
+
     //=====================================读取CFG到各个View开始===================================//
     public void ReadCfgSample(byte[] mBytes){
         int temp;
@@ -2790,7 +2783,7 @@ public class Config extends AppCompatActivity
         mCfg813B.setText(mConfigShow[showid++]);
         mCfg813C.setText(mConfigShow[showid++]);
         mCfg813D.setText(mConfigShow[showid++]);
-        //mCfg813E.setText(mConfigShow[showid++]);
+        mCfg813E.setText(mConfigShow[showid++]);
         //mCfg813F.setText(mConfigShow[showid++]);
 
         mCfgBF7B.setText(mConfigShow[showid++]);
@@ -3237,6 +3230,10 @@ public class Config extends AppCompatActivity
         StringBuilder configBuilder = new StringBuilder("");
         String[] stringArr;
 
+        ByteBuffer buff= ByteBuffer.allocate(1024);
+
+        byte bCfgEx = 0;  //扩展配置的标志
+
         switch (v.getId()) {
             case R.id.tvsample:
                 vpagerCfg.setCurrentItem(0);
@@ -3753,7 +3750,151 @@ public class Config extends AppCompatActivity
                     configBuilder.append(mCfg813B.getText().toString() + ",");
                     configBuilder.append(mCfg813C.getText().toString() + ",");
                     configBuilder.append(mCfg813D.getText().toString() + ",");
-                    configBuilder.append("01");
+                    configBuilder.append(mCfg813E.getText().toString() + ",");
+                    //configBuilder.append("01");
+
+                    //bCfgEx = (byte)Integer.parseInt(mCfg805A.getText().toString());
+                    //if ((bCfgEx & 0x40) == 0x40)  //有扩展配置,则需要发送
+                    {
+                        //configBuilder.append(",");
+
+                        configBuilder.append(mCfgBF7B.getText().toString() + ",");
+                        configBuilder.append(mCfgBF7C.getText().toString() + ",");
+                        configBuilder.append(mCfgBF7D.getText().toString() + ",");
+                        configBuilder.append(mCfgBF7E.getText().toString() + ",");
+                        configBuilder.append(mCfgBF7F.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBF80.getText().toString() + ",");
+                        configBuilder.append(mCfgBF81.getText().toString() + ",");
+                        configBuilder.append(mCfgBF82.getText().toString() + ",");
+                        configBuilder.append(mCfgBF83.getText().toString() + ",");
+                        configBuilder.append(mCfgBF84.getText().toString() + ",");
+                        configBuilder.append(mCfgBF85.getText().toString() + ",");
+                        configBuilder.append(mCfgBF86.getText().toString() + ",");
+                        configBuilder.append(mCfgBF87.getText().toString() + ",");
+                        configBuilder.append(mCfgBF88.getText().toString() + ",");
+                        configBuilder.append(mCfgBF89.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8A.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8B.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8C.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8D.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8E.getText().toString() + ",");
+                        configBuilder.append(mCfgBF8F.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBF90.getText().toString() + ",");
+                        configBuilder.append(mCfgBF91.getText().toString() + ",");
+                        configBuilder.append(mCfgBF92.getText().toString() + ",");
+                        configBuilder.append(mCfgBF93.getText().toString() + ",");
+                        configBuilder.append(mCfgBF94.getText().toString() + ",");
+                        configBuilder.append(mCfgBF95.getText().toString() + ",");
+                        configBuilder.append(mCfgBF96.getText().toString() + ",");
+                        configBuilder.append(mCfgBF97.getText().toString() + ",");
+                        configBuilder.append(mCfgBF98.getText().toString() + ",");
+                        configBuilder.append(mCfgBF99.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9A.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9B.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9C.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9D.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9E.getText().toString() + ",");
+                        configBuilder.append(mCfgBF9F.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFA0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFA9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAA.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAB.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAC.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAD.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAE.getText().toString() + ",");
+                        configBuilder.append(mCfgBFAF.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFB0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFB9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBA.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBB.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBC.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBD.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBE.getText().toString() + ",");
+                        configBuilder.append(mCfgBFBF.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFC0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFC9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCA.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCB.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCC.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCD.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCE.getText().toString() + ",");
+                        configBuilder.append(mCfgBFCF.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFD0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFD9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDA.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDB.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDC.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDD.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDE.getText().toString() + ",");
+                        configBuilder.append(mCfgBFDF.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFE0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFE9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFEA.getText().toString() + ",");
+                        configBuilder.append(mCfgBFEB.getText().toString() + ",");
+                        configBuilder.append(mCfgBFEC.getText().toString() + ",");
+                        configBuilder.append(mCfgBFED.getText().toString() + ",");
+                        configBuilder.append(mCfgBFEE.getText().toString() + ",");
+                        configBuilder.append(mCfgBFEF.getText().toString() + ",");
+
+                        configBuilder.append(mCfgBFF0.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF1.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF2.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF3.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF4.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF5.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF6.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF7.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF8.getText().toString() + ",");
+                        configBuilder.append(mCfgBFF9.getText().toString() + ",");
+                        configBuilder.append(mCfgBFFA.getText().toString());
+                    }
                     //configBuilder.append(mCfg813E.getText().toString() + ",");
                     //configBuilder.append(mCfg813F.getText().toString());
                 }else{ //在其他界面则保存
@@ -3767,6 +3908,8 @@ public class Config extends AppCompatActivity
                     }
 
                     configBuilder.append("01");  //mBytes[185],最后置上1
+
+                    bCfgEx = mBytes[10];
                 }
                 //mShow.setText(configBuilder.toString());
 
@@ -3783,37 +3926,98 @@ public class Config extends AppCompatActivity
 
                 for (int b = 0; b < stringArr.length; b++) {
                     byte aByte = (byte) Integer.parseInt(stringArr[b], 16);
-                    mBufferData[b] = aByte;
+                    buff.array()[b] = aByte;
                 }
+
+                buff.order(ByteOrder.BIG_ENDIAN);
                 //mBufferData = value.getBytes();
                 mSendData = new byte[1024];
 
+
                 //重新计算checksum
                 int checksum = 0;
                 for (int i = 0; i < 236; i += 2) {
-                    int k = ((int) mBufferData[i] << 8) + mBufferData[i + 1];
+
+                    //int k = ((int)mBytes[i] << 8) + mBytes[i + 1];
+                    int k = buff.asShortBuffer().get(i>>1);
                     checksum = checksum + k;
+
+                    String hv = Integer.toHexString(buff.array()[i] & 0xff);
+                    if (hv.length() < 2){
+                        hv = "0" + hv;
+                    }
+                    mConfigShow[i] = hv;
+                    hv = Integer.toHexString(buff.array()[i + 1] & 0xff);
+                    if (hv.length() < 2){
+                        hv = "0" + hv;
+                    }
+                    mConfigShow[i + 1] = hv;
+
                 }
 
                 //将checksum填入配置中
                 //if (checksum % 256 == 0)  //校验和正确
                 {
-                    mBufferData[236] = (byte) ((61696 - checksum) >> 8);
-                    mBufferData[237] = (byte) ((61696 - checksum) & 0xff);
+                    buff.array()[236] = (byte) ((0 - (short)checksum) >> 8);
+                    buff.array()[237] = (byte) ((0 - (short)checksum) & 0xff);
                     // mShow.setText("Cfg Checksum  re-calculation!");
                 }
 
                 //更新配置标志位
-                mBufferData[238] = 0x01;
+                buff.array()[238] = 0x01;
+
+                mConfigShow[236] = Integer.toString(buff.array()[236] & 0xff);
+                mConfigShow[237] = Integer.toString(buff.array()[237] & 0xff);
+                mConfigShow[238] = Integer.toString(buff.array()[238] & 0xff);
+
+
+                checksum = 0;
+                for (int i = 239; i < 239 + 126; i += 2) {
+
+                    //int k = ((int)mBytes[i] << 8) + mBytes[i + 1];
+                    int k = buff.asShortBuffer().get(i>>1);
+                    checksum = checksum + k;
+
+                    String hv = Integer.toHexString(buff.array()[i] & 0xff);
+                    if (hv.length() < 2){
+                        hv = "0" + hv;
+                    }
+                    mConfigShow[i] = hv;
+                    hv = Integer.toHexString(buff.array()[i + 1] & 0xff);
+                    if (hv.length() < 2){
+                        hv = "0" + hv;
+                    }
+                    mConfigShow[i + 1] = hv;
+
+                }
+
+                //将checksum填入配置
+                buff.array()[239 + 126] = (byte) ((0 - (short)checksum) >> 8);
+                buff.array()[239 + 127] = (byte) ((0 - (short)checksum) & 0xff);
+
+                mConfigShow[239 + 126] = Integer.toString((short)checksum >> 8);//Integer.toString(buff.array()[239 + 126] & 0xff);
+                mConfigShow[239 + 127] = Integer.toString((short)checksum & 0xff);//Integer.toString(buff.array()[239 + 127] & 0xff);
 
-                //mSendData = mBufferData;
-                //mHandler.sendEmptyMessage(DEBUG_MESSAGE_SUCCESS);
+
+                byte addressH = (byte)0xBF;
+                byte addressL = (byte)0x7B;
+
+                /*
+                iicWrite(addressH,addressL,buff.array(),239,128);
+                if (!recallCheck(addressH, addressL,buff.array(),239,128)) {
+                    mShow.setText("Recall check error,Send cfg failed");
+                    return;
+                }
+                else{
+                    mShow.setText("Recall check success,Send cfg success");
+                }
+                */
 
                 //扩展命令  0x03,0x01,0x0f,-128,0x47,0x00,0x39,
-                byte addressH = (byte)0x80;
-                byte addressL = (byte)0x50;
-                iicWrite(addressH,addressL,mBufferData,0,239);
-                if (!recallCheck(addressH, addressL,mBufferData,0,238)) {
+                addressH = (byte)0x80;
+                addressL = (byte)0x50;
+                iicWrite(addressH,addressL,buff.array(),0,239);
+                if (!recallCheck(addressH, addressL,buff.array(),0,238)) {
                     mShow.setText("Recall check error,Send cfg failed");
                    // return false;
                 }
@@ -3822,26 +4026,24 @@ public class Config extends AppCompatActivity
                 }
 
                 if (iChooseVPager == 8) {
-                    mCfg813C.setText(Integer.toHexString(mBufferData[236] & 0xff));
-                    mCfg813D.setText(Integer.toHexString(mBufferData[237] & 0xff));
 
-                    checksum = 0 - checksum;
+                    ReadCfgRam(mConfigShow);
+
+                    mCfg813C.setText(Integer.toHexString(buff.array()[236] & 0xff));
+                    mCfg813D.setText(Integer.toHexString(buff.array()[237] & 0xff));
 
-                    mCfg813E.setText(Integer.toHexString((checksum >> 8) & 0xff));
-                    mCfg813F.setText(Integer.toHexString(checksum & 0xff));
+                    //if ((bCfgEx & 0x40) == 0x40)
+                    {
+                        mCfgBFF9.setText(Integer.toHexString(buff.array()[239 + 126] & 0xff));
+                        mCfgBFFA.setText(Integer.toHexString(buff.array()[239 + 127] & 0xff));
+                    }
                 }
                 break;
             case R.id.readcfg:  //read cfg
                 bottonMode = 2;
                 mSendData = mSendGetGt9ConfigData;
 
-                addressH = (byte)0x81;
-                addressL = (byte)0x40;
-                iicRead(addressH,addressL,mBytes,16);
-                //tvVenderID.setText("VenderID:"+Integer.toString(mBytes[10] & 0xFF));
-
                 iicWriteCommand((byte)0x12,(byte)0,(byte)0,0,0);
-
                 while(true) {
                     SystemClock.sleep(100);
 
@@ -3853,23 +4055,26 @@ public class Config extends AppCompatActivity
 
                     iicWriteCommand((byte) 0x0f, (byte) 0x81, (byte) 0x4e, 0, 1);
                 }
-
                 addressH = (byte)0x80;
                 addressL = (byte)0x50;
-                iicRead(addressH,addressL,mBytes,239);
 
+
+
+                iicRead(addressH,addressL,buff.array(),239);
+                buff.order(ByteOrder.BIG_ENDIAN);
                 StringBuilder stringBuilder = new StringBuilder("");
                 checksum = 0;
                 for (int i = 0; i < 238; i += 2) {
 
-                    int k = ((int)mBytes[i] << 8) + mBytes[i + 1];
+                    //int k = ((int)mBytes[i] << 8) + mBytes[i + 1];
+                    int k = buff.asShortBuffer().get(i>>1);
                     checksum = checksum + k;
-                    String hv = Integer.toHexString(mBytes[i] & 0xff);
+                    String hv = Integer.toHexString(buff.array()[i] & 0xff);
                     if (hv.length() < 2){
                         hv = "0" + hv;
                     }
                     mConfigShow[i] = hv;
-                    hv = Integer.toHexString(mBytes[i + 1] & 0xff);
+                    hv = Integer.toHexString(buff.array()[i + 1] & 0xff);
                     if (hv.length() < 2){
                         hv = "0" + hv;
                     }
@@ -3877,34 +4082,33 @@ public class Config extends AppCompatActivity
                     stringBuilder.append(hv);
                     stringBuilder.append(",");
                 }
-                if(checksum % 256 == 0)  //校验和正确
+                if((short)checksum == 0)  //校验和正确
                 {
 
-                    mCfg813E.setText(Integer.toHexString((checksum >> 8) & 0xff));
-                    mCfg813F.setText(Integer.toHexString(checksum & 0xff));
-                    if ((mBytes[10] & 0x40) == 0x40)  //有扩展配置,再做校验
+                    //mCfg813E.setText(Integer.toHexString((checksum >> 8) & 0xff));
+                    //mCfg813F.setText(Integer.toHexString(checksum & 0xff));
+                    if ((buff.array()[10] & 0x40) == 0x40)  //有扩展配置,再做校验
                     {
                         addressH = (byte)0xBF;
                         addressL = (byte)0x7B;
-                        iicRead(addressH,addressL,mBytes,128);
-
+                        iicRead(addressH,addressL,buff.array(),128);
                         checksum = 0;
-                        for (int i = 238; i < 238 + 128; i += 2) {
+                        for (int i = 0,j = 239; i < 128; i += 2,j += 2) {
 
-                            int k = ((int)mBytes[i] << 8) + mBytes[i + 1];
+                            int k = buff.asShortBuffer().get(i>>1);//((int)mBytes[i] << 8) + mBytes[i + 1];
                             checksum = checksum + k;
-                            String hv = Integer.toHexString(mBytes[i] & 0xff);
+                            String hv = Integer.toHexString(buff.array()[i] & 0xff);
                             if (hv.length() < 2){
                                 hv = "0" + hv;
                             }
-                            mConfigShow[i] = hv;
-                            hv = Integer.toHexString(mBytes[i + 1] & 0xff);
+                            mConfigShow[j] = hv;
+                            hv = Integer.toHexString(buff.array()[i + 1] & 0xff);
                             if (hv.length() < 2){
                                 hv = "0" + hv;
                             }
-                            mConfigShow[i + 1] = hv;
+                            mConfigShow[j + 1] = hv;
                         }
-                        if(checksum % 256 == 0)  //校验和正确
+                        if((short)checksum == 0)  //校验和正确
                         {
                             mShow.setText("Cfg Checksum is correct!");
                         }
@@ -3935,7 +4139,7 @@ public class Config extends AppCompatActivity
 
                 addressH = (byte)0x81;
                 addressL = (byte)0x40;
-                iicRead(addressH,addressL,mBytes,32);
+                iicRead(addressH,addressL,mBytes,16);
                 tvVenderID.setText("VenderID:"+Integer.toString(mBytes[10] & 0xFF));
 
                 mSendCfg.setEnabled(true);
@@ -4170,12 +4374,12 @@ public class Config extends AppCompatActivity
         iicByteData[2] = 0x0f; //no command
         iicByteData[3] = addressHigh;
         iicByteData[4] = addressLow;
-        iicByteData[5] = 0x00;
-        iicByteData[6] = 63;  //length 一次接收63个数据
+        iicByteData[5] = (byte)(length>>8);
+        iicByteData[6] = (byte)(length);// 一次接收63个数据
 
-        for (int j = 7; j < 64; j++) {
-            iicWriteData[j] = 0x00;
-        }
+        //for (int j = 7; j < 64; j++) {
+         //   iicWriteData[j] = 0x00;
+        //}
 
         int address1 = ((addressHigh&0xff)<<8);
         int address2 = addressLow&0xff;
@@ -4183,34 +4387,23 @@ public class Config extends AppCompatActivity
 
         int sendTimes = length/63 + 1;  //预计是向下取整,所以+1
 
-        for (int k = 0; k < sendTimes; k++) {
-            int finalOffset = k*63; //每次只能发57bytes数据
-            int offset = k*64;
+        i = mUsbDeviceConnection.bulkTransfer(mUsbEndpointOut, iicByteData, 0x40, 100);
 
-            if(length - (finalOffset ) < 63) {
-
-                iicByteData[6] = (byte) (length - (finalOffset));  //length
-            }
-            else
-            {
-                iicByteData[6] = 63;
-            }
-
-            //发送读取命令
-            i = mUsbDeviceConnection.bulkTransfer(mUsbEndpointOut, iicByteData, 0, 0x40, 100);
-            if (i != 0x40)
-                return false;  //传输失败
-            // SystemClock.sleep(1);
+        if (i != 0x40) {
+            editname.setText("iicWrite Failed");
+            return false;
+        }
 
+        int offset = 0;
+        for (int k = 0; k < sendTimes; k++) {
             //接收数据
             i = mUsbDeviceConnection.bulkTransfer(mUsbEndpointIn, wBuffer, offset, 0x40, 3000);
 
             if (i != 0x40) {
-                editname.setText("iicWrite Failed");
+                editname.setText("iicRead Failed");
                 return false;
-
             }
-
+            offset+=64;
             address = address + 63;
             iicByteData[3] = (byte)(address>>8);
             iicByteData[4] = (byte)address;