1、修复协议变更报错问题
authorsnickersun <snickersun@qq.com>
Wed, 13 May 2020 14:51:50 +0000 (22:51 +0800)
committersnickersun <snickersun@qq.com>
Wed, 13 May 2020 14:51:50 +0000 (22:51 +0800)
2、SMS #deviceinfo#命令中添加时间和信号强度等级等信息
3、beehome添加 BP88,BP40 等命令解析。已经可以正常解析,只需要对应添加响铃,显示消息等截面即可。

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/utils/DeviceInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/Util.java
app/src/main/java/com/ic/protocols/protocol_beehome.java

index bf5a589..3e2147d 100644 (file)
@@ -317,7 +317,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.getInteger(tmp);\r
+      ret = Integer.valueOf(tmp);\r
       switch(ret){\r
         case PROTOCOL_JIAI:\r
           ICLogger.i("协议 JIAI");\r
index 75b32c7..559fe2d 100644 (file)
@@ -238,8 +238,8 @@ public class ICSmsManager {
 \r
                 }\r
             } else if (sms.startsWith(ENCRYPED_HEADER+"#deviceinfo#")) {\r
-                ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime));\r
-                sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime));\r
+//                ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime));\r
+//                sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime));\r
                 ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime));\r
                 sendSMS(phonenumber, DeviceInfoUtil.getShortDeviceInfo(runtime));\r
             } else if (sms.startsWith(ENCRYPED_HEADER+"#status#")) {\r
index 6ec11af..0bacfd0 100644 (file)
@@ -254,7 +254,11 @@ public class DeviceInfoUtil {
   public static String getShortDeviceInfo(Runtime runtime){\r
 \r
     SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context);\r
-    return new StringBuilder("Network ")\r
+    return new StringBuilder("Firmware ")\r
+            .append(DeviceInfoUtil.getSWVersionDisplayName()).append("\nProtocol ")\r
+            .append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\r
+            .append("\nIMEI ").append(runtime.IMEI())\r
+            .append("\n"+TimeUtil.getLocalTime()).append("\nNetwork ")\r
             .append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?" ":" NoSIM ")\r
             .append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown"))\r
             .append("[").append(runtime.getSignalInfo()).append("]")\r
index 2ad5e1d..5dffdde 100644 (file)
@@ -29,6 +29,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;\r
 import java.io.InputStream;\r
 import java.io.OutputStream;\r
+import java.io.UnsupportedEncodingException;\r
 import java.lang.reflect.Method;\r
 import java.net.InetAddress;\r
 import java.nio.ByteBuffer;\r
@@ -887,5 +888,48 @@ public class Util {
     }\r
     context.sendBroadcast(intent);\r
   }\r
+\r
+\r
+  public static String UrlGB2312ToUTF8(String url){\r
+    String ret="";\r
+    String src=url;\r
+\r
+\r
+\r
+    if (!url.contains("%")){\r
+      int len = url.length();\r
+      //由于协议中GB2312 都是不带% 字头的,和网络中常见的不同,直接2个字节代表一个GB2312字。\r
+      //如果不是2的整倍数,则证明字符串格式有误,取消转换\r
+      if (len%2==0) {\r
+        //先给每个unicode字符都加上\\u字头,然后再进行转换。\r
+        StringBuffer sb = new StringBuffer();\r
+        for (int i = 0; i < len; i += 2) {\r
+          sb.append("%").append(url.substring(i, i + 2));\r
+        }\r
+        src=sb.toString();\r
+      }else{\r
+        return ret;\r
+      }\r
+    }\r
+    try {\r
+      ret=java.net.URLDecoder.decode(src,"GB2312");\r
+    } catch (UnsupportedEncodingException e) {\r
+      e.printStackTrace();\r
+    }\r
+    return ret;\r
+  }\r
+\r
+  public static String UTF8ToUrlGB2312(String msg){\r
+\r
+    String ret="";\r
+    try {\r
+      ret=java.net.URLEncoder.encode(msg,"GB2312");\r
+    } catch (UnsupportedEncodingException e) {\r
+      e.printStackTrace();\r
+    }\r
+    return ret;\r
+  }\r
+\r
+\r
 }\r
 \r
index 339fa9b..77c3356 100644 (file)
@@ -85,6 +85,8 @@ public class protocol_beehome {
         BP33,//工作模式\r
         AP34,\r
         BP34,//自定义工作模式\r
+        AP40,\r
+        BP40,//下发文本\r
         APXL,\r
         BPXL,//测量心率\r
         APXY,\r
@@ -96,7 +98,9 @@ public class protocol_beehome {
         AP85,\r
         BP85,//设置闹钟\r
         AP86,\r
-        BP86,//心率血压测试周期\r
+        BP86,//绑定解绑\r
+        AP88,\r
+        BP88,//查找手表\r
         AP89,\r
         BP89,//心率血压阀值设置\r
         UNKNOWN_CMD,\r
@@ -150,6 +154,8 @@ public class protocol_beehome {
         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.AP40, "AP40");\r
+        cmdMap.put(CMD_TYPE.BP40, "BP40");\r
         cmdMap.put(CMD_TYPE.APXL, "APXL");\r
         cmdMap.put(CMD_TYPE.BPXL, "BPXL");\r
         cmdMap.put(CMD_TYPE.APXY, "APXY");\r
@@ -162,6 +168,8 @@ public class protocol_beehome {
         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.AP88, "AP88");\r
+        cmdMap.put(CMD_TYPE.BP88, "BP88");\r
         cmdMap.put(CMD_TYPE.AP89, "AP89");\r
         cmdMap.put(CMD_TYPE.BP89, "BP89");\r
     }\r
@@ -1039,6 +1047,46 @@ public class protocol_beehome {
         }\r
 \r
     }\r
+    public void handleBP40(Connection connection,Runtime runtime,String cmd){\r
+\r
+//        IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#\r
+//        IW:标识符\r
+//        BP40 : 命令字符\r
+//        353456789012345:IMEI号,设备唯一ID\r
+//        080835 :指令流水号\r
+//        XXXXXXXXXXXX : 表示文字内容GB2312编码\r
+\r
+\r
+        String[] cmdlist=cmd.split(",");\r
+        if (cmdlist.length == 4){\r
+            String cmdindex=cmdlist[2];\r
+            String txtmsg=cmdlist[3];\r
+\r
+            txtmsg=Util.UrlGB2312ToUTF8(txtmsg);\r
+            String msg=AP40(cmdindex,1);\r
+            //设定当前工作模式及循环频率\r
+            connection.send(genStringMessage("AP40",msg));\r
+\r
+            Intent intent=new Intent();\r
+            intent.putExtra("txtMsg",txtmsg);\r
+            runtime.getContextProxy().sendBrodcast("action.ic.srvPushTxt",intent);\r
+\r
+            ICLogger.i("received Txt Msg "+txtmsg);\r
+        }else{\r
+            ICLogger.i("BP40 format error!");\r
+        }\r
+    }\r
+    public static String AP40(String cmdindex,int success){\r
+\r
+//        IWAP40,080835,1#\r
+//        080835:指令流水号\r
+//        1:表示设备接受数据成功,0表示设备接受数据失败\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))\r
+                .append(CMDSPLIT).append(cmdindex)\r
+                .append(CMDSPLIT).append(success)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
 \r
     /**\r
      * 心率上传,返回协议字串\r
@@ -1352,7 +1400,7 @@ public class protocol_beehome {
 \r
     }\r
 \r
-    //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)\r
+    //17.绑定解绑(下行协议号:BP86,响应:AP86)\r
     public static String AP86(String index){\r
 \r
         //设备响应:      IWAP86, 080835#\r
@@ -1365,34 +1413,50 @@ public class protocol_beehome {
     public void handleBP86(String cmd,Connection connection,Runtime runtime){\r
 \r
         //示例:\r
-        //IWBP86, 353456789012345, 080835,1,720#\r
+        //IWBP86, 353456789012345, 080835,1#\r
         //说明:\r
         //IW:标识符\r
         //BP86 : 命令字符\r
         //353456789012345:IMEI号,设备唯一ID\r
         //080835 :指令流水号\r
-        //1: 表示心率周期;2 :表示血压周期\r
-        //720: 表示720分钟\r
+        //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功)\r
 \r
         String[] list=cmd.split(CMDSPLIT);\r
 \r
-        if (list.length==5){\r
+        if (list.length==4){\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("æ\94¶å\88°æ\9c\8då\8a¡å\99¨æ\8c\87令ï¼\9a设置"+(type.equals("1")?"å¿\83ç\8e\87å\91¨æ\9c\9f ":"è¡\80å\8e\8bå\91¨æ\9c\9f ")+cycle+"å\88\86é\92\9f");\r
+            ICLogger.i("æ\94¶å\88°æ\9c\8då\8a¡å\99¨æ\88æ\81¯ï¼\9a"+(type.equals("1")?"ç»\91å®\9aæ\88\90å\8a\9f ":"æ\9cªæ¿\80æ´»æ\88\96è\80\85è§£ç»\91"));\r
 \r
-            //发送重置PPGCycle的广播,会在CoreServer里面执行\r
-            Intent intent = new Intent();\r
-            intent.putExtra("PPGTestCycle",Integer.valueOf(cycle));\r
-            runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent);\r
         }else{\r
             ICLogger.i("BP86 format error!");\r
         }\r
 \r
     }\r
 \r
+    public static String AP88(String index){\r
+        //设备响应:      IWAP88, 080835#\r
+        //080835:指令流水号\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDEND).toString();\r
+    }\r
+\r
+    public static void handleBP88(String cmd,Connection connection){\r
+//        IWBP88,080835#\r
+        String[] list=cmd.split(CMDSPLIT);\r
+\r
+        if (list.length==2){\r
+            String index=list[1];\r
+            connection.send(genStringMessage("AP88",AP88(index)));\r
+            ICLogger.i("收到服务器消息:查询设备");\r
+\r
+        }else{\r
+            ICLogger.i("BP88 format error!");\r
+        }\r
+    }\r
+\r
     //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)\r
     public static String AP89(String index){\r
 \r
@@ -1538,6 +1602,12 @@ public class protocol_beehome {
                 ICLogger.i("收到服务器关机命令BP31");\r
                 mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
                 break;\r
+            case BP40:\r
+                //服务器推送文本\r
+                handleBP40(mConnection,mRuntime,cmd);\r
+                ICLogger.i("收到服务器推送文本消息");\r
+                mConnection.DeliverCMDMessageToSystem("showTxt",cmd);//通知下面线程状态变化\r
+                break;\r
 \r
             case BPXL:\r
                 handleBPXL(cmd,mConnection);\r
@@ -1562,9 +1632,15 @@ public class protocol_beehome {
                 break;\r
 \r
             case BP86:\r
-                //心率血压周期设置\r
+                //绑定解绑消息\r
                 handleBP86(cmd,mConnection,mRuntime);\r
-//                                ICLogger.i("");\r
+\r
+                break;\r
+\r
+            case BP88:\r
+                //收到查找设备消息\r
+                handleBP88(cmd,mConnection);\r
+                mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化\r
                 break;\r
             case BP89:\r
                 //心率/血压阀值\r