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
}\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
BP33,//工作模式\r
AP34,\r
BP34,//自定义工作模式\r
+ AP40,\r
+ BP40,//下发文本\r
APXL,\r
BPXL,//测量心率\r
APXY,\r
AP85,\r
BP85,//设置闹钟\r
AP86,\r
- BP86,//心率血压测试周期\r
+ BP86,//绑定解绑\r
+ AP88,\r
+ BP88,//查找手表\r
AP89,\r
BP89,//心率血压阀值设置\r
UNKNOWN_CMD,\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.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
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
}\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
\r
}\r
\r
- //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)\r
+ //17.绑定解绑(下行协议号:BP86,响应:AP86)\r
public static String AP86(String index){\r
\r
//设备响应: IWAP86, 080835#\r
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
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
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