From: snickersun Date: Mon, 16 Aug 2021 15:38:43 +0000 (+0800) Subject: release ICProtocol8.1_V915_2108162337_release.apk X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=ce89b3760863e0e07e24ab54753f284562e0d6d6;p=protocol_srv.git release ICProtocol8.1_V915_2108162337_release.apk 添加RESET指令解析。 增加对不支持指令的处理,防止阻塞。 --- diff --git a/app/release/ICProtocol8.1_V909_2108140014_release.apk b/app/release/ICProtocol8.1_V915_2108162337_release.apk similarity index 77% rename from app/release/ICProtocol8.1_V909_2108140014_release.apk rename to app/release/ICProtocol8.1_V915_2108162337_release.apk index 9974f1c6..2d3cc3c1 100644 Binary files a/app/release/ICProtocol8.1_V909_2108140014_release.apk and b/app/release/ICProtocol8.1_V915_2108162337_release.apk differ diff --git a/app/release/output.json b/app/release/output.json index 7181bc31..6f15e44a 100644 --- a/app/release/output.json +++ b/app/release/output.json @@ -1 +1 @@ -[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":913,"versionName":"2108161121","enabled":true,"outputFile":"ICProtocol8.1_V913_2108161121_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V913_2108161121_release.apk","properties":{}}] \ No newline at end of file +[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":915,"versionName":"2108162337","enabled":true,"outputFile":"ICProtocol8.1_V915_2108162337_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V915_2108162337_release.apk","properties":{}}] \ No newline at end of file diff --git a/app/src/main/java/com/ic/protocolSrv/MainActivity.java b/app/src/main/java/com/ic/protocolSrv/MainActivity.java index abea3c21..da2a0518 100644 --- a/app/src/main/java/com/ic/protocolSrv/MainActivity.java +++ b/app/src/main/java/com/ic/protocolSrv/MainActivity.java @@ -23,6 +23,7 @@ import com.ic.protocolSrv.utils.ImageUtil; import com.ic.protocolSrv.utils.TimeUtil; import com.ic.protocolSrv.utils.Util; import com.ic.protocolSrv.utils.regexUtil; +import com.ic.protocols.protocol_fzd; import java.io.BufferedOutputStream; import java.io.File; @@ -113,16 +114,82 @@ public class MainActivity extends Activity { // // ICLogger.i(" lat="+latitude+",lon="+longitude); - ICLogger.d("DW*860359001000040*0006*PING is "+regexUtil.isFZDCompanyCMD("DW","DW*860359001000040*0006*PING")); + // ICLogger.d("DW*860359001000040*0006*PING is "+regexUtil.isFZDCompanyCMD("DW","DW*860359001000040*0006*PING")); TextView tv_version=(TextView)findViewById(R.id.textViewVersion); tv_version.setText(DeviceInfoUtil.getVersionCode(this)+"-"+DeviceInfoUtil.getVersionName(this)); // testpic(); //AESCipher.test2(); - } - +// String cmdbuf="[IC*860359001000040*0005*RESET][IC*860359001000040*0002*CR][IC*860359001000040*0002*CR][IC*860359001000040*0008*POWEROFF][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*KA][IC*860359001000040*0002*LK][IC*860359001000040*0002*LK][IC*860359001000040*0002*LK]"; +// parserCmd(cmdbuf.getBytes()); + } + private static final String CMD_HEADER = "["; + private static final String CMD_COMPANY = "IC"; + // private static final String CMD_COMPANY = "DW"; + private static final String CMD_END = "]"; + private static final String CMD_HEADER_SPLIT = "*"; + private static final String CMD_SPLIT = ","; + StringBuffer cmdbuf = new StringBuffer(); + + public boolean parserCmd(byte[] bytes) { + ICLogger.d("bytes.size " + bytes.length); + cmdbuf.append( new String(bytes)); + ICLogger.d("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); + while( cmdbuf.indexOf(CMD_HEADER)>=0 && cmdbuf.indexOf(CMD_END)>0 ) { + String cmd_msgbuf = ""; + int cmdindexHead = cmdbuf.indexOf(CMD_HEADER); + int cmdindexEnd = cmdbuf.indexOf(CMD_END); + if (cmdindexEnd > 0 && cmdindexHead >= 0 && cmdindexEnd > cmdindexHead) { + cmd_msgbuf = cmdbuf.substring(cmdindexHead + 1, cmdindexEnd); + //至少属于正常放走丢协议 格式 ,继续进行分析处理 + } else { + //非放走丢格式可能是数据不全,等下一条信息进来 + ICLogger.d("not correct FZD cmd! "); + break; + } + +// if (cmdbuf.toString().split(CMD_COMPANY + CMD_HEADER_SPLIT).length > 1) { +// ICLogger.d("More than 1 cmd in buffer ! just log it"); +// } + String cmdname = protocol_fzd.isCmdStr(cmd_msgbuf); + if (!cmdname.trim().isEmpty()) { //返回为非空,证明是可识别的FZD指令 + for (protocol_fzd.CMD_TYPE key : protocol_fzd.cmdMap.keySet()) { + +// ICLogger.d("key " + protocol_fzd.cmdMap.get(key) + " " + cmdname + " cmdbuf " + cmd_msgbuf); + if (protocol_fzd.cmdMap.get(key).equals(cmdname)) { //如果是FZD命令,则进行处理,否则保留数据动 + +// ICLogger.d("key is == > " + key); +// if (key == CMD_TYPE.TK) { +// handlerGroupChatVoiceContent(totalByte); +// } else if (key == CMD_TYPE.TKOne) { +// handlerOneChatVoiceContent(totalByte); +// } else if (key == CMD_TYPE.TKIMG) { +// handleImage(totalByte); +// } +// else + { + int cmdindexmid = cmd_msgbuf.indexOf(CMD_HEADER_SPLIT + cmdname); + String cmddata = cmd_msgbuf.substring(cmdindexmid + CMD_HEADER_SPLIT.length() + cmdname.length()); + if (cmddata.startsWith(CMD_SPLIT)) cmddata = cmddata.substring(1); + ICLogger.d("handleCmd key " + key + " cmdname " + cmdname + " data " + cmddata); + //handleCmd(key, cmdname, cmddata); + } + cmdbuf.delete(0, cmd_msgbuf.length() + 2);//处理后清空 + + break; + } + } + + }else{//走到这里,已经证明是fzd格式,但未找到cmd,说明不支持cmd,跳过处理,这条数据也是必须从buffer里清除的。 + ICLogger.d("no cmd found ! skip cmd " + cmd_msgbuf); + cmdbuf.delete(0, cmd_msgbuf.length() + 2); + } + } + ICLogger.d("parserCmd done"); + return true; + } private void testBLE(){ btHelper= BTHelper.CreateInstance(CoreService.getInstance().runtime, new BTHelper.BTScanCallback() { @Override diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 805c3c2e..10a3fc4d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -94,7 +94,8 @@ public class protocol_fzd { private static final String CMD_HEADER_SPLIT = "*"; private static final String CMD_SPLIT = ","; private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "false").equals("true"); - public static final String defaultServerIP = "fzd.xcloudtech.com"; +// public static final String defaultServerIP = "fzd.xcloudtech.com"; //测试服务器 + public static final String defaultServerIP = "api.xcloudtech.com"; //正式服务器 public static final int defaultServerPort = 9000; private final SharedPreferences sharedPreferences; private final Handler mHandler; @@ -398,6 +399,7 @@ public class protocol_fzd { VERNO,//版本查询 PPR,//解除好友关系 CR,//定位指令 + RESET,//重启手表 POWEROFF,//关机指令 REMOVE,//取下手环报警开关 WLKEY,//白名单功能开关 @@ -439,7 +441,7 @@ public class protocol_fzd { profile,//情景模式 } - private static HashMap cmdMap = null; + public static HashMap cmdMap = null; static { cmdMap = new HashMap<>(); @@ -512,6 +514,7 @@ public class protocol_fzd { cmdMap.put(CMD_TYPE.TALK, "TALK"); cmdMap.put(CMD_TYPE.AGTALK, "AGTALK"); cmdMap.put(CMD_TYPE.CALLING, "CALLING"); + cmdMap.put(CMD_TYPE.RESET, "RESET"); } private Connection mConnection = null; @@ -571,6 +574,7 @@ public class protocol_fzd { String cmd = cmd_msgbuf.substring(0, cmdindex); cmd_msgbuf = cmd; } + ICLogger.d("cmd_msgbuf "+cmd_msgbuf); if (regexUtil.isFZDCompanyCMD(CMD_COMPANY,cmd_msgbuf)) { for (CMD_TYPE key : cmdMap.keySet()) { if (regexUtil.isFZDCompanyCMD(CMD_COMPANY,cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动 @@ -580,9 +584,14 @@ public class protocol_fzd { } return ""; } else + { +// ICLogger.d("not fzd cmd format !"); return ""; + } + } + //[6fb043e7f6bb5f107319e3f3822d7124IC*860316012050026*0126*UD,210318,163421, // A,33.0227161,N,114.0202817,E,2.98,0.0,0.0,5,039, // 095,35,00,0100018,5,1,460,00,18899,190839372,44,18899, @@ -613,26 +622,31 @@ public class protocol_fzd { 每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃 */ public boolean parserCmd(byte[] bytes) { - ICLogger.d("bytes.size " + bytes.length); cmdbuf.append( new String(bytes)); ICLogger.d("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); - - while( !isCmdStr(cmdbuf.toString()).isEmpty()) { + while( cmdbuf.indexOf(CMD_HEADER)>=0 && cmdbuf.indexOf(CMD_END)>0 ) { String cmd_msgbuf = ""; int cmdindexHead = cmdbuf.indexOf(CMD_HEADER); int cmdindexEnd = cmdbuf.indexOf(CMD_END); - if (cmdindexEnd > 0 && cmdindexHead >= 0) { - cmd_msgbuf = cmdbuf.substring(cmdindexHead+1, cmdindexEnd); + if (cmdindexEnd > 0 && cmdindexHead >= 0 && cmdindexEnd > cmdindexHead) { + cmd_msgbuf = cmdbuf.substring(cmdindexHead + 1, cmdindexEnd); + //至少属于正常放走丢协议 格式 ,继续进行分析处理 + } else { + //非放走丢格式可能是数据不全,等下一条信息进来 + ICLogger.d("not correct FZD cmd! "); + break; } // if (cmdbuf.toString().split(CMD_COMPANY + CMD_HEADER_SPLIT).length > 1) { // ICLogger.d("More than 1 cmd in buffer ! just log it"); // } - String cmdname=isCmdStr(cmd_msgbuf); - for (CMD_TYPE key : cmdMap.keySet()) { -// ICLogger.d("key " + cmdMap.get(key) +" "+cmdname+" cmdbuf " + cmd_msgbuf); - if (cmdMap.get(key).equals(cmdname)) { //如果是FZD命令,则进行处理,否则保留数据动 + String cmdname = protocol_fzd.isCmdStr(cmd_msgbuf); + if (!cmdname.trim().isEmpty()) { //返回为非空,证明是可识别的FZD指令 + for (protocol_fzd.CMD_TYPE key : protocol_fzd.cmdMap.keySet()) { + +// ICLogger.d("key " + protocol_fzd.cmdMap.get(key) + " " + cmdname + " cmdbuf " + cmd_msgbuf); + if (protocol_fzd.cmdMap.get(key).equals(cmdname)) { //如果是FZD命令,则进行处理,否则保留数据动 // ICLogger.d("key is == > " + key); // if (key == CMD_TYPE.TK) { @@ -643,19 +657,27 @@ public class protocol_fzd { // handleImage(totalByte); // } // else - { + { + int cmdindexmid = cmd_msgbuf.indexOf(CMD_HEADER_SPLIT + cmdname); + String cmddata = cmd_msgbuf.substring(cmdindexmid + CMD_HEADER_SPLIT.length() + cmdname.length()); + if (cmddata.startsWith(CMD_SPLIT)) cmddata = cmddata.substring(1); +// ICLogger.d("handleCmd key " + key + " cmdname " + cmdname + " data " + cmddata); + handleCmd(key, cmdname, cmddata); + } + cmdbuf.delete(0, cmd_msgbuf.length() + 2);//处理后清空 - handleCmd(key, cmdname, cmd_msgbuf); + break; } - cmdbuf.delete(0, cmd_msgbuf.length()+2);//处理后清空 - break; } + + }else{//走到这里,已经证明是fzd格式,但未找到cmd,说明不支持cmd,跳过处理,这条数据也是必须从buffer里清除的。 + ICLogger.d("no cmd found ! skip cmd " + cmd_msgbuf); + cmdbuf.delete(0, cmd_msgbuf.length() + 2); } } ICLogger.d("parserCmd done"); return true; } - /** * 图片下发 * @@ -1286,6 +1308,13 @@ public class protocol_fzd { public void handlePOWEROFF(Connection connection) { connection.send(POWEROFF()); } + public static StringMessage RESET() { + return genFZDCMD(cmdMap.get(CMD_TYPE.RESET)); + } + + public void handleRESET(Connection connection) { + connection.send(RESET()); + } public static StringMessage CR() { return genFZDCMD(cmdMap.get(CMD_TYPE.CR)); @@ -1600,6 +1629,13 @@ public class protocol_fzd { ICLogger.i("收到服务器设置白名单号码命令PHL"); handlePHL(mConnection, mRuntime, cmd, data); break; + case RESET: + //收到重启指令 + handleRESET(mConnection); + ICLogger.i("收到服务器重启命令RESET"); + //通知下面线程状态变化 + mConnection.DeliverCMDMessageToSystem("Reboot", cmd); + break; case POWEROFF: //收到关机 handlePOWEROFF(mConnection); diff --git a/app/version_code.properties b/app/version_code.properties index bd68068b..d237a803 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Mon Aug 16 11:21:47 CST 2021 -VERSION_CODE=913 +#Mon Aug 16 23:37:10 CST 2021 +VERSION_CODE=915 diff --git a/local.properties b/local.properties index db57af90..25ace501 100644 --- a/local.properties +++ b/local.properties @@ -4,5 +4,5 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Thu Jul 22 07:04:36 CST 2021 -sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk +#Fri Aug 13 23:14:24 CST 2021 +sdk.dir=D\:\\Android\\Sdk