.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
}\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
* 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。\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
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
\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