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;
//
// 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
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;
VERNO,//版本查询
PPR,//解除好友关系
CR,//定位指令
+ RESET,//重启手表
POWEROFF,//关机指令
REMOVE,//取下手环报警开关
WLKEY,//白名单功能开关
profile,//情景模式
}
- private static HashMap<CMD_TYPE, String> cmdMap = null;
+ public static HashMap<CMD_TYPE, String> cmdMap = null;
static {
cmdMap = new HashMap<>();
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;
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命令,则进行处理,否则保留数据动
}
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,
每个字符串如果发现 #,却又没有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) {
// 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;
}
-
/**
* 图片下发
*
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));
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);