BPDE BPDF BPTU 中间版本,协议解析完了,但是逻辑还没实现完毕
authorsnickersun <scy@incartech.cn>
Sun, 26 Jul 2020 09:50:56 +0000 (17:50 +0800)
committersnickersun <scy@incartech.cn>
Sun, 26 Jul 2020 09:50:56 +0000 (17:50 +0800)
app/src/main/java/com/enqualcomm/support/bean/SleepInfo.java
app/src/main/java/com/ic/protocols/protocol_ic.java

index d053061..515e136 100644 (file)
@@ -36,7 +36,7 @@ public class SleepInfo {
      * @param sleepstart\r
      * 系统设置的 睡眠开始监测时间 例如晚上9点开始\r
      * @param sleepend\r
-     * 系统设置的 睡眠停止监测时间 例如第二天早9点\r
+     * 系统设置的 睡眠停止监测时间 例如第二天早7点\r
      * @param step_in_minutes\r
      * 系统当前的 心跳间隔时间,单位分钟\r
      */\r
@@ -60,6 +60,8 @@ public class SleepInfo {
         System.currentTimeMillis();\r
         if (turnovertime <= DEEP_TURN_LEVEL){\r
             deepsleep_minutes+=step_for_each_record_in_minutes;\r
+        }else if (turnovertime > DEEP_TURN_LEVEL && turnovertime <LIGHT_TURN_LEVEL) {\r
+            lightsleep_minutes+=step_for_each_record_in_minutes;\r
         }\r
         turnovertimesArray.add(turnovertime);\r
     }\r
index 9e1151c..423349d 100644 (file)
@@ -1824,12 +1824,7 @@ public class protocol_ic {
                 .append(CMDEND).toString();\r
     }\r
 \r
-    /**\r
-     *\r
-     * @param cmd\r
-     * @param connection\r
-     * @param runtime\r
-     */\r
+\r
     public void handleBPHP(){\r
 \r
         ICLogger.i("服务器收到APHP 心率血压血氧 !");\r
@@ -1837,28 +1832,99 @@ public class protocol_ic {
     }\r
 \r
     public static String APDE(String id){\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
+        /***\r
+         * 示例:\r
+        * 设备响应:      IWAPDE,080835#\r
+         * 080835:指令流水号\r
+         * 说明:   本消息适用所有终端\r
+         */\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDE))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString();\r
     }\r
 \r
-    public void handleBPDE(){\r
+    public void handleBPDE(NettyConnection connection,String cmd,Runtime runtime){\r
+/***\r
+ * 示例:\r
+ * IWBPDE,353456789012345,1 #\r
+ * 说明:\r
+ * IW:标识符\r
+ * BPDE: 命令字符\r
+ * 353456789012345:设备IMEI或者ID\r
+ * 080835 :指令流水号\r
+ * 1:进入禁止区域 2离开禁止区域\r
+ * #:结尾标识符\r
+ * 设备响应:     IWAPDE,080835#\r
+ * 080835:指令流水号\r
+ * 说明:   本消息适用所有终端\r
+ */\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==3){\r
 \r
+            String index=list[1];\r
+            String msg=list[2];\r
+            connection.send(genStringMessage("APDE",APDE(index)));\r
+            if ( Integer.parseInt(msg) == 1) {\r
+                ICLogger.i("Handle BPDE index " + index + ", 进入禁止区域 ");\r
+            }else {\r
+                ICLogger.i("Handle BPDE index " + index + ", 离开禁止区域 ");\r
+            }\r
+        }else{\r
+            ICLogger.i("BPDE format error!");\r
+        }\r
 \r
 \r
     }\r
     public static String APDF(String id){\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APDF))\r
                 .append(CMDSPLIT).append(id)\r
                 .append(CMDEND).toString();\r
     }\r
 \r
-    public void handleBPDF(){\r
-\r
-\r
+    public void handleBPDF(NettyConnection connection,String cmd,Runtime runtime){\r
+/**\r
+ * 示例:\r
+ * IWBPDF,353456789012345,1,30.0,37.3 #\r
+ * 说明:\r
+ * IW:标识符\r
+ * BPDF: 命令字符\r
+ * 353456789012345:设备IMEI或者ID\r
+ * 080835 :指令流水号\r
+ * 1:开关 1开,  0 关\r
+ * 30.0: 低温阀值\r
+ * 37.3: 高温阀值\r
+ * #:结尾标识符\r
+ * */\r
+        String[] list=cmd.split(CMDSPLIT);\r
+        if (list.length==5){\r
 \r
+            String index=list[1];\r
+            String switch_on=list[2];\r
+            String min_temp=list[3];\r
+            String max_temp=list[4];\r
+            connection.send(genStringMessage("APDF",APDF(index)));\r
+            if ( Integer.parseInt(switch_on) == 1) {\r
+                ICLogger.i("Handle BPDF index " + index + ", 体温报警阈值开 min="+min_temp+",max="+max_temp);\r
+            }else {\r
+                ICLogger.i("Handle BPDF index " + index + ", 体温报警阈值关 ");\r
+            }\r
+        }else{\r
+            ICLogger.i("BPDF format error!");\r
+        }\r
     }\r
-    public static String APTU(String id){\r
+\r
+    /***\r
+     *\r
+     * @param packetTime  做指令流水号用\r
+     * @param filetype  文件类型, 1语音,2图片\r
+     * @param datatype  数据内容类型,例如和文件类型相关,例如 监听语音,sos语音,签到图片等等\r
+     * @param count  内容分包总数\r
+     * @param index  当前分包数\r
+     * @param datalen 分包数据长度,最长1024,不足按照实际大小。\r
+     * @param amrdata  文件分包内容数据\r
+     * @return\r
+     */\r
+    public static byte[] APTU(String  packetTime,int filetype, int datatype ,int count,int index,int datalen,byte[] amrdata){\r
         /**\r
          * 10.设备录音图片(设备上行)(上行协议:APTU,响应:BPTU)\r
          * 示例:\r
@@ -1882,63 +1948,66 @@ public class protocol_ic {
          * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。\r
          * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包\r
          */\r
-        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
-                .append(CMDSPLIT).append(id)\r
-                .append(CMDEND).toString();\r
-    }\r
 \r
-    /**\r
-     * 主要为久坐设置提醒时长。\r
-     * @param cmd\r
-     * @param connection\r
-     * @param runtime\r
-     */\r
-    public void handleBPTU(String cmd,Connection connection,Runtime runtime){\r
-        //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#\r
-        //说明:\r
-//        IW:标识符\r
-//        BPS4: 命令字符\r
-//        353456789012345:设备IMEI或者ID\r
-//        080835 :指令流水号\r
-//        1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)\r
-//        重复周期、开始结束时间格式 参考BP85闹钟设置,\r
-//#:结尾标识符\r
-        String[] list=cmd.split(CMDSPLIT);\r
-        if (list.length>=4){\r
 \r
-            String index=list[2];\r
-            String imei=list[1];\r
-            connection.send(genStringMessage("APS4",APS4(index)));\r
+        String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07))\r
+                .append(CMDSPLIT).append(6654111)\r
+                .append(CMDSPLIT).append(packetTime)\r
+                .append(CMDSPLIT).append(filetype)\r
+                .append(CMDSPLIT).append(datatype)\r
+                .append(CMDSPLIT).append(count)\r
+                .append(CMDSPLIT).append(index)\r
+                .append(CMDSPLIT).append(datalen)\r
+                .append(CMDSPLIT).toString();\r
 \r
-            String setting1;\r
-            switch(list.length){\r
-                case 10:\r
-                    setting1=list[9];\r
-                    ICLogger.i("set 7th alarm "+setting1);\r
-                case 9:\r
-                    setting1=list[8];\r
-                    ICLogger.i("set 6th alarm "+setting1);\r
-                case 8:\r
-                    setting1=list[7];\r
-                    ICLogger.i("set 5th alarm "+setting1);\r
-                case 7:\r
-                    setting1=list[6];\r
-                    ICLogger.i("set 4th alarm "+setting1);\r
-                case 6:\r
-                    setting1=list[5];\r
-                    ICLogger.i("set 3rd alarm "+setting1);\r
-                case 5:\r
-                    setting1=list[4];\r
-                    ICLogger.i("set 2nt alarm "+setting1);\r
-                case 4:\r
-                    setting1=list[3];\r
-                    ICLogger.i("set 1st alarm "+setting1);\r
-                    break;\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 handleBPTU(String cmd , NettyConnection connection ){\r
+/***\r
+ * 平台响应\r
+ * IWBPTU,6654111,080835,1,1,6,1,1#\r
+ * IW:标识符\r
+ * APCU : 命令字符\r
+ * 6654111:语音图片文字目标\r
+ * 080835 :流水号\r
+ * 1:文件类型\r
+ * 1:内容类型\r
+ * 6:内容总包数\r
+ * 1:当前包序号\r
+ * 1:成功 (0:失败)\r
+ */\r
+        String[] cmdlist=cmd.split(CMDSPLIT);\r
+        if (cmdlist.length==8){\r
+            String time=cmdlist[2];\r
+            String filetype=cmdlist[3];\r
+            String datatype=cmdlist[4];\r
+            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
+            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
-            ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings");\r
         }else{\r
-            ICLogger.i("BPX1 format error!");\r
+            ICLogger.i(" BPTU Format error!");\r
         }\r
     }\r
 \r
@@ -2121,20 +2190,19 @@ public class protocol_ic {
                 ICLogger.i("收到 提醒设置(时间段)");\r
                 mConnection.DeliverCMDMessageToSystem("IWAPS4",cmd);//通知下面线程状态变化\r
                 break;\r
-\r
-            case BPTU:\r
-                handleBPTU(cmd,mConnection,mRuntime);\r
-                ICLogger.i("服务器 收到 语音图片信息!");\r
-                mConnection.DeliverCMDMessageToSystem("IWAPTU",cmd);//通知下面线程状态变化\r
-                break;\r
             case BPDE:\r
-                handleBPDE();\r
+                handleBPDE(mConnection,cmd,mRuntime);\r
                 ICLogger.i(" 收到 进出围栏通知!");\r
                 mConnection.DeliverCMDMessageToSystem("IWAPDE",cmd);//通知下面线程状态变化\r
                 break;\r
 \r
+            case BPTU:\r
+                handleBPTU(cmd, mConnection);\r
+                ICLogger.i("收到服务器 图片语音 消息 BPTU");\r
+                mConnection.DeliverCMDMessageToSystem("BPTU", "");//通知下面线程状态变化\r
+                break;\r
             case BPDF:\r
-                handleBPDF();\r
+                handleBPDF(mConnection,cmd,mRuntime);\r
                 ICLogger.i(" 收到 体温阈值设置!");\r
                 mConnection.DeliverCMDMessageToSystem("IWAPDF",cmd);//通知下面线程状态变化\r
                 break;\r
@@ -2147,7 +2215,7 @@ public class protocol_ic {
 \r
     public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {\r
 \r
-        //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要\r
+        //只有需要传递二进制数据的才需要这个函数,目前只有BP28需要\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