临时提交Gator 协议
authorSnickerSun <scy@incartech.cn>
Thu, 1 Jul 2021 12:55:46 +0000 (20:55 +0800)
committerSnickerSun <scy@incartech.cn>
Thu, 1 Jul 2021 12:55:46 +0000 (20:55 +0800)
修复BP30定位信息不被识别问题。
添加协议 AP07,AP08,AP09,AP10,Ap11,AP12,AP15,AP16,AP18

app/src/main/java/com/enqualcomm/support/bean/Runtime.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/protocol_gator.java

index 98f6549..d842bfc 100644 (file)
@@ -1323,7 +1323,7 @@ public class Runtime {
             sb.append(gpsp.getLBSdata().wifi_aps.size());
             for (String mac : gpsp.getLBSdata().wifi_aps.keySet()) {
                 String APName = "AP" + i;
-                sb.append(",").append(APName.length()).append(",");
+                sb.append(",").append(String.format("%1$02d",APName.length())).append(",");
                 sb.append(APName).append(",");
                 sb.append(mac).append(",");
                 sb.append(gpsp.getLBSdata().wifi_aps.get(mac));
index 43490db..8dec109 100644 (file)
@@ -236,32 +236,32 @@ public class AESCipher {
   public static void test2(){
 
     //FastJson生成json数据
-    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());
+//    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());
 
     //AES加密
-    long start = System.currentTimeMillis();
-    String encryStr = aesEncryptStringFixedKey(jsonData);
-    long end = System.currentTimeMillis();
-    ICLogger.e("AES加密耗时 cost time---->" + (end - start));
-    ICLogger.e( "AES加密后json数据 ---->" + encryStr);
-    ICLogger.e("AES加密后json数据长度 ---->" + encryStr.length());
-
-    //AES解密
-    start = System.currentTimeMillis();
-    String decryStr = aesDecryptStringFixedKey(encryStr);
-    end = System.currentTimeMillis();
-    ICLogger.e( "AES解密耗时 cost time---->" + (end - start));
-    ICLogger.e("AES解密后json数据 ---->" + decryStr);
+//    long start = System.currentTimeMillis();
+//    String encryStr = aesEncryptStringFixedKey(jsonData);
+//    long end = System.currentTimeMillis();
+//    ICLogger.e("AES加密耗时 cost time---->" + (end - start));
+//    ICLogger.e( "AES加密后json数据 ---->" + encryStr);
+//    ICLogger.e("AES加密后json数据长度 ---->" + encryStr.length());
+//
+//    //AES解密
+//    start = System.currentTimeMillis();
+//    String decryStr = aesDecryptStringFixedKey(encryStr);
+//    end = System.currentTimeMillis();
+//    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);
+    String encriptedstr="/iM1Uhd+pmjkYA44kYoqxIcT+h0xJsoRZJUF+cUlj0fL+DesguIytgcbKyJRe3fkYuhC7VOgBUT5M1XcTr+ZdgG7GBFObFW+OFBHndkMobKL+rfYUD8zsaeRmoLHXMMa8L6t4n3S7lppPDrF6c/KHN+DaK4XsH7ywjBU3NNboI+SGzVUOqb66lYSlO3OSMcT5DTlYOSI7Qql34UmHia812OM8HEgAHNCtC2kRNXWSHK/rkZSze88qjMaX5yHQO4NYuAFIeuaSM4+u4KAYUwFZ3J5PpQoTJCt6mvG06/r2opPUEdMH7mFqYDeRnejx810u6zPBg==";
+    String decryStr = aesDecryptStringFixedKey(encriptedstr);
+    ICLogger.e("AES解密后json数据sss -- "+encriptedstr+ " "+ encriptedstr.length()+" \n---->" + decryStr);
 
-     encryStr = aesEncryptStringFixedKey(decryStr);
-    ICLogger.e("AES加密后json数据sss -- "+decryStr+ " "+ decryStr.length()+" ---->" + encryStr + " " +encryStr.length());
+    String encryStr = aesEncryptStringFixedKey(decryStr);
+    ICLogger.e("AES加密后json数据sss -- "+decryStr+ " "+ decryStr.length()+" \n---->" + encryStr + " " +encryStr.length());
 
   }
   /*******************************************************/
index 0f606d2..32f775b 100644 (file)
@@ -321,7 +321,6 @@ public class CellInfoUtil {
                   .append(String.format("%1$04X",gsmCell.getLac()))
                   .append(String.format("%1$07X",gsmCell.getCid()))
                   .append(String.format("%1$02X",150-Math.abs(getSignal(telephonyManager,runtime))));
-          gsmSbMultiGator.append(",");
           gsmSbMultiGator.append(gsmSbMultiGator_data.toString());
 
           ICLogger.i("LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString());
index 90706dc..e462c45 100644 (file)
@@ -321,19 +321,19 @@ public class protocol_gator {
         }
         for (int i = 0; i < listlen; i++) {
             for (CMD_TYPE key : cmdMap.keySet()) {
-                if (regexUtil.isGatorCMD(cmdMap.get(key),cmdlist[i]) ) {
+                if (cmdlist[i].length()>=24 && regexUtil.isGatorCMD(cmdMap.get(key),cmdlist[i].substring(0,24)) ) {
                     ICLogger.d("found gator cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdlist[i]);
-//                    if (key == CMD_TYPE.BP28) {
-//                        //如果是BP28则 后面的数据是音频,需要保留
+                    if (key == CMD_TYPE.AP12) {
+                        //如果是BP12则 后面的数据是音频,需要保留
 //                        byte[] amrBuf;
 //                        int amrLen = getBP28Amrlen(cmdlist[i]);
 //                        if (bytes.length > amrLen) {
-//                            handleCmd(key, cmdlist[i], bytes);
+                            handleCmd(key, cmdlist[i], bytes);
 //                        }
-//                    } else {
+                    } else {
                         String cmdi=cmdlist[i].trim().replace(CMDHEADER,"").replace(CMDEND,"");
                         handleCmd(key, cmdi);
-//                    }
+                    }
                 }
             }
         }
@@ -382,6 +382,16 @@ public class protocol_gator {
         return -1;
     }
 
+    //回复服务器专用通用接口
+    public StringMessage BPXX_REPLY(Runtime ds,CMD_TYPE type,String index,boolean success){
+        StringMessage ret=null;
+        if (success) {
+            ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index+"1"));
+        }else{
+            ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index+"0"));
+        }
+        return ret;
+    }
     /*登录*/
     public static StringMessage BP00(Runtime ds) {
         //示例数据:BP00,AAAA,BB,CC
@@ -419,14 +429,6 @@ public class protocol_gator {
         return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds,msg));
     }
 
-    //时间同步成功失败反馈
-    public StringMessage BP03(Runtime ds,String index,boolean success){
-        if (success){
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+index+"1"));
-        }else{
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+index+"0"));
-        }
-    }
     //时间同步,等同于登录成功回复
     public void handleAP03(Runtime runtime, Connection connection, String cmd) {
         String[] msg = cmd.split(CMDSPLIT);
@@ -447,14 +449,14 @@ 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,index,true));
+                    connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,true));
                 }else{
-                    connection.send(BP03(runtime,index,false));
+                    connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,false));
                 }
             } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
 
-                connection.send(BP03(runtime,index,false));
+                connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,false));
             }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
@@ -463,6 +465,219 @@ public class protocol_gator {
         }
     }
 
+    //设置亲情号码
+    public void handleAP06(Runtime ds,Connection connection,String cmd) {
+        log("AP06 设置亲情号码 "+cmd);
+/*
+消息内容   Type取值:0-4
+0表示:其他人
+1表示:爸爸
+2表示:妈妈
+3表示:奶奶
+4表示:爷爷
+(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
+
+示例:
+(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
+设置控制号码为:
+father:13141516171,
+mother:13141516172,
+grandma:13141516173,
+grandpa:13141516174,
+uncle:13141516175
+响应:      失败:(002E0106357593060153353BP0600000000000000050)
+成功:(002E0106357593060153353BP0600000000000000051)
+ */
+        StringBuffer sb=new StringBuffer();
+        String cmdlist[]=cmd.split(",");
+        if (cmdlist.length==2){
+            sb.append("server msg index "+cmdlist[1]+"\n");
+            String cmdlist1[]=cmdlist[0].split("#");
+            int index=0;
+            if(cmdlist1.length%3==1) {
+                for (int i = 1; i < cmdlist1.length; i += 3) {
+                    String number= cmdlist1[i];
+                    String name=cmdlist1[i+1];
+                    String type=cmdlist1[i+2];
+                    index++;
+                    sb.append(index+" "+name+" "+number + " " + type+"\n");
+                }
+
+            }else{
+                ICLogger.e("AP06 format error1 !");
+                connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],false));
+            }
+
+            ICLogger.d(sb.toString());
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],true));
+        }else{
+            ICLogger.e("AP06 format error!");
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],false));
+        }
+
+
+    }
+    public void handleAP07(Runtime ds,Connection connection,String cmd) {
+//        (002A357593060153353AP07,0000000000000006) 平台向终端请求清空所有的亲情号码
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if(cmdlist.length==2){
+            log("AP07 清除亲情号码 " );
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP07,cmdlist[1],true));
+        }else{
+            ICLogger.e("AP07 format error!");
+        }
+    }
+    //重启
+    public void handleAP08(Runtime ds,Connection connection,String cmd) {
+//        (002A357593060153353AP08,0000000000000007)
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if(cmdlist.length==2){
+            log("AP08 重启设备 " );
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP08,cmdlist[1],true));
+        }else{
+            ICLogger.e("AP08 format error!");
+        }
+    }
+
+    public void handleAP09(Runtime ds,Connection connection,String cmd) {
+
+// AP09,A,B,C,YYMMDD,HHMMSS
+//A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
+//B:闹铃索引(0-4)
+//C:表示闹钟类型(0-0x7F),如下:
+//0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+//如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
+// (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
+//增加(修改)一条索引为0的闹铃,每天15:29:00响铃
+//(002E357593060153353AP09,0,0,0000000000000008)
+//删除一条索引为0的闹铃
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if(cmdlist.length==7){
+
+
+            log("AP09 设置闹铃 " );
+
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP09,cmdlist[6],true));
+        }else if(cmdlist.length==4){
+
+            log("AP09 删除闹铃 " );
+
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP09,cmdlist[3],true));
+        }else{
+            ICLogger.e("AP09 format error!");
+        }
+    }
+
+    public void handleAP10(Runtime ds,Connection connection,String cmd) {
+
+//    (002C357593060153353AP10,1,0000000000000009)
+//    开启静音模式
+//            (002C357593060153353AP10,0,0000000000000009)
+//    关闭静音模式
+
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==3){
+            String index=cmdlist[2];
+            boolean enableSilentMode=false;
+            if(cmdlist[1].equals("1")){
+                enableSilentMode=true;
+            }
+            ICLogger.d(" enable SilentMode  "+enableSilentMode);
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP10,index,true));
+        }else {
+            ICLogger.e("AP10 format error");
+        }
+    }
+
+
+    public static StringMessage BP11(Runtime ds,String MSGType,String MSGCount){
+        //(00250106357593060153353BP11,AP12,01)
+        //表示请求服务器下载1条微聊信息
+        //(00250106357593060153353BP11,AP23,01)
+        //表示请求服务器下载1条亲情号码自拍图片信息
+        StringMessage ret=null;
+        StringBuilder sb=new StringBuilder(cmdMap.get(CMD_TYPE.BP11) );
+        sb.append(CMDSPLIT).append(MSGType).append(CMDSPLIT).append(MSGCount);
+        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), AddHeader(ds, sb.toString()));
+        return ret;
+    }
+    //服务器通知有消息待发送
+    public void handleAP11(Runtime ds,Connection connection,String cmd) {
+//        (0021357593060153353AP11,AP12,02)
+//        表示当前服务器有2条新微聊信息待接收
+//
+//                (0021357593060153353AP11,AP23,01)
+//        表示当前服务器有1条亲情号码自拍图片信息待接收
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==3){
+            String msgcount=cmdlist[2];
+
+           String msgType=cmdlist[1];
+
+            ICLogger.d(" 服务器有  "+msgcount+"条 "+msgType+" 消息待接收。");
+
+            connection.send(BP11(ds,msgType,"01"));
+        }else {
+            ICLogger.e("AP11 format error");
+        }
+
+
+    }
+
+    public static StringMessage BP12(Runtime ds,String sourceNumber,int count, int index, String time,boolean success){
+//        失败:
+//        (00400106357593060153353BP12,13026618172,1704131633000000,6,1,0)
+//        (00410106357593060153353BP12,13026618172,1704131633000000,6,1,-1)
+//        0:表示其它错误
+//                -1:表示13026618172不是手表的情亲号码
+//        成功:
+//        (00400106357593060153353BP12,13026618172,1704131633000000,6,1,1)
+        StringMessage ret=null;
+        StringBuilder sb=new StringBuilder(cmdMap.get(CMD_TYPE.BP12) );
+
+        sb.append(CMDSPLIT).append(sourceNumber).append(CMDSPLIT).append(time);
+        sb.append(CMDSPLIT).append(count).append(CMDSPLIT).append(index).append(CMDSPLIT);
+        if(success){
+            sb.append(1);
+        }else{
+            sb.append(0);
+        }
+        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), AddHeader(ds, sb.toString()));
+        return ret;
+
+    }
+    //服务器下发微聊消息
+    public void handleAP12(Runtime ds,Connection connection,byte[]  bytes) {
+//        AP12,亲情号码,YYMMDDHHMMSSSSSS,分包总数(%d),当分包索引(%d),分包语音数据长度(%03d<=900)+数据
+//        (03C3357593060153353AP12,13026618172,1704131633000000,6,1,700,数据)
+//        AP12:命令字符
+//        13026618172:亲情号码
+//        1704131633000000:YYMMDDHHMMSSSSSS格式的年月日时分秒,设备录音时间
+//        6:语音包分包总数
+//        1:当前包数,第一包为1,第二包为2,。。。。。。   同一个语音包的语音时间相同
+//        700:当前分包的语音数据长度,每个音频数据包大小为700字节,最后一包不足700的取实际字节数
+        String cmd=new String(bytes);
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length>=7){
+            String time=cmdlist[2];
+            String sourceNumb=cmdlist[1];
+            String packagescount=cmdlist[3];
+            String packageindex=cmdlist[4];
+            String packageslen=cmdlist[5];
+            int index=0;
+            int count=0;
+            try {
+                index=Integer.parseInt(packageindex);
+                count=Integer.parseInt(packagescount);
+            }catch (Exception e){
+                ICLogger.e(e.getMessage(),e);
+            }
+            ICLogger.d("receive msg from "+sourceNumb+" "+index+" of "+count + " len "+packageslen+" time "+time);
+            connection.send(BP12(ds,sourceNumb,count,index,time,true));
+        }else {
+            ICLogger.e("AP12 format error");
+        }
+    }
     public static StringMessage BP33(Runtime ds) {
 //(00520106357593060153353BP33,0,000000FF,5,46000024820000DE127,151028,163100,0,0,0)
 //报警类型:0x0 无报警;0x02 SOS报警;0x08 电池低电量报警;0x20 设备脱离
@@ -623,79 +838,87 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
         return ret;
     }
 
-    //只会成功不会失败
-    public StringMessage BP14(Runtime ds){
-        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP14), AddHeader(ds,cmdMap.get(CMD_TYPE.BP14)+"00000000000000101"));
-        return ret;
-    }
 
     //接收服务器定位后坐标
     public void handleAP14(Runtime ds, Connection connection,String cmd){
         ICLogger.d(cmd);
-        connection.send(BP14(ds));
+        //(0056357593060153353AP1424.772816,121.022636,160,2015,11,12,08,00,00,0000000000000010)
+//        AP14+(Lat,Long,Alt,YYYY,MM,DD,hh,mm,ss)
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==10){
+            String index=cmdlist[9];
+            String lat=cmdlist[0];
+            String lon=cmdlist[1];
+            String alt=cmdlist[2];
+            String time=cmdlist[3]+"-"+cmdlist[4]+"-"+cmdlist[5]+" "+cmdlist[6]+":"+cmdlist[7]+":"+cmdlist[8];
+            try {
+                lat = lat.substring(lat.indexOf("AP14")+4);
+            }catch (Exception e){
+                ICLogger.e(e.getMessage(),e);
+            }
+            ICLogger.d("lat "+lat+" lon "+lon + " "+alt+" time "+time);
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP14,index,true));
+        }else {
+            ICLogger.e("AP14 format error");
+        }
     }
 
 
-    public StringMessage BP06(Runtime ds,String index, boolean success){
-        if (success){
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP06),AddHeader(ds,cmdMap.get(CMD_TYPE.BP06)+index+"1"));
-        }else{
-            return genStringMessage(cmdMap.get(CMD_TYPE.BP06),AddHeader(ds,cmdMap.get(CMD_TYPE.BP06)+index+"0"));
+    //开关机控制设置消息 AP15
+    public void handleAP15(Runtime ds, Connection connection,String cmd){
+        ICLogger.d(cmd);
+        //(002C357593060153353AP15,1,0000000000000011)
+        //表示允许手表手动关机
+        //(002C357593060153353AP15,0,0000000000000011)
+        //表示不允许手表手动关机
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==3){
+            String index=cmdlist[2];
+            boolean enableUserPoweroff=false;
+            if(cmdlist[1].equals("1")){
+                enableUserPoweroff=true;
+            }
+            ICLogger.d(" enable UserPoweroff  "+enableUserPoweroff);
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP15,index,true));
+        }else {
+            ICLogger.e("AP15 format error");
         }
-
     }
-    //设置亲情号码
-    public void handleAP06(Runtime ds,Connection connection,String cmd) {
-        log("AP06 设置亲情号码 "+cmd);
-/*
-消息内容   Type取值:0-4
-0表示:其他人
-1表示:爸爸
-2表示:妈妈
-3表示:奶奶
-4表示:爷爷
-(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
-
-示例:
-(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
-设置控制号码为:
-father:13141516171,
-mother:13141516172,
-grandma:13141516173,
-grandpa:13141516174,
-uncle:13141516175
-响应:      失败:(002E0106357593060153353BP0600000000000000050)
-成功:(002E0106357593060153353BP0600000000000000051)
- */
-        StringBuffer sb=new StringBuffer();
-        String cmdlist[]=cmd.split(",");
-        if (cmdlist.length==2){
-            sb.append("server msg index "+cmdlist[1]+"\n");
-            String cmdlist1[]=cmdlist[0].split("#");
-            if(cmdlist1.length%3==1) {
-                for (int i = 1; i < cmdlist1.length; i += 3) {
-                   String number= cmdlist1[i];
-                   String name=cmdlist1[i+1];
-                   String type=cmdlist1[i+2];
-                   sb.append(name+" "+number + " " + type+"\n");
-                }
-
-            }else{
-                ICLogger.e("AP06 format error1 !");
-                connection.send(BP06(ds,cmdlist[1],false));
+//    服务器激活SOS模式消息 AP16
+    public void handleAP16(Runtime ds, Connection connection,String cmd){
+        ICLogger.d(cmd);
+        //服务器激活SOS模式:
+        //(002C357593060153353AP16,1,0000000000000012)
+
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==3){
+            String index=cmdlist[2];
+            boolean enableUserSOS=false;
+            if(cmdlist[1].equals("1")){
+                enableUserSOS=true;
             }
-
-            ICLogger.d(sb.toString());
-            connection.send(BP06(ds,cmdlist[1],true));
-        }else{
-            ICLogger.e("AP06 format error!");
-            connection.send(BP06(ds,cmdlist[1],false));
+            ICLogger.d(" enable enable UserSOS  "+enableUserSOS);
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP16,index,true));
+        }else {
+            ICLogger.e("AP16 format error");
         }
+    }
+//    手表名字设置消息 AP18
+    public void handleAP18(Runtime ds, Connection connection,String cmd){
+        ICLogger.d(cmd);
+        //(0031357593060153353AP18,BAOBAO,0000000000000013)
 
+        String cmdlist[]=cmd.split(CMDSPLIT);
+        if (cmdlist.length==3){
+            String index=cmdlist[2];
+            String watchName=cmdlist[1];
 
+            ICLogger.d("set watchName  "+watchName);
+            connection.send(BPXX_REPLY(ds,CMD_TYPE.BP18,index,true));
+        }else {
+            ICLogger.e("AP18 format error");
+        }
     }
-//    (0019357593060153353AP00) 下行一次location。
-
     public boolean handleCmd(CMD_TYPE type, String cmd) {
 
         //普通非二进制命令用此函数处理
@@ -729,6 +952,35 @@ uncle:13141516175
                 //收到设置亲情号码
                 handleAP06( mRuntime, mConnection,cmd);
                 break;
+            case AP07://清除亲情号码
+                handleAP07( mRuntime, mConnection,cmd);
+                break;
+            case AP08://重启设备
+                handleAP08( mRuntime, mConnection,cmd);
+                break;
+            case AP15://开关机控制设置消息
+                handleAP15(mRuntime,mConnection,cmd);
+                break;
+
+            case AP16:
+                //    服务器激活SOS模式消息
+                handleAP16(mRuntime,mConnection,cmd);
+                break;
+
+            case AP18:
+                //    手表名字设置消息
+                handleAP18(mRuntime,mConnection,cmd);
+                break;
+            case AP09: //闹钟
+                handleAP09(mRuntime,mConnection,cmd);
+                break;
+            case AP10://情景模式
+                handleAP10(mRuntime,mConnection,cmd);
+                break;
+            case AP11://服务器推送待接收消息
+                handleAP11(mRuntime,mConnection,cmd);
+                break;
+
 //            case AP14:// wifi定位包
 //                handleBP02(cmd);
 //                ICLogger.i("服务器收到定位AP02");
@@ -957,11 +1209,11 @@ uncle:13141516175
         ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);
         if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes));
         switch (type) {
-//            case BP28:
-//                handleBP28(mConnection, cmd, mRuntime, bytes);
-//                ICLogger.i("收到服务器语音BP28");
-////                mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化
-//                break;
+            case AP12:
+                handleAP12(mRuntime,mConnection, bytes);
+                ICLogger.i("收到服务器语音AP12");
+                mConnection.DeliverCMDMessageToSystem("AP12", "");//通知下面线程状态变化
+                break;
         }
         return ret;
     }