Gator协议中间版本,目前加密通过,协议可以正常登录驻留链接。
authorSnickerSun <scy@incartech.cn>
Mon, 28 Jun 2021 09:57:34 +0000 (17:57 +0800)
committerSnickerSun <scy@incartech.cn>
Mon, 28 Jun 2021 09:57:34 +0000 (17:57 +0800)
实现了BP00,BP33,AP03

app/src/main/java/com/enqualcomm/support/BootCompleteReceiver.java
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/bean/ICLocation.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/enqualcomm/support/utils/AESCipher.java
app/src/main/java/com/enqualcomm/support/utils/CellInfoUtil.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_gator.java

index f43d40f..97bfd30 100644 (file)
@@ -9,7 +9,7 @@ import com.enqualcomm.support.utils.ICLogger;
 public class BootCompleteReceiver extends BroadcastReceiver {\r
   public void onReceive(Context paramContext, Intent paramIntent) {\r
     ICLogger.i("监听到开机广播");\r
-    paramContext.startService(new Intent(paramContext, com.enqualcomm.support.CoreService.class));\r
+    ///paramContext.startService(new Intent(paramContext, com.enqualcomm.support.CoreService.class));\r
   }\r
 }\r
 \r
index b2ea009..e9771fa 100644 (file)
@@ -1588,8 +1588,13 @@ public class CoreService extends Service {
         String action = intent.getAction();
         if ("com.ic.action.VIDEO_CALL".equals(action)) {
             try {
-                mFZDService.getBRId();
-                mFZDService.getContacts();
+                if(Config.protocol_no == Config.PROTOCOL_FZD) {
+                    mFZDService.getBRId();
+                    mFZDService.getContacts();
+                }else{
+                    //need user implement for other protocol
+
+                }
             } catch (Exception e) {
                 e.printStackTrace();
             }
index 10d2f47..5eea07c 100644 (file)
@@ -240,11 +240,13 @@ public class ICLocation {
     private String MNC="0";\r
     private int LAC=0;\r
     private int CID=0;\r
+    private int rxlevel=0;\r
     private boolean datachanged=false;\r
     public void setMCC(String mcc){ MCC=mcc;datachanged=true;}\r
     public void setMNC(String mnc){MNC = mnc;datachanged=true;}\r
     public void setLAC(int  lac){LAC=lac;datachanged=true;}\r
     public void setCID(int cid) { CID=cid;datachanged=true;}\r
+    public void setRxlevel(int level) {rxlevel=level;}\r
     public boolean isDataChanged(){return datachanged;}\r
     public String getMCC(){\r
         return MCC;\r
@@ -252,13 +254,15 @@ public class ICLocation {
     public String getMNC(){\r
         return MNC;\r
     }\r
+    public int getRxlevel(){\r
+        return rxlevel;\r
+    }\r
     public long getLAC(){\r
         return LAC;\r
     }\r
     public long getGSMStationCID(){\r
         return CID;\r
     }\r
-\r
     public LBS_Data getLBSdata(){\r
         return currentLBS;\r
     }\r
index 550ebc3..b3c442b 100644 (file)
@@ -1249,7 +1249,25 @@ public class Runtime {
         return mLBSMultiStationData;
     }
 
-
+    public String getGatorLBSData(){
+//        String netstat="46 00 002482 0000DE127";
+//        MCC(%03d)+MNC(%03d)+LACID(%04X)+CELLID(%07X)+RX LEVEL(%02X),
+        StringBuilder sb = new StringBuilder();
+        int mcc=0;
+        int mnc=0;
+        try {
+            mcc = Integer.parseInt(gpsp.getMCC());
+            mnc = Integer.parseInt(gpsp.getMNC());
+        }catch (Exception e){
+            ICLogger.e(e.getMessage(),e);
+        }
+        sb.append(String.format("%1$03d",mcc))
+                .append(String.format("%1$03d",mnc))
+                .append(String.format("%1$04X",gpsp.getLAC()))
+                .append(String.format("%1$07X",gpsp.getGSMStationCID()))
+                .append(String.format("%1$02X",gpsp.getRxlevel()));
+        return sb.toString();
+    }
     public String getLBSData() {
 
 //        460,0,9520,3671 : LBS基站数据,MCC国家码,460为中国,0:MNC,0为移动,9520:LAC,十进制,3671,CID,十进制
index d6fa200..5641d4d 100644 (file)
@@ -152,6 +152,11 @@ public class KeepAlive extends AbstractConnectionService {
                     } else {
                         if (is_login_send_success) {
                             connection.send(protocolAPIHelper.getHeartbeatMSG(mRuntime));
+                            //发送完心跳后,开始检查服务器响应
+                            if(Config.PROTOCOL_GATOR == Config.protocol_no) {
+                                //Gator 协议心跳没有反馈
+                                connection.DeliverCMDMessageToSystem("heartbeat", "Gator");//通知下面线程状态变化
+                            }
                         } else {
                             connection.send(protocolAPIHelper.getLoginMSG(mRuntime));
                         }
@@ -330,9 +335,15 @@ public class KeepAlive extends AbstractConnectionService {
         //这个是正常心跳包,暂时不能认为服务器连接时失败的,所以正常发送检测。
         //发送心跳包
         connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
-        //发送完心跳后,开始检查服务器响应
+          //发送完心跳后,开始检查服务器响应
         startResponseCheckTimer();
 
+        //发送完心跳后,开始检查服务器响应
+        if(Config.PROTOCOL_GATOR == Config.protocol_no) {
+            //Gator 协议心跳没有反馈
+            connection.DeliverCMDMessageToSystem("heartbeat", "Gator");//通知下面线程状态变化
+        }
+
 
     }
 
@@ -380,9 +391,12 @@ public class KeepAlive extends AbstractConnectionService {
             //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。
             mRuntime.setServerProtocolConnected(false);
             connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));
-            //发送完心跳后,开始检查服务器响应
-
             startResponseCheckTimer();
+            //发送完心跳后,开始检查服务器响应
+            if(Config.PROTOCOL_GATOR == Config.protocol_no) {
+                //Gator 协议心跳没有反馈
+                connection.DeliverCMDMessageToSystem("heartbeat", "Gator");//通知下面线程状态变化
+            }
 
             //连接服务器后马上开始发送buffer的cmd
             Deliver.triggerSendThread();
index 469cc01..43490db 100644 (file)
@@ -24,6 +24,7 @@ import javax.crypto.SecretKey;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 
+import static android.util.Base64.DEFAULT;
 import static android.util.Base64.NO_WRAP;
 
 public class AESCipher {
@@ -227,7 +228,7 @@ public class AESCipher {
     byte[] initParam = IV_STRING.getBytes(charset);
     IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
 
-    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+    Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
     cipher.init(mode, secretKey, ivParameterSpec);
 
     return cipher.doFinal(contentBytes);
@@ -235,7 +236,7 @@ public class AESCipher {
   public static void test2(){
 
     //FastJson生成json数据
-    String jsonData = "JsonUtils.objectToJsonForFastJson(personList)";
+    String jsonData = "(003b0106357593061269893BP00,C42F-L56AAAD-EU-P3-BDS-V0.3.37.20210626.175406,7,46011)";
     ICLogger.e( "AES加密前json数据 ---->" + jsonData);
     ICLogger.e("AES加密前json数据长度 ---->" + jsonData.length());
 
@@ -254,6 +255,14 @@ public class AESCipher {
     ICLogger.e( "AES解密耗时 cost time---->" + (end - start));
     ICLogger.e("AES解密后json数据 ---->" + decryStr);
 
+
+    String encriptedstr="/iM1BRd+pmjkYA44kYoqxIcT+h0xJsoRZJUG+cUrl0Wh5UuphJNDx3MaW1tNB3b4EJsh8SmhH0PiMlPeTqOfcQG9GxZXalbNO1hH9d4Qpbf/57LH";
+     decryStr = aesDecryptStringFixedKey(encriptedstr);
+    ICLogger.e("AES解密后json数据sss -- "+encriptedstr+ " "+ encriptedstr.length()+" ---->" + decryStr);
+
+     encryStr = aesEncryptStringFixedKey(decryStr);
+    ICLogger.e("AES加密后json数据sss -- "+decryStr+ " "+ decryStr.length()+" ---->" + encryStr + " " +encryStr.length());
+
   }
   /*******************************************************/
 
index 15426c9..4ff48b4 100644 (file)
@@ -211,7 +211,7 @@ public class CellInfoUtil {
 
           runtime.getLocationInstance().setCID(gsmCell.getCid());
           runtime.getLocationInstance().setLAC(gsmCell.getLac());
-
+          runtime.getLocationInstance().setRxlevel(150-Math.abs(getSignal(telephonyManager,runtime)));
           ICLogger.i("LBS GsmCellLocation "+ gsmSb.toString());
           if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", gsmSb.toString());
 
index ccbb586..2ada45a 100644 (file)
@@ -5,6 +5,7 @@ import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.SleepInfo;
 import com.enqualcomm.support.bean.StringMessage;
+import com.enqualcomm.support.utils.AESCipher;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.TimeUtil;
@@ -204,7 +205,12 @@ public class protocolAPIHelper {
                 ret = protocol_s123.isCmdStr(msg.isFromCache());
                 break;
             case Config.PROTOCOL_GATOR:
-                ret = protocol_gator.isCmdStr(msg.isFromCache());
+                if(msg.isFromCache().startsWith("GT")) {
+                    //是加密数据就先解密
+                    ret = protocol_gator.isCmdStr(AESCipher.aesDecryptStringFixedKey(msg.isFromCache().substring(8)));
+                }else{
+                    ret = protocol_gator.isCmdStr(msg.isFromCache());
+                }
                 break;
         }
         return ret;
index 097a119..85ec56f 100644 (file)
@@ -71,10 +71,10 @@ public class protocol_gator {
     private static final String CMDHEADER = "(";
     private static final String CMDEND = ")";
     private static final String CMDSPLIT = ",";
-   // public static final String defaultServerIP = "13.59.36.164";
-   // public static final int defaultServerPort = 7030;
-    public static final String defaultServerIP = "snickersun.oicp.net";
-    public static final int defaultServerPort = 54944;
+    public static final String defaultServerIP = "watch.gatorcn.com";
+    public static final int defaultServerPort = 27015;
+   // public static final String defaultServerIP = "snickersun.oicp.net";
+   // public static final int defaultServerPort = 54944;
 
     public enum CMD_TYPE {
          /* 服务器发起*/
@@ -258,7 +258,7 @@ public class protocol_gator {
         String encreptedStr="";
         String encreptionMSGHeader="GT";
         encreptedStr=AESCipher.aesEncryptStringFixedKey(msg);
-        String len= String.format("%04x",encreptedStr.length());
+        String len= String.format("%04x",encreptedStr.length()+8);
         return encreptionMSGHeader+len+"01"+encreptedStr;
     }
     /**/
@@ -267,7 +267,7 @@ public class protocol_gator {
         StringMessage sm = new StringMessage(new String[]{cmdName, msg});
         //用此函数设置要发送的内容
         sm.refresh(encrepteMsg(msg));
-      //  sm.refresh((msg));
+       // sm.refresh((msg));
         //设置信息创建时间
         sm.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());
         return sm;
@@ -416,8 +416,16 @@ public class protocol_gator {
         return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds,msg));
     }
 
-    //处理 登录 BP00
-    public void handleAP03(Runtime runtime, String cmd) {
+    //时间同步成功失败反馈
+    public StringMessage BP03(Runtime ds,boolean success){
+        if (success){
+            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+"00000000000000031"));
+        }else{
+            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+"00000000000000030"));
+        }
+    }
+    //时间同步,等同于登录成功回复
+    public void handleAP03(Runtime runtime, Connection connection, String cmd) {
         String[] msg = cmd.split(CMDSPLIT);
 //       (003E357593060153353AP03,150728,152900,e0800,0000000000000003)
 //       表示当前UTC时间为2015年7月28日,15点29分00秒,时区是东8区,此时间用于手表时间同步
@@ -435,14 +443,17 @@ public class protocol_gator {
                     ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
                     TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, msg[3], true);
                     ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
-
+                    connection.send(BP03(runtime,true));
+                }else{
+                    connection.send(BP03(runtime,false));
                 }
             } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
+
+                connection.send(BP03(runtime,false));
             }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
-
         } else {
             log("handleAP03", "format Error");
         }
@@ -455,2550 +466,83 @@ public class protocol_gator {
 //电量等级:5
 //基站接入点:46000024820000DE127
 //日期时间:151028,163100
-            int batstat=0;
-            int batlevel=ds.getBatterylevel();
-            if (batlevel>0 && batlevel<= 15){
-                batstat=0;
-            }else if (batlevel>15 && batlevel<= 35){
-                batstat=1;
-            }else if (batlevel>35 && batlevel<= 55){
-                batstat=2;
-            }else if (batlevel>55 && batlevel<= 85){
-                batstat=3;
-            }else {
-                batstat=4;
-            }
-            String netstat="46000024820000DE127";
-            String msg=new StringBuffer(cmdMap.get(CMD_TYPE.BP33)).append(CMDSPLIT)
-                    .append(0).append(CMDSPLIT)
-                    .append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT)
-                    .append(batstat).append(CMDSPLIT)
-                    .append(netstat).append(CMDSPLIT)
-                    .append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
-                    .append(TimeUtil.getSystemTimeHHmmss())
-                    .toString();
-
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds,msg));
-        }
-    public static StringMessage AP03(Runtime ds) {
-        //示例数据:IWAP03,06000908000102,5555,30#  IWAP03,000000null00000,0,0#
-        //IW: 标识符
-        //AP03:命令字
-        //设备在静止时,可以通过该指令与平台保持连接和解决静态漂移
-        //06000908000102:
-        //060为GSM信号,
-        //009为参与定位的卫星数,
-        //080为电池电量,
-        //0 为保留位,
-        //01为设防状态,此处由两位十六进制表示,无取值时为 00 ,长度必需为两位,一共 8个bit 表示8种状态,各bit定义如下:(未列出的为当前未使用, 1表示有效 ,0 表示无效)
-        //Bit0 设防状态<手表无效>
-        //Bit1 为 1 表示夜灯为开,为0 夜灯为 关
-        //02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置)
-        //5555: 计步步数,每次到达 9999 后重 0 开始计 (此处 9999 为示例,可以为2字节int 然后溢出归零)
-        //30: 翻滚次数
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP03), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d", abs(ds.getSignalStrength())))
-                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append(ds.isPowerConnected() ? "1" : "0")
-                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
-                .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString());
-    }
-
-    public StringMessage BP03(boolean success){
-        if (success){
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),cmdMap.get(CMD_TYPE.BP03)+"00000000000000031");
-        }else{
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),cmdMap.get(CMD_TYPE.BP03)+"00000000000000030");
-        }
-    }
-    public void handleAP04(Runtime ds,Connection connection,String cmd) {
-        log("AP04读取版本,返回BP00");
-        connection.send(BP00(ds));
-    }
-
-
-    public static StringMessage AP10(Runtime ds) {
-
-        /**
-         * IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502,
-         * 460,0,9520,3671,
-         * 00,zh-cn,00,
-         * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低)
-         * zh-cn:设备语言
-         * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.
-         * HOME|74-DE-2B-44-88-8C|97&HOME1|74-DE-2B-44-88-8C|97&HOME2|74-DE-2B-44-88-8C|97&HOME3|74-DE-2B-44-88-8C|97#
-         */
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP10), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())
-                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading())
-                .append(String.format("%03d", abs(ds.getSignalStrength())))
-                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")
-                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
-                .append(ds.getLBSData()).append(CMDSPLIT)
-                .append(ds.getAlarmType()).append(CMDSPLIT)
-                .append(ds.getLanguage()).append(CMDSPLIT)
-                .append("00").append(CMDSPLIT)  //不回复地址
-                .append(ds.getWifiInfo()).append(CMDEND).toString());
-
-    }
-
-    /*LBS+GPS混合定位*/
-    public static StringMessage AP01(Runtime ds) {
-        //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,
-        // 460,0,9520,3671,
-        // Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97#
-//        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP01), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())
-                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d", abs(ds.getSignalStrength())))
-                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")
-                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
-                .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString());
-    }
-
-    //处理 定位 BP01
-    public void handleBP01(String cmd) {
-        log("BP01定位接收成功");
-    }
-
-
-    /*LBS+WiFi混合定位*/
-    public static StringMessage AP02(Runtime ds) {
-        //示例数据:IWAP02,
-        // zh_cn,
-        // 0,
-        // 7,
-        // 460,0,
-        // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,
-        // 4,
-        // 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#
-//        IW标识符
-//        AP02:命令字
-//        zh_cn: 语言标志
-//        0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息
-//        7: 表示共有7组基站
-//        460: MCC 国家码
-//        0: MNC运营商代码
-//        9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应  10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)
-//        4: 表示WIFI组数,
-//                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)
-
-        int apsum = 0;
-        String wifiinfo = ds.getWifiInfo();
-        if (!wifiinfo.isEmpty()) {
-            String[] list = wifiinfo.split("&");
-            apsum = list.length;
-        }
-
-        ICLogger.i("Wifi ap sum " + apsum);
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP02), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
-                .append(ds.getLanguage()).append(CMDSPLIT)
-                .append(0).append(CMDSPLIT) //为0时不回复地址
-                .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据
-                .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString());  //wifi信息数据
-    }
-
-    //处理 定位 BP01
-    public void handleBP02(String cmd) {
-        log("BP02定位接收成功");
-    }
-
-
-    public static StringMessage APXL(String id) {
-//设备响应:      IWAPXL,080835#
-        //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    /**
-     * 测量心率
-     *
-     * @param cmd
-     * @param connection
-     */
-    public void handleBPXL(String cmd, Connection connection) {
-        //IWBPXL,353456789012345,080835#
-        //说明:
-        //IW:标识符
-        //BPXL : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //设备响应:      IWAPXL,080835#
-        //080835:指令流水号
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 3) {
-            String index = list[2];
-            String imei = list[1];
-            ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index);
-            connection.send(APXL(index));
-        } else {
-            ICLogger.i("BPXL format error!");
-        }
-
-    }
-
-    public static StringMessage APXY(String id) {
-//设备响应:      IWAPXY,080835#
-        //080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    /**
-     * 测量血压
-     *
-     * @param cmd
-     * @param connection
-     */
-    public void handleBPXY(String cmd, Connection connection) {
-        //IWBPXY,353456789012345,080835#
-        //说明:
-        //IW:标识符
-        //BPXL : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //设备响应:      IWAPXY,080835#
-        //080835:指令流水号
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 3) {
-            String index = list[2];
-            String imei = list[1];
-            ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index);
-            connection.send(APXY(index));
-        } else {
-            ICLogger.i("BPXY format error!");
-        }
-
-    }
-
-
-    public static StringMessage APJZ(String id, String BPH, String BPL, String Age, String Sex) {
-        //设备响应:      IWAPJZ,792997,120,85,42,1#
-        //792997:指令流水号
-        // 高压120,低压85,年龄42,1 男性
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(BPH)
-                .append(CMDSPLIT).append(BPL)
-                .append(CMDSPLIT).append(Age)
-                .append(CMDSPLIT).append(Sex)
-                .append(CMDEND).toString());
-    }
-
-    /**
-     * @param cmd
-     * @param connection
-     * @param runtime
-     */
-    public void handleBPJZ(String cmd, Connection connection, Runtime runtime) {
-        //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1#   高压120,低压85,年龄45,男性
-//        cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0#  高压120,低压85,年龄42,女性
-        //IWBPJZ,353456789012345,080835,110,75#
-        //说明:
-        //IW:标识符
-        //BPJZ : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //110:高压值
-        //75:低压值
-        //080835 :指令流水号
-        //设备响应:      IWAPJZ,792997,120,85,42,1#
-        //792997:指令流水号
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 7) {
-            try {
-                String index = list[2];
-                String imei = list[1];
-                String strBPH = list[3];
-                String strBPL = list[4];
-                String strAge = list[5];
-                String strSex = list[6];
-
-                connection.send(APJZ(index, strBPH, strBPL, strAge, strSex));
-                runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH), Integer.parseInt(strBPL), Integer.parseInt(strAge), Integer.parseInt(strSex));
-                ICLogger.i("Handle BPJZ IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", Age " + strAge + ", Sex " + (strSex.equals("1") ? "男" : "女"));
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BPXY format error!");
-        }
-    }
-
-
-    //重启
-
-
-    public static StringMessage AP18(String index) {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP18(Connection connection, String cmd) {
-
-        //    IWBP18,867155030001063,161723
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 3) {
-
-            connection.send(AP18(cmdlist[2]));
-
-        }
-    }
-    //恢复出厂设置
-
-    public static StringMessage AP17(String index) {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP17(Connection connection, String cmd) {
-
-        //    IWBP17,867155030001063,161723
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 3) {
-
-            connection.send(AP17(cmdlist[2]));
-
-        }
-    }
-
-    //关机
-
-
-    public static StringMessage AP31(String index) {
-        return genStringMessage("AP31", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP31(Connection connection, String cmd) {
-
-        //    IWBP31,867155030001063,161723
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 3) {
-
-            connection.send(AP31(cmdlist[2]));
-
-        }
-    }
-
-    //设置SOS号码
-    public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {
-        return genStringMessage("AP12", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(phNum1)
-                .append(CMDSPLIT).append(phNum2)
-                .append(CMDSPLIT).append(phNum3)
-                .append(CMDEND).toString());
-    }
-
-    //设置SOS号码
-    public void handleBP12(Connection connection, String cmd, Runtime runtime) {
-        //    IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length >= 3) {
-            String index = cmdlist[2];
-            String phNum1 = cmdlist.length == 3 ? "" : cmdlist[3];
-            String phNum2 = cmdlist.length > 3 ? (cmdlist.length == 4 ? "" : cmdlist[4]) : "";
-            String phNum3 = (cmdlist.length > 4) ? (cmdlist.length == 5 ? "" : cmdlist[5]) : "";
-            ICLogger.i(new StringBuffer().append("get Emegency Numbs " + phNum1 + "," + phNum2 + "," + phNum3).toString());
-            connection.send(AP12(index, phNum1, phNum2, phNum3));
-
-            ArrayList<Contact> contactArray = new ArrayList<Contact>();
-//            if(Config.custom_branch_name.equals("AK")){
-//
-//                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", "07522312120"));
-//                if (!phNum1.isEmpty())
-//                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum1));
-//                if (!phNum2.isEmpty())
-//                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum2));
-//            }else {
-            if (!phNum1.isEmpty())
-                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
-            if (!phNum2.isEmpty())
-                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
-            if (!phNum3.isEmpty())
-                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
-//            }
-            runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
-        } else {
-            ICLogger.i(" BP12 format error!");
-        }
-    }
-
-
-    public static StringMessage AP14(String index, String[] phnumbs) {
-        return genStringMessage("AP14", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(phnumbs[0])
-                .append(CMDSPLIT).append(phnumbs[1])
-                .append(CMDSPLIT).append(phnumbs[2])
-                .append(CMDSPLIT).append(phnumbs[3])
-                .append(CMDSPLIT).append(phnumbs[4])
-                .append(CMDSPLIT).append(phnumbs[5])
-                .append(CMDSPLIT).append(phnumbs[6])
-                .append(CMDSPLIT).append(phnumbs[7])
-                .append(CMDSPLIT).append(phnumbs[8])
-                .append(CMDSPLIT).append(phnumbs[9])
-                .append(CMDEND).toString());
-    }
-
-    //设置通讯录,白名单(10个)
-    public void handleBP14(Connection connection, String cmd, Runtime runtime) {
-//        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
-/**
- * IWBP14,353456789012345,080835,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx#
- */
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
-        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
-        if (cmdlist.length >= 3) {
-            switch (cmdlist.length) {
-                case 13:
-                    phnums[9] = cmdlist[12];
-                    sb.append(phnums[9]).append(",");
-                case 12:
-                    phnums[8] = cmdlist[11];
-                    sb.append(phnums[8]).append(",");
-                case 11:
-                    phnums[7] = cmdlist[10];
-                    sb.append(phnums[7]).append(",");
-                case 10:
-                    phnums[6] = cmdlist[9];
-                    sb.append(phnums[6]).append(",");
-                case 9:
-                    phnums[5] = cmdlist[8];
-                    sb.append(phnums[5]).append(",");
-                case 8:
-                    phnums[4] = cmdlist[7];
-                    sb.append(phnums[4]).append(",");
-                case 7:
-                    phnums[3] = cmdlist[6];
-                    sb.append(phnums[3]).append(",");
-                case 6:
-                    phnums[2] = cmdlist[5];
-                    sb.append(phnums[2]).append(",");
-                case 5:
-                    phnums[1] = cmdlist[4];
-                    sb.append(phnums[1]).append(",");
-                case 4:
-                    phnums[0] = cmdlist[3];
-                    sb.append(phnums[0]).append(",");
-
-            }
-
-            String index = cmdlist[2];
-            ICLogger.i(sb.toString());
-            connection.send(AP14(index, phnums));
-            ArrayList<Contact> contactArray = new ArrayList<Contact>();
-
-            if (Config.custom_name.equals("YT")) {
-                ICLogger.i("=====add hotline 96885 ");
-                contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
-            }
-            for (int i = 0; i < phnums.length; i++) {
-                String[] tmp = phnums[i].split("\\|");
-                if (tmp.length == 2) {
-                    String name = Util.decodeUnicode2Utf8(tmp[0]);
-                    String phonem = tmp[1];
-                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
-                } else {
-                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
-
-                }
-            }
-//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
-
-            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
-
-        } else {
-            ICLogger.i(" BP14 format error!");
-        }
-
-    }
-
-
-    public static StringMessage AP85(Runtime ds, String cmddata) {
-//示例数据:IWAP49,68##
-        return genStringMessage("AP85", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(cmddata)
-                .append(CMDEND).toString());
-
-    }
-
-    //设置闹钟
-    public void handleBP85(String cmd, Connection connection, Runtime runtime) {
-//        IWBP85,867155030001063,155312,1,1,0235,12,1,1
-//        IWBP85,867155030002145,945166,1,0,
-//        IWBP85,867155030001064,265960,1,1,1130,,1,1
-//        IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#
-//353456789012345:IMEI号,设备唯一ID
-//080835 :指令流水号
-//1: 表示闹钟总开关,1为开,0 为关
-//3: 表示闹钟个数
-//0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制
-//1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭
-//1表示吃药提醒
-//2 表示喝水提醒
-//3 表示久坐提醒
-//多组闹钟之间用”@”符号分隔
-
-        String imei = "", cmdindex = "0"/*指令流水号*/;
-        int all_alarmswitch = 0 /*总开关 1为开,0 为关*/,
-                alarmswitch = 0 /*1为开,0 为关*/,
-                alarmcount = 0 /*表示闹钟个数*/;
-        String alarmtime = "";//0900表示早上09:00
-        int alarmtype = 1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒
-        String repeat = "";// 135表示周一周三周五,使用24小时制
-        String[] dataList = cmd.split("@");
-        ArrayList<Alarm> alarmList = new ArrayList<>();
-        if (dataList.length > 0) {
-            for (int i = 0; i < dataList.length; i++) {
-                String[] cmdArgList = dataList[i].split(",");
-
-                if (i == 0) {
-                    if (cmdArgList.length == 9) {
-                        try {
-                            imei = cmdArgList[1];
-                            cmdindex = cmdArgList[2];
-                            all_alarmswitch = Integer.parseInt(cmdArgList[3]);
-                            alarmcount = Integer.parseInt(cmdArgList[4]);
-                            alarmtime = cmdArgList[5];
-                            repeat = cmdArgList[6];
-                            alarmswitch = Integer.parseInt(cmdArgList[7]);
-                            alarmtype = Integer.parseInt(cmdArgList[8]);
-                            log(new StringBuilder("imei ").append(imei)
-                                    .append(", cmdindex ").append(cmdindex)
-                                    .append(", allswitch=").append(all_alarmswitch)
-                                    .append(", all alarm count=").append(alarmcount)
-                                    .toString()
-                            );
-
-                            log(new StringBuilder("alarmtime ").append(alarmtime)
-                                    .append(", relpeat ").append(repeat)
-                                    .append(", switch=").append(alarmswitch)
-                                    .append(", alarmtype=").append(alarmtype)
-                                    .toString()
-                            );
-                            alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
-                        } catch (Exception e) {
-                            ICLogger.e(e.getMessage(), e);
-                        }
-                    } else if (cmdArgList.length == 5) {
-                        try {
-                            imei = cmdArgList[1];
-                            cmdindex = cmdArgList[2];
-                            all_alarmswitch = Integer.parseInt(cmdArgList[3]);
-                            alarmcount = Integer.parseInt(cmdArgList[4]);
-                        } catch (Exception e) {
-                            ICLogger.e(e.getMessage(), e);
-                        }
-                    } else {
-                        log("data len is too small!");
-                    }
-                } else {
-                    if (cmdArgList.length == 4) {
-                        try {
-                            alarmtime = cmdArgList[0];
-                            repeat = cmdArgList[1];
-                            alarmswitch = Integer.parseInt(cmdArgList[2]);
-                            alarmtype = Integer.parseInt(cmdArgList[3]);
-
-                            log(new StringBuilder("set alarmtime ").append(alarmtime)
-                                    .append(", relpeat ").append(repeat)
-                                    .append(", switch=").append(alarmswitch)
-                                    .append(", alarmtype=").append(alarmtype)
-                                    .toString()
-                            );
-
-                            alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
-                        } catch (Exception e) {
-                            ICLogger.e(e.getMessage(), e);
-                        }
-                    } else {
-                        log("data len is too small!");
-                    }
-
-                }
-            }//循环获取alarm数据结束
-            runtime.getDbHelper().saveAlarm(alarmList);
-
-            //do clean and set alarm things
-
-        }
-//IWBP85,867155030002145,410385,1,0,#
-
-        String replacement = new StringBuilder("IWBP85,").append(imei).append(",").toString();
-        String replycmd = cmd.replace(replacement, "");
-        ICLogger.i("gen reply " + replacement + " " + replycmd);
-        connection.send(AP85(runtime, replycmd));
-    }
-
-
-// AP05命令L02服务器不适用
-//    public static String AP05(boolean recvFlag){
-//
-////        IWAP05,1#
-//        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP05))
-//                .append(CMDSPLIT).append(recvFlag?1:0)
-//                .append(CMDEND).toString();
-//
-//    }
-//
-//
-//    public void handleBP05(String cmd){
-////        IWBP05,6#
-//        String[] cmdlist=cmd.split(CMDSPLIT);
-//        if (cmdlist.length>1){
-//            ICLogger.i(" 服务器有 " +cmdlist[1]+" 条语音未接收!");
-//        }
-//    }
-
-
-    public static byte[] AP07(String packetTime, int count, int index, int datalen, byte[] amrdata) {
-//IWAP07,20140818064408,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
-//说明:
-//IW:标识符
-//AP07 : 命令字符
-//20140818064408 :yyyyMMddHHmmss 格式的年月日时分秒,设备录音时间
-//6:语音包分包总数
-//1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同
-//1024 :语音包长度
-//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数
-//语音包上传规则:
-//按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。
-//收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。
-//如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
-
-
-        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))
-                .append(CMDSPLIT).append(packetTime)
-                .append(CMDSPLIT).append(count)
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(datalen)
-                .append(CMDSPLIT).toString();
-
-        byte[] sentbuf = new byte[sb.length() + datalen + 1];
-        System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());
-        System.arraycopy(amrdata, 0, sentbuf, sb.length(), datalen);
-        sentbuf[sb.length() + datalen] = '#';
-
-        return sentbuf;
-
-    }
-
-
-    public void handleBP07(String cmd, Connection connection) {
-//平台响应:      IWBP07,20140818064408,6,1,1#
-//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒
-//6:语音包分包总数
-//1:当前设备收到的是第几个包
-//1:表示服务器接受数据成功,0表示服务器接受数据失败
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 5) {
-            try {
-                String time = cmdlist[1];
-                int packetCount = Integer.parseInt(cmdlist[2]);
-                int packetIndex = Integer.parseInt(cmdlist[3]);
-                int receiveSuccess = Integer.parseInt(cmdlist[4]);
-                ICLogger.i("服务器在" + time + " 收到语音 " + packetIndex + "/" + packetCount + " " + (receiveSuccess == 1 ? "成功" : "失敗"));
-                if (receiveSuccess == 1) {
-                    //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送
-                    voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);
-                }
-                //发送消息,再次检查要发送的语音包,确认其发送完毕
-                connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i(" BP07 Format error!");
-        }
-    }
-
-
-    public static StringMessage AP33(String cmdindex, int workMode) {
-//IWAP33,080835,1#
-//080835:指令流水号
-//1:设置信息,供服务器同步
-        return genStringMessage("AP33", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(cmdindex)
-                .append(CMDSPLIT).append(workMode)
-                .append(CMDEND).toString());
-    }
-
-    //设置工作模式
-    public void handleBP33(Connection connection, Runtime runtime, String cmd) {
-
-//    IWBP33,867155030001063,560555,1
-//        IW:标识符
-//        BP33 : 命令字符
-//        353456789012345:IMEI号,设备唯一ID
-//        080835:指令流水号
-//        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
-
-        String[] cmdlist = cmd.split(",");
-        if (cmdlist.length == 4) {
-
-
-            log("com.ic.work mode " + cmdlist[3]);
-            try {
-                int mod = Integer.parseInt(cmdlist[3]);
-                int Cycle = 900;
-                switch (mod) {
-                    case ICLocation.NORMAL_MOD:
-                        Cycle = 900;
-                        break;
-                    case ICLocation.LOWPOWER_MOD:
-                        Cycle = 3600;
-                        break;
-                    case ICLocation.EMERGNECY_MOD:
-                    case ICLocation.REALTIME_MOD:
-                        Cycle = 60;
-                        break;
-
-                }
-
-                StringMessage msg = AP33(cmdlist[2], mod);
-                //设定当前工作模式及循环频率
-                connection.send(msg);
-                log("reply msg " + msg);
-                log("LOCATION_MODE  " + LOCATION_MODE + " mod " + mod);
-                Config.setLocationMode(runtime.getContextProxy().context, mod);
-                Config.setLocationCycle(runtime.getContextProxy().context, Cycle);
-                runtime.getLocationInstance().setLocation_cycle(Cycle);
-                runtime.getLocationInstance().setWorkingMod(mod);
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-//            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
-            //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
-        }
-
-    }
-
-
-    public static StringMessage AP34(String cmdindex, int workMode) {
-//IWAP34,588854,1#
-//080835:指令流水号
-//8:模式
-        return genStringMessage("AP34", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(cmdindex)
-                .append(CMDSPLIT).append(workMode)
-                .append(CMDEND).toString());
-    }
-
-    //设置自定义工作模式
-    public void handleBP34(Connection connection, Runtime runtime, String cmd) {
-
-//    IWBP34,867155030001063,588854,8,900,1#
-//        IW:标识符
-//        BP33 : 命令字符
-//        353456789012345:IMEI号,设备唯一ID
-//        080835:指令流水号
-//        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
-
-        String[] cmdlist = cmd.split(",");
-        if (cmdlist.length == 6) {
-
-
-            log("com.ic.work mode " + cmdlist[3]);
-            try {
-                int mod = Integer.parseInt(cmdlist[3]);
-                int Cycle = Integer.parseInt(cmdlist[4]);
-                int gpson = Integer.parseInt(cmdlist[5]);
-
-                StringMessage msg = AP34(cmdlist[2], mod);
-                //设定当前工作模式及循环频率
-                connection.send(msg);
-
-                if (gpson == 1) {
-                    mod = ICLocation.CUSTOM_MOD8_GPS;
-                } else {
-                    mod = ICLocation.CUSTOM_MOD8_WIFI;
-                }
-                log("reply msg " + msg.isFromCache());
-                log("LOCATION_MODE  " + LOCATION_MODE + " mod " + mod + ", cycle = " + Cycle + ", GPS On= " + gpson);
-                Config.setLocationMode(runtime.getContextProxy().context, mod);
-                Config.setLocationCycle(runtime.getContextProxy().context, Cycle);
-                runtime.getLocationInstance().setLocation_cycle(Cycle);
-                runtime.getLocationInstance().setWorkingMod(mod);
-//            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
-                //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        }
-
-    }
-
-    public void handleBP40(Connection connection, Runtime runtime, String cmd) {
-
-//        IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#
-//        IW:标识符
-//        BP40 : 命令字符
-//        353456789012345:IMEI号,设备唯一ID
-//        080835 :指令流水号
-//        XXXXXXXXXXXX : 表示文字内容GB2312编码
-
-        ICLogger.d("cmd == > " + cmd);
-        //这里的切割,如查是云图的后台,会有问题,如果文本内容里有,那么就会切割出错了。所以需要后台去解决这个问题。
-        String[] cmdlist = cmd.split(",");
-        ICLogger.d("cmdlist length == > " + cmdlist);
-        if (cmdlist.length == 4) {
-            String cmdindex = cmdlist[2];
-            String txtmsg = cmdlist[3];
-            StringBuilder sb = new StringBuilder();
-            Runtime.PushtxtMsg_srv_index = cmdindex;//给回复AP94用
-            sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);
-            if (Config.custom_name.equals("VitracK")) {
-
-            } else if (Util.getSystemProperties("persist.sys.pushtxt_encode", "gb2312").equals("utf-8")) {
-                //  txtmsg = Util.decodeUnicode2Utf8(txtmsg);
-//                txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
-                txtmsg = Util.UrlUTF8ToStrUTF8(txtmsg);
-            } else {
-                txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
-            }
-            StringMessage msg = AP40(cmdindex, 1);
-            //设定当前工作模式及循环频率
-            connection.send(msg);
-            ICLogger.i("received Txt Msg " + txtmsg);
-            if (!Config.noPushTxtReadReply) {
-                Config.setLastUnReadMessage(runtime.getContextProxy().context, sb.toString());
-                runtime.getContextProxy().sendMsgBroadcast(txtmsg, 3);//msgType 3需要回复,0不需要回复
-            } else {
-                //判断产品类型,如果是S123的,那么就不发广播了
-                //读取一个变量值,判断是否弹窗
-                String forceReadMsg = Util.getSystemProperties("persist.sys.forcereadmsg");
-                ICLogger.d("forceReadMsg == > " + forceReadMsg);
-                if (!TextUtils.isEmpty(forceReadMsg)) {
-                    MsgMustReadDialog instance = MsgMustReadDialog.getInstance();
-                    instance.showMsgDialog();
-                    List<String> list = new ArrayList<>();
-                    list.add(txtmsg);
-                    instance.addData(list);
-                } else {
-                    runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);//msgType 3需要回复,0不需要回复
-                }
-            }
-            //保存到数据库里
-            runtime.getContextProxy().saveMstToSMSDB(txtmsg);
-        } else {
-            ICLogger.i("BP40 format error!");
+        int batstat=0;
+        int batlevel=ds.getBatterylevel();
+        if (batlevel>0 && batlevel<= 15){
+            batstat=0;
+        }else if (batlevel>15 && batlevel<= 35){
+            batstat=1;
+        }else if (batlevel>35 && batlevel<= 55){
+            batstat=2;
+        }else if (batlevel>55 && batlevel<= 85){
+            batstat=3;
+        }else {
+            batstat=4;
         }
-    }
-
-    public static StringMessage AP40(String cmdindex, int success) {
-
-//        IWAP40,080835,1#
-//        080835:指令流水号
-//        1:表示设备接受数据成功,0表示设备接受数据失败
-        return genStringMessage("AP40", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(cmdindex)
-                .append(CMDSPLIT).append(success)
-                .append(CMDEND).toString());
-    }
+        String netstat="46 00 002482 0000DE127";
 
+        netstat = ds.getGatorLBSData();
 
-    /**
-     * 心率上传,返回协议字串
-     *
-     * @param ds
-     * @return
-     */
-    public static StringMessage AP49(Runtime ds) {
-        //示例数据:IWAP49,68##
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ds.getHRS().getPPG())
-                .append(CMDEND).toString());
-
-    }
-
+        String msg=new StringBuffer(cmdMap.get(CMD_TYPE.BP33)).append(CMDSPLIT)
+                .append(0).append(CMDSPLIT)
+                .append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT)
+                .append(batstat).append(CMDSPLIT)
+                .append(netstat).append(CMDSPLIT)
+                .append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
+                .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
+                .append("0,0,0")
+                .toString();
 
-    /**
-     * 返回上传心率血压的协议字串
-     *
-     * @param ds
-     * @return
-     */
-    public static StringMessage APHT(Runtime ds) {
-        //IWAPHT,60,130,85#
-        //说明:
-        //IW:标识符
-        //APHT : 命令字符
-        //60 : 表示心率
-        //130: 血压高压 [收缩压]
-        //85 : 血压低压 [舒张压]
-        //平台响应:      IWBPHT#
-        //表示平台已接收,可不作响应
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ds.getHRS().getPPG())
-                .append(CMDSPLIT).append(ds.getHRS().getBPH())
-                .append(CMDSPLIT).append(ds.getHRS().getBPL())
-                .append(CMDEND).toString());
-    }
+        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds,msg));
 
-    public static StringMessage APHT(int ppg, int bph, int bpl) {
-        //IWAPHT,60,130,85#
-        //说明:
-        //IW:标识符
-        //APHT : 命令字符
-        //60 : 表示心率
-        //130: 血压高压 [收缩压]
-        //85 : 血压低压 [舒张压]
-        //平台响应:      IWBPHT#
-        //表示平台已接收,可不作响应
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ppg)
-                .append(CMDSPLIT).append(bph)
-                .append(CMDSPLIT).append(bpl)
-                .append(CMDEND).toString());
+        return ret;
     }
 
 
-    //立即定位反馈
-    public static StringMessage AP16(String cmdindex) {
-//IWAP16,080835#
-//080835:指令流水号
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP16), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))
-                .append(CMDSPLIT).append(cmdindex)
-                .append(CMDEND).toString());
-    }
-
-    //    立即定位指令(长链接有效)
-    public void handleBP16(Connection connection, Runtime runtime, String cmd) {
-        //示例数据:IWBP16,867155030001063,335386
-//        IWBP16,353456789012345,080835#
-//        说明:
-//        IW:标识符
-//        BP16 : 命令字符
-//        353456789012345:IMEI号,设备唯一ID
-//        080835 :指令流水号
-        String[] cmdlist = cmd.split(",");
-        if (cmdlist.length == 3) {
-            log("imei " + cmdlist[1] + ", cmdindex " + cmdlist[2]);
-
-            connection.send(AP16(cmdlist[2]));
-        } else {
-            log("error BP16 format");
-        }
+    public void handleAP04(Runtime ds,Connection connection,String cmd) {
+        log("AP04读取版本,返回BP00");
+        connection.send(BP00(ds));
     }
-
-
-    /*通过基站获取时间和坐标*/
-    public static StringMessage APTM(Runtime ds) {
-        //示例数据:IWAPTM,460,0,9750,3613#
-        //说明:
-        //IW:标识符
-        //APTM : 命令字符
-        //460:MCC
-        //0: MNC
-        //9750: LAC
-        //3613: CID
-
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ds.getLocationInstance().getMCC())
-                .append(CMDSPLIT).append(ds.getLocationInstance().getMNC())
-                .append(CMDSPLIT).append(ds.getLocationInstance().getLAC())
-                .append(CMDSPLIT).append(ds.getLocationInstance().getGSMStationCID())
-                .append(CMDEND).toString());
+    public void handleAP00(Runtime ds,Connection connection,String cmd) {
+        log("AP00读取版本,返回BP30");
 
     }
 
-    public void handleBPTM(String cmd) {
-        //平台响应:      IWBPTM,20160225090909,22.123456,113.654321#
-        //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间
-        //经纬度保留六位小数,若没取到则返回 0
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 4) {
-
-            String time = list[1];
-            String lat = list[2];
-            String lon = list[3];
-            ICLogger.i("BPTM , time=" + time + ", lat=" + lat + ", lon=" + lon);
-        } else {
-            ICLogger.i("BPTM format error");
-        }
-
+    public void handleAP30(){
 
     }
+    //定位信息
+    public void BP30(Runtime ds,Connection connection,String cmd) {
+        log("AP04读取版本,返回BP00");
 
-    public static StringMessage AP15(String index) {
-//IWAP15, 080835#
-//080835:指令流水号
-        return genStringMessage("AP15", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
     }
+//    (0019357593060153353AP00) 下行一次location。
 
-    //设置定位周期
-    public void handleBP15(String cmd, Connection connection, Runtime runtime) {
-//        IWBP15, 353456789012345, 080835, 30#
-//        353456789012345:IMEI号,设备唯一ID
-//        080835 :指令流水号
-//        30: 表示频率为30分钟
-
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 4) {
-            String index = list[2];
-            String time = list[3];
-            connection.send(AP15(index));
-            ICLogger.i("BP15 , 定位周期=" + time + "秒");
-
-            try {
-                Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);
-                Config.setLocationCycle(runtime.getContextProxy().context, Integer.parseInt(time));
-                runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));
-                runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));
-                //set AlarmCycle  and trigger Location
-                CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BP15 format error");
-        }
-
-    }
+    public boolean handleCmd(CMD_TYPE type, String cmd) {
 
+        //普通非二进制命令用此函数处理
+        boolean ret = true;
+        ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd);
+        cmd = cmd.replace(" ", "");
+        switch (type) {
+            case AP03: //登录包
+                handleAP03(mRuntime, mConnection,cmd);
+                ICLogger.i("服务器收到登录包");
+                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
+                break;
+            case AP04://查询终端版本消息
+                handleAP04(mRuntime,mConnection,cmd);
+                break;
+            case AP30:// 定位数据接收成功
+                mConnection.DeliverCMDMessageToSystem("BP30", cmd);//通知下面线程状态变化
+                break;
+//            case AP14: //gps定位包
+//                handleBP01(cmd);
+//                ICLogger.i("服务器收到定位AP01");
+//                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
+//                break;
 
-    /*语音下行反馈*/
-    public static StringMessage AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {
-        //示例数据:IWAP28,D3590D54,xxxx,6,1,1#
-        return genStringMessage("AP28", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(name)
-                .append(CMDSPLIT).append(msg)
-                .append(CMDSPLIT).append(packagecount)
-                .append(CMDSPLIT).append(currentpackageindex)
-                .append(CMDSPLIT).append(received_success)
-                .append(CMDEND).toString());
-    }
-
-    //处理 BP28 语音消息
-    public void handleBP28(Connection connection, String cmd, Runtime runtime, byte[] bytes) {
-        //log("handleBP28 msg"+cmd);
-/**
- * IWBP28, D3590D54,XXXX,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
- * 说明:
- * IW:标识符
- * BP28 : 命令字符
- * D3590D54:UNICODE编码,发送者名称
- * XXXX: 附加信息,在响应数据包时,将附加信息原样响应,类似流水号
- * 6:语音包分包总数
- * 1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同
- * 1024 :语音包长度
- * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数
- * 语音包上传规则:
- * 按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。
- * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。
- * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
- * 设备响应:     IWAP28,D3590D54,XXXX,6,1,1#
- * D3590D54:UNICODE编码,发送者名称
- * XXXX: 附加信息,原样返回
- * 6:语音包分包总数
- * 1:当前设备收到的是第几个包
- * 1:表示设备接受数据成功,0表示设备接受数据失败
- */
-        String Name;
-        String appendIndex;
-        int packetCount;
-        int currentId;
-        int packetLen;
-        byte[] packetData;
-
-        String[] msg = cmd.split(CMDSPLIT);
-        if (msg.length >= 6) {
-
-            try {
-                Name = msg[1];
-                appendIndex = msg[2];
-                packetCount = Integer.parseInt(msg[3]);
-                currentId = Integer.parseInt(msg[4]);
-                packetLen = Integer.parseInt(msg[5]);
-                packetData = Util.subArray(bytes, msg[0].length() + msg[1].length() + msg[2].length() + msg[3].length() + msg[4].length() + msg[5].length() + 6, bytes.length - 1);
-
-                StringBuffer stringBuffer = new StringBuffer();
-                stringBuffer.append("recv BP28 name = ").append(Name)
-                        .append(",appendIndex = ").append(appendIndex)
-                        .append(",packetCount = ").append(packetCount)
-                        .append(",currentId = ").append(currentId)
-                        .append(",packetLen = ").append(packetLen)
-                        .append(",packetDatalen = ").append(packetData.length);
-
-                log(stringBuffer.toString());
-                connection.send(AP28(Name, appendIndex, packetCount, currentId, 1));
-                voicePacket.getInstance().appendVoice(Name, appendIndex, packetCount, currentId, packetLen, packetData);
-                log("================" + voicePacket.getInstance().toString());
-                if (voicePacket.getInstance().isFinished()) {
-
-                    String dir = Environment.getExternalStorageDirectory() + "/Android/VoiceCache";
-                    String amrFilepath = Util.saveFile(voicePacket.getInstance().getVoicePacketBytes(), 0, voicePacket.getInstance().getVoicePacketLen(), new File(dir), "receive_" + voicePacket.getInstance().getPacketTime() + ".amr");
-                    ICLogger.i("save Amr file to " + amrFilepath);
-                    voicePacket.getInstance().clearPacket();
-                    VoiceContent voiceContent = VoiceContent.placeHolderIn(Content.CONTACT_CATEGORY_GROUP, GROUP_ALL, amrFilepath);
-                    final Uri uri2 = runtime.getDbHelper().insertMessage(voiceContent);
-                    //回复UI消息,表示已经接收到
-                    voiceContent.status = 3;
-                    voiceContent.serverTime = TimeUtil.getSystemTime3();
-                    voiceContent.preview = String.valueOf(Util.getDuration(voiceContent.content));
-                    runtime.getDbHelper().updateMessage(voiceContent, uri2);
-//                runtime.getContextProxy().sendBroadcast(ACTION_IMESSAGE, runtime);
-                    connection.DeliverCMDMessageToSystem("NewVoice", amrFilepath);//通知下面线程状态变化
-                }
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-
-        } else {
-            log("handleBP28", "format Error");
-//            connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,0)));
-
-        }
-
-    }
-
-    public void sendBroadcast(String cmd, Runtime dev) {
-
-        ComponentName componentName = new ComponentName("com.eqc.watch", "com.eqc.watch.launcher.ChatActivity");
-        Intent intent = new Intent("android.intent.action.MAIN");
-//              intent.putExtra("ACTIVITY_TYPE", 2);
-//              intent.addCategory("android.intent.category.DEFAULT");
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        intent.setComponent(componentName);
-        dev.getContextProxy().context.startActivity(intent);
-    }
-
-    //白名单开关(下行协议号:BP84,响应:AP84)
-    public static StringMessage AP84(String index, int success) {
-
-        //设备响应:      IWAP80,080835,1#
-        //080835:指令流水号
-        //1:表示设备执行成功,0 表示设备执行失败
-        return genStringMessage("AP84", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(success)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP84(String cmd, Connection connection) {
-//示例:
-        //IWBP84,353456789012345,080835,1#
-        //说明:
-        //IW:标识符
-        //BP84 : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //1: 表示白名单开,0 表示白名单关
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 4) {
-            String index = list[2];
-            String whitelist_switch = list[3];
-            connection.send(AP84(index, 1));
-
-            if (whitelist_switch.equals("1")) {
-                Util.setSystemProperties("persist.sys.whitelist.enable", "true");
-            } else {
-                Util.setSystemProperties("persist.sys.whitelist.enable", "false");
-            }
-            ICLogger.i("收到服务器指令:白名单" + (whitelist_switch.equals("1") ? "开" : "关"));
-
-        } else {
-
-            ICLogger.i("BP84 format error!");
-        }
-
-    }
-
-    //17.绑定解绑(下行协议号:BP68,响应:AP68)
-    public static StringMessage AP68(String index, String cmd) {
-
-        //设备响应:      IWAP86, 080835,1#
-        //080835:指令流水号
-        return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(cmd)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP68(String cmd, Connection connection, Runtime runtime) {
-
-        //示例:
-        //IWBP68,353456789012345,080835,1#
-        //说明:
-        //IW:标识符
-        //BP68 : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功)
-
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 4) {
-            String index = list[2];
-            String type = list[3];
-            connection.send(AP68(index, type));
-            ICLogger.i("收到服务器消息:" + (type.equals("1") ? "绑定成功 " : "未激活或者解绑"));
-            if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {//AK-YQ
-                if (type.equals("1")) {
-                    WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-//                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
-                    Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
-                    Config.setNeedAntiOff(runtime.getContextProxy().context, true);
-                    Config.setNeedCutOff(runtime.getContextProxy().context, true);
-                    runtime.setNeedAntioff(true);
-                    runtime.setNeddReportCutoff(true);
-                } else {
-                    WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
-                    Config.setNeedAntiOff(runtime.getContextProxy().context, false);
-                    Config.setNeedCutOff(runtime.getContextProxy().context, false);
-                    runtime.setNeedAntioff(false);
-                    runtime.setNeddReportCutoff(false);
-                    //1 分钟后重置
-                    mHandler.postDelayed(new Runnable() {
-                        @Override
-                        public void run() {
-                            Util.doMasterClear(runtime.getContextProxy().context);
-                        }
-                    }, 5000);
-                }
-            }
-
-        } else {
-            ICLogger.i("BP86 format error!");
-        }
-
-    }
-
-
-    //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)
-    public static StringMessage AP86(String index) {
-
-        //设备响应:      IWAP86, 080835#
-        //080835:指令流水号
-        return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP86(String cmd, Connection connection, Runtime runtime) {
-
-        //示例:
-        //IWBP86, 353456789012345, 080835,1,720#
-        //说明:IWBP86,867400020316612,858663,1,30
-        //IW:标识符
-        //BP86 : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //1: 表示心率周期;2 :表示血压周期
-        //720: 表示720分钟
-
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 5) {
-            String index = list[2];
-            String type = list[3];
-            String cycle = list[4];
-            connection.send(AP86(index));
-            ICLogger.i("收到服务器指令:设置" + (type.equals("1") ? "心率周期 " : "血压周期 ") + cycle + "分钟");
-
-            try {
-                //发送重置PPGCycle的广播,会在CoreServer里面执行
-                CoreService.getInstance().setHeartRateDetectAlarm(Integer.parseInt(cycle));
-//                Intent intent = new Intent();
-//                intent.putExtra("PPGTestCycle", Integer.parseInt(cycle));
-//                intent.setFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
-//                intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
-//                runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START, intent);
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BP86 format error!");
-        }
-
-    }
-
-    //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
-    public static StringMessage AP87() {
-
-        //设备响应:      IWAP86, 080835#
-        //080835:指令流水号
-        return genStringMessage("AP87", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP87(String cmd, Connection connection, Runtime runtime) {
-
-        //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
-
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 2) {
-            String furl = list[1];//.replace("#","");
-            ICLogger.i("收到服务器指令 BP87:Qrcode url " + furl);
-//            connection.send(AP87());
-            try {
-                String qrfilepath = Util.getLogfilePath(runtime, TimeUtil.getSystemDateYYMMDD());
-                Util.setSystemProperties(Config.KeyQRURIFILE, qrfilepath);
-                FileOutputStream fos = new FileOutputStream(new File(qrfilepath));
-                fos.write(furl.getBytes());
-                fos.close();
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BP87 format error!");
-        }
-
-    }
-
-    public static StringMessage AP88(String index) {
-        //设备响应:      IWAP88, 080835#
-        //080835:指令流水号
-        return genStringMessage("AP88", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public static void handleBP88(String cmd, Connection connection) {
-//        IWBP88,080835#
-        String[] list = cmd.split(CMDSPLIT);
-
-        if (list.length == 2) {
-            String index = list[1];
-            connection.send(AP88(index));
-            ICLogger.i("收到服务器消息:查询设备");
-
-        } else {
-            ICLogger.i("BP88 format error!");
-        }
-    }
-
-    //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)
-    public static StringMessage AP89(String index) {
-
-        //设备响应:      IWAP89, 080835#
-        //080835:指令流水号
-        return genStringMessage("AP89", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP89(String cmd, Connection connection) {
-
-        //示例:
-        //IWBP89, 353456789012345, 080835,50,90,80,90,110,140#
-        //说明:
-        //IW:标识符
-        //BP89 : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //50: 心率低阀值,低于该阀值上传心率,如果未设置,则留空
-        //90: 心率高阀值,高于该阀值上传心率,如果未设置,则留空
-        //80: 低压阀值,低压低于该阀值上传血压,如果未设置,则留空
-        //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空
-        //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空
-        //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 9) {
-            String index = list[2];
-            String PPGH = list[3];
-            String PPGL = list[4];
-            String BPH_H = list[5];
-            String BPH_L = list[6];
-            String BPL_H = list[7];
-            String BPL_L = list[8];
-            connection.send(AP89(index));
-
-
-            ICLogger.i("收到服务器指令:心率/血压阀值 " + PPGH + "," + PPGL + "," + BPH_H + "," + BPH_L + "," + BPL_H + "," + BPL_L);
-        } else {
-            ICLogger.i("BP89 format error!");
-        }
-
-    }
-
-    //体温间隔测量 (后台测试体温)(下行协议号:BPTE,响应:APTE)
-    public static StringMessage APTE(String index, int freq) {
-
-        //设备响应:      IWAPTE,080835,60#
-        //080835:指令流水号
-        //1:表示设备接受数据成功,0表示设备接受数据失败
-        return genStringMessage("APTE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(freq)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBPTE(String cmd, Connection connection, Runtime runtime) {
-        //示例:
-        //IWBPTE,353456789012345,080835,60#
-        //说明:
-        //IW:标识符
-        //BPTE : 命令字符
-        //353456789012345:IMEI号,设备唯一ID
-        //080835 :指令流水号
-        //60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器)
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 4) {
-            try {
-                String index = list[2];
-                String freqstr = list[3];
-                int freq = Integer.parseInt(freqstr);
-                connection.send(APTE(index, freq));
-                ICLogger.i("收到服务器指令:测量体温 " + freq + "分钟一次。");
-                Config.setTemperatureTestCycle(runtime, freq * 60);
-                CoreService.getInstance().setTempAlarm(true);
-                if (runtime.check_stat_do_temp_test())
-                    TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BPTE format error!");
-        }
-
-    }
-
-    //体温上行(上行协议号:APTP,响应:BPTP)
-    public static StringMessage APTP(double wrist_temp, double body_temp, double tempout) {
-
-        //设备:    IWAPTP,36.3,33,132#
-        //IW:标识符
-        //APTP : 命令字符
-        //35.3:测量体温 (摄氏度)
-        //33,132:温补用的参数,此处不用,可以用0 来代替。 目前是代表的腕温,室外温度
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(String.format("%1$.1f", body_temp))
-                .append(CMDSPLIT).append(String.format("%1$.1f", wrist_temp))
-                .append(CMDSPLIT).append(String.format("%1$.1f", tempout))
-                .append(CMDEND).toString());
-    }
-
-    public void handleBPTP() {
-
-        ICLogger.d("BPTP 服务器收到体温数据!");
-
-    }
-
-
-    public static StringMessage APX1(String id) {
-        //设备响应:      IWAPX1, 080835#
-        //080835:指令流水号
-        return genStringMessage("APX1", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    /**
-     * @param cmd
-     * @param connection
-     * @param runtime
-     */
-    public void handleBPX1(String cmd, Connection connection, Runtime runtime) {
-        //IWBPX1,353456789012345,080835,2,1,-3,0#
-        //说明:
-//        IW:标识符
-//        BPX1 : 命令字符
-//        353456789012345:IMEI号,设备唯一ID
-//        080835 :指令流水号
-//        2: 心率修正值
-//        1:高压修正值
-//                -3:低压修正值
-//        0:血氧修正值
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 7) {
-            String index = list[2];
-            String imei = list[1];
-            String strXL = list[3];
-            String strBPH = list[4];
-            String strBPL = list[5];
-            String strSpO2 = list[6];
-
-            connection.send(APX1(index));
-
-            try {
-                int ppg_adjust, bph_adjust, bpl_adjust, spo2_adjust;
-                ppg_adjust = Integer.parseInt(strXL);
-                bph_adjust = Integer.parseInt(strBPH);
-                bpl_adjust = Integer.parseInt(strBPL);
-                spo2_adjust = Integer.parseInt(strSpO2);
-
-                runtime.getHRS().setAdjust(ppg_adjust, bph_adjust, bpl_adjust, spo2_adjust);
-                Config.setPPGAdjust(mRuntime.getContextProxy().context, ppg_adjust);
-                Config.setBPHAdjust(mRuntime.getContextProxy().context, bph_adjust);
-                Config.setBPLAdjust(mRuntime.getContextProxy().context, bpl_adjust);
-                Config.setSPo2Adjust(mRuntime.getContextProxy().context, spo2_adjust);
-                String ShareAdjValue = new StringBuilder().append(ppg_adjust).append(CMDSPLIT)
-                        .append(bph_adjust).append(CMDSPLIT)
-                        .append(bpl_adjust).append(CMDSPLIT)
-                        .append(spo2_adjust).append(CMDSPLIT).toString();
-                Config.setPPG_ECG_adjustValue(ShareAdjValue);
-                ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", PPG " + strXL + ", Sp02 " + strSpO2 + " , Shared Adjust Value " + ShareAdjValue);
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BPX1 format error!");
-        }
-    }
-
-
-    public static StringMessage APS4(String id) {
-        //设备响应:      IWAPS4,080835#
-        //080835:指令流水号
-        return genStringMessage("APS4", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    /**
-     * 主要为久坐设置提醒时长。
-     *
-     * @param cmd
-     * @param connection
-     * @param runtime
-     */
-    public void handleBPS4(String cmd, Connection connection, Runtime runtime) {
-        //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#
-        //说明:
-//        IW:标识符
-//        BPS4: 命令字符
-//        353456789012345:设备IMEI或者ID
-//        080835 :指令流水号
-//        1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)
-//        重复周期、开始结束时间格式 参考BP85闹钟设置,
-//#:结尾标识符
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length >= 4) {
-
-            String index = list[2];
-            String imei = list[1];
-            connection.send(APS4(index));
-
-            String setting1;
-            switch (list.length) {
-                case 10:
-                    setting1 = list[9];
-                    ICLogger.i("set 7th alarm " + setting1);
-                case 9:
-                    setting1 = list[8];
-                    ICLogger.i("set 6th alarm " + setting1);
-                case 8:
-                    setting1 = list[7];
-                    ICLogger.i("set 5th alarm " + setting1);
-                case 7:
-                    setting1 = list[6];
-                    ICLogger.i("set 4th alarm " + setting1);
-                case 6:
-                    setting1 = list[5];
-                    ICLogger.i("set 3rd alarm " + setting1);
-                case 5:
-                    setting1 = list[4];
-                    ICLogger.i("set 2nt alarm " + setting1);
-                case 4:
-                    setting1 = list[3];
-                    ICLogger.i("set 1st alarm " + setting1);
-                    break;
-            }
-
-            ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", get " + (list.length - 3) + " settings");
-        } else {
-            ICLogger.i("BPX1 format error!");
-        }
-    }
-
-    public static StringMessage APHP(Runtime ds) {
-        //IWAPHP,60,130,85,95,90, , , , , , , , #
-        //IW:标识符
-        //APHT : 命令字符
-        //60 : 表示心率
-        //130: 血压高压 [收缩压]
-        //85 : 血压低压 [舒张压]
-        //95:血氧
-        //90:血糖
-//        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ds.getHRS().getPPG())
-                .append(CMDSPLIT).append(ds.getHRS().getBPH())
-                .append(CMDSPLIT).append(ds.getHRS().getBPL())
-                .append(CMDSPLIT).append(ds.getHRS().getSpo2())
-                .append(CMDSPLIT).append(0)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDEND).toString());
-    }
-
-    public static StringMessage APHP(int ppg, int bph, int bpl, int spo2) {
-        //IWAPHP,60,130,85,95,90, , , , , , , , #
-        //IW:标识符
-        //APHT : 命令字符
-        //60 : 表示心率
-        //130: 血压高压 [收缩压]
-        //85 : 血压低压 [舒张压]
-        //95:血氧
-        //90:血糖
-//        本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(ppg)
-                .append(CMDSPLIT).append(bph)
-                .append(CMDSPLIT).append(bpl)
-                .append(CMDSPLIT).append(spo2)
-                .append(CMDSPLIT).append(0)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDSPLIT)
-                .append(CMDEND).toString());
-    }
-
-
-    public void handleBPHP() {
-
-        ICLogger.i("服务器收到APHP 心率血压血氧 !");
-
-    }
-
-    public static StringMessage APDE(String id) {
-        /***
-         * 示例:
-         * 设备响应:     IWAPDE,080835#
-         * 080835:指令流水号
-         * 说明:   本消息适用所有终端
-         */
-        return genStringMessage("APDE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBPDE(Connection connection, String cmd, Runtime runtime) {
-/***
- * 示例:
- * IWBPDE,867400020316612,853676,0
- * 说明:
- * IW:标识符
- * BPDE: 命令字符
- * 353456789012345:设备IMEI或者ID
- * 080835 :指令流水号
- * 0:进入禁止区域 1离开禁止区域
- * #:结尾标识符
- * 设备响应:     IWAPDE,080835#
- * 080835:指令流水号
- * 说明:   本消息适用所有终端
- */
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 4) {
-
-            String index = list[2];
-            String msg = list[3];
-            connection.send(APDE(index));
-            try {
-                if (Integer.parseInt(msg) == 0) {
-                    ICLogger.i("Handle BPDE index " + index + ", 进入禁止区域 ");
-                    runtime.Fence_Warning_flag = 1;
-                    WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_out_wall), 2);
-                } else {
-                    ICLogger.i("Handle BPDE index " + index + ", 离开禁止区域 ");
-                    runtime.Fence_Warning_flag = 0;
-//                Util.ShowToast(runtime,"");
-                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_cross_boundary), 0);
-                }
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i("BPDE format error!");
-        }
-
-
-    }
-
-    public static StringMessage APDG(String id) {
-        return genStringMessage("APDG", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBPDG(Connection connection, String cmd, Runtime runtime) {
-/**
- * 示例:
- * IWBPDG,353456789012345,1,30.0,37.3 #
- * 说明:IWBPDG,867400020316612,502102,1,33,44
- * IW:标识符
- * BPDG: 命令字符
- * 353456789012345:设备IMEI或者ID
- * 080835 :指令流水号
- * 1:开关 1开,  0 关
- * 30.0: 低温阀值
- * 37.3: 高温阀值
- * #:结尾标识符
- * */
-        String[] list = cmd.split(CMDSPLIT);
-        if (list.length == 6) {
-
-            try {
-                String index = list[2];
-                String switch_on = list[3];
-                String min_temp = list[4];
-                String max_temp = list[5];
-                connection.send(APDG(index));
-                if (Integer.parseInt(switch_on) == 1) {
-                    ICLogger.i("Handle BPDG index " + index + ", 体温报警阈值开 min=" + min_temp + ",max=" + max_temp);
-                    runtime.tempInfo.setBodyTempThreshold(Double.valueOf(max_temp), Double.valueOf(min_temp));
-                    Config.needTemperature_abnormal_alarm = true;
-                } else {
-                    ICLogger.i("Handle BPDG index " + index + ", 体温报警阈值关 ");
-                    Config.needTemperature_abnormal_alarm = false;
-                }
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-
-        } else {
-            ICLogger.i("BPDG format error!");
-        }
-    }
-
-    /***
-     *
-     * @param packetTime  做指令流水号用
-     * @param filetype  文件类型, 1语音,2图片
-     * @param datatype  数据内容类型,例如和文件类型相关,例如 监听语音,sos语音,签到图片等等
-     * @param count  内容分包总数
-     * @param index  当前分包数
-     * @param datalen 分包数据长度,最长1024,不足按照实际大小。
-     * @param amrdata  文件分包内容数据
-     * @return
-     */
-    public static byte[] APTU(String packetTime, int filetype, int datatype, int count, int index, int datalen, byte[] amrdata) {
-        /**
-         * 10.设备录音图片(设备上行)(上行协议:APTU,响应:BPTU)
-         * 示例:
-         * IWAPTU,6654111,080835,1,1,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
-         * 说明:
-         * IW:标识符
-         * BPCU : 命令字符
-         * 6654111:语音图片文字目标 (同步监护人列表的用户唯一标识ID)<扩展字段目前不需要,可以传空字符>
-         * 080835 :指令流水号
-         * 1:文件类型
-         * 1:内容类型 类型说明如下表
-         * 文件类型        内容类型
-         * 1 语音——      1.监听语音      *   2.SOS语音      *      3.扩展
-         * 2 图片——      1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展
-         * 6:内容包分包总数
-         * 1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同
-         * 1024 :语音包长度
-         * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数
-         * 语音包上传规则:
-         * 按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。
-         * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。
-         * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
-         */
-        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT)
-                .append(CMDSPLIT).append(packetTime)
-                .append(CMDSPLIT).append(filetype)
-                .append(CMDSPLIT).append(datatype)
-                .append(CMDSPLIT).append(count)
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(datalen * 2)
-                .append(CMDSPLIT).toString();
-
-        byte[] sentbuf = new byte[sb.length() + datalen * 2 + 1];
-        byte[] amrdata2 = Util.bytesToHexString(amrdata).getBytes();
-        System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());
-        System.arraycopy(amrdata2, 0, sentbuf, sb.length(), datalen * 2);
-        sentbuf[sb.length() + datalen * 2] = '#';
-        return sentbuf;
-    }
-
-
-    public void handleBPTU(String cmd, Connection connection) {
-/***
- * 平台响应
- * IWBPTU,6654111,080835,1,1,6,1,1#
- * IW:标识符
- * APCU : 命令字符
- * 6654111:语音图片文字目标
- * 080835 :流水号
- * 1:文件类型
- * 1:内容类型
- * 6:内容总包数
- * 1:当前包序号
- * 1:成功 (0:失败)
- */
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 8) {
-            try {
-                String time = cmdlist[2];
-                String filetype = cmdlist[3];
-                String datatype = cmdlist[4];
-                String count = cmdlist[5];
-                String index = cmdlist[6];
-                String success = cmdlist[7];
-                int ftype = Integer.parseInt(filetype);
-                int dtype = Integer.parseInt(datatype);
-                int packetCount = Integer.parseInt(count);
-                int packetIndex = Integer.parseInt(index);
-                int receiveSuccess = Integer.parseInt(success);
-                ICLogger.i("服务器在收到 index " + time + ", 文件类型 " + ftype + ",内容类型 " + dtype + " " + packetIndex + "/" + packetCount + " " + (receiveSuccess == 1 ? "成功" : "失敗"));
-                if (receiveSuccess == 1) {
-                    //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送
-                    voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);
-                    //voicePacket.getInstanceSent().setFileType(ftype,dtype);
-                }
-                //发送消息,再次检查要发送的语音包,确认其发送完毕
-                connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentBPFilePacket");
-            } catch (Exception e) {
-                ICLogger.e(e.getMessage(), e);
-            }
-        } else {
-            ICLogger.i(" BPTU Format error!");
-        }
-    }
-
-    public static StringMessage APSL(String date, int deepsleep, int lightsleep, int score) {
-/***
- * 示例:
- * IWAPSL,20200803,240,120,90#
- * 说明:睡眠计算时间 当日21:00至 次日 9:00, 睡眠时间记录为当日时间。如2020-8-3的睡眠时间段为 2020-8-3 21:00 ~ 2020-8-4 09:00
- * IW:标识符
- * APSL:命令字
- * 202008003:睡眠时间 (手表本地时间)
- * 240:深睡时间 (手表本地时间),单位分钟
- * 120:浅睡时间(手表本地时间),单位分钟
- * 90睡眠分数
- * 睡眠算法
- * 使用记步同样的算法,计算翻身次数
- * 平均每60秒记录一次
- * 深睡眠,通过加速度传感器,在60秒内翻身次数小于6
- * 浅睡眠,通过加速度传感器,在60秒内翻身次数大于等于6, 且小于12 ,否则认为未睡
- * 换算分数后发送到服务器
- * #:结束符
- */
-        String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(date)
-                .append(CMDSPLIT).append(deepsleep)
-                .append(CMDSPLIT).append(lightsleep)
-                .append(CMDSPLIT).append(score)
-                .append(CMDEND).toString();
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14), sb);
-    }
-
-    public static StringMessage AP46(String id, String cmd) {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
-                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                        .append(CMDSPLIT).append(id)
-                        .append(CMDSPLIT).append(cmd)
-                        .append(CMDEND).toString());
-    }
-
-    public void handleBP46(String cmd, Connection connection, Runtime runtime) {
-/***
- * IWBP46,353456789012345,080835,1,[参数]#
- * 说明:
- * IW:标识符
- * BP46 : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 1: 表示立即拍照
- * [参数]: 此为可选项。根据不同类型设备扩展
- * #:结尾标识符
- * 设备响应:     IWAP46,080835,1#
- * 080835:指令流水号
- * 1 成功 0失败
- * # 结尾标识符
- */
-        String[] cmdlist = cmd.split(CMDSPLIT);
-
-        if (cmdlist.length >= 4) {
-            String imei = cmdlist[1];
-            String id = cmdlist[2];
-            String cdd = cmdlist[3];
-            if (cmdlist.length == 5) {
-                String tmp = cmdlist[4];
-            }
-            connection.send(AP46(id, cdd));
-            Context context = mRuntime.getContextProxy().context.getApplicationContext();
-            if (cdd.equals("1")) {
-                //delay 启动
-
-//            Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);
-//            intent.setAction(ACTION_REMOTE_CAMERA);
-//            intent.putExtra("remote_number", id);
-//                context.startService(intent);
-//            runtime.getContextProxy().context.sendBroadcast(intent);
-                mHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        (new CameraUtil(context)).getPicture(id);
-                    }
-                });
-
-            } else if (cdd.equals("2")) {
-                Intent intent = new Intent();
-                intent.setAction(DIALOG_ACTION);
-                intent.putExtra("takephoto", "Take Photo !");
-                context.sendBroadcast(intent);
-            }
-        } else {
-            ICLogger.i(" BP46 Format error!");
-        }
-
-    }
-
-
-    public static StringMessage APDH(String id, String cmd) {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
-                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                        .append(CMDSPLIT).append(id)
-                        .append(CMDSPLIT).append(cmd)
-                        .append(CMDEND).toString());
-    }
-
-
-    public void handleBPDH(Connection connection, Runtime runtime, String cmd) {
-        /***
-         * IWBPDH,353456789012345,080835,1,[参数]#
-         * 说明:
-         * IW:标识符
-         * BPDH : 命令字符
-         * 353456789012345:IMEI号,设备唯一ID
-         * 080835 :指令流水号
-         * 1:  表示立即聆听 可扩展
-         * [参数]: 此为可选项。录音时间 为空默认15秒
-         * #:结尾标识符
-         * 设备响应:     IWAPDH,080835,1#
-         * 080835:指令流水号
-         * 1 成功 0失败
-         * # 结尾标识符
-         */
-
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 5) {
-            String imei = cmdlist[1];
-            String id = cmdlist[2];
-            String cdd = cmdlist[3];
-            String tmp = cmdlist[4];
-
-            tmp = tmp.replace(CMDEND, "").trim();
-
-            if (tmp.isEmpty()) tmp = "15";
-            connection.send(APDH(id, cdd));
-
-            if (cdd.equals("1")) {
-                //delay 启动
-//                Context context = mRuntime.getContextProxy().context.getApplicationContext();
-                CoreService.getInstance().DevliverStringMessage("StartMonitor", tmp);
-            }
-        } else {
-            ICLogger.i(" BPDH Format error!");
-        }
-    }
-
-    public static StringMessage APTQ(Runtime runtime) {
-        /**
-         * IWAPTQ,460,0,9520,3671,0#
-         * APTQ : 命令字符
-         * 460,0,9520,3671基站信息
-         * 0:语言标志位   0 默认为中文,1为英文
-         */
-        //或者仅仅使用 locale = Locale.getDefault(); 不需要考虑接口 deprecated(弃用)问题
-        Locale locale = Locale.getDefault();
-        String lang = locale.getLanguage() + "-" + locale.getCountry();
-        int language = 0;
-        if (!lang.contains("zh")) {
-            language = 1;
-        }
-        return genStringMessage("APTQ", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(runtime.getLocationInstance().getMCC())
-                .append(CMDSPLIT).append(runtime.getLocationInstance().getMNC())
-                .append(CMDSPLIT).append(runtime.getLocationInstance().getLAC())
-                .append(CMDSPLIT).append(runtime.getLocationInstance().getGSMStationCID())
-                .append(CMDSPLIT).append(language)
-                .append(CMDEND).toString());
-    }
-
-
-    public void handleBPTQ(Connection connection, Runtime runtime, String cmd) {
-        /***
-         *
-         * IWBPTQ,20-10-11,19:32:02,6674,32,27,22,30,20-10-12,19:32:02,6674,32,27,22,30,20-10-13,19:32:02,6674,32,27,22,30,53575C71533A
-         * IWBPTQ, 16-09-24,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-25,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-26,11:00:00,b6e0d4c6,2,-5,-12,22,316df15733#
-         * 年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,城市名
-         * 注:天气描述用Unicode编码,城市名使用Unicode编码, 第一组为当天,后2组依次为后续2天天气
-         * 如天气编号及描述对应如下(天气描述不需要发送括号内的白天晚上)
-         * 0:龙卷风
-         * 1:热带风暴
-         * 2:飓风
-         * 3:严重的雷暴
-         * 4:雷暴
-         * 5:混合雨雪
-         * 6:混合降雨和冰雹
-         * 7:混合雪和雨夹雪
-         * 8:冻结小雨
-         * 9:小雨
-         * 10:冻雨
-         * 11:阵雨
-         * 12:阵雨
-         * 13:雪飘雪
-         * 14:小雪阵雨
-         * 15:吹雪
-         * 16:雪
-         * 17:冰雹
-         * 18:雨夹雪
-         * 19:尘埃
-         * 20:雾
-         * 21:霾
-         * 22:黑烟
-         * 23:大风
-         * 24:风
-         * 25:低温
-         * 26:多云
-         * 27:多云(晚上)
-         * 28:多云(白天)
-         * 29:局部多云(晚上)
-         * 30:局部多云(天)
-         * 31:清爽(晚)
-         * 32:晴天
-         * 33:晴朗(晚)
-         * 34:晴朗(天)
-         * 35:混合雨和冰雹
-         * 36:热
-         * 37:局部地区性雷暴
-         * 38:零星雷暴
-         * 39:零星雷暴
-         * 40:零星阵雨
-         * 41:大雪
-         * 42:零星阵雪
-         * 43:大雪
-         * 44:多云
-         * 45:雷阵雨
-         * 46:阵雪
-         * 47:局部雷阵雨
-         */
-
-        log("BPTQ " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 23) {
-
-            StringBuilder sb = new StringBuilder();
-            StringBuilder msg = new StringBuilder();
-            for (int i = 0; i < 3; i++) {
-                String DayTime = cmdlist[1 + i * 7] + " " + cmdlist[2 + i * 7];
-                String date = "20" + cmdlist[1 + i * 7].trim();
-                String weather_name = Util.decodeUnicode2Utf8(cmdlist[3 + i * 7].trim());
-                String weather_id = cmdlist[4 + i * 7];
-                String temp_current = cmdlist[5 + i * 7];
-                String temp_high = cmdlist[6 + i * 7];
-                String temp_low = cmdlist[7 + i * 7];
-
-                sb.append(" " + DayTime);
-                sb.append(",天气:" + weather_name);
-                sb.append(",ID " + weather_id);
-                sb.append(",当前温度 " + temp_current);
-                sb.append(",最高温度 " + temp_high);
-                sb.append(",最低温度 " + temp_low);
-                sb.append("\n");
-
-                msg.append(date);
-                msg.append("," + weather_name);
-                msg.append("," + weather_id);
-                msg.append("," + temp_current);
-                msg.append("," + temp_high);
-                msg.append("," + temp_low);
-                msg.append(";");
-            }
-            String City = Util.decodeUnicode2Utf8(cmdlist[22]);
-
-            ICLogger.i(City + " \n" + sb.toString());
-
-            msg.insert(0, City + ";");
-            String weatherstr = msg.toString();
-            if (weatherstr.endsWith(";")) {
-                weatherstr = weatherstr.substring(0, weatherstr.lastIndexOf(";"));
-            }
-            Intent intent = new Intent(Constants.ACTION_WEATHER_RECEIVED);
-            intent.putExtra(Constants.KEY_Weather, weatherstr);
-            ICLogger.i("send Broadcast " + Constants.ACTION_WEATHER_RECEIVED + "\n" + weatherstr + "\n");
-            CoreService.getInstance().sendBroadcast(intent);
-
-        } else {
-            ICLogger.i(" BPTQ Format error!");
-        }
-    }
-
-
-    public static StringMessage AP94() {
-        /***
-         * 15确认已读文字(上行协议号:AP94,响应:BP94)
-         * 示例:
-         * IWAP94,123456,1#
-         * 说明:
-         * IWAP94:标识符
-         * APHCI: 命令字符
-         * 123456: 文字来源系统流水号
-         * 1:确认阅读、0:取消阅读
-         * 平台响应:     IWBP94#
-         * 表示平台已接收,可不作响应
-         * 说明:   本消息适用所有终端
-         */
-
-        //在UI逻辑中,只要有处理就都是已经阅读。所以不存在取消阅读的说法。
-        return genStringMessage(cmdMap.get(protocol_gator.CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_gator.CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(Runtime.PushtxtMsg_srv_index)
-                .append(CMDSPLIT).append("1")
-                .append(CMDEND).toString());
-
-    }
-
-
-    public static StringMessage APAT(String id, String cmd) {
-        return genStringMessage("APAT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(cmd)
-                .append(CMDEND).toString());
-    }
-
-    /***
-     * 响应剪断开关设定消息
-     * @param connection
-     * @param runtime
-     * @param cmd
-     */
-    public void handleBPAT(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPAT,353456789012345,080835,1#
- * 说明:是否提示表带是否连接的开关,即剪断报警开关
- * IW:标识符
- * BPAT : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * 1: 表示剪断报警开关,1为开,0 为关
- * 设备响应:     IWAPAT,080835, 1#
- * 080835:指令流水号
- * 1: 剪断开关状态(实际上与下行的命令一致)
- */
-
-        log("BPAT " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 4) {
-
-            String imei = cmdlist[1];
-            String id = cmdlist[2];
-            String cmdid = cmdlist[3];
-            connection.send(APAT(id, cmdid));
-            if (cmdid.trim().equals("1")) {
-                WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-//                    runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
-                Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
-                Config.setNeedAntiOff(runtime.getContextProxy().context, true);
-                Config.setNeedCutOff(runtime.getContextProxy().context, true);
-                runtime.setNeedAntioff(true);
-                runtime.setNeddReportCutoff(true);
-            } else {
-                WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-                runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
-                Config.setNeedAntiOff(runtime.getContextProxy().context, false);
-                Config.setNeedCutOff(runtime.getContextProxy().context, false);
-                runtime.setNeedAntioff(false);
-                runtime.setNeddReportCutoff(false);
-            }
-        } else {
-            ICLogger.i(" BPAT Format error!");
-        }
-    }
-
-
-    public static StringMessage APCH(int charging) {
-        return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
-                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                        .append(CMDSPLIT).append(charging)
-                        .append(CMDEND).toString());
-    }
-
-
-    public static StringMessage APBT(String id, String cycle) {
-        return genStringMessage("APBT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(cycle)
-                .append(CMDEND).toString());
-    }
-
-    /***
-     * 响应蓝牙扫描周期设定
-     * @param connection
-     * @param runtime
-     * @param cmd
-     */
-    public void handleBPBT(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPBT,353456789012345,080835,1#
- * 说明:设置蓝牙扫描周期,单位时间分钟
- * IW:标识符
- * BPBT : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * 1: 扫描周期,对应单位为分钟
- * 设备响应:     IWAPBT,080835, 1#
- * 080835:指令流水号
- * 1: 剪断开关状态(实际上与下行的命令一致)
- */
-
-        log("BPBT " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 4) {
-            String id = cmdlist[2];
-            String cycle = cmdlist[3].replace("#", "");
-            connection.send(APBT(id, cycle));
-
-            if (Util.isNumeric(cycle)) {
-                int intcycle = Integer.parseInt(cycle);
-                Config.setBleScanCycle(runtime.getContextProxy().context, intcycle);
-                runtime.bleInfo.bleScanCycle = intcycle;
-                ICLogger.i("设置蓝牙扫描周期 " + intcycle + " 秒");
-                CoreService.getInstance().setBleScanAlarm(intcycle);
-            } else {
-                ICLogger.i(" BPBT Format error!");
-            }
-
-        } else {
-            ICLogger.i(" BPBT Format error!");
-        }
-    }
-
-    /***
-     * 发送蓝牙扫描结果
-     * @param runtime
-     * @return
-     */
-    public static StringMessage APBR(Runtime runtime) {
-
-        /***
-         * IWAPBR,IMEI,yyyyMMddHHmmss,beaconCount,major0,minor0,mac0,rssi0,major1,minor1,mac1,rssi1...#
-         */
-        if (runtime.bleInfo.btScanResult.size() > 0) {
-            StringBuffer sb = new StringBuffer();
-            sb.append(runtime.bleInfo.btScanResult.size());
-            for (String it : runtime.bleInfo.btScanResult) {
-                sb.append(CMDSPLIT).append(it);
-            }
-            return genStringMessage("APBR", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                    .append(CMDSPLIT).append(runtime.IMEI())
-                    .append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss())
-                    .append(CMDSPLIT).append(sb.toString())
-                    .append(CMDEND).toString());
-
-        } else {
-            return null;
-        }
-    }
-
-    public static StringMessage APBS(String id, String cycle) {
-        return genStringMessage("APBS", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(cycle)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBPBS(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPBS,353456789012345,080835,150&151#
- * 说明:设置蓝牙扫描绑定的 major id
- * IW:标识符
- * BPBS : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * majorIDs: 用 & 分隔的 多个 Majorid
- * 设备响应:     IWAPBS,080835, 1#
- * 080835:指令流水号
- * 1: 成功,0失败
- */
-        log("BPBS " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 4) {
-            String id = cmdlist[2];
-            connection.send(APBS(id, "1"));
-
-            ICLogger.i("设置蓝牙扫描绑定MajorID " + cmdlist[3] + " ");
-            String[] majorlist = cmdlist[3].split("&");
-            runtime.bleInfo.btMajorList.clear();
-            for (int i = 0; i < majorlist.length; i++) {
-                runtime.bleInfo.btMajorList.add(majorlist[i]);
-            }
-
-        } else {
-            ICLogger.i(" BPBS Format error!");
-        }
-    }
-
-    /**
-     * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL)
-     * 示例:
-     * IWBPWL,353456789012345,080835,D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx #
-     * 说明:
-     * IW:标识符
-     * BPWL : 命令字符
-     * 353456789012345:IMEI号,设备唯一ID
-     * 080835 :指令流水号
-     * D3590D54|135xxxxxxxxxx|9507xxxxxxxx : 一组联系人,使用|分隔名称和电话号码和绑定号码,名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留
-     * 设备响应: IWAPWL,080835, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx#
-     * 080835: 设备响应的时候带上响应流水号
-     * D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx回复设备当前设置的主控号码供平台同步使用
-     * 说明:       本消息适用所有终端
-     */
-    public static StringMessage APWL(String index, String[] phnumbs) {
-        return genStringMessage("APWL", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(index)
-                .append(CMDSPLIT).append(phnumbs[0])
-                .append(CMDSPLIT).append(phnumbs[1])
-                .append(CMDSPLIT).append(phnumbs[2])
-                .append(CMDSPLIT).append(phnumbs[3])
-                .append(CMDSPLIT).append(phnumbs[4])
-                .append(CMDSPLIT).append(phnumbs[5])
-                .append(CMDSPLIT).append(phnumbs[6])
-                .append(CMDSPLIT).append(phnumbs[7])
-                .append(CMDSPLIT).append(phnumbs[8])
-                .append(CMDSPLIT).append(phnumbs[9])
-                .append(CMDEND).toString());
-    }
-
-    //设置通讯录,白名单(10个)
-    public void handleBPWL(Connection connection, String cmd, Runtime runtime) {
-//        IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
-/**
- * IWBPWL,353456789012345,080835,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx#
- */
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
-        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
-        if (cmdlist.length >= 3) {
-            switch (cmdlist.length) {
-                case 13:
-                    phnums[9] = cmdlist[12];
-                    sb.append(phnums[9]).append(",");
-                case 12:
-                    phnums[8] = cmdlist[11];
-                    sb.append(phnums[8]).append(",");
-                case 11:
-                    phnums[7] = cmdlist[10];
-                    sb.append(phnums[7]).append(",");
-                case 10:
-                    phnums[6] = cmdlist[9];
-                    sb.append(phnums[6]).append(",");
-                case 9:
-                    phnums[5] = cmdlist[8];
-                    sb.append(phnums[5]).append(",");
-                case 8:
-                    phnums[4] = cmdlist[7];
-                    sb.append(phnums[4]).append(",");
-                case 7:
-                    phnums[3] = cmdlist[6];
-                    sb.append(phnums[3]).append(",");
-                case 6:
-                    phnums[2] = cmdlist[5];
-                    sb.append(phnums[2]).append(",");
-                case 5:
-                    phnums[1] = cmdlist[4];
-                    sb.append(phnums[1]).append(",");
-                case 4:
-                    phnums[0] = cmdlist[3];
-                    sb.append(phnums[0]).append(",");
-
-            }
-
-            String index = cmdlist[2];
-            ICLogger.i(sb.toString());
-            connection.send(APWL(index, phnums));
-            ArrayList<Contact> contactArray = new ArrayList<Contact>();
-
-            if (Config.custom_name.equals("YT")) {
-                ICLogger.i("=====add hotline 96885 ");
-                contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
-            }
-            for (int i = 0; i < phnums.length; i++) {
-                String[] tmp = phnums[i].split("\\|");
-                if (tmp.length == 2) {
-                    String name = Util.decodeUnicode2Utf8(tmp[0]);
-                    String phonem = tmp[1];
-                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
-                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
-                } else {
-                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
-
-                }
-            }
-//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
-//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
-
-            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
-
-        } else {
-            ICLogger.i(" BPWL format error!");
-        }
-
-    }
-
-
-    public static StringMessage AP65(String id, String cy) {
-        return genStringMessage("AP65", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(cy)
-                .append(CMDEND).toString());
-    }
-
-    public void handleBP65(Connection connection, Runtime runtime, String cmd) {
-/***
- * 36.音量设置(下行协议:BP65,响应:AP65)
- * 示例:
- * IWBP65,353456789012345,080835,1#
- * 说明:
- * IW:标识符
- * BP65: 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 1 : 表示音量等级为1
- * 设备响应:     IWAP65,080835, 1#
- * 080835: 设备响应的时候带上响应流水号
- * 1: 表示指令执行成功,音量等级为1
- */
-
-        log("BP65 " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 4) {
-            String id = cmdlist[2];
-            String cycle = cmdlist[3].replace("#", "");
-            connection.send(AP65(id, cycle));
-
-            if (Util.isNumeric(cycle)) {
-                int mastervolume = Integer.parseInt(cycle);
-
-                ICLogger.i("设置音量 " + mastervolume);
-                //实际设备音量 0~15  协议音量0~7需要转换
-                int volume = mastervolume * 2;
-                if (volume < 0) volume = 0;
-                if (volume >= 14) volume = 15;
-                Config.setMasterVolume(runtime.getContextProxy().context, mastervolume * 2);
-                ICAudioManager.setMasterVolumn(runtime.getContextProxy().context, mastervolume * 2);
-
-            } else {
-                ICLogger.i(" BP65 Format error!");
-            }
-
-        } else {
-            ICLogger.i(" BP65 Format error!");
-        }
-    }
-
-    public static StringMessage AP47(String id, String cycle) {
-        return genStringMessage("AP47", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
-                .append(CMDSPLIT).append(id)
-                .append(CMDSPLIT).append(cycle)
-                .append(CMDEND).toString());
-    }
-
-
-    public void handleBP47(Connection connection, Runtime runtime, String cmd) {
-/***
- * 37.震动设置(下行协议号:BP47,响应:AP47)
- * 示例:
- * IWBP47,353456789012345,080835,10#
- * 说明:
- * IW:标识符
- * BP47 : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 10: 表示震动时长,此处单位为称,表示震动10秒钟
- * 设备响应:     IWAP47,080835,1#
- * 080835:指令流水号
- * 1:表示设备执行成功,0 表示设备执行失败
- */
-
-        log("BP47 " + cmd);
-        String[] cmdlist = cmd.split(CMDSPLIT);
-        if (cmdlist.length == 4) {
-            String id = cmdlist[2];
-            String cycle = cmdlist[3].replace("#", "");
-            connection.send(AP47(id, cycle));
-
-            if (Util.isNumeric(cycle)) {
-                int vibduration = Integer.parseInt(cycle);
-                ICLogger.i("设置震动时长 " + vibduration + " 秒");
-                Config.setDurationOfVibration(runtime.getContextProxy().context, vibduration);
-                VibrateUtil.setVibPattern(vibduration * 1000);
-
-            } else {
-                ICLogger.i(" BP47 Format error!");
-            }
-
-        } else {
-            ICLogger.i(" BP47 Format error!");
-        }
-    }
-
-    public boolean handleCmd(CMD_TYPE type, String cmd) {
-
-        //普通非二进制命令用此函数处理
-        boolean ret = true;
-        ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + cmd);
-        cmd = cmd.replace(" ", "");
-        switch (type) {
-            case AP03: //登录包
-                handleAP03(mRuntime, cmd);
-                ICLogger.i("服务器收到登录包");
-                mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
-                break;
-            case AP14: //gps定位包
-                handleBP01(cmd);
-                ICLogger.i("服务器收到定位AP01");
-                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
-                break;
-            case AP04://查询终端版本消息
-                handleAP04(mRuntime,mConnection,cmd);
-                break;
 //            case AP14:// wifi定位包
 //                handleBP02(cmd);
 //                ICLogger.i("服务器收到定位AP02");