From: snickersun Date: Wed, 13 May 2020 14:51:50 +0000 (+0800) Subject: 1、修复协议变更报错问题 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=80c6b307257de90f2af65a219cdf3b3638f55e13;p=protocol_srv.git 1、修复协议变更报错问题 2、SMS #deviceinfo#命令中添加时间和信号强度等级等信息 3、beehome添加 BP88,BP40 等命令解析。已经可以正常解析,只需要对应添加响铃,显示消息等截面即可。 --- diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index bf5a589b..3e2147db 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -317,7 +317,7 @@ public class Config { String tmp=Util.getSystemProperties("persist.sys.protocol_no"); int ret=0; if (tmp!=null && !tmp.isEmpty()&& Util.isNumeric(tmp)) { - ret = Integer.getInteger(tmp); + ret = Integer.valueOf(tmp); switch(ret){ case PROTOCOL_JIAI: ICLogger.i("协议 JIAI"); diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index 75b32c7a..559fe2dc 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -238,8 +238,8 @@ public class ICSmsManager { } } else if (sms.startsWith(ENCRYPED_HEADER+"#deviceinfo#")) { - ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime)); - sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime)); +// ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime)); +// sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime)); ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime)); sendSMS(phonenumber, DeviceInfoUtil.getShortDeviceInfo(runtime)); } else if (sms.startsWith(ENCRYPED_HEADER+"#status#")) { diff --git a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java index 6ec11af3..0bacfd04 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java @@ -254,7 +254,11 @@ public class DeviceInfoUtil { public static String getShortDeviceInfo(Runtime runtime){ SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context); - return new StringBuilder("Network ") + return new StringBuilder("Firmware ") + .append(DeviceInfoUtil.getSWVersionDisplayName()).append("\nProtocol ") + .append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context)) + .append("\nIMEI ").append(runtime.IMEI()) + .append("\n"+TimeUtil.getLocalTime()).append("\nNetwork ") .append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?" ":" NoSIM ") .append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown")) .append("[").append(runtime.getSignalInfo()).append("]") diff --git a/app/src/main/java/com/enqualcomm/support/utils/Util.java b/app/src/main/java/com/enqualcomm/support/utils/Util.java index 2ad5e1d4..5dffddec 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/Util.java +++ b/app/src/main/java/com/enqualcomm/support/utils/Util.java @@ -29,6 +29,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.net.InetAddress; import java.nio.ByteBuffer; @@ -887,5 +888,48 @@ public class Util { } context.sendBroadcast(intent); } + + + public static String UrlGB2312ToUTF8(String url){ + String ret=""; + String src=url; + + + + if (!url.contains("%")){ + int len = url.length(); + //由于协议中GB2312 都是不带% 字头的,和网络中常见的不同,直接2个字节代表一个GB2312字。 + //如果不是2的整倍数,则证明字符串格式有误,取消转换 + if (len%2==0) { + //先给每个unicode字符都加上\\u字头,然后再进行转换。 + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < len; i += 2) { + sb.append("%").append(url.substring(i, i + 2)); + } + src=sb.toString(); + }else{ + return ret; + } + } + try { + ret=java.net.URLDecoder.decode(src,"GB2312"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return ret; + } + + public static String UTF8ToUrlGB2312(String msg){ + + String ret=""; + try { + ret=java.net.URLEncoder.encode(msg,"GB2312"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return ret; + } + + } diff --git a/app/src/main/java/com/ic/protocols/protocol_beehome.java b/app/src/main/java/com/ic/protocols/protocol_beehome.java index 339fa9b6..77c3356c 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -85,6 +85,8 @@ public class protocol_beehome { BP33,//工作模式 AP34, BP34,//自定义工作模式 + AP40, + BP40,//下发文本 APXL, BPXL,//测量心率 APXY, @@ -96,7 +98,9 @@ public class protocol_beehome { AP85, BP85,//设置闹钟 AP86, - BP86,//心率血压测试周期 + BP86,//绑定解绑 + AP88, + BP88,//查找手表 AP89, BP89,//心率血压阀值设置 UNKNOWN_CMD, @@ -150,6 +154,8 @@ public class protocol_beehome { cmdMap.put(CMD_TYPE.BP33, "BP33"); cmdMap.put(CMD_TYPE.AP34, "AP34"); cmdMap.put(CMD_TYPE.BP34, "BP34"); + cmdMap.put(CMD_TYPE.AP40, "AP40"); + cmdMap.put(CMD_TYPE.BP40, "BP40"); cmdMap.put(CMD_TYPE.APXL, "APXL"); cmdMap.put(CMD_TYPE.BPXL, "BPXL"); cmdMap.put(CMD_TYPE.APXY, "APXY"); @@ -162,6 +168,8 @@ public class protocol_beehome { cmdMap.put(CMD_TYPE.BP85, "BP85"); cmdMap.put(CMD_TYPE.AP86, "AP86"); cmdMap.put(CMD_TYPE.BP86, "BP86"); + cmdMap.put(CMD_TYPE.AP88, "AP88"); + cmdMap.put(CMD_TYPE.BP88, "BP88"); cmdMap.put(CMD_TYPE.AP89, "AP89"); cmdMap.put(CMD_TYPE.BP89, "BP89"); } @@ -1039,6 +1047,46 @@ public class protocol_beehome { } } + public void handleBP40(Connection connection,Runtime runtime,String cmd){ + +// IWBP40,353456789012345,080835,XXXXXXXXXXXXXX# +// IW:标识符 +// BP40 : 命令字符 +// 353456789012345:IMEI号,设备唯一ID +// 080835 :指令流水号 +// XXXXXXXXXXXX : 表示文字内容GB2312编码 + + + String[] cmdlist=cmd.split(","); + if (cmdlist.length == 4){ + String cmdindex=cmdlist[2]; + String txtmsg=cmdlist[3]; + + txtmsg=Util.UrlGB2312ToUTF8(txtmsg); + String msg=AP40(cmdindex,1); + //设定当前工作模式及循环频率 + connection.send(genStringMessage("AP40",msg)); + + Intent intent=new Intent(); + intent.putExtra("txtMsg",txtmsg); + runtime.getContextProxy().sendBrodcast("action.ic.srvPushTxt",intent); + + ICLogger.i("received Txt Msg "+txtmsg); + }else{ + ICLogger.i("BP40 format error!"); + } + } + public static String AP40(String cmdindex,int success){ + +// IWAP40,080835,1# +// 080835:指令流水号 +// 1:表示设备接受数据成功,0表示设备接受数据失败 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDSPLIT).append(success) + .append(CMDEND).toString(); + } + /** * 心率上传,返回协议字串 @@ -1352,7 +1400,7 @@ public class protocol_beehome { } - //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86) + //17.绑定解绑(下行协议号:BP86,响应:AP86) public static String AP86(String index){ //设备响应: IWAP86, 080835# @@ -1365,34 +1413,50 @@ public class protocol_beehome { public void handleBP86(String cmd,Connection connection,Runtime runtime){ //示例: - //IWBP86, 353456789012345, 080835,1,720# + //IWBP86, 353456789012345, 080835,1# //说明: //IW:标识符 //BP86 : 命令字符 //353456789012345:IMEI号,设备唯一ID //080835 :指令流水号 - //1: 表示心率周期;2 :表示血压周期 - //720: 表示720分钟 + //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功) String[] list=cmd.split(CMDSPLIT); - if (list.length==5){ + if (list.length==4){ String index=list[2]; String type=list[3]; - String cycle=list[4]; connection.send(genStringMessage("AP86",AP86(index))); - ICLogger.i("收到服务器指令:设置"+(type.equals("1")?"心率周期 ":"血压周期 ")+cycle+"分钟"); + ICLogger.i("收到服务器消息:"+(type.equals("1")?"绑定成功 ":"未激活或者解绑")); - //发送重置PPGCycle的广播,会在CoreServer里面执行 - Intent intent = new Intent(); - intent.putExtra("PPGTestCycle",Integer.valueOf(cycle)); - runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent); }else{ ICLogger.i("BP86 format error!"); } } + public static String AP88(String index){ + //设备响应: IWAP88, 080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + + public static void handleBP88(String cmd,Connection connection){ +// IWBP88,080835# + String[] list=cmd.split(CMDSPLIT); + + if (list.length==2){ + String index=list[1]; + connection.send(genStringMessage("AP88",AP88(index))); + ICLogger.i("收到服务器消息:查询设备"); + + }else{ + ICLogger.i("BP88 format error!"); + } + } + //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89) public static String AP89(String index){ @@ -1538,6 +1602,12 @@ public class protocol_beehome { ICLogger.i("收到服务器关机命令BP31"); mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化 break; + case BP40: + //服务器推送文本 + handleBP40(mConnection,mRuntime,cmd); + ICLogger.i("收到服务器推送文本消息"); + mConnection.DeliverCMDMessageToSystem("showTxt",cmd);//通知下面线程状态变化 + break; case BPXL: handleBPXL(cmd,mConnection); @@ -1562,9 +1632,15 @@ public class protocol_beehome { break; case BP86: - //心率血压周期设置 + //绑定解绑消息 handleBP86(cmd,mConnection,mRuntime); -// ICLogger.i(""); + + break; + + case BP88: + //收到查找设备消息 + handleBP88(cmd,mConnection); + mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化 break; case BP89: //心率/血压阀值