临时提交Gator 协议
authorSnickerSun <scy@incartech.cn>
Tue, 29 Jun 2021 14:18:57 +0000 (22:18 +0800)
committerSnickerSun <scy@incartech.cn>
Tue, 29 Jun 2021 14:18:57 +0000 (22:18 +0800)
修正protocolAPIHelper中一个S123 APBR的访问错误

app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/bean/Runtime.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
local.properties

index 60eda8a..a887fc3 100644 (file)
@@ -7,42 +7,59 @@
     android:sharedUserId="android.uid.system"
     android:supportsRtl="true">
     <!-- 按用户发送消息 -->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> <!-- 允许程序读取或写入系统设置 -->
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+    <!-- 允许程序读取或写入系统设置 -->
     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> <!-- 联网的权限 -->
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <!-- 联网的权限 -->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" /> <!-- 打电话权限 -->
-    <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 监听电话状态权限 -->
+    <uses-permission android:name="android.permission.INTERNET" />
+    <!-- 打电话权限 -->
+    <uses-permission android:name="android.permission.CALL_PHONE" />
+    <!-- 监听电话状态权限 -->
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
-    <uses-permission android:name="android.permission.READ_CALL_LOG" /> <!-- 联系人 -->
+    <uses-permission android:name="android.permission.READ_CALL_LOG" />
+    <!-- 联系人 -->
     <uses-permission android:name="android.permission.READ_CONTACTS" />
-    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- 灭屏 -->
-    <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- <user-permission android:name="android.permission.DEVICE_POWER"/> -->
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 删除进程 -->
-    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> <!-- 监听FOTA消息 -->
-    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <!-- 语言切换用 -->
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <!-- 灭屏 -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <!-- <user-permission android:name="android.permission.DEVICE_POWER"/> -->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <!-- 删除进程 -->
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />
+    <!-- 监听FOTA消息 -->
+    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+    <!-- 语言切换用 -->
     <uses-permission android:name="android.permission.SET_TIME_ZONE" />
-    <permission android:name="com.adups.fota.permission" /> <!-- 振动 -->
-    <uses-permission android:name="android.permission.VIBRATE" /> <!-- 高德定位SDK需要的权限 BEGIN -->
+    <permission android:name="com.adups.fota.permission" />
+    <!-- 振动 -->
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <!-- 高德定位SDK需要的权限 BEGIN -->
     <!-- 用于进行网络定位 -->
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 用于访问GPS定位 -->
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <!-- 用于访问GPS定位 -->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
     <!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> -->
     <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
     <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> -->
     <!-- 用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
-    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 用于访问网络,网络定位需要上网 -->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <!-- 用于访问网络,网络定位需要上网 -->
     <!-- <uses-permission android:name="android.permission.INTERNET"></uses-permission> -->
     <!-- 用于读取手机当前的状态 -->
     <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> -->
     <!-- 用于写入缓存数据到扩展存储卡 -->
     <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -->
     <!-- 用于申请调用A-GPS模块 -->
-    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 用于申请获取蓝牙信息进行室内定位 -->
+    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
+    <!-- 用于申请获取蓝牙信息进行室内定位 -->
     <uses-permission android:name="android.permission.BLUETOOTH" />
-    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- 高德定位SDK需要的权限 END -->
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <!-- 高德定位SDK需要的权限 END -->
     <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
index acfb629..d498517 100644 (file)
@@ -269,6 +269,19 @@ public class Runtime {
     private int fzdDevStatus = 0x00000000;
 
 
+    public String getGatorAlarmType(){
+        //报警类型:0x0 无报警;0x02 SOS报警;0x08 电池低电量报警;0x20 设备脱离
+        String gatorAlarm="0";
+        if (alarmType.equals("01")){//SOS
+            gatorAlarm="2";
+        }else if (alarmType.equals("02")){//低电
+            gatorAlarm="8";
+        }else if (alarmType.equals("03")){//脱落报警
+            gatorAlarm="20";
+        }
+        return gatorAlarm;
+    }
+
     /***
      *    00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,
      *    07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,
@@ -1293,8 +1306,15 @@ public class Runtime {
         }
         return sb.toString();
     }
+    private static String mGatorLBSMultiStationData = "";
 
+    public void setGatorLBSMultiStationData(String data) {
+        mGatorLBSMultiStationData = data;
+    }
 
+    public String getGatorLBSMultiStationData(){
+        return mGatorLBSMultiStationData;
+    }
     public boolean sleepDataReported = false;
 
 
index 4ff48b4..9be3517 100644 (file)
@@ -196,7 +196,14 @@ public class CellInfoUtil {
 
         StringBuilder cdmaSB = new StringBuilder();
         runtime.setMccAndMnc(gsmSb.toString());
-
+        int mcc=0;
+        int mnc=0;
+        try {
+          mcc = Integer.parseInt(runtime.getLocationInstance().getMCC());
+          mnc = Integer.parseInt(runtime.getLocationInstance().getMNC());
+        }catch (Exception e){
+          ICLogger.e(e.getMessage(),e);
+        }
         if (celllocation instanceof GsmCellLocation) {
           GsmCellLocation gsmCell = (GsmCellLocation)celllocation;
             runtime.setCdmaInfo(null);
@@ -208,7 +215,6 @@ public class CellInfoUtil {
           gsmSb.append(",");
           gsmSb.append(150-Math.abs(getSignal(telephonyManager,runtime)));
           runtime.setCellinfo(gsmSb.toString());
-
           runtime.getLocationInstance().setCID(gsmCell.getCid());
           runtime.getLocationInstance().setLAC(gsmCell.getLac());
           runtime.getLocationInstance().setRxlevel(150-Math.abs(getSignal(telephonyManager,runtime)));
@@ -217,12 +223,15 @@ public class CellInfoUtil {
 
           List neighboringCell_list = telephonyManager.getNeighboringCellInfo();
             //AP02 Multi GSM Station
-            StringBuilder gsmSbMulti = new StringBuilder();
+          StringBuilder gsmSbMulti = new StringBuilder(); //头
+          StringBuilder gsmSbMulti_data = new StringBuilder(); //内容
 
-          StringBuilder gsmSbMultiFZD = new StringBuilder();
-          StringBuilder gsmSbMulti_data = new StringBuilder();
+          StringBuilder gsmSbMultiFZD = new StringBuilder();//头
+          StringBuilder gsmSbMultiFZD_data = new StringBuilder();//内容
+
+          StringBuilder gsmSbMultiGator = new StringBuilder(); //头
+          StringBuilder gsmSbMultiGator_data = new StringBuilder(); //内容
 
-          StringBuilder gsmSbMultiFZD_data = new StringBuilder();
           int size=1;
             if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {
               sortByRssi(neighboringCell_list);
@@ -249,6 +258,14 @@ public class CellInfoUtil {
                 gsmSbMultiFZD_data.append(",");
                 gsmSbMultiFZD_data.append( 150-Math.abs(mNeighboringCellInfo.getRssi()));
 
+// Gator         MCC(%03d)+MNC(%03d)+LACID(%04X)+CELLID(%07X)+RX LEVEL(%02X)
+
+                gsmSbMultiGator_data.append(String.format("%1$03d",mcc))
+                        .append(String.format("%1$03d",mnc))
+                        .append(String.format("%1$04X",mNeighboringCellInfo.getLac()))
+                        .append(String.format("%1$07X",mNeighboringCellInfo.getCid()))
+                        .append(String.format("%1$02X",150-Math.abs(mNeighboringCellInfo.getRssi())));
+
                 maxstationCount ++;
                 if (maxstationCount == 5) {
 //                break;
@@ -284,15 +301,21 @@ public class CellInfoUtil {
           gsmSbMultiFZD.append(150-Math.abs(getSignal(telephonyManager,runtime)));
           gsmSbMultiFZD.append(gsmSbMultiFZD_data.toString());
 
+          gsmSbMultiGator.append(String.format("%1$03d",mcc))
+                  .append(String.format("%1$03d",mnc))
+                  .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))));
 
           ICLogger.i("LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString());
           ICLogger.i("FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString());
           if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "LBS GsmCellLocation MultiStation "+ gsmSbMulti.toString());
           if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "FZD LBS GsmCellLocation MultiStation "+ gsmSbMultiFZD.toString());
+          if (Config.LOG_TOFILE) ICLogger.logToFile("LBS", "Gator LBS GsmCellLocation MultiStation "+ gsmSbMultiGator.toString());
 
           runtime.setLBSMultiStationData(gsmSbMulti.toString());
           runtime.setFZDLBSMultiStationData(gsmSbMultiFZD.toString());
-
+          runtime.setGatorLBSMultiStationData(gsmSbMultiGator.toString());
           return gsmSb.toString();
         } else if (celllocation instanceof CdmaCellLocation) {
           CdmaCellLocation cdmaCelllocation = (CdmaCellLocation)celllocation;
index dd9734b..133cf3a 100644 (file)
@@ -1022,7 +1022,7 @@ public class protocolAPIHelper {
                 ret = null;
                 break;
             case Config.PROTOCOL_S123:
-                ret = protocol_ic.APBR(runtime);
+                ret = protocol_s123.APBR(runtime);
                 break;
             case Config.PROTOCOL_GATOR:
                 ret = null;
index 85ec56f..3185fca 100644 (file)
@@ -2,6 +2,7 @@ package com.ic.protocols;
 
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.IClipboard;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Environment;
@@ -9,6 +10,7 @@ import android.os.Handler;
 import android.os.HandlerThread;
 import android.text.TextUtils;
 
+import com.android.internal.telephony.uicc.RuimFileHandler;
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.Constants;
 import com.enqualcomm.support.CoreService;
@@ -261,6 +263,18 @@ public class protocol_gator {
         String len= String.format("%04x",encreptedStr.length()+8);
         return encreptionMSGHeader+len+"01"+encreptedStr;
     }
+    //根据协议添加头尾以及IMEI号
+    private static String AddHeader(Runtime runtime,String msg){
+        /*(  CHAR    1
+%04X   HEX_STRING      4
+0106   C_STRING        4
+       C_STRING        15*/
+        String len= String.format("%04x",msg.length());
+        return new StringBuffer(CMDHEADER).append(len).append("0106").append(runtime.IMEI()).append(msg).append(
+                CMDEND).toString();
+
+    }
+
     /**/
     public static StringMessage genStringMessage(String cmdName, String msg) {
         //设置cmdName,在这里配置进去的msg没有实际用到
@@ -368,17 +382,6 @@ public class protocol_gator {
         return -1;
     }
 
-    private static String AddHeader(Runtime runtime,String msg){
-        /*(  CHAR    1
-%04X   HEX_STRING      4
-0106   C_STRING        4
-       C_STRING        15*/
-        String len= String.format("%04x",msg.length());
-        return new StringBuffer(CMDHEADER).append(len).append("0106").append(runtime.IMEI()).append(msg).append(
-                CMDEND).toString();
-
-    }
-
     /*登录*/
     public static StringMessage BP00(Runtime ds) {
         //示例数据:BP00,AAAA,BB,CC
@@ -417,11 +420,11 @@ public class protocol_gator {
     }
 
     //时间同步成功失败反馈
-    public StringMessage BP03(Runtime ds,boolean success){
+    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)+"00000000000000031"));
+            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)+"00000000000000030"));
+            return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+index+"0"));
         }
     }
     //时间同步,等同于登录成功回复
@@ -432,6 +435,7 @@ public class protocol_gator {
         if (msg.length == 5) {
             log("handleBP00", "Set Datetime " + msg[1] + msg[2]);
             log("handleBP00", "Set TimeZone " + msg[3]);
+            String index=msg[4];
             try {
                 Date datetime = TimeUtil.parseDatetiime("20"+msg[1]+msg[2]);
               //  Date timezone = TimeUtil.parsetiime(msg[3].substring(1));
@@ -443,14 +447,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,true));
+                    connection.send(BP03(runtime,index,true));
                 }else{
-                    connection.send(BP03(runtime,false));
+                    connection.send(BP03(runtime,index,false));
                 }
             } catch (Exception e) {
                 ICLogger.e(e.getMessage(), e);
 
-                connection.send(BP03(runtime,false));
+                connection.send(BP03(runtime,index,false));
             }
 //            Set Datetime 20200505112734
 //            Set TimeZone 8
@@ -469,22 +473,20 @@ public class protocol_gator {
         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){
+        }else if (batlevel>15 && batlevel<= 35){
             batstat=2;
-        }else if (batlevel>55 && batlevel<= 85){
+        }else if (batlevel>35 && batlevel<= 55){
             batstat=3;
-        }else {
+        }else if (batlevel>55 && batlevel<= 85){
             batstat=4;
+        }else {
+            batstat=5;
         }
-        String netstat="46 00 002482 0000DE127";
-
-        netstat = ds.getGatorLBSData();
+        String netstat=ds.getGatorLBSData();
 
         String msg=new StringBuffer(cmdMap.get(CMD_TYPE.BP33)).append(CMDSPLIT)
-                .append(0).append(CMDSPLIT)
+                .append(ds.getGatorAlarmType()).append(CMDSPLIT)
                 .append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT)
                 .append(batstat).append(CMDSPLIT)
                 .append(netstat).append(CMDSPLIT)
@@ -503,17 +505,180 @@ public class protocol_gator {
         log("AP04读取版本,返回BP00");
         connection.send(BP00(ds));
     }
-    public void handleAP00(Runtime ds,Connection connection,String cmd) {
-        log("AP00读取版本,返回BP30");
+    public void handleAP00(Connection connection,Runtime ds,String cmd) {
+        log("AP00立即定位,返回BP30");
+    }
+
+    /***
+     *
+     * @param ds
+     * @return
+     */
+    public StringMessage BP30(Runtime ds){
+        StringBuilder sb=new StringBuilder(cmdMap.get(CMD_TYPE.BP30)).append(CMDSPLIT);
+
+        int batstat=0;
+        int batlevel=ds.getBatterylevel();
+        if (batlevel>0 && batlevel<= 15){
+            batstat=1;
+        }else if (batlevel>15 && batlevel<= 35){
+            batstat=2;
+        }else if (batlevel>35 && batlevel<= 55){
+            batstat=3;
+        }else if (batlevel>55 && batlevel<= 85){
+            batstat=4;
+        }else {
+            batstat=5;
+        }
+        //类型    "LBS"   "GPS"  "WiFi"
+        String LocationType = ds.getLocationInstance().getLocationType();
+        if(LocationType.equals("LBS")) {
+            if(ds.getWifiData().isEmpty() )
+            {
+                if(ds.getGatorLBSMultiStationData().isEmpty()){
+                    //no available data
+                    ICLogger.e("没有有效定位信息");
+                    return null;
+                }else{
+         /*   基站定位:
+(008E0106357593060153353BP30,L,2,000000FF,5,1,4,46000024820000DE127,46000024820000DDF1A,46000024820000DEB0D,46000024820000F160B,150728,152900)
+SOS报警上行基站位置消息,步数为255步,电量等级5,服务器需要下发经纬度信息给手表,定位数据采集时间为 2015 年 07 月 28 日,当地时间15:29:00.采集到的基站数为4个,第一个是主基站,其余3个为辅助基站
+基站数据格式为: MCC(%03d)+MNC(%03d)+LACID(%04X)+CELLID(%07X)+RX LEVEL(%02X), (终端最多可以搜集7个基站数据,当前接入基站和信号优的前5个周边基站将上报)
+*/
+                            /*
+        报警类型:0x0 无报警;0x02 SOS报警;0x08 电池低电量报警;0x20 设备脱离
+        */
+                    sb.append("L").append(CMDSPLIT);
+                    sb.append(ds.getGatorAlarmType()).append(CMDSPLIT);
+                    //步数
+                    sb.append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT);
+
+                    //电池电量5级
+                    sb.append(batstat).append(CMDSPLIT);
+                    /*服务器需要下发经纬度信息给手表*/
+                    sb.append(1).append(CMDSPLIT);
+                    sb.append(ds.getGatorLBSMultiStationData());
+                    sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT);
+                    sb.append(TimeUtil.getSystemTimeHHmmss());
+                }
+            }else{
+                if(ds.getLBSMultiStationData().isEmpty()){
+        /*WIFI定位:
+(00A60106357593060153353BP30,W,2,000000FF,5,1,150728,152900,3,08,wifi2462,1C:78:57:08:A5:CA,-88,05,HDB-H,D8:15:0D:5C:4D:74,-87,0D,WWW.CXGPS.COM,D8:15:0D:A8:E8:DE,-86)
+SOS报警上行WIFI数据,步数为255步,电量等级5,服务器需要下发经纬度信息给手表,数据采集时间2015年7月28日,当地时间15:29:00,共3条数据(最多6条),分别由SSID长度(%02X),SSID,MAC地址,RSSI组成
+*/
+                    sb.append("W").append(CMDSPLIT);
+                    sb.append(ds.getGatorAlarmType()).append(CMDSPLIT);
+                    //步数
+                    sb.append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT);
+                    //电池电量5级
+                    sb.append(batstat).append(CMDSPLIT);
+                    /*服务器需要下发经纬度信息给手表*/
+                    sb.append(1).append(CMDSPLIT);
+                    sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT);
+                    sb.append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT);
+
+                }else{
+         /*WIFI、LBS混合定位:
+(00F80106357593060153353BP30,M,2,000000FF,5,1,150728,152900,4,46000024820000DE127,46000024820000DDF1A,46000024820000DEB0D,46000024820000F160B,3,08,wifi2462,1C:78:57:08:A5:CA,-88,05,HDB-H,D8:15:0D:5C:4D:74,-87,0D,WWW.CXGPS.COM,D8:15:0D:A8:E8:DE,-86)
+SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数据采集时间2015年7月28日,当地时间15:29:00,基站数为4个,第一个是主基站,其余3个为辅助基站,WIFI共3条数据(最多6条),分别由SSID长度(%02X),SSID,MAC地址,RSSI组成
+         */
+                    sb.append("M").append(CMDSPLIT);
+                    sb.append(ds.getGatorAlarmType()).append(CMDSPLIT);
+                    //步数
+                    sb.append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT);
+                    //电池电量5级
+                    sb.append(batstat).append(CMDSPLIT);
+                    /*服务器需要下发经纬度信息给手表*/
+                    sb.append(1).append(CMDSPLIT);
+                    sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT);
+                    sb.append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT);
+                    sb.append(ds.getGatorLBSMultiStationData()).append(CMDSPLIT);
+
+                }
+            }
+        }else if(LocationType.equals("GPS")){
+        /*GPS定位:
+        (006E0106357593060153353BP30,G,2,000000FF,5,46000024820000DE127,150728A2934.0133N10627.2544E000.0141830309.62)
+                SOS报警上行GPS位置数据,步数为255步,电量等级5,当前基站接入的为:46000024820000DE127
+        */
+                sb.append(ds.getGatorLBSData()).append(CMDSPLIT);
+
+        }
+
+        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP30), AddHeader(ds,sb.toString()));
+        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));
     }
 
-    public void handleAP30(){
+
+    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"));
+        }
 
     }
-    //定位信息
-    public void BP30(Runtime ds,Connection connection,String cmd) {
-        log("AP04读取版本,返回BP00");
+    //设置亲情号码
+    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==0) {
+                for (int i = 0; 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));
+            }
+
+            ICLogger.d(sb.toString());
+            connection.send(BP06(ds,cmdlist[1],true));
+        }else{
+            ICLogger.e("AP06 format error!");
+            connection.send(BP06(ds,cmdlist[1],false));
+        }
+
 
     }
 //    (0019357593060153353AP00) 下行一次location。
@@ -537,12 +702,20 @@ public class protocol_gator {
             case AP30:// 定位数据接收成功
                 mConnection.DeliverCMDMessageToSystem("BP30", cmd);//通知下面线程状态变化
                 break;
-//            case AP14: //gps定位包
-//                handleBP01(cmd);
-//                ICLogger.i("服务器收到定位AP01");
-//                mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
-//                break;
-
+            case AP14: //gps定位包
+                handleAP14(mRuntime,mConnection,cmd);
+                ICLogger.i("收到服务器下发手表坐标");
+              //  mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
+                break;
+            case AP00:
+                //立即定位指令(长链接有效)
+                handleAP00(mConnection, mRuntime, cmd);
+                mConnection.DeliverCMDMessageToSystem("StartLocate", cmd);//通知下面线程状态变化
+                break;
+            case AP06:
+                //收到设置亲情号码
+                handleAP06( mRuntime, mConnection,cmd);
+                break;
 //            case AP14:// wifi定位包
 //                handleBP02(cmd);
 //                ICLogger.i("服务器收到定位AP02");
@@ -592,11 +765,7 @@ public class protocol_gator {
 //                handleBP34(mConnection, mRuntime, cmd);
 //                mConnection.DeliverCMDMessageToSystem("setWorkMod", cmd);//通知下面线程状态变化
 //                break;
-//            case AP14:
-//                //立即定位指令(长链接有效)
-//                handleBP16(mConnection, mRuntime, cmd);
-//                mConnection.DeliverCMDMessageToSystem("StartLocate", cmd);//通知下面线程状态变化
-//                break;
+
 //
 //            case AP14: //立即拍照
 //                ICLogger.i("立即拍照!");
@@ -608,11 +777,7 @@ public class protocol_gator {
 //                handleBP12(mConnection, cmd, mRuntime);
 //                ICLogger.i("收到服务器设置SOS号码命令BP12");
 //                break;
-//            case AP14:
-//                //收到设置白名单号码
-//                handleBP14(mConnection, cmd, mRuntime);
-//                ICLogger.i("收到服务器设置白名单号码命令BP14");
-//                break;
+
 //            case AP14:
 //                //收到设置白名单号码
 //                handleBPWL(mConnection, cmd, mRuntime);
index 505a8db..3fde303 100644 (file)
@@ -4,10 +4,8 @@
 # Location of the SDK. This is only used by Gradle.\r
 # For customization when using a Version Control System, please read the\r
 # header note.\r
-<<<<<<< HEAD\r
-#Sat Jun 26 13:03:49 CST 2021\r
-sdk.dir=E\:\\Android\\Sdk\r
-=======\r
-#Sun Jun 27 19:54:51 CST 2021\r
-sdk.dir=E\:\\Android\\sdk\r
->>>>>>> bac6231c4f7e5884c23cfac5feb384cddb497355\r
+#Tue Jun 29 20:13:18 CST 2021\r
+>>>>>>>=bac6231c4f7e5884c23cfac5feb384cddb497355\r
+sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk\r
+=\=\=\=\=\=\=\r
+<<<<<<<=HEAD\r