}
for (int i = 0; i < listlen; i++) {
for (CMD_TYPE key : cmdMap.keySet()) {
- if (regexUtil.isGatorCMD(cmdMap.get(key),cmdlist[i]) ) {
+ if (cmdlist[i].length()>=24 && regexUtil.isGatorCMD(cmdMap.get(key),cmdlist[i].substring(0,24)) ) {
ICLogger.d("found gator cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " , " + cmdlist[i]);
-// if (key == CMD_TYPE.BP28) {
-// //如果是BP28则 后面的数据是音频,需要保留
+ if (key == CMD_TYPE.AP12) {
+ //如果是BP12则 后面的数据是音频,需要保留
// byte[] amrBuf;
// int amrLen = getBP28Amrlen(cmdlist[i]);
// if (bytes.length > amrLen) {
-// handleCmd(key, cmdlist[i], bytes);
+ handleCmd(key, cmdlist[i], bytes);
// }
-// } else {
+ } else {
String cmdi=cmdlist[i].trim().replace(CMDHEADER,"").replace(CMDEND,"");
handleCmd(key, cmdi);
-// }
+ }
}
}
}
return -1;
}
+ //回复服务器专用通用接口
+ public StringMessage BPXX_REPLY(Runtime ds,CMD_TYPE type,String index,boolean success){
+ StringMessage ret=null;
+ if (success) {
+ ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index+"1"));
+ }else{
+ ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index+"0"));
+ }
+ return ret;
+ }
/*登录*/
public static StringMessage BP00(Runtime ds) {
//示例数据:BP00,AAAA,BB,CC
return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds,msg));
}
- //时间同步成功失败反馈
- public StringMessage BP03(Runtime ds,String index,boolean success){
- if (success){
- return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+index+"1"));
- }else{
- return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+index+"0"));
- }
- }
//时间同步,等同于登录成功回复
public void handleAP03(Runtime runtime, Connection connection, String cmd) {
String[] msg = cmd.split(CMDSPLIT);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, msg[3], true);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
- connection.send(BP03(runtime,index,true));
+ connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,true));
}else{
- connection.send(BP03(runtime,index,false));
+ connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,false));
}
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
- connection.send(BP03(runtime,index,false));
+ connection.send(BPXX_REPLY(runtime,CMD_TYPE.BP03,index,false));
}
// Set Datetime 20200505112734
// Set TimeZone 8
}
}
+ //设置亲情号码
+ public void handleAP06(Runtime ds,Connection connection,String cmd) {
+ log("AP06 设置亲情号码 "+cmd);
+/*
+消息内容 Type取值:0-4
+0表示:其他人
+1表示:爸爸
+2表示:妈妈
+3表示:奶奶
+4表示:爷爷
+(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
+
+示例:
+(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
+设置控制号码为:
+father:13141516171,
+mother:13141516172,
+grandma:13141516173,
+grandpa:13141516174,
+uncle:13141516175
+响应: 失败:(002E0106357593060153353BP0600000000000000050)
+成功:(002E0106357593060153353BP0600000000000000051)
+ */
+ StringBuffer sb=new StringBuffer();
+ String cmdlist[]=cmd.split(",");
+ if (cmdlist.length==2){
+ sb.append("server msg index "+cmdlist[1]+"\n");
+ String cmdlist1[]=cmdlist[0].split("#");
+ int index=0;
+ if(cmdlist1.length%3==1) {
+ for (int i = 1; i < cmdlist1.length; i += 3) {
+ String number= cmdlist1[i];
+ String name=cmdlist1[i+1];
+ String type=cmdlist1[i+2];
+ index++;
+ sb.append(index+" "+name+" "+number + " " + type+"\n");
+ }
+
+ }else{
+ ICLogger.e("AP06 format error1 !");
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],false));
+ }
+
+ ICLogger.d(sb.toString());
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],true));
+ }else{
+ ICLogger.e("AP06 format error!");
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP06,cmdlist[1],false));
+ }
+
+
+ }
+ public void handleAP07(Runtime ds,Connection connection,String cmd) {
+// (002A357593060153353AP07,0000000000000006) 平台向终端请求清空所有的亲情号码
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if(cmdlist.length==2){
+ log("AP07 清除亲情号码 " );
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP07,cmdlist[1],true));
+ }else{
+ ICLogger.e("AP07 format error!");
+ }
+ }
+ //重启
+ public void handleAP08(Runtime ds,Connection connection,String cmd) {
+// (002A357593060153353AP08,0000000000000007)
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if(cmdlist.length==2){
+ log("AP08 重启设备 " );
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP08,cmdlist[1],true));
+ }else{
+ ICLogger.e("AP08 format error!");
+ }
+ }
+
+ public void handleAP09(Runtime ds,Connection connection,String cmd) {
+
+// AP09,A,B,C,YYMMDD,HHMMSS
+//A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
+//B:闹铃索引(0-4)
+//C:表示闹钟类型(0-0x7F),如下:
+//0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+//如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
+// (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
+//增加(修改)一条索引为0的闹铃,每天15:29:00响铃
+//(002E357593060153353AP09,0,0,0000000000000008)
+//删除一条索引为0的闹铃
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if(cmdlist.length==7){
+
+
+ log("AP09 设置闹铃 " );
+
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP09,cmdlist[6],true));
+ }else if(cmdlist.length==4){
+
+ log("AP09 删除闹铃 " );
+
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP09,cmdlist[3],true));
+ }else{
+ ICLogger.e("AP09 format error!");
+ }
+ }
+
+ public void handleAP10(Runtime ds,Connection connection,String cmd) {
+
+// (002C357593060153353AP10,1,0000000000000009)
+// 开启静音模式
+// (002C357593060153353AP10,0,0000000000000009)
+// 关闭静音模式
+
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==3){
+ String index=cmdlist[2];
+ boolean enableSilentMode=false;
+ if(cmdlist[1].equals("1")){
+ enableSilentMode=true;
+ }
+ ICLogger.d(" enable SilentMode "+enableSilentMode);
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP10,index,true));
+ }else {
+ ICLogger.e("AP10 format error");
+ }
+ }
+
+
+ public static StringMessage BP11(Runtime ds,String MSGType,String MSGCount){
+ //(00250106357593060153353BP11,AP12,01)
+ //表示请求服务器下载1条微聊信息
+ //(00250106357593060153353BP11,AP23,01)
+ //表示请求服务器下载1条亲情号码自拍图片信息
+ StringMessage ret=null;
+ StringBuilder sb=new StringBuilder(cmdMap.get(CMD_TYPE.BP11) );
+ sb.append(CMDSPLIT).append(MSGType).append(CMDSPLIT).append(MSGCount);
+ ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), AddHeader(ds, sb.toString()));
+ return ret;
+ }
+ //服务器通知有消息待发送
+ public void handleAP11(Runtime ds,Connection connection,String cmd) {
+// (0021357593060153353AP11,AP12,02)
+// 表示当前服务器有2条新微聊信息待接收
+//
+// (0021357593060153353AP11,AP23,01)
+// 表示当前服务器有1条亲情号码自拍图片信息待接收
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==3){
+ String msgcount=cmdlist[2];
+
+ String msgType=cmdlist[1];
+
+ ICLogger.d(" 服务器有 "+msgcount+"条 "+msgType+" 消息待接收。");
+
+ connection.send(BP11(ds,msgType,"01"));
+ }else {
+ ICLogger.e("AP11 format error");
+ }
+
+
+ }
+
+ public static StringMessage BP12(Runtime ds,String sourceNumber,int count, int index, String time,boolean success){
+// 失败:
+// (00400106357593060153353BP12,13026618172,1704131633000000,6,1,0)
+// (00410106357593060153353BP12,13026618172,1704131633000000,6,1,-1)
+// 0:表示其它错误
+// -1:表示13026618172不是手表的情亲号码
+// 成功:
+// (00400106357593060153353BP12,13026618172,1704131633000000,6,1,1)
+ StringMessage ret=null;
+ StringBuilder sb=new StringBuilder(cmdMap.get(CMD_TYPE.BP12) );
+
+ sb.append(CMDSPLIT).append(sourceNumber).append(CMDSPLIT).append(time);
+ sb.append(CMDSPLIT).append(count).append(CMDSPLIT).append(index).append(CMDSPLIT);
+ if(success){
+ sb.append(1);
+ }else{
+ sb.append(0);
+ }
+ ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), AddHeader(ds, sb.toString()));
+ return ret;
+
+ }
+ //服务器下发微聊消息
+ public void handleAP12(Runtime ds,Connection connection,byte[] bytes) {
+// AP12,亲情号码,YYMMDDHHMMSSSSSS,分包总数(%d),当分包索引(%d),分包语音数据长度(%03d<=900)+数据
+// (03C3357593060153353AP12,13026618172,1704131633000000,6,1,700,数据)
+// AP12:命令字符
+// 13026618172:亲情号码
+// 1704131633000000:YYMMDDHHMMSSSSSS格式的年月日时分秒,设备录音时间
+// 6:语音包分包总数
+// 1:当前包数,第一包为1,第二包为2,。。。。。。 同一个语音包的语音时间相同
+// 700:当前分包的语音数据长度,每个音频数据包大小为700字节,最后一包不足700的取实际字节数
+ String cmd=new String(bytes);
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length>=7){
+ String time=cmdlist[2];
+ String sourceNumb=cmdlist[1];
+ String packagescount=cmdlist[3];
+ String packageindex=cmdlist[4];
+ String packageslen=cmdlist[5];
+ int index=0;
+ int count=0;
+ try {
+ index=Integer.parseInt(packageindex);
+ count=Integer.parseInt(packagescount);
+ }catch (Exception e){
+ ICLogger.e(e.getMessage(),e);
+ }
+ ICLogger.d("receive msg from "+sourceNumb+" "+index+" of "+count + " len "+packageslen+" time "+time);
+ connection.send(BP12(ds,sourceNumb,count,index,time,true));
+ }else {
+ ICLogger.e("AP12 format error");
+ }
+ }
public static StringMessage BP33(Runtime ds) {
//(00520106357593060153353BP33,0,000000FF,5,46000024820000DE127,151028,163100,0,0,0)
//报警类型:0x0 无报警;0x02 SOS报警;0x08 电池低电量报警;0x20 设备脱离
return ret;
}
- //只会成功不会失败
- public StringMessage BP14(Runtime ds){
- StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP14), AddHeader(ds,cmdMap.get(CMD_TYPE.BP14)+"00000000000000101"));
- return ret;
- }
//接收服务器定位后坐标
public void handleAP14(Runtime ds, Connection connection,String cmd){
ICLogger.d(cmd);
- connection.send(BP14(ds));
+ //(0056357593060153353AP1424.772816,121.022636,160,2015,11,12,08,00,00,0000000000000010)
+// AP14+(Lat,Long,Alt,YYYY,MM,DD,hh,mm,ss)
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==10){
+ String index=cmdlist[9];
+ String lat=cmdlist[0];
+ String lon=cmdlist[1];
+ String alt=cmdlist[2];
+ String time=cmdlist[3]+"-"+cmdlist[4]+"-"+cmdlist[5]+" "+cmdlist[6]+":"+cmdlist[7]+":"+cmdlist[8];
+ try {
+ lat = lat.substring(lat.indexOf("AP14")+4);
+ }catch (Exception e){
+ ICLogger.e(e.getMessage(),e);
+ }
+ ICLogger.d("lat "+lat+" lon "+lon + " "+alt+" time "+time);
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP14,index,true));
+ }else {
+ ICLogger.e("AP14 format error");
+ }
}
- public StringMessage BP06(Runtime ds,String index, boolean success){
- if (success){
- return genStringMessage(cmdMap.get(CMD_TYPE.BP06),AddHeader(ds,cmdMap.get(CMD_TYPE.BP06)+index+"1"));
- }else{
- return genStringMessage(cmdMap.get(CMD_TYPE.BP06),AddHeader(ds,cmdMap.get(CMD_TYPE.BP06)+index+"0"));
+ //开关机控制设置消息 AP15
+ public void handleAP15(Runtime ds, Connection connection,String cmd){
+ ICLogger.d(cmd);
+ //(002C357593060153353AP15,1,0000000000000011)
+ //表示允许手表手动关机
+ //(002C357593060153353AP15,0,0000000000000011)
+ //表示不允许手表手动关机
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==3){
+ String index=cmdlist[2];
+ boolean enableUserPoweroff=false;
+ if(cmdlist[1].equals("1")){
+ enableUserPoweroff=true;
+ }
+ ICLogger.d(" enable UserPoweroff "+enableUserPoweroff);
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP15,index,true));
+ }else {
+ ICLogger.e("AP15 format error");
}
-
}
- //设置亲情号码
- public void handleAP06(Runtime ds,Connection connection,String cmd) {
- log("AP06 设置亲情号码 "+cmd);
-/*
-消息内容 Type取值:0-4
-0表示:其他人
-1表示:爸爸
-2表示:妈妈
-3表示:奶奶
-4表示:爷爷
-(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
-
-示例:
-(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
-设置控制号码为:
-father:13141516171,
-mother:13141516172,
-grandma:13141516173,
-grandpa:13141516174,
-uncle:13141516175
-响应: 失败:(002E0106357593060153353BP0600000000000000050)
-成功:(002E0106357593060153353BP0600000000000000051)
- */
- StringBuffer sb=new StringBuffer();
- String cmdlist[]=cmd.split(",");
- if (cmdlist.length==2){
- sb.append("server msg index "+cmdlist[1]+"\n");
- String cmdlist1[]=cmdlist[0].split("#");
- if(cmdlist1.length%3==1) {
- for (int i = 1; i < cmdlist1.length; i += 3) {
- String number= cmdlist1[i];
- String name=cmdlist1[i+1];
- String type=cmdlist1[i+2];
- sb.append(name+" "+number + " " + type+"\n");
- }
-
- }else{
- ICLogger.e("AP06 format error1 !");
- connection.send(BP06(ds,cmdlist[1],false));
+// 服务器激活SOS模式消息 AP16
+ public void handleAP16(Runtime ds, Connection connection,String cmd){
+ ICLogger.d(cmd);
+ //服务器激活SOS模式:
+ //(002C357593060153353AP16,1,0000000000000012)
+
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==3){
+ String index=cmdlist[2];
+ boolean enableUserSOS=false;
+ if(cmdlist[1].equals("1")){
+ enableUserSOS=true;
}
-
- ICLogger.d(sb.toString());
- connection.send(BP06(ds,cmdlist[1],true));
- }else{
- ICLogger.e("AP06 format error!");
- connection.send(BP06(ds,cmdlist[1],false));
+ ICLogger.d(" enable enable UserSOS "+enableUserSOS);
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP16,index,true));
+ }else {
+ ICLogger.e("AP16 format error");
}
+ }
+// 手表名字设置消息 AP18
+ public void handleAP18(Runtime ds, Connection connection,String cmd){
+ ICLogger.d(cmd);
+ //(0031357593060153353AP18,BAOBAO,0000000000000013)
+ String cmdlist[]=cmd.split(CMDSPLIT);
+ if (cmdlist.length==3){
+ String index=cmdlist[2];
+ String watchName=cmdlist[1];
+ ICLogger.d("set watchName "+watchName);
+ connection.send(BPXX_REPLY(ds,CMD_TYPE.BP18,index,true));
+ }else {
+ ICLogger.e("AP18 format error");
+ }
}
-// (0019357593060153353AP00) 下行一次location。
-
public boolean handleCmd(CMD_TYPE type, String cmd) {
//普通非二进制命令用此函数处理
//收到设置亲情号码
handleAP06( mRuntime, mConnection,cmd);
break;
+ case AP07://清除亲情号码
+ handleAP07( mRuntime, mConnection,cmd);
+ break;
+ case AP08://重启设备
+ handleAP08( mRuntime, mConnection,cmd);
+ break;
+ case AP15://开关机控制设置消息
+ handleAP15(mRuntime,mConnection,cmd);
+ break;
+
+ case AP16:
+ // 服务器激活SOS模式消息
+ handleAP16(mRuntime,mConnection,cmd);
+ break;
+
+ case AP18:
+ // 手表名字设置消息
+ handleAP18(mRuntime,mConnection,cmd);
+ break;
+ case AP09: //闹钟
+ handleAP09(mRuntime,mConnection,cmd);
+ break;
+ case AP10://情景模式
+ handleAP10(mRuntime,mConnection,cmd);
+ break;
+ case AP11://服务器推送待接收消息
+ handleAP11(mRuntime,mConnection,cmd);
+ break;
+
// case AP14:// wifi定位包
// handleBP02(cmd);
// ICLogger.i("服务器收到定位AP02");
ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);
if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes));
switch (type) {
-// case BP28:
-// handleBP28(mConnection, cmd, mRuntime, bytes);
-// ICLogger.i("收到服务器语音BP28");
-//// mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化
-// break;
+ case AP12:
+ handleAP12(mRuntime,mConnection, bytes);
+ ICLogger.i("收到服务器语音AP12");
+ mConnection.DeliverCMDMessageToSystem("AP12", "");//通知下面线程状态变化
+ break;
}
return ret;
}