增加防走丢框架文件,协议未实现。
authorsnickersun <scy@incartech.cn>
Mon, 27 Jul 2020 11:57:46 +0000 (19:57 +0800)
committersnickersun <scy@incartech.cn>
Mon, 27 Jul 2020 11:57:46 +0000 (19:57 +0800)
优化配置,所有协议默认服务器地址统一管理。
增强兼容性,Integer.valueOf用Integer.parseInt替换,减少由于数据转换造成的crash

13 files changed:
app/app.iml
app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/bean/voicePacket.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/service/SilentManager.java
app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_beehome.java
app/src/main/java/com/ic/protocols/protocol_fzd.java [new file with mode: 0644]
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_jiai.java

index ccb6451..96972aa 100644 (file)
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project"/>\r
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project"/>\r
     <orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\android-logging-log4j-1.0.3.jar:unspecified@jar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\ftp4j-1.7.2.jar:unspecified@jar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\log4j-1.2.17.jar:unspecified@jar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\frameworks-full-debug.jar:unspecified@jar" level="project"/>\r
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\telephony_common-full-debug.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\android-logging-log4j-1.0.3.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\ftp4j-1.7.2.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\log4j-1.2.17.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\frameworks-full-debug.jar:unspecified@jar" level="project"/>\r
+    <orderEntry type="library" name="Gradle: __local_aars__:D.\workspace\icsupport\app\libs\telephony_common-full-debug.jar:unspecified@jar" level="project"/>\r
     <orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar" level="project"/>\r
     <orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.1.0@jar" level="project"/>\r
     <orderEntry type="library" name="Gradle: io.reactivex:rxjava:1.1.0@jar" level="project"/>\r
index 3d4b576..f3ec700 100644 (file)
@@ -11,6 +11,7 @@ import com.enqualcomm.support.utils.SharPreferenceUtil;
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.enqualcomm.support.utils.Util;\r
 import com.ic.jni.ICJniUtils;\r
+import com.ic.protocols.protocolAPIHelper;\r
 import com.sina.util.dnscache.log.FileUtil;\r
 \r
 import org.json.JSONException;\r
@@ -129,23 +130,6 @@ public class Config {
   final static String KeySPo2adust="KeySPo2Adjust";\r
 \r
 \r
-  public static String DefaultHost(){\r
-        if (protocol_no==PROTOCOL_BEEHOME)\r
-            return BeehomeHost;\r
-        else if (protocol_no==PROTOCOL_JIAI)\r
-            return JiAiHost;\r
-        else\r
-            return JiAiHost;\r
-  }\r
-  public static int DefaultPort(){\r
-      if (protocol_no==PROTOCOL_BEEHOME)\r
-          return BeehomePort;\r
-      else if (protocol_no==PROTOCOL_JIAI)\r
-          return JiAiPort;\r
-      else\r
-          return JiAiPort;\r
-  }\r
-\r
   public static String getSMSPwd(Context context){\r
     return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword);\r
   }\r
@@ -256,35 +240,15 @@ public class Config {
   }\r
 \r
   public static String getProtocolServerHost(Context context){\r
-\r
-    String host=JiAiHost;\r
-    switch (protocol_no){\r
-\r
-      case PROTOCOL_BEEHOME:\r
-        host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,BeehomeHost);\r
-        break;\r
-      case PROTOCOL_JIAI:\r
-      default:\r
-        host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,JiAiHost);\r
-      break;\r
-    }\r
+    String host;\r
+    host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,protocolAPIHelper.getDefaultServerIP());\r
     return host;\r
    }\r
 \r
 \r
   public static int getProtocolServerPort(Context context){\r
-\r
-      int port=JiAiPort;\r
-      switch (protocol_no){\r
-\r
-          case PROTOCOL_BEEHOME:\r
-              port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,BeehomePort);\r
-              break;\r
-          case PROTOCOL_JIAI:\r
-          default:\r
-              port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,JiAiPort);\r
-              break;\r
-      }\r
+      int port;\r
+      port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,protocolAPIHelper.getDefaultServerPort());\r
       return port;\r
   }\r
 \r
@@ -460,8 +424,8 @@ public class Config {
       setProtocolServerPort(context,serverport);\r
 \r
     }else{\r
-      setProtocolServerHost(context,DefaultHost());\r
-      setProtocolServerPort(context,DefaultPort());\r
+      setProtocolServerHost(context, protocolAPIHelper.getDefaultServerIP());\r
+      setProtocolServerPort(context,protocolAPIHelper.getDefaultServerPort());\r
     }\r
     ICLogger.i("current protocol_no="+protocol_no+" , isUsingCustomServier="+isUsingCustomServer+", server host="+\r
             getProtocolServerHost(context)+", server port="+getProtocolServerPort(context));\r
@@ -488,7 +452,7 @@ public class Config {
     String tmp=Util.getSystemProperties("persist.sys.protocol_no");\r
     int ret=0;\r
     if (tmp!=null && !tmp.isEmpty()&& Util.isNumeric(tmp)) {\r
-      ret = Integer.valueOf(tmp);\r
+      ret = Integer.parseInt(tmp);\r
       switch(ret){\r
         case PROTOCOL_JIAI:\r
           ICLogger.i("协议 JIAI");\r
index 5f6815a..8fd1dda 100644 (file)
@@ -31,6 +31,7 @@ import com.enqualcomm.support.utils.SimSignalUtil;
 import com.enqualcomm.support.utils.TimeUtil;\r
 import com.enqualcomm.support.utils.Util;\r
 import com.enqualcomm.support.utils.ftpUtils;\r
+import com.ic.protocols.protocolAPIHelper;\r
 \r
 import java.io.File;\r
 import java.net.MalformedURLException;\r
@@ -340,8 +341,8 @@ public class ICSmsManager  extends BroadcastReceiver{
                 ICLogger.i(sms + " len " + tmp.length);\r
                 if (tmp.length == 2) {\r
                     if (tmp[1].equals("reset#")) {\r
-                        Config.setCustomServer(mContext,false,Config.DefaultHost(),Config.DefaultPort());\r
-                        reply = "reset ServerIP to " + Config.DefaultHost() + ":" + Config.DefaultPort() + " success! ";\r
+                        Config.setCustomServer(mContext,false, protocolAPIHelper.getDefaultServerIP(),protocolAPIHelper.getDefaultServerPort());\r
+                        reply = "reset ServerIP to " + protocolAPIHelper.getDefaultServerIP() + ":" + protocolAPIHelper.getDefaultServerPort() + " success! ";\r
                         Config.loadServerSettings(runtime);\r
                         CoreService.getInstance().disconnect_server();\r
                         CoreService.getInstance().ReConnectToServer();\r
index bfcc992..210f009 100644 (file)
@@ -19,6 +19,9 @@ public class voicePacket {
         return gvoicepacket_sent;\r
     }\r
 \r
+\r
+    int filetype=1;\r
+    int datatype=3;\r
     String time=null;\r
     String Name=null;\r
     String appendIndex=null;\r
@@ -44,6 +47,18 @@ public class voicePacket {
     public String getPacketTime(){\r
         return time;\r
     }\r
+\r
+    /***\r
+     * 文件类型    内容类型\r
+     * 1 语音——  1.监听语音      *   2.SOS语音      *      3.扩展\r
+     * 2 图片——  1.签到图片      *   2.指令图片      *   3.设备图片      *   4.扩展\r
+     * @param type\r
+     * @param dtype\r
+     */\r
+    public void setFileType(int type,int dtype){\r
+        filetype=type;\r
+        datatype=dtype;\r
+    }\r
     ArrayList<voicepacketItem> packetArray =new ArrayList<voicepacketItem>();\r
     public class voicepacketItem{\r
         int currentId;\r
@@ -105,7 +120,6 @@ public class voicePacket {
         if (Name==null|| appendIndex==null || Name.isEmpty() ){\r
             return stringBuilder.toString();\r
         }\r
-\r
         stringBuilder.append("{ Name=").append(Name)\r
                 .append(", packetCount=").append(packetCount)\r
                 .append(", appendIndex=").append(appendIndex)\r
@@ -115,11 +129,9 @@ public class voicePacket {
                     .append(",").append(item.packetLen).append("},");\r
         }\r
         stringBuilder.append("]}");\r
-\r
         return stringBuilder.toString();\r
     }\r
 \r
-\r
     public void clearPacket(){\r
         packetArray.clear();\r
         packetCount=0;\r
@@ -138,13 +150,11 @@ public class voicePacket {
         return len;\r
     }\r
     public voicepacketItem getVoicePacketWithIndex(int index){\r
-\r
             for (int i=0;i< packetArray.size();i++){\r
                 voicepacketItem tmp=packetArray.get(i);\r
                 if (tmp.currentId==index)\r
                     return tmp;\r
             }\r
-\r
             return null;\r
     }\r
     public byte[] getVoicePacketBytes(){\r
index b945024..d6f4e1a 100644 (file)
@@ -65,7 +65,7 @@ public class Deliver extends AbstractConnectionService {
   private static ReentrantLock lock = new ReentrantLock();\r
   private static Condition mCondition = mLock.newCondition();\r
 \r
-  public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(90);\r
+  public static LinkedBlockingDeque<StringMessage> queue = new LinkedBlockingDeque(200);\r
 \r
   private static FileCache fileCache;\r
   private static NettyConnection connection;\r
index 01c809c..4d8a235 100644 (file)
@@ -68,7 +68,7 @@ public class SilentManager extends AbstractInvokeHandlerService {
       ICLogger.i("静默有变化");\r
       SilentManager.this.silentList = SilentManager.this.querySilent();\r
       SilentManager.this.getSilentListStartAndEndTime();\r
-      SilentManager.this.handleSilent(SilentManager.this.mRuntime, true);\r
+      SilentManager.this.handleSilent(mRuntime, true);\r
     }\r
   };\r
   private Context mContext;\r
@@ -669,8 +669,6 @@ public class SilentManager extends AbstractInvokeHandlerService {
           AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent);\r
         }\r
 \r
-\r
-\r
       }\r
     }\r
   }\r
@@ -696,11 +694,11 @@ public class SilentManager extends AbstractInvokeHandlerService {
         String var14 = var3.substring(6, 8);\r
         String var15 = var3.substring(8, 10);\r
         String var16 = var3.substring(10, 12);\r
-        var10.set(Calendar.YEAR, Integer.valueOf(var13));\r
-        var10.set(Calendar.MONTH, Integer.valueOf(var20) - 1);\r
-        var10.set(Calendar.DATE, Integer.valueOf(var14));\r
-        var10.set(Calendar.HOUR_OF_DAY, Integer.valueOf(var15));\r
-        var10.set(Calendar.MINUTE, Integer.valueOf(var16));\r
+        var10.set(Calendar.YEAR, Integer.parseInt(var13));\r
+        var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1);\r
+        var10.set(Calendar.DATE, Integer.parseInt(var14));\r
+        var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15));\r
+        var10.set(Calendar.MINUTE, Integer.parseInt(var16));\r
         long var17 = var10.getTimeInMillis();\r
         if (var17 >= var11) {\r
           PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9);\r
index 92824b3..731571f 100644 (file)
@@ -158,11 +158,11 @@ public class ContextProxy {
           String day = str1.substring(6, 8);\r
           String hour = str1.substring(8, 10);\r
           String minute = str1.substring(10, 12);\r
-          calendar1.set(Calendar.YEAR, Integer.valueOf(year).intValue());\r
-          calendar1.set(Calendar.MONTH, Integer.valueOf(month).intValue());\r
-          calendar1.set(Calendar.DAY_OF_MONTH, Integer.valueOf(day).intValue());\r
-          calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(hour).intValue());\r
-          calendar1.set(Calendar.MINUTE, Integer.valueOf(minute).intValue());\r
+          calendar1.set(Calendar.YEAR, Integer.parseInt(year));\r
+          calendar1.set(Calendar.MONTH, Integer.parseInt(month));\r
+          calendar1.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));\r
+          calendar1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour));\r
+          calendar1.set(Calendar.MINUTE, Integer.parseInt(minute));\r
           long l1 = calendar1.getTimeInMillis();\r
           if (l1 > l) {\r
             PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);\r
@@ -274,11 +274,11 @@ public class ContextProxy {
         String str10 = str1.substring(6, 8);\r
         String str11 = str1.substring(8, 10);\r
         String str12 = str1.substring(10, 12);\r
-        calendar.set(Calendar.YEAR, Integer.valueOf(str8).intValue());\r
-        calendar.set(Calendar.MONTH, Integer.valueOf(str9).intValue() - 1);\r
-        calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(str10).intValue());\r
-        calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(str11).intValue());\r
-        calendar.set(Calendar.MINUTE, Integer.valueOf(str12).intValue());\r
+        calendar.set(Calendar.YEAR, Integer.parseInt(str8));\r
+        calendar.set(Calendar.MONTH, Integer.parseInt(str9) - 1);\r
+        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(str10));\r
+        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str11));\r
+        calendar.set(Calendar.MINUTE, Integer.parseInt(str12));\r
         long l1 = calendar.getTimeInMillis();\r
         if (l1 >= l) {\r
           PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7);\r
index 6705d89..20f5ebc 100644 (file)
@@ -509,58 +509,32 @@ public class DBHelper {
   }\r
 \r
   public ArrayList<NoticeContent> queryNotice(String var1) {\r
-    ArrayList var2 = new ArrayList();\r
+    ArrayList noticelist = new ArrayList();\r
     ContentResolver var3 = this.cr;\r
     Uri var4 = ICContentProvider.NOTICE_URL;\r
     StringBuilder var5 = new StringBuilder();\r
     var5.append("TIME like '");\r
     var5.append(var1);\r
     var5.append("%'");\r
-    Cursor var6 = var3.query(var4, (String[])null, var5.toString(), (String[])null, (String)null);\r
-    if (var6 != null) {\r
+    Cursor cr_notice = var3.query(var4, (String[])null, var5.toString(), (String[])null, (String)null);\r
+    if (cr_notice != null) {\r
       while(true) {\r
-        if (!var6.moveToNext()) {\r
-          var6.close();\r
+        if (!cr_notice.moveToNext()) {\r
+          cr_notice.close();\r
           break;\r
         }\r
 \r
-        var2.add(new NoticeContent(var6.getString(1), var6.getString(2), var6.getString(3), var6.getString(4), var6.getString(5), var6.getString(6), var6.getString(7)));\r
+        noticelist.add(new NoticeContent(cr_notice.getString(1),\r
+                cr_notice.getString(2),\r
+                cr_notice.getString(3),\r
+                cr_notice.getString(4),\r
+                cr_notice.getString(5),\r
+                cr_notice.getString(6),\r
+                cr_notice.getString(7)));\r
       }\r
     }\r
 \r
-    return var2;\r
-  }\r
-\r
-  public int queryPowerSaveMode() {\r
-    Uri var4 = Uri.parse("content://com.cmcm.service/cmsetting");\r
-    Cursor var6 = this.cr.query(var4, (String[])null, (String)null, (String[])null, (String)null);\r
-    byte var3 = 0;\r
-    byte var2 = 0;\r
-    int var1 = var3;\r
-    if (var6 != null) {\r
-      var1 = var3;\r
-      if (var6.moveToFirst()) {\r
-        while(true) {\r
-          if (var6.getString(var6.getColumnIndex("key")).equals("powersave")) {\r
-            var1 = var6.getInt(var6.getColumnIndex("value"));\r
-            StringBuilder var5 = new StringBuilder();\r
-            var5.append("powersave mode =");\r
-            var5.append(var1);\r
-            ICLogger.i(var5.toString());\r
-            break;\r
-          }\r
-\r
-          if (!var6.moveToNext()) {\r
-            var1 = var2;\r
-            break;\r
-          }\r
-        }\r
-\r
-        var6.close();\r
-      }\r
-    }\r
-\r
-    return var1;\r
+    return noticelist;\r
   }\r
 \r
   public ArrayList<Silent> querySilence(boolean var1) {\r
index 65907d8..ee0a6ed 100644 (file)
@@ -12,6 +12,8 @@ public class protocolAPIHelper {
     private protocol_jiai protocoljiai_handler=null;\r
     private protocol_beehome protocolbeehome_handler=null;\r
     private protocol_ic protocolic_handler=null;\r
+    private protocol_fzd protocolfzd_handler=null;\r
+\r
     public protocolAPIHelper(NettyConnection connect,Runtime runtime) {\r
         ICLogger.i("init Protocol "+Config.getProtocolNumber());\r
         if (protocolbeehome_handler==null)\r
@@ -20,6 +22,8 @@ public class protocolAPIHelper {
             protocoljiai_handler=new protocol_jiai(connect,runtime);\r
         if (protocolic_handler==null)\r
             protocolic_handler=new protocol_ic(connect,runtime);\r
+        if (protocolfzd_handler==null)\r
+            protocolfzd_handler=new protocol_fzd(connect,runtime);\r
     }\r
     /*\r
        返回true 表示 cmd 全部解析成功\r
@@ -30,15 +34,18 @@ public class protocolAPIHelper {
     public boolean parserCmd(byte[] bytes) {\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 protocoljiai_handler.parserCmd(bytes);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 protocolbeehome_handler.parserCmd(bytes);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 protocolic_handler.parserCmd(bytes);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                protocolfzd_handler.parserCmd(bytes);\r
+                break;\r
         }\r
         return true;\r
     }\r
@@ -52,15 +59,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret="";\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.APTP(temp_adusted,body_temp);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.APTP(temp_adusted,body_temp);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -68,15 +78,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP10(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP10(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP10(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -85,15 +98,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP00(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP00(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP00(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -102,15 +118,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP03(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP03(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP03(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -119,15 +138,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP01(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP01(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP01(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -135,15 +157,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP02(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP02(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP02(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -152,15 +177,18 @@ public class protocolAPIHelper {
         byte[] ret=null;\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.AP07(packetTime,count,index,datalen,amrdata);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.AP07(packetTime,count,index,datalen,amrdata);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.AP07(packetTime,count,index,datalen,amrdata);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret=protocol_fzd.AP07(packetTime,count,index,datalen,amrdata);\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -169,15 +197,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.APHT(runtime);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.APHP(runtime);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.APHP(runtime);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -186,15 +217,18 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.APHT(ppg,bph,bpl);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.APHT(ppg,bph,bpl);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.APHT(ppg,bph,bpl);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
         }\r
         return ret;\r
     }\r
@@ -204,15 +238,60 @@ public class protocolAPIHelper {
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
-            case 0:\r
+            case Config.PROTOCOL_JIAI:\r
                 ret=protocol_jiai.APHT(ppg,bph,bpl);\r
                 break;\r
-            case 1:\r
+            case Config.PROTOCOL_BEEHOME:\r
                 ret=protocol_beehome.APHP(ppg,bph,bpl,spo2);\r
                 break;\r
-            case 2:\r
+            case Config.PROTOCOL_IC:\r
                 ret=protocol_ic.APHP(ppg,bph,bpl,spo2);\r
                 break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret="";\r
+                break;\r
+        }\r
+        return ret;\r
+    }\r
+\r
+\r
+    public static String getDefaultServerIP(){\r
+\r
+        String ret="";\r
+        switch(Config.protocol_no)\r
+        {\r
+            case Config.PROTOCOL_JIAI:\r
+                ret=protocol_jiai.defaultServerIP;\r
+                break;\r
+            case Config.PROTOCOL_BEEHOME:\r
+                ret=protocol_beehome.defaultServerIP;\r
+                break;\r
+            case Config.PROTOCOL_IC:\r
+                ret=protocol_ic.defaultServerIP;\r
+                break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret=protocol_fzd.defaultServerIP;\r
+                break;\r
+        }\r
+        return ret;\r
+    }\r
+    public static int getDefaultServerPort(){\r
+\r
+        int ret=8090;\r
+        switch(Config.protocol_no)\r
+        {\r
+            case Config.PROTOCOL_JIAI:\r
+                ret=protocol_jiai.defaultServerPort;\r
+                break;\r
+            case Config.PROTOCOL_BEEHOME:\r
+                ret=protocol_beehome.defaultServerPort;\r
+                break;\r
+            case Config.PROTOCOL_IC:\r
+                ret=protocol_ic.defaultServerPort;\r
+                break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret=protocol_fzd.defaultServerPort;\r
+                break;\r
         }\r
         return ret;\r
     }\r
index 7fa942d..4bb945f 100644 (file)
@@ -39,6 +39,8 @@ public class protocol_beehome {
     private static final String CMDHEADER = "IW";\r
     private static final String CMDEND = "#";\r
     private static final String CMDSPLIT = ",";\r
+    public static final String defaultServerIP="device.beehome360.com";\r
+    public static final int defaultServerPort=5111;\r
     public enum CMD_TYPE {\r
         /*终端发起*/\r
         AP00,//登录包\r
@@ -310,9 +312,9 @@ public class protocol_beehome {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
             stringBuffer.append("getBP28AmrLen name = ").append(Name)\r
@@ -595,7 +597,7 @@ public class protocol_beehome {
             String strSex=list[6];\r
 \r
             connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex)));\r
-            runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex));\r
+            runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex));\r
             ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女"));\r
         }else{\r
             ICLogger.i("BPXY format error!");\r
@@ -836,12 +838,12 @@ public class protocol_beehome {
                     if (cmdarglist.length == 9){\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                         alarmtime=cmdarglist[5];\r
                         repeat=cmdarglist[6];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[7]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[8]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[7]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[8]);\r
                         log(new StringBuilder("imei ").append(imei)\r
                                 .append(", cmdindex ").append(cmdindex)\r
                                 .append(", allswitch=").append(all_alarmswitch)\r
@@ -860,8 +862,8 @@ public class protocol_beehome {
                     }else if (cmdarglist.length == 5) {\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                     }else{\r
                         log("data len is too small!");\r
                     }\r
@@ -869,8 +871,8 @@ public class protocol_beehome {
                     if (cmdarglist.length == 4){\r
                         alarmtime=cmdarglist[0];\r
                         repeat=cmdarglist[1];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[2]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[3]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[2]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[3]);\r
 \r
                         log(new StringBuilder("set alarmtime ").append(alarmtime)\r
                                 .append(", relpeat ").append(repeat)\r
@@ -965,9 +967,9 @@ public class protocol_beehome {
         String[] cmdlist=cmd.split(CMDSPLIT);\r
         if (cmdlist.length==5){\r
             String time=cmdlist[1];\r
-            int packetCount=Integer.valueOf(cmdlist[2]);\r
-            int packetIndex=Integer.valueOf(cmdlist[3]);\r
-            int receiveSuccess=Integer.valueOf(cmdlist[4]);\r
+            int packetCount=Integer.parseInt(cmdlist[2]);\r
+            int packetIndex=Integer.parseInt(cmdlist[3]);\r
+            int receiveSuccess=Integer.parseInt(cmdlist[4]);\r
             ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗"));\r
             if (receiveSuccess == 1){\r
                 //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送\r
@@ -1008,7 +1010,7 @@ public class protocol_beehome {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
             int Cycle=900;\r
             switch(mod){\r
                 case ICLocation.NORMAL_MOD:\r
@@ -1065,9 +1067,9 @@ public class protocol_beehome {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
-            int Cycle=Integer.valueOf(cmdlist[4]);\r
-            int gpson=Integer.valueOf(cmdlist[5]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
+            int Cycle=Integer.parseInt(cmdlist[4]);\r
+            int gpson=Integer.parseInt(cmdlist[5]);\r
 \r
             String msg=AP34(cmdlist[2],mod);\r
             //设定当前工作模式及循环频率\r
@@ -1272,7 +1274,7 @@ public class protocol_beehome {
             ICLogger.i("BP15 , 定位周期="+time+"秒");\r
 \r
             Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);\r
-            Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time));\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time));\r
             runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
             runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
             //set AlarmCycle  and trigger Location\r
@@ -1337,9 +1339,9 @@ public class protocol_beehome {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
             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);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
@@ -1505,7 +1507,7 @@ public class protocol_beehome {
 \r
             //发送重置PPGCycle的广播,会在CoreServer里面执行\r
             Intent intent = new Intent();\r
-            intent.putExtra("PPGTestCycle",Integer.valueOf(cycle));\r
+            intent.putExtra("PPGTestCycle",Integer.parseInt(cycle));\r
             runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent);\r
         }else{\r
             ICLogger.i("BP86 format error!");\r
@@ -1602,7 +1604,7 @@ public class protocol_beehome {
         if (list.length==4){\r
             String index=list[2];\r
             String freqstr=list[3];\r
-            int freq=Integer.valueOf(freqstr);\r
+            int freq=Integer.parseInt(freqstr);\r
             connection.send(genStringMessage("APTE",APTE(index,freq)));\r
             ICLogger.i("收到服务器指令:测量体温 "+freq+"分钟一次。");\r
             Config.setTemperatureTestCycle(runtime,freq);\r
@@ -1678,10 +1680,10 @@ public class protocol_beehome {
             connection.send(genStringMessage("APJZ",APX1(index)));\r
 \r
             int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust;\r
-            ppg_adjust=Integer.valueOf(strXL);\r
-            bph_adjust=Integer.valueOf(strBPH);\r
-            bpl_adjust=Integer.valueOf(strBPL);\r
-            spo2_adjust=Integer.valueOf(strSpO2);\r
+            ppg_adjust=Integer.parseInt(strXL);\r
+            bph_adjust=Integer.parseInt(strBPH);\r
+            bpl_adjust=Integer.parseInt(strBPL);\r
+            spo2_adjust=Integer.parseInt(strSpO2);\r
 \r
             runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust);\r
             Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust);\r
@@ -1813,13 +1815,7 @@ public class protocol_beehome {
                 .append(CMDEND).toString();\r
     }\r
 \r
-    /**\r
-     *\r
-     * @param cmd\r
-     * @param connection\r
-     * @param runtime\r
-     */\r
-    public void handleBPHP(){\r
+     public void handleBPHP(){\r
 \r
         ICLogger.i("服务器收到APHP 心率血压血氧 !");\r
 \r
diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java
new file mode 100644 (file)
index 0000000..da7d5d3
--- /dev/null
@@ -0,0 +1,1615 @@
+package com.ic.protocols;\r
+\r
+import android.content.ComponentName;\r
+import android.content.Intent;\r
+import android.net.Uri;\r
+import android.os.Environment;\r
+\r
+import com.enqualcomm.support.Config;\r
+import com.enqualcomm.support.CoreService;\r
+import com.enqualcomm.support.bean.Alarm;\r
+import com.enqualcomm.support.bean.Contact;\r
+import com.enqualcomm.support.bean.Content;\r
+import com.enqualcomm.support.bean.ICLocation;\r
+import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.bean.StringMessage;\r
+import com.enqualcomm.support.bean.VoiceContent;\r
+import com.enqualcomm.support.bean.voicePacket;\r
+import com.enqualcomm.support.service.HeartRateManager;\r
+import com.enqualcomm.support.utils.Connection;\r
+import com.enqualcomm.support.utils.ICLogger;\r
+import com.enqualcomm.support.utils.NettyConnection;\r
+import com.enqualcomm.support.utils.TimeUtil;\r
+import com.enqualcomm.support.utils.Util;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+\r
+import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
+import static com.enqualcomm.support.LocationClient.LOCATION_MODE;\r
+import static com.enqualcomm.support.bean.Contact.GROUP_ALL;\r
+import static java.lang.Math.abs;\r
+\r
+public class protocol_fzd {\r
+    private static final String TAG = "ICSrv." + protocol_fzd.class.getSimpleName();\r
+    private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";\r
+    private static final String CMDHEADER = "IC";\r
+    private static final String CMDEND = "#";\r
+    private static final String CMDSPLIT = ",";\r
+\r
+    public static final String defaultServerIP="zd.xcloudtech.com";\r
+    public static final int defaultServerPort=9000;\r
+\r
+    public enum CMD_TYPE {\r
+        /*终端发起*/\r
+        AP00,//登录包\r
+        BP00,\r
+        AP01,//混合定位\r
+        BP01,\r
+        AP02,//多基站定位\r
+        BP02,\r
+        AP92,//CDMA 混合定位\r
+        BP92,\r
+        AP03,//心跳包\r
+        BP03,\r
+        AP05,//语音查询接收\r
+        BP05,\r
+        AP07,//语音上行\r
+        BP07,\r
+        AP10,//报警与地址回复\r
+        BP10,\r
+        AP49,//心率上传\r
+        BP49,\r
+        APHT,//心率血压上传\r
+        BPHT,\r
+        APTM,//基站校时及获取定位\r
+        BPTM,\r
+        /* 服务器发起*/\r
+        AP12,\r
+        BP12,//SOS 号码设置\r
+        AP14,\r
+        BP14,//设置联系人白名单\r
+        AP15,\r
+        BP15,//设置定位周期\r
+        AP16,\r
+        BP16,//立即定位\r
+        AP17,\r
+        BP17,//恢复出厂设置\r
+        AP18,\r
+        BP18,//重启设备\r
+        AP21,\r
+        BP21,//设置计步开关\r
+        AP28,\r
+        BP28, //语音下行\r
+        AP31,\r
+        BP31,//关机\r
+        AP33,\r
+        BP33,//工作模式\r
+        AP34,\r
+        BP34,//自定义工作模式\r
+        APXL,\r
+        BPXL,//测量心率\r
+        APXY,\r
+        BPXY,//测量血压\r
+        APJZ,\r
+        BPJZ,//血压校准\r
+        AP84,\r
+        BP84,//白名单开关\r
+        AP85,\r
+        BP85,//设置闹钟\r
+        AP86,\r
+        BP86,//心率血压测试周期\r
+        AP89,\r
+        BP89,//心率血压阀值设置\r
+        UNKNOWN_CMD,\r
+    }\r
+\r
+    private static HashMap<CMD_TYPE, String> cmdMap = null;\r
+\r
+    static {\r
+        cmdMap = new HashMap<CMD_TYPE, String>();\r
+        cmdMap.put(CMD_TYPE.AP00, "AP00");\r
+        cmdMap.put(CMD_TYPE.BP00, "BP00");\r
+        cmdMap.put(CMD_TYPE.AP01, "AP01");\r
+        cmdMap.put(CMD_TYPE.BP01, "BP01");\r
+        cmdMap.put(CMD_TYPE.AP02, "AP02");\r
+        cmdMap.put(CMD_TYPE.BP02, "BP02");\r
+        cmdMap.put(CMD_TYPE.AP92, "AP92");\r
+        cmdMap.put(CMD_TYPE.BP92, "BP92");\r
+        cmdMap.put(CMD_TYPE.AP03, "AP03");\r
+        cmdMap.put(CMD_TYPE.BP03, "BP03");\r
+        cmdMap.put(CMD_TYPE.AP05, "AP05");\r
+        cmdMap.put(CMD_TYPE.BP05, "BP05");\r
+        cmdMap.put(CMD_TYPE.AP07, "AP07");\r
+        cmdMap.put(CMD_TYPE.BP07, "BP07");\r
+        cmdMap.put(CMD_TYPE.AP10, "AP10");\r
+        cmdMap.put(CMD_TYPE.BP10, "BP10");\r
+        cmdMap.put(CMD_TYPE.AP49, "AP49");\r
+        cmdMap.put(CMD_TYPE.BP49, "BP49");\r
+        cmdMap.put(CMD_TYPE.APHT, "APHT");\r
+        cmdMap.put(CMD_TYPE.BPHT, "BPHT");\r
+        cmdMap.put(CMD_TYPE.APTM, "APTM");\r
+        cmdMap.put(CMD_TYPE.BPTM, "BPTM");\r
+        cmdMap.put(CMD_TYPE.AP12, "AP12");\r
+        cmdMap.put(CMD_TYPE.BP12, "BP12");\r
+        cmdMap.put(CMD_TYPE.AP14, "AP14");\r
+        cmdMap.put(CMD_TYPE.BP14, "BP14");\r
+        cmdMap.put(CMD_TYPE.AP15, "AP15");\r
+        cmdMap.put(CMD_TYPE.BP15, "BP15");\r
+        cmdMap.put(CMD_TYPE.AP16, "AP16");\r
+        cmdMap.put(CMD_TYPE.BP16, "BP16");\r
+        cmdMap.put(CMD_TYPE.AP17, "AP17");\r
+        cmdMap.put(CMD_TYPE.BP17, "BP17");\r
+        cmdMap.put(CMD_TYPE.AP18, "AP18");\r
+        cmdMap.put(CMD_TYPE.BP18, "BP18");\r
+        cmdMap.put(CMD_TYPE.AP21, "AP21");\r
+        cmdMap.put(CMD_TYPE.BP21, "BP21");\r
+        cmdMap.put(CMD_TYPE.AP28, "AP28");\r
+        cmdMap.put(CMD_TYPE.BP28, "BP28");\r
+        cmdMap.put(CMD_TYPE.AP31, "AP31");\r
+        cmdMap.put(CMD_TYPE.BP31, "BP31");\r
+        cmdMap.put(CMD_TYPE.AP33, "AP33");\r
+        cmdMap.put(CMD_TYPE.BP33, "BP33");\r
+        cmdMap.put(CMD_TYPE.AP34, "AP34");\r
+        cmdMap.put(CMD_TYPE.BP34, "BP34");\r
+        cmdMap.put(CMD_TYPE.APXL, "APXL");\r
+        cmdMap.put(CMD_TYPE.BPXL, "BPXL");\r
+        cmdMap.put(CMD_TYPE.APXY, "APXY");\r
+        cmdMap.put(CMD_TYPE.BPXY, "BPXY");\r
+        cmdMap.put(CMD_TYPE.APJZ, "APJZ");\r
+        cmdMap.put(CMD_TYPE.BPJZ, "BPJZ");\r
+        cmdMap.put(CMD_TYPE.AP84, "AP84");\r
+        cmdMap.put(CMD_TYPE.BP84, "BP84");\r
+        cmdMap.put(CMD_TYPE.AP85, "AP85");\r
+        cmdMap.put(CMD_TYPE.BP85, "BP85");\r
+        cmdMap.put(CMD_TYPE.AP86, "AP86");\r
+        cmdMap.put(CMD_TYPE.BP86, "BP86");\r
+        cmdMap.put(CMD_TYPE.AP89, "AP89");\r
+        cmdMap.put(CMD_TYPE.BP89, "BP89");\r
+    }\r
+\r
+    private NettyConnection mConnection=null;\r
+    private Runtime mRuntime=null;\r
+\r
+    public protocol_fzd(NettyConnection connect, Runtime runtime) {\r
+        mConnection=connect;\r
+        mRuntime=runtime;\r
+\r
+    }\r
+\r
+    private StringBuffer cmdbuf = new StringBuffer();\r
+\r
+    /*\r
+    输入的字符串,如果有完整命令,返回 true\r
+    否则返回 false\r
+     */\r
+    public boolean isCmdStr(String msg) {\r
+        /***\r
+         * IC*\r
+         */\r
+\r
+        int head_index = msg.indexOf(CMDHEADER);\r
+        if (head_index >= 0) {\r
+            int end_index = msg.indexOf("#", head_index);\r
+            if (end_index >= 0) {\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    private void log(String msg) {\r
+        ICLogger.log(TAG, msg);\r
+    }\r
+\r
+    private void log(String function, String msg) {\r
+        ICLogger.log(TAG, function, msg);\r
+    }\r
+\r
+\r
+    /**/\r
+    public static StringMessage genStringMessage(String cmdName, String msg){\r
+        StringMessage sm=new StringMessage(new String[]{cmdName,msg});\r
+        sm.refresh(msg);\r
+        return sm;\r
+    }\r
+\r
+    /*\r
+    返回true 表示 cmd 全部解析成功\r
+    返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用\r
+    字符串通过#号进行识别。\r
+    每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃\r
+     */\r
+    public boolean parserCmd(byte[] bytes) {\r
+        boolean iscmdComplete = false;\r
+        boolean ret = true;\r
+        String last_inCompletecmd = "";\r
+        String cmd_msgbuf=new String(bytes);\r
+        log("bytes.size "+bytes.length);\r
+//        cmdbuf.append(cmd_msgbuf);\r
+        cmdbuf.append(cmd_msgbuf);\r
+        log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString());\r
+    /*\r
+        如果不是 #结尾,就认为 接收数据不全,置位。\r
+         */\r
+        if (cmdbuf.toString().endsWith(CMDEND)) {\r
+            iscmdComplete = true;\r
+        }\r
+        String[] cmdlist = cmd_msgbuf.split(CMDEND);\r
+        int listlen = cmdlist.length;\r
+        log("listlen "+listlen);\r
+         /*\r
+        如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd\r
+         */\r
+        if (cmdlist.length > 0 && iscmdComplete == false) {\r
+            listlen -= 1;\r
+            last_inCompletecmd = cmdlist[listlen];\r
+            log("cmd not complete , " + last_inCompletecmd);\r
+        }\r
+        for (int i = 0; i < listlen; i++) {\r
+            for (CMD_TYPE key : cmdMap.keySet()) {\r
+                if (cmdlist[i].startsWith(CMDHEADER + cmdMap.get(key))) {\r
+                    log("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " ,  " + cmdlist[i]);\r
+                    if (key == CMD_TYPE.BP28) {\r
+                        //如果是BP28则 后面的数据是音频,需要保留\r
+                        byte[] amrBuf;\r
+                        int amrLen = getBP28Amrlen(cmdlist[i] );\r
+                        if (bytes.length > amrLen) {\r
+                            handleCmd(key, cmdlist[i], bytes);\r
+                        }\r
+                    } else {\r
+                        handleCmd(key, cmdlist[i]);\r
+                    }\r
+                }\r
+            }\r
+        }\r
+\r
+        cmdbuf = new StringBuffer().append(last_inCompletecmd);\r
+        return ret;\r
+    }\r
+    public int getBP28Amrlen(String cmd) {\r
+\r
+        String Name;\r
+        String appendIndex;\r
+        int packetCount;\r
+        int currentId;\r
+        int packetLen;\r
+\r
+\r
+        String[] msg=cmd.split(CMDSPLIT);\r
+        if (msg.length>=6){\r
+\r
+            Name=msg[1];\r
+            appendIndex=msg[2];\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
+\r
+            StringBuffer stringBuffer=new StringBuffer();\r
+            stringBuffer.append("getBP28AmrLen name = ").append(Name)\r
+                    .append(",appendIndex = ").append(appendIndex)\r
+                    .append(",packetCount = ").append(packetCount)\r
+                    .append(",currentId = ").append(currentId)\r
+                    .append(",packetLen = ").append(packetLen);\r
+\r
+\r
+            log( stringBuffer.toString());\r
+            return packetLen;\r
+        }else{\r
+            log("getBP28AmrLen","format Error");\r
+\r
+        }\r
+        return -1;\r
+    }\r
+    /*登录*/\r
+    public static String AP00(Runtime ds) {\r
+        //示例数据:IWAP00867155030001063#\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString();\r
+    }\r
+\r
+    //处理 登录 BP00\r
+    public void handleBP00(Runtime runtime,String cmd){\r
+        String[] msg=cmd.split(CMDSPLIT);\r
+//        get Msg :IWBP00,20191229171933,8# (size)24\r
+//        12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 ,  IWBP00,20191229171933,8\r
+\r
+        if (msg.length>=3) {\r
+            log("handleBP00", "Set Datetime " + msg[1]);\r
+            log("handleBP00", "Set TimeZone " + msg[2]);\r
+\r
+//            Date datetime= TimeUtil.parseDatetiime(msg[1]);\r
+//            int timezone=Integer.parseInt(msg[2]);\r
+//            if (datetime!=null){\r
+//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+//                TimeUtil.setTimeZone(timezone);\r
+//\r
+//\r
+//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+//                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
+//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+//\r
+//            }\r
+//            Set Datetime 20200505112734\r
+//            Set TimeZone 8\r
+\r
+        }else{\r
+            log("handleBP00","format Error");\r
+        }\r
+    }\r
+\r
+\r
+    public static String AP03(Runtime ds) {\r
+        //示例数据:IWAP03,06000908000102,5555,30#  IWAP03,000000null00000,0,0#\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d",abs(ds.getSignalStrength())))\r
+                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
+                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
+                .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString();\r
+    }\r
+    //处理 心跳 BP03\r
+    public void handleBP03(String cmd){\r
+\r
+        log("BP03心跳接收成功");\r
+    }\r
+\r
+\r
+    public static String AP10(Runtime ds){\r
+\r
+        /**\r
+         * IWAP10080524A2232.9806N11404.9355E000.1  061830  323.87  060 009 080 0 05 02,\r
+         * 460,0,9520,3671,\r
+         * 00,zh-cn,00,\r
+         * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05/06:跌倒报警))\r
+         * zh-cn:设备语言\r
+         * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.\r
+         * 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#\r
+         * IW标识符\r
+         * AP10:命令字\r
+         * 080524: 2008 年05 月24\r
+         * A:“A”表示数据有效,”V”无效,如为V则取LBS数据\r
+         * 2232.9806N11404.9355E000.1: 北纬22度32.9806分,东经114度04.9355分,速度为000.1 km/h,如经纬度无效,可默认全为0,如0000.0000N00000.0000E\r
+         * 061830: 格林尼治时间06 点18 分30 秒\r
+         * 323.87:方向角323.87°\r
+         * 06000908000102:060为GSM信号,009为参与定位的卫星数,080为电池电量,0,保留位,01为设防状态,02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置)\r
+         * 460,0,9520,3671 : LBS基站数据,MCC国家码,460为中国,0:MNC,0为移动,9520:LAC,十进制,3671,CID,十进制\r
+         * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低)\r
+         * zh-cn:设备语言\r
+         * 00:第一个0:是否需要回复地址信息,0:不回复,1回复.\r
+         */\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())\r
+                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
+                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
+                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
+                .append(ds.getLBSData()).append(CMDSPLIT)\r
+                .append(ds.getAlarmType()).append(CMDSPLIT)\r
+                .append(ds.getLanguage()).append(CMDSPLIT)\r
+                .append("00").append(CMDSPLIT)  //不回复地址\r
+                .append(ds.getWifiInfo()).append(CMDEND).toString();\r
+\r
+    }\r
+\r
+    /*LBS+GPS混合定位*/\r
+    public static String AP01(Runtime ds) {\r
+        //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,\r
+        // 460,0,9520,3671,\r
+        // 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#\r
+//        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate())\r
+                .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
+                .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
+                .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
+                .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();\r
+    }\r
+\r
+    //处理 定位 BP01\r
+    public void handleBP01(String cmd){\r
+        log("BP01定位接收成功");\r
+    }\r
+\r
+\r
+\r
+    /*LBS+WiFi混合定位*/\r
+    public static String AP02(Runtime ds) {\r
+        //示例数据:IWAP02,\r
+        // zh_cn,\r
+        // 0,\r
+        // 7,\r
+        // 460,0,\r
+        // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,\r
+        // 4,\r
+        // 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#\r
+//        IW标识符\r
+//        AP02:命令字\r
+//        zh_cn: 语言标志\r
+//        0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息\r
+//        7: 表示共有7组基站\r
+//        460: MCC 国家码\r
+//        0: MNC运营商代码\r
+//        9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应  10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)\r
+//        4: 表示WIFI组数,\r
+//                1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)\r
+\r
+        int apsum=0;\r
+        String wifiinfo=ds.getWifiInfo();\r
+        if (!wifiinfo.isEmpty()) {\r
+            String[] list = wifiinfo.split("&");\r
+            apsum = list.length;\r
+        }\r
+\r
+        ICLogger.i("Wifi ap sum "+apsum);\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)\r
+                .append(ds.getLanguage()).append(CMDSPLIT)\r
+                .append(0).append(CMDSPLIT) //为0时不回复地址\r
+                .append(ds.getLBSMultiStationData()).append(CMDSPLIT)  //基站信息数据\r
+                .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString();  //wifi信息数据\r
+    }\r
+\r
+    //处理 定位 BP01\r
+    public void handleBP02(String cmd){\r
+        log("BP02定位接收成功");\r
+    }\r
+\r
+\r
+\r
+    public static String APXL(String id){\r
+//设备响应:      IWAPXL,080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     * 测量心率\r
+     * @param cmd\r
+     * @param connection\r
+     */\r
+    public void handleBPXL(String cmd, Connection connection){\r
+        //IWBPXL,353456789012345,080835#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPXL : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPXL,080835#\r
+        //080835:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==3){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            ICLogger.i("Handle BPXL IMEI "+imei+",index "+index);\r
+            connection.send(genStringMessage("APXL",APXL(index)));\r
+        }else{\r
+            ICLogger.i("BPXL format error!");\r
+        }\r
+\r
+    }\r
+\r
+    public static String APXY(String id){\r
+//设备响应:      IWAPXY,080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     * 测量血压\r
+     * @param cmd\r
+     * @param connection\r
+     */\r
+    public void handleBPXY(String cmd,Connection connection){\r
+        //IWBPXY,353456789012345,080835#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPXL : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPXY,080835#\r
+        //080835:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==3){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            ICLogger.i("Handle BPXY IMEI "+imei+",index "+index);\r
+            connection.send(genStringMessage("APXY",APXY(index)));\r
+        }else{\r
+            ICLogger.i("BPXY format error!");\r
+        }\r
+\r
+    }\r
+\r
+\r
+\r
+    public static String APJZ(String id,String BPH,String BPL,String Age,String Sex){\r
+        //设备响应:      IWAPJZ,792997,120,85,42,1#\r
+        //792997:指令流水号\r
+        // 高压120,低压85,年龄42,1 男性\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))\r
+                .append(CMDSPLIT).append(id)\r
+                .append(CMDSPLIT).append(BPH)\r
+                .append(CMDSPLIT).append(BPL)\r
+                .append(CMDSPLIT).append(Age)\r
+                .append(CMDSPLIT).append(Sex)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    /**\r
+     *\r
+     * @param cmd\r
+     * @param connection\r
+     * @param runtime\r
+     */\r
+    public void handleBPJZ(String cmd,Connection connection,Runtime runtime){\r
+        //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1#   高压120,低压85,年龄45,男性\r
+//        cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0#  高压120,低压85,年龄42,女性\r
+        //IWBPJZ,353456789012345,080835,110,75#\r
+        //说明:\r
+        //IW:标识符\r
+        //BPJZ : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //110:高压值\r
+        //75:低压值\r
+        //080835 :指令流水号\r
+        //设备响应:      IWAPJZ,792997,120,85,42,1#\r
+        //792997:指令流水号\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==7){\r
+            String index=list[2];\r
+            String imei=list[1];\r
+            String strBPH=list[3];\r
+            String strBPL=list[4];\r
+            String strAge=list[5];\r
+            String strSex=list[6];\r
+\r
+            connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex)));\r
+            runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex));\r
+            ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女"));\r
+        }else{\r
+            ICLogger.i("BPXY format error!");\r
+        }\r
+    }\r
+\r
+\r
+\r
+    //重启\r
+\r
+\r
+    public static String AP18(String index){\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    public void handleBP18(Connection connection,String cmd) {\r
+\r
+        //    IWBP18,867155030001063,161723\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==3) {\r
+\r
+            connection.send(genStringMessage("AP18",AP18(cmdlist[2])));\r
+\r
+        }\r
+    }\r
+    //恢复出厂设置\r
+\r
+    public static String AP17(String index){\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+    public void handleBP17(Connection connection,String cmd) {\r
+\r
+        //    IWBP17,867155030001063,161723\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==3) {\r
+\r
+            connection.send(genStringMessage("AP17",AP17(cmdlist[2])));\r
+\r
+        }\r
+    }\r
+\r
+    //关机\r
+\r
+\r
+    public static String AP31(String index){\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+    public void handleBP31(Connection connection,String cmd) {\r
+\r
+        //    IWBP31,867155030001063,161723\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==3) {\r
+\r
+            connection.send(genStringMessage("AP31",AP31(cmdlist[2])));\r
+\r
+        }\r
+    }\r
+\r
+    //设置SOS号码\r
+    public static String AP12(String index,String phNum1,String phNum2,String phNum3){\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(phNum1)\r
+                .append(CMDSPLIT).append(phNum2)\r
+                .append(CMDSPLIT).append(phNum3)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    //设置SOS号码\r
+    public void handleBP12(Connection connection,String cmd,Runtime runtime){\r
+        //    IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length>=3){\r
+            String index=cmdlist[2];\r
+            String phNum1=cmdlist.length==3?"":cmdlist[3];\r
+            String phNum2=cmdlist.length>3?(cmdlist.length==4?"":cmdlist[4]):"";\r
+            String phNum3=(cmdlist.length>4)?(cmdlist.length==5? "":cmdlist[5]):"";\r
+            ICLogger.i(new StringBuffer().append("get Emegency Numbs "+phNum1+","+phNum2+","+phNum3).toString());\r
+            connection.send(genStringMessage("AP12",AP12(index,phNum1,phNum2,phNum3)));\r
+\r
+            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+            if (!phNum1.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",phNum1));\r
+            if (!phNum2.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",phNum2));\r
+            if (!phNum3.isEmpty())  contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos3",phNum3));\r
+\r
+            runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);\r
+\r
+        }else{\r
+            ICLogger.i(" BP12 format error!");\r
+        }\r
+    }\r
+\r
+\r
+    public static String  AP14(String index,String[] phnumbs){\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(phnumbs[0])\r
+                .append(CMDSPLIT).append(phnumbs[1])\r
+                .append(CMDSPLIT).append(phnumbs[2])\r
+                .append(CMDSPLIT).append(phnumbs[3])\r
+                .append(CMDSPLIT).append(phnumbs[4])\r
+                .append(CMDSPLIT).append(phnumbs[5])\r
+                .append(CMDSPLIT).append(phnumbs[6])\r
+                .append(CMDSPLIT).append(phnumbs[7])\r
+                .append(CMDSPLIT).append(phnumbs[8])\r
+                .append(CMDSPLIT).append(phnumbs[9])\r
+                .append(CMDEND).toString();\r
+    }\r
+    //设置通讯录,白名单(10个)\r
+    public void handleBP14(Connection connection,String cmd , Runtime runtime){\r
+//        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,\r
+/**\r
+ * IWBP14,353456789012345,080835,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx,\r
+ * D3590D54|135xxxxxxxxxx#\r
+ */\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        String[] phnums=new String[]{"","","","","","","","","",""};\r
+        StringBuffer sb=new StringBuffer().append("recv phone Numbs ");\r
+        if (cmdlist.length>=3){\r
+            switch (cmdlist.length){\r
+                case 13:\r
+                    phnums[9]=cmdlist[12];\r
+                    sb.append(phnums[9]).append(",");\r
+                case 12:\r
+                    phnums[8]=cmdlist[11];\r
+                    sb.append(phnums[8]).append(",");\r
+                case 11:\r
+                    phnums[7]=cmdlist[10];\r
+                    sb.append(phnums[7]).append(",");\r
+                case 10:\r
+                    phnums[6]=cmdlist[9];\r
+                    sb.append(phnums[6]).append(",");\r
+                case 9:\r
+                    phnums[5]=cmdlist[8];\r
+                    sb.append(phnums[5]).append(",");\r
+                case 8:\r
+                    phnums[4]=cmdlist[7];\r
+                    sb.append(phnums[4]).append(",");\r
+                case 7:\r
+                    phnums[3]=cmdlist[6];\r
+                    sb.append(phnums[3]).append(",");\r
+                case 6:\r
+                    phnums[2]=cmdlist[5];\r
+                    sb.append(phnums[2]).append(",");\r
+                case 5:\r
+                    phnums[1]=cmdlist[4];\r
+                    sb.append(phnums[1]).append(",");\r
+                case 4:\r
+                    phnums[0]=cmdlist[3];\r
+                    sb.append(phnums[0]).append(",");\r
+\r
+            }\r
+\r
+            String index=cmdlist[2];\r
+            ICLogger.i(sb.toString());\r
+            connection.send(genStringMessage("AP14",AP14(index,phnums)));\r
+            ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+            for (int i=0; i< phnums.length;i++){\r
+                String[] tmp= phnums[i].split("\\|");\r
+                if (tmp.length==2){\r
+                    String name= Util.decodeUnicode2Utf8(tmp[0]);\r
+                    String phonem=tmp[1];\r
+                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem);\r
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
+                }else{\r
+                    ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length);\r
+\r
+                }\r
+            }\r
+//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
+//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
+\r
+            runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
+\r
+        }else{\r
+            ICLogger.i(" BP14 format error!");\r
+        }\r
+\r
+    }\r
+\r
+\r
+\r
+    public static String AP85(Runtime ds,String cmddata){\r
+//示例数据:IWAP49,68##\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))\r
+                .append(CMDSPLIT).append(cmddata)\r
+                .append(CMDEND).toString();\r
+\r
+    }\r
+    //设置闹钟\r
+    public void handleBP85(String cmd , Connection connection,Runtime runtime){\r
+//        IWBP85,867155030001063,155312,1,1,0235,12,1,1\r
+//        IWBP85,867155030002145,945166,1,0,\r
+//        IWBP85,867155030001064,265960,1,1,1130,,1,1\r
+//        IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3#\r
+//353456789012345:IMEI号,设备唯一ID\r
+//080835 :指令流水号\r
+//1: 表示闹钟总开关,1为开,0 为关\r
+//3: 表示闹钟个数\r
+//0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制\r
+//1表示该组闹钟开启或关闭状态   1表示开启  0表示关闭\r
+//1表示吃药提醒\r
+//2 表示喝水提醒\r
+//3 表示久坐提醒\r
+//多组闹钟之间用”@”符号分隔\r
+\r
+        String imei="",cmdindex="0"/*指令流水号*/;\r
+        int     all_alarmswitch=0 /*总开关 1为开,0 为关*/,\r
+                alarmswitch=0 /*1为开,0 为关*/,\r
+                alarmcount=0 /*表示闹钟个数*/;\r
+        String alarmtime="";//0900表示早上09:00\r
+        int alarmtype=1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒\r
+        String repeat="";// 135表示周一周三周五,使用24小时制\r
+        String[] datalist= cmd.split("@");\r
+        ArrayList<Alarm> alarmlist=new ArrayList<>();\r
+        if (datalist.length >0){\r
+            for (int i =0 ; i< datalist.length;i++){\r
+                String [] cmdarglist=datalist[i].split(",");\r
+\r
+                if (i == 0){\r
+                    if (cmdarglist.length == 9){\r
+                        imei=cmdarglist[1];\r
+                        cmdindex=cmdarglist[2];\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
+                        alarmtime=cmdarglist[5];\r
+                        repeat=cmdarglist[6];\r
+                        alarmswitch=Integer.parseInt(cmdarglist[7]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[8]);\r
+                        log(new StringBuilder("imei ").append(imei)\r
+                                .append(", cmdindex ").append(cmdindex)\r
+                                .append(", allswitch=").append(all_alarmswitch)\r
+                                .append(", all alarm count=").append(alarmcount)\r
+                                .toString()\r
+                        );\r
+\r
+                        log(new StringBuilder("alarmtime ").append(alarmtime)\r
+                                .append(", relpeat ").append(repeat)\r
+                                .append(", switch=").append(alarmswitch)\r
+                                .append(", alarmtype=").append(alarmtype)\r
+                                .toString()\r
+                        );\r
+                        alarmlist.add(new Alarm("ST"+alarmtime.substring(0,2)+"."+alarmtime.substring(2),"W"+repeat,"CON",alarmswitch==1?"ON":"OFF","闹铃"));\r
+\r
+                    }else if (cmdarglist.length == 5) {\r
+                        imei=cmdarglist[1];\r
+                        cmdindex=cmdarglist[2];\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
+                    }else{\r
+                        log("data len is too small!");\r
+                    }\r
+                }else{\r
+                    if (cmdarglist.length == 4){\r
+                        alarmtime=cmdarglist[0];\r
+                        repeat=cmdarglist[1];\r
+                        alarmswitch=Integer.parseInt(cmdarglist[2]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[3]);\r
+\r
+                        log(new StringBuilder("set alarmtime ").append(alarmtime)\r
+                                .append(", relpeat ").append(repeat)\r
+                                .append(", switch=").append(alarmswitch)\r
+                                .append(", alarmtype=").append(alarmtype)\r
+                                .toString()\r
+                        );\r
+\r
+                        alarmlist.add(new Alarm("ST"+alarmtime.substring(0,2)+"."+alarmtime.substring(2),"W"+repeat,"CON",alarmswitch==1?"ON":"OFF","闹铃"));\r
+\r
+                    }else{\r
+                        log("data len is too small!");\r
+                    }\r
+\r
+                }\r
+            }//循环获取alarm数据结束\r
+            runtime.getDbHelper().saveAlarm(alarmlist);\r
+\r
+            //do clean and set alarm things\r
+\r
+        }\r
+//IWBP85,867155030002145,410385,1,0,#\r
+\r
+        String replacement=new StringBuilder("IWBP85,").append(imei).append(",").toString();\r
+        String replycmd = cmd.replace(replacement,"");\r
+        ICLogger.i("gen reply "+replacement+" "+replycmd);\r
+        connection.send(genStringMessage("AP85",AP85(runtime,replycmd)));\r
+    }\r
+\r
+\r
+// AP05命令L02服务器不适用\r
+//    public static String AP05(boolean recvFlag){\r
+//\r
+////        IWAP05,1#\r
+//        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP05))\r
+//                .append(CMDSPLIT).append(recvFlag?1:0)\r
+//                .append(CMDEND).toString();\r
+//\r
+//    }\r
+//\r
+//\r
+//    public void handleBP05(String cmd){\r
+////        IWBP05,6#\r
+//        String[] cmdlist=cmd.split(CMDSPLIT);\r
+//        if (cmdlist.length>1){\r
+//            ICLogger.i(" 服务器有 " +cmdlist[1]+" 条语音未接收!");\r
+//        }\r
+//    }\r
+\r
+\r
+\r
+\r
+    public static byte[] AP07(String  packetTime,int count,int index,int datalen,byte[] amrdata){\r
+//IWAP07,20140818064408,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#\r
+//说明:\r
+//IW:标识符\r
+//AP07 : 命令字符\r
+//20140818064408 :yyyyMMddHHmmss 格式的年月日时分秒,设备录音时间\r
+//6:语音包分包总数\r
+//1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同\r
+//1024 :语音包长度\r
+//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数\r
+//语音包上传规则:\r
+//按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。\r
+//收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。\r
+//如果设备回复确认数据包接收失败状态,则重复发送上一个数据包\r
+\r
+\r
+        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))\r
+                .append(CMDSPLIT).append(packetTime)\r
+                .append(CMDSPLIT).append(count)\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(datalen)\r
+                .append(CMDSPLIT).toString();\r
+\r
+        byte[] sentbuf=new byte[sb.length()+datalen+1];\r
+        System.arraycopy(sb.getBytes(),0,sentbuf,0,sb.length());\r
+        System.arraycopy(amrdata,0,sentbuf,sb.length(),datalen);\r
+        sentbuf[sb.length()+datalen]='#';\r
+\r
+        return sentbuf;\r
+\r
+    }\r
+\r
+\r
+    public void handleBP07(String cmd , NettyConnection connection ){\r
+//平台响应:      IWBP07,20140818064408,6,1,1#\r
+//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒\r
+//6:语音包分包总数\r
+//1:当前设备收到的是第几个包\r
+//1:表示服务器接受数据成功,0表示服务器接受数据失败\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==5){\r
+            String time=cmdlist[1];\r
+            int packetCount=Integer.parseInt(cmdlist[2]);\r
+            int packetIndex=Integer.parseInt(cmdlist[3]);\r
+            int receiveSuccess=Integer.parseInt(cmdlist[4]);\r
+            ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗"));\r
+            if (receiveSuccess == 1){\r
+                //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送\r
+                voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);\r
+            }\r
+            //发送消息,再次检查要发送的语音包,确认其发送完毕\r
+            connection.DeliverCMDMessageToSystem("BP07","SentVoicePacket");\r
+\r
+        }else{\r
+            ICLogger.i(" BP07 Format error!");\r
+        }\r
+    }\r
+\r
+\r
+\r
+    public static String AP33(String cmdindex,int workMode){\r
+//IWAP33,080835,1#\r
+//080835:指令流水号\r
+//1:设置信息,供服务器同步\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33))\r
+                .append(CMDSPLIT).append(cmdindex)\r
+                .append(CMDSPLIT).append(workMode)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    //设置工作模式\r
+    public void handleBP33(Connection connection,Runtime runtime,String cmd){\r
+\r
+//    IWBP33,867155030001063,560555,1\r
+//        IW:标识符\r
+//        BP33 : 命令字符\r
+//        353456789012345:IMEI号,设备唯一ID\r
+//        080835:指令流水号\r
+//        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式\r
+\r
+        String[] cmdlist=cmd.split(",");\r
+        if (cmdlist.length == 4){\r
+\r
+\r
+            log("work mode "+cmdlist[3]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
+            int Cycle=900;\r
+            switch(mod){\r
+                case ICLocation.NORMAL_MOD:\r
+                    Cycle=900;\r
+                    break;\r
+                case ICLocation.LOWPOWER_MOD:\r
+                    Cycle=3600;\r
+                    break;\r
+                case ICLocation.EMERGNECY_MOD:\r
+                case ICLocation.REALTIME_MOD:\r
+                    Cycle=60;\r
+                    break;\r
+\r
+            }\r
+\r
+            String msg=AP33(cmdlist[2],mod);\r
+            //设定当前工作模式及循环频率\r
+            connection.send(genStringMessage("AP33",msg));\r
+            log("reply msg "+msg);\r
+            log("LOCATION_MODE  "+LOCATION_MODE+" mod "+ mod);\r
+            Config.setLocationMode(runtime.getContextProxy().context,mod);\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Cycle);\r
+            runtime.getLocationInstance().setLocation_cycle(Cycle);\r
+            runtime.getLocationInstance().setWorkingMod(mod);\r
+//            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
+            //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。\r
+        }\r
+\r
+    }\r
+\r
+\r
+    public static String AP34(String cmdindex,int workMode){\r
+//IWAP34,588854,1#\r
+//080835:指令流水号\r
+//8:模式\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))\r
+                .append(CMDSPLIT).append(cmdindex)\r
+                .append(CMDSPLIT).append(workMode)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    //设置自定义工作模式\r
+    public void handleBP34(Connection connection,Runtime runtime,String cmd){\r
+\r
+//    IWBP34,867155030001063,588854,8,900,1#\r
+//        IW:标识符\r
+//        BP33 : 命令字符\r
+//        353456789012345:IMEI号,设备唯一ID\r
+//        080835:指令流水号\r
+//        1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式\r
+\r
+        String[] cmdlist=cmd.split(",");\r
+        if (cmdlist.length == 6){\r
+\r
+\r
+            log("work mode "+cmdlist[3]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
+            int Cycle=Integer.parseInt(cmdlist[4]);\r
+            int gpson=Integer.parseInt(cmdlist[5]);\r
+\r
+            String msg=AP34(cmdlist[2],mod);\r
+            //设定当前工作模式及循环频率\r
+            connection.send(genStringMessage("AP34",msg));\r
+\r
+            if(gpson==1){\r
+                mod=ICLocation.CUSTOM_MOD8_GPS;\r
+            }else{\r
+                mod=ICLocation.CUSTOM_MOD8_WIFI;\r
+            }\r
+            log("reply msg "+msg);\r
+            log("LOCATION_MODE  "+LOCATION_MODE+" mod "+ mod + ", cycle = "+Cycle+", GPS On= "+gpson);\r
+            Config.setLocationMode(runtime.getContextProxy().context,mod);\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Cycle);\r
+            runtime.getLocationInstance().setLocation_cycle(Cycle);\r
+            runtime.getLocationInstance().setWorkingMod(mod);\r
+//            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
+            //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。\r
+        }\r
+\r
+    }\r
+\r
+    /**\r
+     * 心率上传,返回协议字串\r
+     * @param ds\r
+     * @return\r
+     */\r
+    public static String AP49(Runtime ds){\r
+        //示例数据:IWAP49,68##\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))\r
+                .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
+                .append(CMDEND).toString();\r
+\r
+    }\r
+\r
+\r
+\r
+\r
+    /**\r
+     * 返回上传心率血压的协议字串\r
+     * @param ds\r
+     * @return\r
+     */\r
+    public static String APHT(Runtime ds){\r
+        //IWAPHT,60,130,85#\r
+        //说明:\r
+        //IW:标识符\r
+        //APHT : 命令字符\r
+        //60 : 表示心率\r
+        //130: 血压高压 [收缩压]\r
+        //85 : 血压低压 [舒张压]\r
+        //平台响应:      IWBPHT#\r
+        //表示平台已接收,可不作响应\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
+                .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
+                .append(CMDSPLIT).append(ds.getHRS().getBPH())\r
+                .append(CMDSPLIT).append(ds.getHRS().getBPL())\r
+                .append(CMDEND).toString();\r
+    }\r
+    public static String APHT(int  ppg,int bph,int bpl){\r
+        //IWAPHT,60,130,85#\r
+        //说明:\r
+        //IW:标识符\r
+        //APHT : 命令字符\r
+        //60 : 表示心率\r
+        //130: 血压高压 [收缩压]\r
+        //85 : 血压低压 [舒张压]\r
+        //平台响应:      IWBPHT#\r
+        //表示平台已接收,可不作响应\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))\r
+                .append(CMDSPLIT).append(ppg)\r
+                .append(CMDSPLIT).append(bph)\r
+                .append(CMDSPLIT).append(bpl)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+\r
+    //立即定位反馈\r
+    public static String AP16(String  cmdindex){\r
+//IWAP16,080835#\r
+//080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16))\r
+                .append(CMDSPLIT).append(cmdindex)\r
+                .append(CMDEND).toString();\r
+    }\r
+    //    立即定位指令(长链接有效)\r
+    public void handleBP16(Connection connection,Runtime runtime,String cmd){\r
+        //示例数据:IWBP16,867155030001063,335386\r
+//        IWBP16,353456789012345,080835#\r
+//        说明:\r
+//        IW:标识符\r
+//        BP16 : 命令字符\r
+//        353456789012345:IMEI号,设备唯一ID\r
+//        080835 :指令流水号\r
+        String[] cmdlist = cmd.split(",");\r
+        if(cmdlist.length==3){\r
+            log("imei "+cmdlist[1]+", cmdindex "+cmdlist[2]);\r
+\r
+            connection.send(genStringMessage("AP16",AP16(cmdlist[2])));\r
+        }else{\r
+            log("error BP16 format");\r
+        }\r
+    }\r
+\r
+\r
+    /*通过基站获取时间和坐标*/\r
+    public static String APTM(Runtime ds){\r
+        //示例数据:IWAPTM,460,0,9750,3613#\r
+        //说明:\r
+        //IW:标识符\r
+        //APTM : 命令字符\r
+        //460:MCC\r
+        //0: MNC\r
+        //9750: LAC\r
+        //3613: CID\r
+\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))\r
+                .append(CMDSPLIT).append(ds.getLocationInstance().getMCC())\r
+                .append(CMDSPLIT).append(ds.getLocationInstance().getMNC())\r
+                .append(CMDSPLIT).append(ds.getLocationInstance().getLAC())\r
+                .append(CMDSPLIT).append(ds.getLocationInstance().getGSMStationCID())\r
+                .append(CMDEND).toString();\r
+\r
+    }\r
+\r
+    public void handleBPTM(String cmd){\r
+        //平台响应:      IWBPTM,20160225090909,22.123456,113.654321#\r
+        //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间\r
+        //经纬度保留六位小数,若没取到则返回 0\r
+        String[] list=cmd.split(CMDSPLIT);\r
+\r
+        if(list.length==4){\r
+\r
+            String time=list[1];\r
+            String lat=list[2];\r
+            String lon=list[3];\r
+            ICLogger.i("BPTM , time="+time+", lat="+lat+", lon="+lon);\r
+        }else{\r
+            ICLogger.i("BPTM format error");\r
+        }\r
+\r
+\r
+    }\r
+\r
+    public static String AP15(String index){\r
+//IWAP15, 080835#\r
+//080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    //设置定位周期\r
+    public void handleBP15(String cmd ,Connection connection,Runtime runtime){\r
+//        IWBP15, 353456789012345, 080835, 30#\r
+//        353456789012345:IMEI号,设备唯一ID\r
+//        080835 :指令流水号\r
+//        30: 表示频率为30分钟\r
+\r
+        String[] list=cmd.split(CMDSPLIT);\r
+\r
+        if(list.length==4){\r
+            String index=list[2];\r
+            String time=list[3];\r
+            connection.send(genStringMessage("AP15",AP15(index)));\r
+            ICLogger.i("BP15 , 定位周期="+time+"秒");\r
+\r
+            Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time));\r
+            runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
+            runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
+            //set AlarmCycle  and trigger Location\r
+            CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
+        }else{\r
+            ICLogger.i("BP15 format error");\r
+        }\r
+\r
+    }\r
+\r
+\r
+\r
+\r
+\r
+\r
+    /*语音下行反馈*/\r
+    public static String AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {\r
+        //示例数据:IWAP28,D3590D54,xxxx,6,1,1#\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))\r
+                .append(CMDSPLIT).append(name)\r
+                .append(CMDSPLIT).append(msg)\r
+                .append(CMDSPLIT).append(packagecount)\r
+                .append(CMDSPLIT).append(currentpackageindex)\r
+                .append(CMDSPLIT).append(received_success)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    //处理 BP28 语音消息\r
+    public void handleBP28(NettyConnection connection,String cmd,Runtime runtime,byte[] bytes) {\r
+        //log("handleBP28 msg"+cmd);\r
+/**\r
+ * IWBP28, D3590D54,XXXX,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#\r
+ * 说明:\r
+ * IW:标识符\r
+ * BP28 : 命令字符\r
+ * D3590D54:UNICODE编码,发送者名称\r
+ * XXXX: 附加信息,在响应数据包时,将附加信息原样响应,类似流水号\r
+ * 6:语音包分包总数\r
+ * 1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同\r
+ * 1024 :语音包长度\r
+ * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数\r
+ * 语音包上传规则:\r
+ * 按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。\r
+ * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。\r
+ * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包\r
+ * 设备响应:     IWAP28,D3590D54,XXXX,6,1,1#\r
+ * D3590D54:UNICODE编码,发送者名称\r
+ * XXXX: 附加信息,原样返回\r
+ * 6:语音包分包总数\r
+ * 1:当前设备收到的是第几个包\r
+ * 1:表示设备接受数据成功,0表示设备接受数据失败\r
+ */\r
+        String Name;\r
+        String appendIndex;\r
+        int packetCount;\r
+        int currentId;\r
+        int packetLen;\r
+        byte[] packetData;\r
+\r
+        String[] msg= cmd.split(CMDSPLIT);\r
+        if (msg.length>=6){\r
+\r
+            Name=msg[1];\r
+            appendIndex=msg[2];\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
+            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);\r
+\r
+            StringBuffer stringBuffer=new StringBuffer();\r
+            stringBuffer.append("recv BP28 name = ").append(Name)\r
+                    .append(",appendIndex = ").append(appendIndex)\r
+                    .append(",packetCount = ").append(packetCount)\r
+                    .append(",currentId = ").append(currentId)\r
+                    .append(",packetLen = ").append(packetLen)\r
+                    .append(",packetDatalen = ").append(packetData.length);\r
+\r
+            log( stringBuffer.toString());\r
+            connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,1)));\r
+            voicePacket.getInstance().appendVoice(Name,appendIndex,packetCount,currentId,packetLen,packetData);\r
+            log("================"+voicePacket.getInstance().toString());\r
+            if (voicePacket.getInstance().isFinished())\r
+            {\r
+\r
+                String dir = Environment.getExternalStorageDirectory()+ "/Android/VoiceCache";\r
+                String amrFilepath=Util.saveFile(voicePacket.getInstance().getVoicePacketBytes(),0,voicePacket.getInstance().getVoicePacketLen(),new File(dir),"receive_"+voicePacket.getInstance().getPacketTime()+".amr");\r
+                ICLogger.i("save Amr file to "+amrFilepath);\r
+                voicePacket.getInstance().clearPacket();\r
+                VoiceContent voiceContent=VoiceContent.placeHolderIn(Content.CONTACT_CATEGORY_GROUP,GROUP_ALL,amrFilepath);\r
+\r
+\r
+                final Uri uri2 = runtime.getDbHelper().insertMessage( voiceContent);\r
+\r
+                //回复UI消息,表示已经接收到\r
+                voiceContent.status = 3;\r
+                voiceContent.serverTime = TimeUtil.getSystemTime3();\r
+                voiceContent.preview = String.valueOf(Util.getDuration(voiceContent.content));\r
+                runtime.getDbHelper().updateMessage(voiceContent, uri2);\r
+\r
+//                runtime.getContextProxy().sendBroadcast(ACTION_IMESSAGE, runtime);\r
+\r
+                connection.DeliverCMDMessageToSystem("NewVoice", amrFilepath);//通知下面线程状态变化\r
+            }\r
+\r
+        }else{\r
+            log("handleBP28","format Error");\r
+//            connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,0)));\r
+\r
+        }\r
+\r
+    }\r
+\r
+    public void sendBroadcast(String cmd, Runtime dev) {\r
+\r
+        ComponentName componentName = new ComponentName("com.eqc.watch", "com.eqc.watch.launcher.ChatActivity");\r
+        Intent intent = new Intent("android.intent.action.MAIN");\r
+//              intent.putExtra("ACTIVITY_TYPE", 2);\r
+//              intent.addCategory("android.intent.category.DEFAULT");\r
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
+        intent.setComponent(componentName);\r
+        dev.getContextProxy().context.startActivity(intent);\r
+    }\r
+\r
+    //白名单开关(下行协议号:BP84,响应:AP84)\r
+    public static String AP84(String index,int success){\r
+\r
+        //设备响应:      IWAP80,080835,1#\r
+        //080835:指令流水号\r
+        //1:表示设备执行成功,0 表示设备执行失败\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(success)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    public void handleBP84(String cmd,Connection connection){\r
+//示例:\r
+        //IWBP84,353456789012345,080835,1#\r
+        //说明:\r
+        //IW:标识符\r
+        //BP84 : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //1: 表示白名单开,0 表示白名单关\r
+        String[] list=cmd.split(CMDSPLIT);\r
+\r
+        if (list.length==4){\r
+            String index=list[2];\r
+            String whitelist_switch=list[3];\r
+            connection.send(genStringMessage("AP84",AP84(index,1)));\r
+\r
+            if (whitelist_switch.equals("1")){\r
+                Util.setSystemProperties("persist.sys.whitelist.enable","true");\r
+            }else{\r
+                Util.setSystemProperties("persist.sys.whitelist.enable","false");\r
+            }\r
+            ICLogger.i("收到服务器指令:白名单"+(whitelist_switch.equals("1")?"开":"关"));\r
+\r
+        }else{\r
+\r
+            ICLogger.i("BP84 format error!");\r
+        }\r
+\r
+    }\r
+\r
+    //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)\r
+    public static String AP86(String index){\r
+\r
+        //设备响应:      IWAP86, 080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    public void handleBP86(String cmd,Connection connection,Runtime runtime){\r
+\r
+        //示例:\r
+        //IWBP86, 353456789012345, 080835,1,720#\r
+        //说明:\r
+        //IW:标识符\r
+        //BP86 : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //1: 表示心率周期;2 :表示血压周期\r
+        //720: 表示720分钟\r
+\r
+        String[] list=cmd.split(CMDSPLIT);\r
+\r
+        if (list.length==5){\r
+            String index=list[2];\r
+            String type=list[3];\r
+            String cycle=list[4];\r
+            connection.send(genStringMessage("AP86",AP86(index)));\r
+            ICLogger.i("收到服务器指令:设置"+(type.equals("1")?"心率周期 ":"血压周期 ")+cycle+"分钟");\r
+\r
+            //发送重置PPGCycle的广播,会在CoreServer里面执行\r
+            Intent intent = new Intent();\r
+            intent.putExtra("PPGTestCycle",Integer.parseInt(cycle));\r
+            runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent);\r
+        }else{\r
+            ICLogger.i("BP86 format error!");\r
+        }\r
+\r
+    }\r
+\r
+    //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)\r
+    public static String AP89(String index){\r
+\r
+        //设备响应:      IWAP89, 080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    public void handleBP89(String cmd,Connection connection){\r
+\r
+        //示例:\r
+        //IWBP89, 353456789012345, 080835,50,90,80,90,110,140#\r
+        //说明:\r
+        //IW:标识符\r
+        //BP89 : 命令字符\r
+        //353456789012345:IMEI号,设备唯一ID\r
+        //080835 :指令流水号\r
+        //50: 心率低阀值,低于该阀值上传心率,如果未设置,则留空\r
+        //90: 心率高阀值,高于该阀值上传心率,如果未设置,则留空\r
+        //80: 低压阀值,低压低于该阀值上传血压,如果未设置,则留空\r
+        //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空\r
+        //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空\r
+        //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==9){\r
+            String index=list[2];\r
+            String PPGH=list[3];\r
+            String PPGL=list[4];\r
+            String BPH_H=list[5];\r
+            String BPH_L=list[6];\r
+            String BPL_H=list[7];\r
+            String BPL_L=list[8];\r
+            connection.send(genStringMessage("AP89",AP89(index)));\r
+            ICLogger.i("收到服务器指令:心率/血压阀值 "+PPGH+","+PPGL+","+BPH_H+","+BPH_L+","+BPL_H+","+BPL_L);\r
+        }else{\r
+            ICLogger.i("BP89 format error!");\r
+        }\r
+\r
+    }\r
+    public boolean handleCmd(CMD_TYPE type, String cmd) {\r
+\r
+        //普通非二进制命令用此函数处理\r
+        boolean ret=true;\r
+        ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length());\r
+        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);\r
+        switch (type){\r
+            case BP00: //登录包\r
+                handleBP00(mRuntime,cmd);\r
+                ICLogger.i("服务器收到登录包AP00");\r
+                mConnection.DeliverCMDMessageToSystem("BP00",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP01: //gps定位包\r
+                handleBP01(cmd);\r
+                ICLogger.i("服务器收到定位AP01");\r
+                mConnection.DeliverCMDMessageToSystem("IWAP01",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP02:// wifi定位包\r
+                handleBP02(cmd);\r
+                ICLogger.i("服务器收到定位AP02");\r
+                mConnection.DeliverCMDMessageToSystem("IWAP02",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP03: //心跳包\r
+                handleBP03(cmd);\r
+                ICLogger.i("服务器收到心跳包AP03");\r
+                mConnection.DeliverCMDMessageToSystem("BP03",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+            case BP07:\r
+                //收到发送的语音包\r
+                handleBP07(cmd,mConnection);\r
+                break;\r
+            case BP10:\r
+                //报警包\r
+                mConnection.DeliverCMDMessageToSystem("IWAP10",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+            case BPTM:\r
+                //校时命令\r
+                handleBPTM(cmd);\r
+                ICLogger.i("服务器收到校时命令APTM");\r
+                mConnection.DeliverCMDMessageToSystem("APTM",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP85://设置闹钟\r
+                handleBP85(cmd,mConnection,mRuntime);\r
+                ICLogger.i("收到服务器设置闹钟命令BP85");\r
+                mConnection.DeliverCMDMessageToSystem("AP85",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP33:\r
+                //设置工作模式\r
+                handleBP33(mConnection,mRuntime,cmd);\r
+                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化\r
+\r
+                break;\r
+            case BP34:\r
+                //设置工作模式\r
+                handleBP34(mConnection,mRuntime,cmd);\r
+                mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化\r
+                break;\r
+            case BP16:\r
+                //立即定位指令(长链接有效)\r
+                handleBP16(mConnection,mRuntime,cmd);\r
+                mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+//                            case BP05: //L02服务器不适用\r
+//                                //查询服务器语音 返回信息\r
+//                                API.handleBP05(cmd);\r
+//                                break;\r
+\r
+            case BP12:\r
+                //收到设置SOS号码\r
+                handleBP12(mConnection,cmd,mRuntime);\r
+                ICLogger.i("收到服务器设置SOS号码命令BP12");\r
+                break;\r
+            case BP14:\r
+                //收到设置白名单号码\r
+                handleBP14(mConnection,cmd,mRuntime);\r
+                ICLogger.i("收到服务器设置白名单号码命令BP14");\r
+                break;\r
+            case BP15:\r
+                handleBP15(cmd,mConnection,mRuntime);\r
+                ICLogger.i("收到服务器设置定位命令BP15");\r
+                break;\r
+            case BP17:\r
+                //收到恢复出厂设置\r
+                handleBP17(mConnection,cmd);\r
+                ICLogger.i("收到服务器恢复出厂设置命令BP17");\r
+                mConnection.DeliverCMDMessageToSystem("FactoryReset",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+            case BP18:\r
+                //收到重启\r
+                handleBP18(mConnection,cmd);\r
+                ICLogger.i("收到服务器重启命令BP18");\r
+                mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+            case BP31:\r
+                //收到关机\r
+                handleBP31(mConnection,cmd);\r
+                ICLogger.i("收到服务器关机命令BP31");\r
+                mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
+            case BPXL:\r
+                handleBPXL(cmd,mConnection);\r
+                ICLogger.i("收到服务器心率检测命令");\r
+                HeartRateManager.triggerPPGtest();\r
+                break;\r
+            case BPXY:\r
+                handleBPXY(cmd,mConnection);\r
+                ICLogger.i("收到服务器血压检测命令");\r
+                HeartRateManager.triggerPPGtest();\r
+                break;\r
+            case BPJZ:\r
+                handleBPJZ(cmd,mConnection,mRuntime);\r
+                ICLogger.i("收到服务器血压校准命令");\r
+                break;\r
+            case BPHT:\r
+                ICLogger.i("服务器收到上传的心率血压");\r
+                break;\r
+            case BP84:\r
+                handleBP84(cmd,mConnection);\r
+                ICLogger.i("收到服务器白名单命令");\r
+                break;\r
+\r
+            case BP86:\r
+                //心率血压周期设置\r
+                handleBP86(cmd,mConnection,mRuntime);\r
+//                                ICLogger.i("");\r
+                break;\r
+            case BP89:\r
+                //心率/血压阀值\r
+                handleBP89(cmd,mConnection);\r
+                break;\r
+        }\r
+\r
+        return ret;\r
+\r
+    }\r
+\r
+\r
+    public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {\r
+\r
+        //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要\r
+\r
+        boolean ret=true;\r
+        ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );\r
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes));\r
+        switch (type) {\r
+            case BP28:\r
+                handleBP28(mConnection,cmd, mRuntime,bytes);\r
+                ICLogger.i("收到服务器语音BP28");\r
+                mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
+                break;\r
+        }\r
+        return ret;\r
+    }\r
+\r
+}\r
index 423349d..041ca16 100644 (file)
@@ -38,6 +38,8 @@ public class protocol_ic {
     private static final String CMDHEADER = "IW";\r
     private static final String CMDEND = "#";\r
     private static final String CMDSPLIT = ",";\r
+    public static final String defaultServerIP="watch.jiai.pro";\r
+    public static final int defaultServerPort=8090;\r
     public enum CMD_TYPE {\r
         /*终端发起*/\r
         AP00,//登录包\r
@@ -321,9 +323,9 @@ public class protocol_ic {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
             stringBuffer.append("getBP28AmrLen name = ").append(Name)\r
@@ -605,7 +607,7 @@ public class protocol_ic {
             String strSex=list[6];\r
 \r
             connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex)));\r
-            runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex));\r
+            runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex));\r
             ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女"));\r
         }else{\r
             ICLogger.i("BPXY format error!");\r
@@ -846,12 +848,12 @@ public class protocol_ic {
                     if (cmdarglist.length == 9){\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                         alarmtime=cmdarglist[5];\r
                         repeat=cmdarglist[6];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[7]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[8]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[7]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[8]);\r
                         log(new StringBuilder("imei ").append(imei)\r
                                 .append(", cmdindex ").append(cmdindex)\r
                                 .append(", allswitch=").append(all_alarmswitch)\r
@@ -870,8 +872,8 @@ public class protocol_ic {
                     }else if (cmdarglist.length == 5) {\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                     }else{\r
                         log("data len is too small!");\r
                     }\r
@@ -879,8 +881,8 @@ public class protocol_ic {
                     if (cmdarglist.length == 4){\r
                         alarmtime=cmdarglist[0];\r
                         repeat=cmdarglist[1];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[2]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[3]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[2]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[3]);\r
 \r
                         log(new StringBuilder("set alarmtime ").append(alarmtime)\r
                                 .append(", relpeat ").append(repeat)\r
@@ -975,9 +977,9 @@ public class protocol_ic {
         String[] cmdlist=cmd.split(CMDSPLIT);\r
         if (cmdlist.length==5){\r
             String time=cmdlist[1];\r
-            int packetCount=Integer.valueOf(cmdlist[2]);\r
-            int packetIndex=Integer.valueOf(cmdlist[3]);\r
-            int receiveSuccess=Integer.valueOf(cmdlist[4]);\r
+            int packetCount=Integer.parseInt(cmdlist[2]);\r
+            int packetIndex=Integer.parseInt(cmdlist[3]);\r
+            int receiveSuccess=Integer.parseInt(cmdlist[4]);\r
             ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗"));\r
             if (receiveSuccess == 1){\r
                 //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送\r
@@ -1018,7 +1020,7 @@ public class protocol_ic {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
             int Cycle=900;\r
             switch(mod){\r
                 case ICLocation.NORMAL_MOD:\r
@@ -1075,9 +1077,9 @@ public class protocol_ic {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
-            int Cycle=Integer.valueOf(cmdlist[4]);\r
-            int gpson=Integer.valueOf(cmdlist[5]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
+            int Cycle=Integer.parseInt(cmdlist[4]);\r
+            int gpson=Integer.parseInt(cmdlist[5]);\r
 \r
             String msg=AP34(cmdlist[2],mod);\r
             //设定当前工作模式及循环频率\r
@@ -1282,7 +1284,7 @@ public class protocol_ic {
             ICLogger.i("BP15 , 定位周期="+time+"秒");\r
 \r
             Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);\r
-            Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time)*60);\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time)*60);\r
             runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
             runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
             //set AlarmCycle  and trigger Location\r
@@ -1347,9 +1349,9 @@ public class protocol_ic {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
             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);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
@@ -1515,7 +1517,7 @@ public class protocol_ic {
 \r
             //发送重置PPGCycle的广播,会在CoreServer里面执行\r
             Intent intent = new Intent();\r
-            intent.putExtra("PPGTestCycle",Integer.valueOf(cycle));\r
+            intent.putExtra("PPGTestCycle",Integer.parseInt(cycle));\r
             runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent);\r
         }else{\r
             ICLogger.i("BP86 format error!");\r
@@ -1612,7 +1614,7 @@ public class protocol_ic {
         if (list.length==4){\r
             String index=list[2];\r
             String freqstr=list[3];\r
-            int freq=Integer.valueOf(freqstr);\r
+            int freq=Integer.parseInt(freqstr);\r
             connection.send(genStringMessage("APTE",APTE(index,freq)));\r
             ICLogger.i("收到服务器指令:测量体温 "+freq+"分钟一次。");\r
             Config.setTemperatureTestCycle(runtime,freq);\r
@@ -1688,10 +1690,10 @@ public class protocol_ic {
             connection.send(genStringMessage("APJZ",APX1(index)));\r
 \r
             int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust;\r
-            ppg_adjust=Integer.valueOf(strXL);\r
-            bph_adjust=Integer.valueOf(strBPH);\r
-            bpl_adjust=Integer.valueOf(strBPL);\r
-            spo2_adjust=Integer.valueOf(strSpO2);\r
+            ppg_adjust=Integer.parseInt(strXL);\r
+            bph_adjust=Integer.parseInt(strBPH);\r
+            bpl_adjust=Integer.parseInt(strBPL);\r
+            spo2_adjust=Integer.parseInt(strSpO2);\r
 \r
             runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust);\r
             Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust);\r
@@ -1992,18 +1994,17 @@ public class protocol_ic {
             String count=cmdlist[5];\r
             String index=cmdlist[6];\r
             String success=cmdlist[7];\r
-            int ftype=Integer.valueOf(filetype);\r
-            int dtype=Integer.valueOf(datatype);\r
-            int packetCount=Integer.valueOf(count);\r
-            int packetIndex=Integer.valueOf(index);\r
-            int receiveSuccess=Integer.valueOf(success);\r
+            int ftype=Integer.parseInt(filetype);\r
+            int dtype=Integer.parseInt(datatype);\r
+            int packetCount=Integer.parseInt(count);\r
+            int packetIndex=Integer.parseInt(index);\r
+            int receiveSuccess=Integer.parseInt(success);\r
             ICLogger.i("服务器在收到 index "+time+", 文件类型 "+ftype+",内容类型 "+dtype+" "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗"));\r
             if (receiveSuccess == 1){\r
                 //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送\r
                 voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);\r
             }\r
             //发送消息,再次检查要发送的语音包,确认其发送完毕\r
-\r
             connection.DeliverCMDMessageToSystem("BPTU","SentBPFilePacket");\r
 \r
         }else{\r
index 373a580..bd72d1f 100644 (file)
@@ -38,6 +38,9 @@ public class protocol_jiai {
     private static final String CMDHEADER = "IW";\r
     private static final String CMDEND = "#";\r
     private static final String CMDSPLIT = ",";\r
+    public static final String defaultServerIP="watch.jiai.pro";\r
+    public static final int defaultServerPort=8090;\r
+\r
     public enum CMD_TYPE {\r
         /*终端发起*/\r
         AP00,//登录包\r
@@ -275,9 +278,9 @@ public class protocol_jiai {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
             stringBuffer.append("getBP28AmrLen name = ").append(Name)\r
@@ -556,7 +559,7 @@ public class protocol_jiai {
             String strSex=list[6];\r
 \r
             connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex)));\r
-            runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex));\r
+            runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex));\r
             ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女"));\r
         }else{\r
             ICLogger.i("BPXY format error!");\r
@@ -797,12 +800,12 @@ public class protocol_jiai {
                     if (cmdarglist.length == 9){\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                         alarmtime=cmdarglist[5];\r
                         repeat=cmdarglist[6];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[7]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[8]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[7]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[8]);\r
                         log(new StringBuilder("imei ").append(imei)\r
                                 .append(", cmdindex ").append(cmdindex)\r
                                 .append(", allswitch=").append(all_alarmswitch)\r
@@ -821,8 +824,8 @@ public class protocol_jiai {
                     }else if (cmdarglist.length == 5) {\r
                         imei=cmdarglist[1];\r
                         cmdindex=cmdarglist[2];\r
-                        all_alarmswitch=Integer.valueOf(cmdarglist[3]);\r
-                        alarmcount=Integer.valueOf(cmdarglist[4]);\r
+                        all_alarmswitch=Integer.parseInt(cmdarglist[3]);\r
+                        alarmcount=Integer.parseInt(cmdarglist[4]);\r
                     }else{\r
                         log("data len is too small!");\r
                     }\r
@@ -830,8 +833,8 @@ public class protocol_jiai {
                     if (cmdarglist.length == 4){\r
                         alarmtime=cmdarglist[0];\r
                         repeat=cmdarglist[1];\r
-                        alarmswitch=Integer.valueOf(cmdarglist[2]);\r
-                        alarmtype = Integer.valueOf(cmdarglist[3]);\r
+                        alarmswitch=Integer.parseInt(cmdarglist[2]);\r
+                        alarmtype = Integer.parseInt(cmdarglist[3]);\r
 \r
                         log(new StringBuilder("set alarmtime ").append(alarmtime)\r
                                 .append(", relpeat ").append(repeat)\r
@@ -926,9 +929,9 @@ public class protocol_jiai {
         String[] cmdlist=cmd.split(CMDSPLIT);\r
         if (cmdlist.length==5){\r
             String time=cmdlist[1];\r
-            int packetCount=Integer.valueOf(cmdlist[2]);\r
-            int packetIndex=Integer.valueOf(cmdlist[3]);\r
-            int receiveSuccess=Integer.valueOf(cmdlist[4]);\r
+            int packetCount=Integer.parseInt(cmdlist[2]);\r
+            int packetIndex=Integer.parseInt(cmdlist[3]);\r
+            int receiveSuccess=Integer.parseInt(cmdlist[4]);\r
             ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗"));\r
             if (receiveSuccess == 1){\r
                 //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送\r
@@ -969,7 +972,7 @@ public class protocol_jiai {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
             int Cycle=900;\r
             switch(mod){\r
                 case ICLocation.NORMAL_MOD:\r
@@ -1026,9 +1029,9 @@ public class protocol_jiai {
 \r
 \r
             log("work mode "+cmdlist[3]);\r
-            int mod=Integer.valueOf(cmdlist[3]);\r
-            int Cycle=Integer.valueOf(cmdlist[4]);\r
-            int gpson=Integer.valueOf(cmdlist[5]);\r
+            int mod=Integer.parseInt(cmdlist[3]);\r
+            int Cycle=Integer.parseInt(cmdlist[4]);\r
+            int gpson=Integer.parseInt(cmdlist[5]);\r
 \r
             String msg=AP34(cmdlist[2],mod);\r
             //设定当前工作模式及循环频率\r
@@ -1197,7 +1200,7 @@ public class protocol_jiai {
             ICLogger.i("BP15 , 定位周期="+time+"秒");\r
 \r
             Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);\r
-            Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time));\r
+            Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time));\r
             runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));\r
             runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));\r
             //set AlarmCycle  and trigger Location\r
@@ -1262,9 +1265,9 @@ public class protocol_jiai {
 \r
             Name=msg[1];\r
             appendIndex=msg[2];\r
-            packetCount= Integer.valueOf(msg[3]);\r
-            currentId= Integer.valueOf(msg[4]);\r
-            packetLen= Integer.valueOf(msg[5]);\r
+            packetCount= Integer.parseInt(msg[3]);\r
+            currentId= Integer.parseInt(msg[4]);\r
+            packetLen= Integer.parseInt(msg[5]);\r
             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);\r
 \r
             StringBuffer stringBuffer=new StringBuffer();\r
@@ -1396,7 +1399,7 @@ public class protocol_jiai {
 \r
             //发送重置PPGCycle的广播,会在CoreServer里面执行\r
             Intent intent = new Intent();\r
-            intent.putExtra("PPGTestCycle",Integer.valueOf(cycle));\r
+            intent.putExtra("PPGTestCycle",Integer.parseInt(cycle));\r
             runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent);\r
         }else{\r
             ICLogger.i("BP86 format error!");\r