From: snickersun Date: Mon, 27 Jul 2020 11:57:46 +0000 (+0800) Subject: 增加防走丢框架文件,协议未实现。 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=9431998141b9c8163ad4b0ec81415c33cabc4db6;p=protocol_srv.git 增加防走丢框架文件,协议未实现。 优化配置,所有协议默认服务器地址统一管理。 增强兼容性,Integer.valueOf用Integer.parseInt替换,减少由于数据转换造成的crash --- diff --git a/app/app.iml b/app/app.iml index ccb6451e..96972aaf 100644 --- a/app/app.iml +++ b/app/app.iml @@ -101,12 +101,12 @@ - - - - - - + + + + + + diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 3d4b576b..f3ec7003 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -11,6 +11,7 @@ import com.enqualcomm.support.utils.SharPreferenceUtil; import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; import com.ic.jni.ICJniUtils; +import com.ic.protocols.protocolAPIHelper; import com.sina.util.dnscache.log.FileUtil; import org.json.JSONException; @@ -129,23 +130,6 @@ public class Config { final static String KeySPo2adust="KeySPo2Adjust"; - public static String DefaultHost(){ - if (protocol_no==PROTOCOL_BEEHOME) - return BeehomeHost; - else if (protocol_no==PROTOCOL_JIAI) - return JiAiHost; - else - return JiAiHost; - } - public static int DefaultPort(){ - if (protocol_no==PROTOCOL_BEEHOME) - return BeehomePort; - else if (protocol_no==PROTOCOL_JIAI) - return JiAiPort; - else - return JiAiPort; - } - public static String getSMSPwd(Context context){ return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword); } @@ -256,35 +240,15 @@ public class Config { } public static String getProtocolServerHost(Context context){ - - String host=JiAiHost; - switch (protocol_no){ - - case PROTOCOL_BEEHOME: - host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,BeehomeHost); - break; - case PROTOCOL_JIAI: - default: - host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,JiAiHost); - break; - } + String host; + host= SharPreferenceUtil.getPrefString(context,KeyProtocolServerHOST,protocolAPIHelper.getDefaultServerIP()); return host; } public static int getProtocolServerPort(Context context){ - - int port=JiAiPort; - switch (protocol_no){ - - case PROTOCOL_BEEHOME: - port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,BeehomePort); - break; - case PROTOCOL_JIAI: - default: - port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,JiAiPort); - break; - } + int port; + port= SharPreferenceUtil.getPrefInt(context,KeyProtocolServerPort,protocolAPIHelper.getDefaultServerPort()); return port; } @@ -460,8 +424,8 @@ public class Config { setProtocolServerPort(context,serverport); }else{ - setProtocolServerHost(context,DefaultHost()); - setProtocolServerPort(context,DefaultPort()); + setProtocolServerHost(context, protocolAPIHelper.getDefaultServerIP()); + setProtocolServerPort(context,protocolAPIHelper.getDefaultServerPort()); } ICLogger.i("current protocol_no="+protocol_no+" , isUsingCustomServier="+isUsingCustomServer+", server host="+ getProtocolServerHost(context)+", server port="+getProtocolServerPort(context)); @@ -488,7 +452,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.valueOf(tmp); + ret = Integer.parseInt(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 5f6815a2..8fd1ddac 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -31,6 +31,7 @@ import com.enqualcomm.support.utils.SimSignalUtil; import com.enqualcomm.support.utils.TimeUtil; import com.enqualcomm.support.utils.Util; import com.enqualcomm.support.utils.ftpUtils; +import com.ic.protocols.protocolAPIHelper; import java.io.File; import java.net.MalformedURLException; @@ -340,8 +341,8 @@ public class ICSmsManager extends BroadcastReceiver{ ICLogger.i(sms + " len " + tmp.length); if (tmp.length == 2) { if (tmp[1].equals("reset#")) { - Config.setCustomServer(mContext,false,Config.DefaultHost(),Config.DefaultPort()); - reply = "reset ServerIP to " + Config.DefaultHost() + ":" + Config.DefaultPort() + " success! "; + Config.setCustomServer(mContext,false, protocolAPIHelper.getDefaultServerIP(),protocolAPIHelper.getDefaultServerPort()); + reply = "reset ServerIP to " + protocolAPIHelper.getDefaultServerIP() + ":" + protocolAPIHelper.getDefaultServerPort() + " success! "; Config.loadServerSettings(runtime); CoreService.getInstance().disconnect_server(); CoreService.getInstance().ReConnectToServer(); diff --git a/app/src/main/java/com/enqualcomm/support/bean/voicePacket.java b/app/src/main/java/com/enqualcomm/support/bean/voicePacket.java index bfcc9923..210f009a 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/voicePacket.java +++ b/app/src/main/java/com/enqualcomm/support/bean/voicePacket.java @@ -19,6 +19,9 @@ public class voicePacket { return gvoicepacket_sent; } + + int filetype=1; + int datatype=3; String time=null; String Name=null; String appendIndex=null; @@ -44,6 +47,18 @@ public class voicePacket { public String getPacketTime(){ return time; } + + /*** + * 文件类型 内容类型 + * 1 语音—— 1.监听语音 * 2.SOS语音 * 3.扩展 + * 2 图片—— 1.签到图片 * 2.指令图片 * 3.设备图片 * 4.扩展 + * @param type + * @param dtype + */ + public void setFileType(int type,int dtype){ + filetype=type; + datatype=dtype; + } ArrayList packetArray =new ArrayList(); public class voicepacketItem{ int currentId; @@ -105,7 +120,6 @@ public class voicePacket { if (Name==null|| appendIndex==null || Name.isEmpty() ){ return stringBuilder.toString(); } - stringBuilder.append("{ Name=").append(Name) .append(", packetCount=").append(packetCount) .append(", appendIndex=").append(appendIndex) @@ -115,11 +129,9 @@ public class voicePacket { .append(",").append(item.packetLen).append("},"); } stringBuilder.append("]}"); - return stringBuilder.toString(); } - public void clearPacket(){ packetArray.clear(); packetCount=0; @@ -138,13 +150,11 @@ public class voicePacket { return len; } public voicepacketItem getVoicePacketWithIndex(int index){ - for (int i=0;i< packetArray.size();i++){ voicepacketItem tmp=packetArray.get(i); if (tmp.currentId==index) return tmp; } - return null; } public byte[] getVoicePacketBytes(){ diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index b945024e..d6f4e1ae 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -65,7 +65,7 @@ public class Deliver extends AbstractConnectionService { private static ReentrantLock lock = new ReentrantLock(); private static Condition mCondition = mLock.newCondition(); - public static LinkedBlockingDeque queue = new LinkedBlockingDeque(90); + public static LinkedBlockingDeque queue = new LinkedBlockingDeque(200); private static FileCache fileCache; private static NettyConnection connection; diff --git a/app/src/main/java/com/enqualcomm/support/service/SilentManager.java b/app/src/main/java/com/enqualcomm/support/service/SilentManager.java index 01c809cb..4d8a235e 100644 --- a/app/src/main/java/com/enqualcomm/support/service/SilentManager.java +++ b/app/src/main/java/com/enqualcomm/support/service/SilentManager.java @@ -68,7 +68,7 @@ public class SilentManager extends AbstractInvokeHandlerService { ICLogger.i("静默有变化"); SilentManager.this.silentList = SilentManager.this.querySilent(); SilentManager.this.getSilentListStartAndEndTime(); - SilentManager.this.handleSilent(SilentManager.this.mRuntime, true); + SilentManager.this.handleSilent(mRuntime, true); } }; private Context mContext; @@ -669,8 +669,6 @@ public class SilentManager extends AbstractInvokeHandlerService { AlarmHelper.setAlarmOnce(this.mAlarmManager, tmpTimeInMillis, pendingIntent); } - - } } } @@ -696,11 +694,11 @@ public class SilentManager extends AbstractInvokeHandlerService { String var14 = var3.substring(6, 8); String var15 = var3.substring(8, 10); String var16 = var3.substring(10, 12); - var10.set(Calendar.YEAR, Integer.valueOf(var13)); - var10.set(Calendar.MONTH, Integer.valueOf(var20) - 1); - var10.set(Calendar.DATE, Integer.valueOf(var14)); - var10.set(Calendar.HOUR_OF_DAY, Integer.valueOf(var15)); - var10.set(Calendar.MINUTE, Integer.valueOf(var16)); + var10.set(Calendar.YEAR, Integer.parseInt(var13)); + var10.set(Calendar.MONTH, Integer.parseInt(var20) - 1); + var10.set(Calendar.DATE, Integer.parseInt(var14)); + var10.set(Calendar.HOUR_OF_DAY, Integer.parseInt(var15)); + var10.set(Calendar.MINUTE, Integer.parseInt(var16)); long var17 = var10.getTimeInMillis(); if (var17 >= var11) { PendingIntent var21 = this.getPendingIntent(var3, var4, var5, var6, var7, var8, var9); diff --git a/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java b/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java index 92824b3e..731571fa 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java +++ b/app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java @@ -158,11 +158,11 @@ public class ContextProxy { String day = str1.substring(6, 8); String hour = str1.substring(8, 10); String minute = str1.substring(10, 12); - calendar1.set(Calendar.YEAR, Integer.valueOf(year).intValue()); - calendar1.set(Calendar.MONTH, Integer.valueOf(month).intValue()); - calendar1.set(Calendar.DAY_OF_MONTH, Integer.valueOf(day).intValue()); - calendar1.set(Calendar.HOUR_OF_DAY, Integer.valueOf(hour).intValue()); - calendar1.set(Calendar.MINUTE, Integer.valueOf(minute).intValue()); + calendar1.set(Calendar.YEAR, Integer.parseInt(year)); + calendar1.set(Calendar.MONTH, Integer.parseInt(month)); + calendar1.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day)); + calendar1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hour)); + calendar1.set(Calendar.MINUTE, Integer.parseInt(minute)); long l1 = calendar1.getTimeInMillis(); if (l1 > l) { PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7); @@ -274,11 +274,11 @@ public class ContextProxy { String str10 = str1.substring(6, 8); String str11 = str1.substring(8, 10); String str12 = str1.substring(10, 12); - calendar.set(Calendar.YEAR, Integer.valueOf(str8).intValue()); - calendar.set(Calendar.MONTH, Integer.valueOf(str9).intValue() - 1); - calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(str10).intValue()); - calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(str11).intValue()); - calendar.set(Calendar.MINUTE, Integer.valueOf(str12).intValue()); + calendar.set(Calendar.YEAR, Integer.parseInt(str8)); + calendar.set(Calendar.MONTH, Integer.parseInt(str9) - 1); + calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(str10)); + calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(str11)); + calendar.set(Calendar.MINUTE, Integer.parseInt(str12)); long l1 = calendar.getTimeInMillis(); if (l1 >= l) { PendingIntent pendingIntent = getPendingIntent(str1, str2, str3, str4, str5, str6, str7); diff --git a/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java b/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java index 6705d891..20f5ebc0 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DBHelper.java @@ -509,58 +509,32 @@ public class DBHelper { } public ArrayList queryNotice(String var1) { - ArrayList var2 = new ArrayList(); + ArrayList noticelist = new ArrayList(); ContentResolver var3 = this.cr; Uri var4 = ICContentProvider.NOTICE_URL; StringBuilder var5 = new StringBuilder(); var5.append("TIME like '"); var5.append(var1); var5.append("%'"); - Cursor var6 = var3.query(var4, (String[])null, var5.toString(), (String[])null, (String)null); - if (var6 != null) { + Cursor cr_notice = var3.query(var4, (String[])null, var5.toString(), (String[])null, (String)null); + if (cr_notice != null) { while(true) { - if (!var6.moveToNext()) { - var6.close(); + if (!cr_notice.moveToNext()) { + cr_notice.close(); break; } - var2.add(new NoticeContent(var6.getString(1), var6.getString(2), var6.getString(3), var6.getString(4), var6.getString(5), var6.getString(6), var6.getString(7))); + noticelist.add(new NoticeContent(cr_notice.getString(1), + cr_notice.getString(2), + cr_notice.getString(3), + cr_notice.getString(4), + cr_notice.getString(5), + cr_notice.getString(6), + cr_notice.getString(7))); } } - return var2; - } - - public int queryPowerSaveMode() { - Uri var4 = Uri.parse("content://com.cmcm.service/cmsetting"); - Cursor var6 = this.cr.query(var4, (String[])null, (String)null, (String[])null, (String)null); - byte var3 = 0; - byte var2 = 0; - int var1 = var3; - if (var6 != null) { - var1 = var3; - if (var6.moveToFirst()) { - while(true) { - if (var6.getString(var6.getColumnIndex("key")).equals("powersave")) { - var1 = var6.getInt(var6.getColumnIndex("value")); - StringBuilder var5 = new StringBuilder(); - var5.append("powersave mode ="); - var5.append(var1); - ICLogger.i(var5.toString()); - break; - } - - if (!var6.moveToNext()) { - var1 = var2; - break; - } - } - - var6.close(); - } - } - - return var1; + return noticelist; } public ArrayList querySilence(boolean var1) { diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 65907d8c..ee0a6ed4 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -12,6 +12,8 @@ public class protocolAPIHelper { private protocol_jiai protocoljiai_handler=null; private protocol_beehome protocolbeehome_handler=null; private protocol_ic protocolic_handler=null; + private protocol_fzd protocolfzd_handler=null; + public protocolAPIHelper(NettyConnection connect,Runtime runtime) { ICLogger.i("init Protocol "+Config.getProtocolNumber()); if (protocolbeehome_handler==null) @@ -20,6 +22,8 @@ public class protocolAPIHelper { protocoljiai_handler=new protocol_jiai(connect,runtime); if (protocolic_handler==null) protocolic_handler=new protocol_ic(connect,runtime); + if (protocolfzd_handler==null) + protocolfzd_handler=new protocol_fzd(connect,runtime); } /* 返回true 表示 cmd 全部解析成功 @@ -30,15 +34,18 @@ public class protocolAPIHelper { public boolean parserCmd(byte[] bytes) { switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: protocoljiai_handler.parserCmd(bytes); break; - case 1: + case Config.PROTOCOL_BEEHOME: protocolbeehome_handler.parserCmd(bytes); break; - case 2: + case Config.PROTOCOL_IC: protocolic_handler.parserCmd(bytes); break; + case Config.PROTOCOL_FZD: + protocolfzd_handler.parserCmd(bytes); + break; } return true; } @@ -52,15 +59,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=""; break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.APTP(temp_adusted,body_temp); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.APTP(temp_adusted,body_temp); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -68,15 +78,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP10(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP10(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP10(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -85,15 +98,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP00(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP00(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP00(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -102,15 +118,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP03(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP03(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP03(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -119,15 +138,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP01(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP01(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP01(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -135,15 +157,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP02(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP02(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP02(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -152,15 +177,18 @@ public class protocolAPIHelper { byte[] ret=null; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.AP07(packetTime,count,index,datalen,amrdata); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.AP07(packetTime,count,index,datalen,amrdata); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.AP07(packetTime,count,index,datalen,amrdata); break; + case Config.PROTOCOL_FZD: + ret=protocol_fzd.AP07(packetTime,count,index,datalen,amrdata); + break; } return ret; } @@ -169,15 +197,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.APHT(runtime); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.APHP(runtime); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.APHP(runtime); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -186,15 +217,18 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.APHT(ppg,bph,bpl); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.APHT(ppg,bph,bpl); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.APHT(ppg,bph,bpl); break; + case Config.PROTOCOL_FZD: + ret=""; + break; } return ret; } @@ -204,15 +238,60 @@ public class protocolAPIHelper { String ret=""; switch(Config.protocol_no) { - case 0: + case Config.PROTOCOL_JIAI: ret=protocol_jiai.APHT(ppg,bph,bpl); break; - case 1: + case Config.PROTOCOL_BEEHOME: ret=protocol_beehome.APHP(ppg,bph,bpl,spo2); break; - case 2: + case Config.PROTOCOL_IC: ret=protocol_ic.APHP(ppg,bph,bpl,spo2); break; + case Config.PROTOCOL_FZD: + ret=""; + break; + } + return ret; + } + + + public static String getDefaultServerIP(){ + + String ret=""; + switch(Config.protocol_no) + { + case Config.PROTOCOL_JIAI: + ret=protocol_jiai.defaultServerIP; + break; + case Config.PROTOCOL_BEEHOME: + ret=protocol_beehome.defaultServerIP; + break; + case Config.PROTOCOL_IC: + ret=protocol_ic.defaultServerIP; + break; + case Config.PROTOCOL_FZD: + ret=protocol_fzd.defaultServerIP; + break; + } + return ret; + } + public static int getDefaultServerPort(){ + + int ret=8090; + switch(Config.protocol_no) + { + case Config.PROTOCOL_JIAI: + ret=protocol_jiai.defaultServerPort; + break; + case Config.PROTOCOL_BEEHOME: + ret=protocol_beehome.defaultServerPort; + break; + case Config.PROTOCOL_IC: + ret=protocol_ic.defaultServerPort; + break; + case Config.PROTOCOL_FZD: + ret=protocol_fzd.defaultServerPort; + break; } 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 7fa942d3..4bb945fa 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -39,6 +39,8 @@ public class protocol_beehome { private static final String CMDHEADER = "IW"; private static final String CMDEND = "#"; private static final String CMDSPLIT = ","; + public static final String defaultServerIP="device.beehome360.com"; + public static final int defaultServerPort=5111; public enum CMD_TYPE { /*终端发起*/ AP00,//登录包 @@ -310,9 +312,9 @@ public class protocol_beehome { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append("getBP28AmrLen name = ").append(Name) @@ -595,7 +597,7 @@ public class protocol_beehome { String strSex=list[6]; connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex))); - runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex)); + runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex)); ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女")); }else{ ICLogger.i("BPXY format error!"); @@ -836,12 +838,12 @@ public class protocol_beehome { if (cmdarglist.length == 9){ imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); alarmtime=cmdarglist[5]; repeat=cmdarglist[6]; - alarmswitch=Integer.valueOf(cmdarglist[7]); - alarmtype = Integer.valueOf(cmdarglist[8]); + alarmswitch=Integer.parseInt(cmdarglist[7]); + alarmtype = Integer.parseInt(cmdarglist[8]); log(new StringBuilder("imei ").append(imei) .append(", cmdindex ").append(cmdindex) .append(", allswitch=").append(all_alarmswitch) @@ -860,8 +862,8 @@ public class protocol_beehome { }else if (cmdarglist.length == 5) { imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); }else{ log("data len is too small!"); } @@ -869,8 +871,8 @@ public class protocol_beehome { if (cmdarglist.length == 4){ alarmtime=cmdarglist[0]; repeat=cmdarglist[1]; - alarmswitch=Integer.valueOf(cmdarglist[2]); - alarmtype = Integer.valueOf(cmdarglist[3]); + alarmswitch=Integer.parseInt(cmdarglist[2]); + alarmtype = Integer.parseInt(cmdarglist[3]); log(new StringBuilder("set alarmtime ").append(alarmtime) .append(", relpeat ").append(repeat) @@ -965,9 +967,9 @@ public class protocol_beehome { String[] cmdlist=cmd.split(CMDSPLIT); if (cmdlist.length==5){ String time=cmdlist[1]; - int packetCount=Integer.valueOf(cmdlist[2]); - int packetIndex=Integer.valueOf(cmdlist[3]); - int receiveSuccess=Integer.valueOf(cmdlist[4]); + int packetCount=Integer.parseInt(cmdlist[2]); + int packetIndex=Integer.parseInt(cmdlist[3]); + int receiveSuccess=Integer.parseInt(cmdlist[4]); ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗")); if (receiveSuccess == 1){ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送 @@ -1008,7 +1010,7 @@ public class protocol_beehome { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); + int mod=Integer.parseInt(cmdlist[3]); int Cycle=900; switch(mod){ case ICLocation.NORMAL_MOD: @@ -1065,9 +1067,9 @@ public class protocol_beehome { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); - int Cycle=Integer.valueOf(cmdlist[4]); - int gpson=Integer.valueOf(cmdlist[5]); + int mod=Integer.parseInt(cmdlist[3]); + int Cycle=Integer.parseInt(cmdlist[4]); + int gpson=Integer.parseInt(cmdlist[5]); String msg=AP34(cmdlist[2],mod); //设定当前工作模式及循环频率 @@ -1272,7 +1274,7 @@ public class protocol_beehome { ICLogger.i("BP15 , 定位周期="+time+"秒"); Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS); - Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time)); + Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time)); runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context)); runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context)); //set AlarmCycle and trigger Location @@ -1337,9 +1339,9 @@ public class protocol_beehome { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); packetData= Util.subArray(bytes,msg[0].length()+msg[1].length()+msg[2].length()+msg[3].length()+msg[4].length()+msg[5].length()+6,bytes.length-1); StringBuffer stringBuffer=new StringBuffer(); @@ -1505,7 +1507,7 @@ public class protocol_beehome { //发送重置PPGCycle的广播,会在CoreServer里面执行 Intent intent = new Intent(); - intent.putExtra("PPGTestCycle",Integer.valueOf(cycle)); + intent.putExtra("PPGTestCycle",Integer.parseInt(cycle)); runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent); }else{ ICLogger.i("BP86 format error!"); @@ -1602,7 +1604,7 @@ public class protocol_beehome { if (list.length==4){ String index=list[2]; String freqstr=list[3]; - int freq=Integer.valueOf(freqstr); + int freq=Integer.parseInt(freqstr); connection.send(genStringMessage("APTE",APTE(index,freq))); ICLogger.i("收到服务器指令:测量体温 "+freq+"分钟一次。"); Config.setTemperatureTestCycle(runtime,freq); @@ -1678,10 +1680,10 @@ public class protocol_beehome { connection.send(genStringMessage("APJZ",APX1(index))); int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust; - ppg_adjust=Integer.valueOf(strXL); - bph_adjust=Integer.valueOf(strBPH); - bpl_adjust=Integer.valueOf(strBPL); - spo2_adjust=Integer.valueOf(strSpO2); + ppg_adjust=Integer.parseInt(strXL); + bph_adjust=Integer.parseInt(strBPH); + bpl_adjust=Integer.parseInt(strBPL); + spo2_adjust=Integer.parseInt(strSpO2); runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust); Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust); @@ -1813,13 +1815,7 @@ public class protocol_beehome { .append(CMDEND).toString(); } - /** - * - * @param cmd - * @param connection - * @param runtime - */ - public void handleBPHP(){ + public void handleBPHP(){ ICLogger.i("服务器收到APHP 心率血压血氧 !"); diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java new file mode 100644 index 00000000..da7d5d3c --- /dev/null +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -0,0 +1,1615 @@ +package com.ic.protocols; + +import android.content.ComponentName; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; + +import com.enqualcomm.support.Config; +import com.enqualcomm.support.CoreService; +import com.enqualcomm.support.bean.Alarm; +import com.enqualcomm.support.bean.Contact; +import com.enqualcomm.support.bean.Content; +import com.enqualcomm.support.bean.ICLocation; +import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.bean.StringMessage; +import com.enqualcomm.support.bean.VoiceContent; +import com.enqualcomm.support.bean.voicePacket; +import com.enqualcomm.support.service.HeartRateManager; +import com.enqualcomm.support.utils.Connection; +import com.enqualcomm.support.utils.ICLogger; +import com.enqualcomm.support.utils.NettyConnection; +import com.enqualcomm.support.utils.TimeUtil; +import com.enqualcomm.support.utils.Util; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; + +import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START; +import static com.enqualcomm.support.LocationClient.LOCATION_MODE; +import static com.enqualcomm.support.bean.Contact.GROUP_ALL; +import static java.lang.Math.abs; + +public class protocol_fzd { + private static final String TAG = "ICSrv." + protocol_fzd.class.getSimpleName(); + private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P"; + private static final String CMDHEADER = "IC"; + private static final String CMDEND = "#"; + private static final String CMDSPLIT = ","; + + public static final String defaultServerIP="zd.xcloudtech.com"; + public static final int defaultServerPort=9000; + + public enum CMD_TYPE { + /*终端发起*/ + AP00,//登录包 + BP00, + AP01,//混合定位 + BP01, + AP02,//多基站定位 + BP02, + AP92,//CDMA 混合定位 + BP92, + AP03,//心跳包 + BP03, + AP05,//语音查询接收 + BP05, + AP07,//语音上行 + BP07, + AP10,//报警与地址回复 + BP10, + AP49,//心率上传 + BP49, + APHT,//心率血压上传 + BPHT, + APTM,//基站校时及获取定位 + BPTM, + /* 服务器发起*/ + AP12, + BP12,//SOS 号码设置 + AP14, + BP14,//设置联系人白名单 + AP15, + BP15,//设置定位周期 + AP16, + BP16,//立即定位 + AP17, + BP17,//恢复出厂设置 + AP18, + BP18,//重启设备 + AP21, + BP21,//设置计步开关 + AP28, + BP28, //语音下行 + AP31, + BP31,//关机 + AP33, + BP33,//工作模式 + AP34, + BP34,//自定义工作模式 + APXL, + BPXL,//测量心率 + APXY, + BPXY,//测量血压 + APJZ, + BPJZ,//血压校准 + AP84, + BP84,//白名单开关 + AP85, + BP85,//设置闹钟 + AP86, + BP86,//心率血压测试周期 + AP89, + BP89,//心率血压阀值设置 + UNKNOWN_CMD, + } + + private static HashMap cmdMap = null; + + static { + cmdMap = new HashMap(); + cmdMap.put(CMD_TYPE.AP00, "AP00"); + cmdMap.put(CMD_TYPE.BP00, "BP00"); + cmdMap.put(CMD_TYPE.AP01, "AP01"); + cmdMap.put(CMD_TYPE.BP01, "BP01"); + cmdMap.put(CMD_TYPE.AP02, "AP02"); + cmdMap.put(CMD_TYPE.BP02, "BP02"); + cmdMap.put(CMD_TYPE.AP92, "AP92"); + cmdMap.put(CMD_TYPE.BP92, "BP92"); + cmdMap.put(CMD_TYPE.AP03, "AP03"); + cmdMap.put(CMD_TYPE.BP03, "BP03"); + cmdMap.put(CMD_TYPE.AP05, "AP05"); + cmdMap.put(CMD_TYPE.BP05, "BP05"); + cmdMap.put(CMD_TYPE.AP07, "AP07"); + cmdMap.put(CMD_TYPE.BP07, "BP07"); + cmdMap.put(CMD_TYPE.AP10, "AP10"); + cmdMap.put(CMD_TYPE.BP10, "BP10"); + cmdMap.put(CMD_TYPE.AP49, "AP49"); + cmdMap.put(CMD_TYPE.BP49, "BP49"); + cmdMap.put(CMD_TYPE.APHT, "APHT"); + cmdMap.put(CMD_TYPE.BPHT, "BPHT"); + cmdMap.put(CMD_TYPE.APTM, "APTM"); + cmdMap.put(CMD_TYPE.BPTM, "BPTM"); + cmdMap.put(CMD_TYPE.AP12, "AP12"); + cmdMap.put(CMD_TYPE.BP12, "BP12"); + cmdMap.put(CMD_TYPE.AP14, "AP14"); + cmdMap.put(CMD_TYPE.BP14, "BP14"); + cmdMap.put(CMD_TYPE.AP15, "AP15"); + cmdMap.put(CMD_TYPE.BP15, "BP15"); + cmdMap.put(CMD_TYPE.AP16, "AP16"); + cmdMap.put(CMD_TYPE.BP16, "BP16"); + cmdMap.put(CMD_TYPE.AP17, "AP17"); + cmdMap.put(CMD_TYPE.BP17, "BP17"); + cmdMap.put(CMD_TYPE.AP18, "AP18"); + cmdMap.put(CMD_TYPE.BP18, "BP18"); + cmdMap.put(CMD_TYPE.AP21, "AP21"); + cmdMap.put(CMD_TYPE.BP21, "BP21"); + cmdMap.put(CMD_TYPE.AP28, "AP28"); + cmdMap.put(CMD_TYPE.BP28, "BP28"); + cmdMap.put(CMD_TYPE.AP31, "AP31"); + cmdMap.put(CMD_TYPE.BP31, "BP31"); + cmdMap.put(CMD_TYPE.AP33, "AP33"); + cmdMap.put(CMD_TYPE.BP33, "BP33"); + cmdMap.put(CMD_TYPE.AP34, "AP34"); + cmdMap.put(CMD_TYPE.BP34, "BP34"); + cmdMap.put(CMD_TYPE.APXL, "APXL"); + cmdMap.put(CMD_TYPE.BPXL, "BPXL"); + cmdMap.put(CMD_TYPE.APXY, "APXY"); + cmdMap.put(CMD_TYPE.BPXY, "BPXY"); + cmdMap.put(CMD_TYPE.APJZ, "APJZ"); + cmdMap.put(CMD_TYPE.BPJZ, "BPJZ"); + cmdMap.put(CMD_TYPE.AP84, "AP84"); + cmdMap.put(CMD_TYPE.BP84, "BP84"); + cmdMap.put(CMD_TYPE.AP85, "AP85"); + cmdMap.put(CMD_TYPE.BP85, "BP85"); + cmdMap.put(CMD_TYPE.AP86, "AP86"); + cmdMap.put(CMD_TYPE.BP86, "BP86"); + cmdMap.put(CMD_TYPE.AP89, "AP89"); + cmdMap.put(CMD_TYPE.BP89, "BP89"); + } + + private NettyConnection mConnection=null; + private Runtime mRuntime=null; + + public protocol_fzd(NettyConnection connect, Runtime runtime) { + mConnection=connect; + mRuntime=runtime; + + } + + private StringBuffer cmdbuf = new StringBuffer(); + + /* + 输入的字符串,如果有完整命令,返回 true + 否则返回 false + */ + public boolean isCmdStr(String msg) { + /*** + * IC* + */ + + int head_index = msg.indexOf(CMDHEADER); + if (head_index >= 0) { + int end_index = msg.indexOf("#", head_index); + if (end_index >= 0) { + return true; + } + } + return false; + } + + private void log(String msg) { + ICLogger.log(TAG, msg); + } + + private void log(String function, String msg) { + ICLogger.log(TAG, function, msg); + } + + + /**/ + public static StringMessage genStringMessage(String cmdName, String msg){ + StringMessage sm=new StringMessage(new String[]{cmdName,msg}); + sm.refresh(msg); + return sm; + } + + /* + 返回true 表示 cmd 全部解析成功 + 返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用 + 字符串通过#号进行识别。 + 每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃 + */ + public boolean parserCmd(byte[] bytes) { + boolean iscmdComplete = false; + boolean ret = true; + String last_inCompletecmd = ""; + String cmd_msgbuf=new String(bytes); + log("bytes.size "+bytes.length); +// cmdbuf.append(cmd_msgbuf); + cmdbuf.append(cmd_msgbuf); + log("cmdbuf.size "+cmdbuf.length() +" "+cmdbuf.toString()); + /* + 如果不是 #结尾,就认为 接收数据不全,置位。 + */ + if (cmdbuf.toString().endsWith(CMDEND)) { + iscmdComplete = true; + } + String[] cmdlist = cmd_msgbuf.split(CMDEND); + int listlen = cmdlist.length; + log("listlen "+listlen); + /* + 如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd + */ + if (cmdlist.length > 0 && iscmdComplete == false) { + listlen -= 1; + last_inCompletecmd = cmdlist[listlen]; + log("cmd not complete , " + last_inCompletecmd); + } + for (int i = 0; i < listlen; i++) { + for (CMD_TYPE key : cmdMap.keySet()) { + if (cmdlist[i].startsWith(CMDHEADER + cmdMap.get(key))) { + log("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key) + " , " + cmdlist[i]); + if (key == CMD_TYPE.BP28) { + //如果是BP28则 后面的数据是音频,需要保留 + byte[] amrBuf; + int amrLen = getBP28Amrlen(cmdlist[i] ); + if (bytes.length > amrLen) { + handleCmd(key, cmdlist[i], bytes); + } + } else { + handleCmd(key, cmdlist[i]); + } + } + } + } + + cmdbuf = new StringBuffer().append(last_inCompletecmd); + return ret; + } + public int getBP28Amrlen(String cmd) { + + String Name; + String appendIndex; + int packetCount; + int currentId; + int packetLen; + + + String[] msg=cmd.split(CMDSPLIT); + if (msg.length>=6){ + + Name=msg[1]; + appendIndex=msg[2]; + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); + + StringBuffer stringBuffer=new StringBuffer(); + stringBuffer.append("getBP28AmrLen name = ").append(Name) + .append(",appendIndex = ").append(appendIndex) + .append(",packetCount = ").append(packetCount) + .append(",currentId = ").append(currentId) + .append(",packetLen = ").append(packetLen); + + + log( stringBuffer.toString()); + return packetLen; + }else{ + log("getBP28AmrLen","format Error"); + + } + return -1; + } + /*登录*/ + public static String AP00(Runtime ds) { + //示例数据:IWAP00867155030001063# + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00)).append(ds.IMEI()).append(CMDEND).toString(); + } + + //处理 登录 BP00 + public void handleBP00(Runtime runtime,String cmd){ + String[] msg=cmd.split(CMDSPLIT); +// get Msg :IWBP00,20191229171933,8# (size)24 +// 12-30 01:19:33.861 6492-6492/com.enqualcomm.support I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8 + + if (msg.length>=3) { + log("handleBP00", "Set Datetime " + msg[1]); + log("handleBP00", "Set TimeZone " + msg[2]); + +// Date datetime= TimeUtil.parseDatetiime(msg[1]); +// int timezone=Integer.parseInt(msg[2]); +// if (datetime!=null){ +// ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); +// TimeUtil.setTimeZone(timezone); +// +// +// ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); +// TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone); +// ICLogger.i("==="+TimeUtil.getDefaultTimeZone()); +// +// } +// Set Datetime 20200505112734 +// Set TimeZone 8 + + }else{ + log("handleBP00","format Error"); + } + } + + + public static String AP03(Runtime ds) { + //示例数据:IWAP03,06000908000102,5555,30# IWAP03,000000null00000,0,0# + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP03)).append(CMDSPLIT).append(String.format("%03d",abs(ds.getSignalStrength()))) + .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") + .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT) + .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString(); + } + //处理 心跳 BP03 + public void handleBP03(String cmd){ + + log("BP03心跳接收成功"); + } + + + public static String AP10(Runtime ds){ + + /** + * IWAP10080524A2232.9806N11404.9355E000.1 061830 323.87 060 009 080 0 05 02, + * 460,0,9520,3671, + * 00,zh-cn,00, + * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05/06:跌倒报警)) + * zh-cn:设备语言 + * 00:第一个0:是否需要回复地址信息,0:不回复,1回复. + * HOME|74-DE-2B-44-88-8C|97&HOME1|74-DE-2B-44-88-8C|97&HOME2|74-DE-2B-44-88-8C|97&HOME3|74-DE-2B-44-88-8C|97# + * IW标识符 + * AP10:命令字 + * 080524: 2008 å¹´05 月24 + * A:“A”表示数据有效,”V”无效,如为V则取LBS数据 + * 2232.9806N11404.9355E000.1: 北纬22度32.9806分,东经114度04.9355分,速度为000.1 km/h,如经纬度无效,可默认全为0,如0000.0000N00000.0000E + * 061830: 格林尼治时间06 点18 分30 秒 + * 323.87:方向角323.87° + * 06000908000102:060为GSM信号,009为参与定位的卫星数,080为电池电量,0,保留位,01为设防状态,02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置) + * 460,0,9520,3671 : LBS基站数据,MCC国家码,460为中国,0:MNC,0为移动,9520:LAC,十进制,3671,CID,十进制 + * 00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低) + * zh-cn:设备语言 + * 00:第一个0:是否需要回复地址信息,0:不回复,1回复. + */ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate()) + .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength()))) + .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") + .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT) + .append(ds.getLBSData()).append(CMDSPLIT) + .append(ds.getAlarmType()).append(CMDSPLIT) + .append(ds.getLanguage()).append(CMDSPLIT) + .append("00").append(CMDSPLIT) //不回复地址 + .append(ds.getWifiInfo()).append(CMDEND).toString(); + + } + + /*LBS+GPS混合定位*/ + public static String AP01(Runtime ds) { + //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102, + // 460,0,9520,3671, + // Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97# +// IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,# + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(TimeUtil.getShortDate()) + .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength()))) + .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") + .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT) + .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); + } + + //处理 定位 BP01 + public void handleBP01(String cmd){ + log("BP01定位接收成功"); + } + + + + /*LBS+WiFi混合定位*/ + public static String AP02(Runtime ds) { + //示例数据:IWAP02, + // zh_cn, + // 0, + // 7, + // 460,0, + // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7, + // 4, + // 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65# +// IW标识符 +// AP02:命令字 +// zh_cn: 语言标志 +// 0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息 +// 7: 表示共有7组基站 +// 460: MCC 国家码 +// 0: MNC运营商代码 +// 9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应 10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm) +// 4: 表示WIFI组数, +// 1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度) + + int apsum=0; + String wifiinfo=ds.getWifiInfo(); + if (!wifiinfo.isEmpty()) { + String[] list = wifiinfo.split("&"); + apsum = list.length; + } + + ICLogger.i("Wifi ap sum "+apsum); + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT) + .append(ds.getLanguage()).append(CMDSPLIT) + .append(0).append(CMDSPLIT) //为0时不回复地址 + .append(ds.getLBSMultiStationData()).append(CMDSPLIT) //基站信息数据 + .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); //wifi信息数据 + } + + //处理 定位 BP01 + public void handleBP02(String cmd){ + log("BP02定位接收成功"); + } + + + + public static String APXL(String id){ +//设备响应: IWAPXL,080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL)) + .append(CMDSPLIT).append(id) + .append(CMDEND).toString(); + } + + /** + * 测量心率 + * @param cmd + * @param connection + */ + public void handleBPXL(String cmd, Connection connection){ + //IWBPXL,353456789012345,080835# + //说明: + //IW:标识符 + //BPXL : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //设备响应: IWAPXL,080835# + //080835:指令流水号 + String[] list=cmd.split(CMDSPLIT); + if (list.length==3){ + String index=list[2]; + String imei=list[1]; + ICLogger.i("Handle BPXL IMEI "+imei+",index "+index); + connection.send(genStringMessage("APXL",APXL(index))); + }else{ + ICLogger.i("BPXL format error!"); + } + + } + + public static String APXY(String id){ +//设备响应: IWAPXY,080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY)) + .append(CMDSPLIT).append(id) + .append(CMDEND).toString(); + } + + /** + * 测量血压 + * @param cmd + * @param connection + */ + public void handleBPXY(String cmd,Connection connection){ + //IWBPXY,353456789012345,080835# + //说明: + //IW:标识符 + //BPXL : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //设备响应: IWAPXY,080835# + //080835:指令流水号 + String[] list=cmd.split(CMDSPLIT); + if (list.length==3){ + String index=list[2]; + String imei=list[1]; + ICLogger.i("Handle BPXY IMEI "+imei+",index "+index); + connection.send(genStringMessage("APXY",APXY(index))); + }else{ + ICLogger.i("BPXY format error!"); + } + + } + + + + public static String APJZ(String id,String BPH,String BPL,String Age,String Sex){ + //设备响应: IWAPJZ,792997,120,85,42,1# + //792997:指令流水号 + // 高压120,低压85,年龄42,1 男性 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ)) + .append(CMDSPLIT).append(id) + .append(CMDSPLIT).append(BPH) + .append(CMDSPLIT).append(BPL) + .append(CMDSPLIT).append(Age) + .append(CMDSPLIT).append(Sex) + .append(CMDEND).toString(); + } + + /** + * + * @param cmd + * @param connection + * @param runtime + */ + public void handleBPJZ(String cmd,Connection connection,Runtime runtime){ + //cmdbuf.size 42 IWBPJZ,867155030001063,199600,120,85,45,1# 高压120,低压85,年龄45,男性 +// cmdbuf.size 42 IWBPJZ,867155030001063,909957,120,85,42,0# 高压120,低压85,年龄42,女性 + //IWBPJZ,353456789012345,080835,110,75# + //说明: + //IW:标识符 + //BPJZ : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //110:高压值 + //75:低压值 + //080835 :指令流水号 + //设备响应: IWAPJZ,792997,120,85,42,1# + //792997:指令流水号 + String[] list=cmd.split(CMDSPLIT); + if (list.length==7){ + String index=list[2]; + String imei=list[1]; + String strBPH=list[3]; + String strBPL=list[4]; + String strAge=list[5]; + String strSex=list[6]; + + connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex))); + runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex)); + ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女")); + }else{ + ICLogger.i("BPXY format error!"); + } + } + + + + //重启 + + + public static String AP18(String index){ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + + public void handleBP18(Connection connection,String cmd) { + + // IWBP18,867155030001063,161723 + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==3) { + + connection.send(genStringMessage("AP18",AP18(cmdlist[2]))); + + } + } + //恢复出厂设置 + + public static String AP17(String index){ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + public void handleBP17(Connection connection,String cmd) { + + // IWBP17,867155030001063,161723 + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==3) { + + connection.send(genStringMessage("AP17",AP17(cmdlist[2]))); + + } + } + + //关机 + + + public static String AP31(String index){ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + public void handleBP31(Connection connection,String cmd) { + + // IWBP31,867155030001063,161723 + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==3) { + + connection.send(genStringMessage("AP31",AP31(cmdlist[2]))); + + } + } + + //设置SOS号码 + public static String AP12(String index,String phNum1,String phNum2,String phNum3){ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12)) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(phNum1) + .append(CMDSPLIT).append(phNum2) + .append(CMDSPLIT).append(phNum3) + .append(CMDEND).toString(); + } + + //设置SOS号码 + public void handleBP12(Connection connection,String cmd,Runtime runtime){ + // IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX# + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length>=3){ + String index=cmdlist[2]; + String phNum1=cmdlist.length==3?"":cmdlist[3]; + String phNum2=cmdlist.length>3?(cmdlist.length==4?"":cmdlist[4]):""; + String phNum3=(cmdlist.length>4)?(cmdlist.length==5? "":cmdlist[5]):""; + ICLogger.i(new StringBuffer().append("get Emegency Numbs "+phNum1+","+phNum2+","+phNum3).toString()); + connection.send(genStringMessage("AP12",AP12(index,phNum1,phNum2,phNum3))); + + ArrayList contactArray=new ArrayList(); + if (!phNum1.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",phNum1)); + if (!phNum2.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",phNum2)); + if (!phNum3.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos3",phNum3)); + + runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true); + + }else{ + ICLogger.i(" BP12 format error!"); + } + } + + + public static String AP14(String index,String[] phnumbs){ + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14)) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(phnumbs[0]) + .append(CMDSPLIT).append(phnumbs[1]) + .append(CMDSPLIT).append(phnumbs[2]) + .append(CMDSPLIT).append(phnumbs[3]) + .append(CMDSPLIT).append(phnumbs[4]) + .append(CMDSPLIT).append(phnumbs[5]) + .append(CMDSPLIT).append(phnumbs[6]) + .append(CMDSPLIT).append(phnumbs[7]) + .append(CMDSPLIT).append(phnumbs[8]) + .append(CMDSPLIT).append(phnumbs[9]) + .append(CMDEND).toString(); + } + //设置通讯录,白名单(10个) + public void handleBP14(Connection connection,String cmd , Runtime runtime){ +// IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,, +/** + * IWBP14,353456789012345,080835, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx, + * D3590D54|135xxxxxxxxxx# + */ + String[] cmdlist=cmd.split(CMDSPLIT); + String[] phnums=new String[]{"","","","","","","","","",""}; + StringBuffer sb=new StringBuffer().append("recv phone Numbs "); + if (cmdlist.length>=3){ + switch (cmdlist.length){ + case 13: + phnums[9]=cmdlist[12]; + sb.append(phnums[9]).append(","); + case 12: + phnums[8]=cmdlist[11]; + sb.append(phnums[8]).append(","); + case 11: + phnums[7]=cmdlist[10]; + sb.append(phnums[7]).append(","); + case 10: + phnums[6]=cmdlist[9]; + sb.append(phnums[6]).append(","); + case 9: + phnums[5]=cmdlist[8]; + sb.append(phnums[5]).append(","); + case 8: + phnums[4]=cmdlist[7]; + sb.append(phnums[4]).append(","); + case 7: + phnums[3]=cmdlist[6]; + sb.append(phnums[3]).append(","); + case 6: + phnums[2]=cmdlist[5]; + sb.append(phnums[2]).append(","); + case 5: + phnums[1]=cmdlist[4]; + sb.append(phnums[1]).append(","); + case 4: + phnums[0]=cmdlist[3]; + sb.append(phnums[0]).append(","); + + } + + String index=cmdlist[2]; + ICLogger.i(sb.toString()); + connection.send(genStringMessage("AP14",AP14(index,phnums))); + ArrayList contactArray=new ArrayList(); + for (int i=0; i< phnums.length;i++){ + String[] tmp= phnums[i].split("\\|"); + if (tmp.length==2){ + String name= Util.decodeUnicode2Utf8(tmp[0]); + String phonem=tmp[1]; + ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem); + contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem)); + }else{ + ICLogger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length); + + } + } +// contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666")); +// contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666")); +// contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666")); +// contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666")); + + runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false); + + }else{ + ICLogger.i(" BP14 format error!"); + } + + } + + + + public static String AP85(Runtime ds,String cmddata){ +//示例数据:IWAP49,68## + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85)) + .append(CMDSPLIT).append(cmddata) + .append(CMDEND).toString(); + + } + //设置闹钟 + public void handleBP85(String cmd , Connection connection,Runtime runtime){ +// IWBP85,867155030001063,155312,1,1,0235,12,1,1 +// IWBP85,867155030002145,945166,1,0, +// IWBP85,867155030001064,265960,1,1,1130,,1,1 +// IWBP85,353456789012345,080835,1,3, 0900,135,1,1@0900 ,135,1,2@0900 ,135,1,3# +//353456789012345:IMEI号,设备唯一ID +//080835 :指令流水号 +//1: 表示闹钟总开关,1为开,0 为关 +//3: 表示闹钟个数 +//0900 ,135,1,1,表示一组闹钟,0900表示早上09:00, 135表示周一周三周五,使用24小时制 +//1表示该组闹钟开启或关闭状态 1表示开启 0表示关闭 +//1表示吃药提醒 +//2 表示喝水提醒 +//3 表示久坐提醒 +//多组闹钟之间用”@”符号分隔 + + String imei="",cmdindex="0"/*指令流水号*/; + int all_alarmswitch=0 /*总开关 1为开,0 为关*/, + alarmswitch=0 /*1为开,0 为关*/, + alarmcount=0 /*表示闹钟个数*/; + String alarmtime="";//0900表示早上09:00 + int alarmtype=1; //1表示吃药提醒 , 2 表示喝水提醒 ,3 表示久坐提醒 + String repeat="";// 135表示周一周三周五,使用24小时制 + String[] datalist= cmd.split("@"); + ArrayList alarmlist=new ArrayList<>(); + if (datalist.length >0){ + for (int i =0 ; i< datalist.length;i++){ + String [] cmdarglist=datalist[i].split(","); + + if (i == 0){ + if (cmdarglist.length == 9){ + imei=cmdarglist[1]; + cmdindex=cmdarglist[2]; + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); + alarmtime=cmdarglist[5]; + repeat=cmdarglist[6]; + alarmswitch=Integer.parseInt(cmdarglist[7]); + alarmtype = Integer.parseInt(cmdarglist[8]); + log(new StringBuilder("imei ").append(imei) + .append(", cmdindex ").append(cmdindex) + .append(", allswitch=").append(all_alarmswitch) + .append(", all alarm count=").append(alarmcount) + .toString() + ); + + log(new StringBuilder("alarmtime ").append(alarmtime) + .append(", relpeat ").append(repeat) + .append(", switch=").append(alarmswitch) + .append(", alarmtype=").append(alarmtype) + .toString() + ); + alarmlist.add(new Alarm("ST"+alarmtime.substring(0,2)+"."+alarmtime.substring(2),"W"+repeat,"CON",alarmswitch==1?"ON":"OFF","闹铃")); + + }else if (cmdarglist.length == 5) { + imei=cmdarglist[1]; + cmdindex=cmdarglist[2]; + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); + }else{ + log("data len is too small!"); + } + }else{ + if (cmdarglist.length == 4){ + alarmtime=cmdarglist[0]; + repeat=cmdarglist[1]; + alarmswitch=Integer.parseInt(cmdarglist[2]); + alarmtype = Integer.parseInt(cmdarglist[3]); + + log(new StringBuilder("set alarmtime ").append(alarmtime) + .append(", relpeat ").append(repeat) + .append(", switch=").append(alarmswitch) + .append(", alarmtype=").append(alarmtype) + .toString() + ); + + alarmlist.add(new Alarm("ST"+alarmtime.substring(0,2)+"."+alarmtime.substring(2),"W"+repeat,"CON",alarmswitch==1?"ON":"OFF","闹铃")); + + }else{ + log("data len is too small!"); + } + + } + }//循环获取alarm数据结束 + runtime.getDbHelper().saveAlarm(alarmlist); + + //do clean and set alarm things + + } +//IWBP85,867155030002145,410385,1,0,# + + String replacement=new StringBuilder("IWBP85,").append(imei).append(",").toString(); + String replycmd = cmd.replace(replacement,""); + ICLogger.i("gen reply "+replacement+" "+replycmd); + connection.send(genStringMessage("AP85",AP85(runtime,replycmd))); + } + + +// AP05命令L02服务器不适用 +// public static String AP05(boolean recvFlag){ +// +//// IWAP05,1# +// return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP05)) +// .append(CMDSPLIT).append(recvFlag?1:0) +// .append(CMDEND).toString(); +// +// } +// +// +// public void handleBP05(String cmd){ +//// IWBP05,6# +// String[] cmdlist=cmd.split(CMDSPLIT); +// if (cmdlist.length>1){ +// ICLogger.i(" 服务器有 " +cmdlist[1]+" 条语音未接收!"); +// } +// } + + + + + public static byte[] AP07(String packetTime,int count,int index,int datalen,byte[] amrdata){ +//IWAP07,20140818064408,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX# +//说明: +//IW:标识符 +//AP07 : 命令字符 +//20140818064408 :yyyyMMddHHmmss 格式的年月日时分秒,设备录音时间 +//6:语音包分包总数 +//1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同 +//1024 :语音包长度 +//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数 +//语音包上传规则: +//按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。 +//收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。 +//如果设备回复确认数据包接收失败状态,则重复发送上一个数据包 + + + String sb=new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP07)) + .append(CMDSPLIT).append(packetTime) + .append(CMDSPLIT).append(count) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(datalen) + .append(CMDSPLIT).toString(); + + byte[] sentbuf=new byte[sb.length()+datalen+1]; + System.arraycopy(sb.getBytes(),0,sentbuf,0,sb.length()); + System.arraycopy(amrdata,0,sentbuf,sb.length(),datalen); + sentbuf[sb.length()+datalen]='#'; + + return sentbuf; + + } + + + public void handleBP07(String cmd , NettyConnection connection ){ +//平台响应: IWBP07,20140818064408,6,1,1# +//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒 +//6:语音包分包总数 +//1:当前设备收到的是第几个包 +//1:表示服务器接受数据成功,0表示服务器接受数据失败 + String[] cmdlist=cmd.split(CMDSPLIT); + if (cmdlist.length==5){ + String time=cmdlist[1]; + int packetCount=Integer.parseInt(cmdlist[2]); + int packetIndex=Integer.parseInt(cmdlist[3]); + int receiveSuccess=Integer.parseInt(cmdlist[4]); + ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗")); + if (receiveSuccess == 1){ + //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送 + voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex); + } + //发送消息,再次检查要发送的语音包,确认其发送完毕 + connection.DeliverCMDMessageToSystem("BP07","SentVoicePacket"); + + }else{ + ICLogger.i(" BP07 Format error!"); + } + } + + + + public static String AP33(String cmdindex,int workMode){ +//IWAP33,080835,1# +//080835:指令流水号 +//1:设置信息,供服务器同步 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDSPLIT).append(workMode) + .append(CMDEND).toString(); + } + + //设置工作模式 + public void handleBP33(Connection connection,Runtime runtime,String cmd){ + +// IWBP33,867155030001063,560555,1 +// IW:标识符 +// BP33 : 命令字符 +// 353456789012345:IMEI号,设备唯一ID +// 080835:指令流水号 +// 1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式 + + String[] cmdlist=cmd.split(","); + if (cmdlist.length == 4){ + + + log("work mode "+cmdlist[3]); + int mod=Integer.parseInt(cmdlist[3]); + int Cycle=900; + switch(mod){ + case ICLocation.NORMAL_MOD: + Cycle=900; + break; + case ICLocation.LOWPOWER_MOD: + Cycle=3600; + break; + case ICLocation.EMERGNECY_MOD: + case ICLocation.REALTIME_MOD: + Cycle=60; + break; + + } + + String msg=AP33(cmdlist[2],mod); + //设定当前工作模式及循环频率 + connection.send(genStringMessage("AP33",msg)); + log("reply msg "+msg); + log("LOCATION_MODE "+LOCATION_MODE+" mod "+ mod); + Config.setLocationMode(runtime.getContextProxy().context,mod); + Config.setLocationCycle(runtime.getContextProxy().context,Cycle); + runtime.getLocationInstance().setLocation_cycle(Cycle); + runtime.getLocationInstance().setWorkingMod(mod); +// CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod()); + //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。 + } + + } + + + public static String AP34(String cmdindex,int workMode){ +//IWAP34,588854,1# +//080835:指令流水号 +//8:模式 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDSPLIT).append(workMode) + .append(CMDEND).toString(); + } + + //设置自定义工作模式 + public void handleBP34(Connection connection,Runtime runtime,String cmd){ + +// IWBP34,867155030001063,588854,8,900,1# +// IW:标识符 +// BP33 : 命令字符 +// 353456789012345:IMEI号,设备唯一ID +// 080835:指令流水号 +// 1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式 + + String[] cmdlist=cmd.split(","); + if (cmdlist.length == 6){ + + + log("work mode "+cmdlist[3]); + int mod=Integer.parseInt(cmdlist[3]); + int Cycle=Integer.parseInt(cmdlist[4]); + int gpson=Integer.parseInt(cmdlist[5]); + + String msg=AP34(cmdlist[2],mod); + //设定当前工作模式及循环频率 + connection.send(genStringMessage("AP34",msg)); + + if(gpson==1){ + mod=ICLocation.CUSTOM_MOD8_GPS; + }else{ + mod=ICLocation.CUSTOM_MOD8_WIFI; + } + log("reply msg "+msg); + log("LOCATION_MODE "+LOCATION_MODE+" mod "+ mod + ", cycle = "+Cycle+", GPS On= "+gpson); + Config.setLocationMode(runtime.getContextProxy().context,mod); + Config.setLocationCycle(runtime.getContextProxy().context,Cycle); + runtime.getLocationInstance().setLocation_cycle(Cycle); + runtime.getLocationInstance().setWorkingMod(mod); +// CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod()); + //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。 + } + + } + + /** + * 心率上传,返回协议字串 + * @param ds + * @return + */ + public static String AP49(Runtime ds){ + //示例数据:IWAP49,68## + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49)) + .append(CMDSPLIT).append(ds.getHRS().getPPG()) + .append(CMDEND).toString(); + + } + + + + + /** + * 返回上传心率血压的协议字串 + * @param ds + * @return + */ + public static String APHT(Runtime ds){ + //IWAPHT,60,130,85# + //说明: + //IW:标识符 + //APHT : 命令字符 + //60 : 表示心率 + //130: 血压高压 [收缩压] + //85 : 血压低压 [舒张压] + //平台响应: IWBPHT# + //表示平台已接收,可不作响应 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT)) + .append(CMDSPLIT).append(ds.getHRS().getPPG()) + .append(CMDSPLIT).append(ds.getHRS().getBPH()) + .append(CMDSPLIT).append(ds.getHRS().getBPL()) + .append(CMDEND).toString(); + } + public static String APHT(int ppg,int bph,int bpl){ + //IWAPHT,60,130,85# + //说明: + //IW:标识符 + //APHT : 命令字符 + //60 : 表示心率 + //130: 血压高压 [收缩压] + //85 : 血压低压 [舒张压] + //平台响应: IWBPHT# + //表示平台已接收,可不作响应 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT)) + .append(CMDSPLIT).append(ppg) + .append(CMDSPLIT).append(bph) + .append(CMDSPLIT).append(bpl) + .append(CMDEND).toString(); + } + + + //立即定位反馈 + public static String AP16(String cmdindex){ +//IWAP16,080835# +//080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP16)) + .append(CMDSPLIT).append(cmdindex) + .append(CMDEND).toString(); + } + // 立即定位指令(长链接有效) + public void handleBP16(Connection connection,Runtime runtime,String cmd){ + //示例数据:IWBP16,867155030001063,335386 +// IWBP16,353456789012345,080835# +// 说明: +// IW:标识符 +// BP16 : 命令字符 +// 353456789012345:IMEI号,设备唯一ID +// 080835 :指令流水号 + String[] cmdlist = cmd.split(","); + if(cmdlist.length==3){ + log("imei "+cmdlist[1]+", cmdindex "+cmdlist[2]); + + connection.send(genStringMessage("AP16",AP16(cmdlist[2]))); + }else{ + log("error BP16 format"); + } + } + + + /*通过基站获取时间和坐标*/ + public static String APTM(Runtime ds){ + //示例数据:IWAPTM,460,0,9750,3613# + //说明: + //IW:标识符 + //APTM : 命令字符 + //460:MCC + //0: MNC + //9750: LAC + //3613: CID + + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM)) + .append(CMDSPLIT).append(ds.getLocationInstance().getMCC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getMNC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getLAC()) + .append(CMDSPLIT).append(ds.getLocationInstance().getGSMStationCID()) + .append(CMDEND).toString(); + + } + + public void handleBPTM(String cmd){ + //平台响应: IWBPTM,20160225090909,22.123456,113.654321# + //返回时间,格式为:yyyyMMddHHmmss ,为UTC0 时间 + //经纬度保留六位小数,若没取到则返回 0 + String[] list=cmd.split(CMDSPLIT); + + if(list.length==4){ + + String time=list[1]; + String lat=list[2]; + String lon=list[3]; + ICLogger.i("BPTM , time="+time+", lat="+lat+", lon="+lon); + }else{ + ICLogger.i("BPTM format error"); + } + + + } + + public static String AP15(String index){ +//IWAP15, 080835# +//080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + + //设置定位周期 + public void handleBP15(String cmd ,Connection connection,Runtime runtime){ +// IWBP15, 353456789012345, 080835, 30# +// 353456789012345:IMEI号,设备唯一ID +// 080835 :指令流水号 +// 30: 表示频率为30分钟 + + String[] list=cmd.split(CMDSPLIT); + + if(list.length==4){ + String index=list[2]; + String time=list[3]; + connection.send(genStringMessage("AP15",AP15(index))); + ICLogger.i("BP15 , 定位周期="+time+"秒"); + + Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS); + Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time)); + runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context)); + runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context)); + //set AlarmCycle and trigger Location + CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod()); + }else{ + ICLogger.i("BP15 format error"); + } + + } + + + + + + + /*语音下行反馈*/ + public static String AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) { + //示例数据:IWAP28,D3590D54,xxxx,6,1,1# + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28)) + .append(CMDSPLIT).append(name) + .append(CMDSPLIT).append(msg) + .append(CMDSPLIT).append(packagecount) + .append(CMDSPLIT).append(currentpackageindex) + .append(CMDSPLIT).append(received_success) + .append(CMDEND).toString(); + } + + //处理 BP28 语音消息 + public void handleBP28(NettyConnection connection,String cmd,Runtime runtime,byte[] bytes) { + //log("handleBP28 msg"+cmd); +/** + * IWBP28, D3590D54,XXXX,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX# + * 说明: + * IW:标识符 + * BP28 : 命令字符 + * D3590D54:UNICODE编码,发送者名称 + * XXXX: 附加信息,在响应数据包时,将附加信息原样响应,类似流水号 + * 6:语音包分包总数 + * 1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同 + * 1024 :语音包长度 + * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数 + * 语音包上传规则: + * 按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。 + * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。 + * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包 + * 设备响应: IWAP28,D3590D54,XXXX,6,1,1# + * D3590D54:UNICODE编码,发送者名称 + * XXXX: 附加信息,原样返回 + * 6:语音包分包总数 + * 1:当前设备收到的是第几个包 + * 1:表示设备接受数据成功,0表示设备接受数据失败 + */ + String Name; + String appendIndex; + int packetCount; + int currentId; + int packetLen; + byte[] packetData; + + String[] msg= cmd.split(CMDSPLIT); + if (msg.length>=6){ + + Name=msg[1]; + appendIndex=msg[2]; + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); + packetData= Util.subArray(bytes,msg[0].length()+msg[1].length()+msg[2].length()+msg[3].length()+msg[4].length()+msg[5].length()+6,bytes.length-1); + + StringBuffer stringBuffer=new StringBuffer(); + stringBuffer.append("recv BP28 name = ").append(Name) + .append(",appendIndex = ").append(appendIndex) + .append(",packetCount = ").append(packetCount) + .append(",currentId = ").append(currentId) + .append(",packetLen = ").append(packetLen) + .append(",packetDatalen = ").append(packetData.length); + + log( stringBuffer.toString()); + connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,1))); + voicePacket.getInstance().appendVoice(Name,appendIndex,packetCount,currentId,packetLen,packetData); + log("================"+voicePacket.getInstance().toString()); + if (voicePacket.getInstance().isFinished()) + { + + String dir = Environment.getExternalStorageDirectory()+ "/Android/VoiceCache"; + String amrFilepath=Util.saveFile(voicePacket.getInstance().getVoicePacketBytes(),0,voicePacket.getInstance().getVoicePacketLen(),new File(dir),"receive_"+voicePacket.getInstance().getPacketTime()+".amr"); + ICLogger.i("save Amr file to "+amrFilepath); + voicePacket.getInstance().clearPacket(); + VoiceContent voiceContent=VoiceContent.placeHolderIn(Content.CONTACT_CATEGORY_GROUP,GROUP_ALL,amrFilepath); + + + final Uri uri2 = runtime.getDbHelper().insertMessage( voiceContent); + + //回复UI消息,表示已经接收到 + voiceContent.status = 3; + voiceContent.serverTime = TimeUtil.getSystemTime3(); + voiceContent.preview = String.valueOf(Util.getDuration(voiceContent.content)); + runtime.getDbHelper().updateMessage(voiceContent, uri2); + +// runtime.getContextProxy().sendBroadcast(ACTION_IMESSAGE, runtime); + + connection.DeliverCMDMessageToSystem("NewVoice", amrFilepath);//通知下面线程状态变化 + } + + }else{ + log("handleBP28","format Error"); +// connection.send(genStringMessage("AP28",AP28(Name,appendIndex,packetCount,currentId,0))); + + } + + } + + public void sendBroadcast(String cmd, Runtime dev) { + + ComponentName componentName = new ComponentName("com.eqc.watch", "com.eqc.watch.launcher.ChatActivity"); + Intent intent = new Intent("android.intent.action.MAIN"); +// intent.putExtra("ACTIVITY_TYPE", 2); +// intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setComponent(componentName); + dev.getContextProxy().context.startActivity(intent); + } + + //白名单开关(下行协议号:BP84,响应:AP84) + public static String AP84(String index,int success){ + + //设备响应: IWAP80,080835,1# + //080835:指令流水号 + //1:表示设备执行成功,0 表示设备执行失败 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84)) + .append(CMDSPLIT).append(index) + .append(CMDSPLIT).append(success) + .append(CMDEND).toString(); + } + + public void handleBP84(String cmd,Connection connection){ +//示例: + //IWBP84,353456789012345,080835,1# + //说明: + //IW:标识符 + //BP84 : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //1: 表示白名单开,0 表示白名单关 + String[] list=cmd.split(CMDSPLIT); + + if (list.length==4){ + String index=list[2]; + String whitelist_switch=list[3]; + connection.send(genStringMessage("AP84",AP84(index,1))); + + if (whitelist_switch.equals("1")){ + Util.setSystemProperties("persist.sys.whitelist.enable","true"); + }else{ + Util.setSystemProperties("persist.sys.whitelist.enable","false"); + } + ICLogger.i("收到服务器指令:白名单"+(whitelist_switch.equals("1")?"开":"关")); + + }else{ + + ICLogger.i("BP84 format error!"); + } + + } + + //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86) + public static String AP86(String index){ + + //设备响应: IWAP86, 080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + + public void handleBP86(String cmd,Connection connection,Runtime runtime){ + + //示例: + //IWBP86, 353456789012345, 080835,1,720# + //说明: + //IW:标识符 + //BP86 : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //1: 表示心率周期;2 :表示血压周期 + //720: 表示720分钟 + + String[] list=cmd.split(CMDSPLIT); + + if (list.length==5){ + String index=list[2]; + String type=list[3]; + String cycle=list[4]; + connection.send(genStringMessage("AP86",AP86(index))); + ICLogger.i("收到服务器指令:设置"+(type.equals("1")?"心率周期 ":"血压周期 ")+cycle+"分钟"); + + //发送重置PPGCycle的广播,会在CoreServer里面执行 + Intent intent = new Intent(); + intent.putExtra("PPGTestCycle",Integer.parseInt(cycle)); + runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent); + }else{ + ICLogger.i("BP86 format error!"); + } + + } + + //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89) + public static String AP89(String index){ + + //设备响应: IWAP89, 080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89)) + .append(CMDSPLIT).append(index) + .append(CMDEND).toString(); + } + + public void handleBP89(String cmd,Connection connection){ + + //示例: + //IWBP89, 353456789012345, 080835,50,90,80,90,110,140# + //说明: + //IW:标识符 + //BP89 : 命令字符 + //353456789012345:IMEI号,设备唯一ID + //080835 :指令流水号 + //50: 心率低阀值,低于该阀值上传心率,如果未设置,则留空 + //90: 心率高阀值,高于该阀值上传心率,如果未设置,则留空 + //80: 低压阀值,低压低于该阀值上传血压,如果未设置,则留空 + //90: 低压阀值,低压高于该阀值上传血压,如果未设置,则留空 + //110: 高压阀值,高压低于该阀值上传血压,如果未设置,则留空 + //140: 高压阀值,高压高于该阀值上传血压,如果未设置,则留空 + String[] list=cmd.split(CMDSPLIT); + if (list.length==9){ + String index=list[2]; + String PPGH=list[3]; + String PPGL=list[4]; + String BPH_H=list[5]; + String BPH_L=list[6]; + String BPL_H=list[7]; + String BPL_L=list[8]; + connection.send(genStringMessage("AP89",AP89(index))); + ICLogger.i("收到服务器指令:心率/血压阀值 "+PPGH+","+PPGL+","+BPH_H+","+BPH_L+","+BPL_H+","+BPL_L); + }else{ + ICLogger.i("BP89 format error!"); + } + + } + public boolean handleCmd(CMD_TYPE type, String cmd) { + + //普通非二进制命令用此函数处理 + boolean ret=true; + ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length()); + if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd); + switch (type){ + case BP00: //登录包 + handleBP00(mRuntime,cmd); + ICLogger.i("服务器收到登录包AP00"); + mConnection.DeliverCMDMessageToSystem("BP00",cmd);//通知下面线程状态变化 + break; + case BP01: //gps定位包 + handleBP01(cmd); + ICLogger.i("服务器收到定位AP01"); + mConnection.DeliverCMDMessageToSystem("IWAP01",cmd);//通知下面线程状态变化 + break; + case BP02:// wifi定位包 + handleBP02(cmd); + ICLogger.i("服务器收到定位AP02"); + mConnection.DeliverCMDMessageToSystem("IWAP02",cmd);//通知下面线程状态变化 + break; + case BP03: //心跳包 + handleBP03(cmd); + ICLogger.i("服务器收到心跳包AP03"); + mConnection.DeliverCMDMessageToSystem("BP03",cmd);//通知下面线程状态变化 + break; + + case BP07: + //收到发送的语音包 + handleBP07(cmd,mConnection); + break; + case BP10: + //报警包 + mConnection.DeliverCMDMessageToSystem("IWAP10",cmd);//通知下面线程状态变化 + break; + + case BPTM: + //校时命令 + handleBPTM(cmd); + ICLogger.i("服务器收到校时命令APTM"); + mConnection.DeliverCMDMessageToSystem("APTM",cmd);//通知下面线程状态变化 + break; + case BP85://设置闹钟 + handleBP85(cmd,mConnection,mRuntime); + ICLogger.i("收到服务器设置闹钟命令BP85"); + mConnection.DeliverCMDMessageToSystem("AP85",cmd);//通知下面线程状态变化 + break; + case BP33: + //设置工作模式 + handleBP33(mConnection,mRuntime,cmd); + mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化 + + break; + case BP34: + //设置工作模式 + handleBP34(mConnection,mRuntime,cmd); + mConnection.DeliverCMDMessageToSystem("setWorkMod",cmd);//通知下面线程状态变化 + break; + case BP16: + //立即定位指令(长链接有效) + handleBP16(mConnection,mRuntime,cmd); + mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化 + break; + +// case BP05: //L02服务器不适用 +// //查询服务器语音 返回信息 +// API.handleBP05(cmd); +// break; + + case BP12: + //收到设置SOS号码 + handleBP12(mConnection,cmd,mRuntime); + ICLogger.i("收到服务器设置SOS号码命令BP12"); + break; + case BP14: + //收到设置白名单号码 + handleBP14(mConnection,cmd,mRuntime); + ICLogger.i("收到服务器设置白名单号码命令BP14"); + break; + case BP15: + handleBP15(cmd,mConnection,mRuntime); + ICLogger.i("收到服务器设置定位命令BP15"); + break; + case BP17: + //收到恢复出厂设置 + handleBP17(mConnection,cmd); + ICLogger.i("收到服务器恢复出厂设置命令BP17"); + mConnection.DeliverCMDMessageToSystem("FactoryReset",cmd);//通知下面线程状态变化 + break; + + case BP18: + //收到重启 + handleBP18(mConnection,cmd); + ICLogger.i("收到服务器重启命令BP18"); + mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化 + break; + + case BP31: + //收到关机 + handleBP31(mConnection,cmd); + ICLogger.i("收到服务器关机命令BP31"); + mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化 + break; + + case BPXL: + handleBPXL(cmd,mConnection); + ICLogger.i("收到服务器心率检测命令"); + HeartRateManager.triggerPPGtest(); + break; + case BPXY: + handleBPXY(cmd,mConnection); + ICLogger.i("收到服务器血压检测命令"); + HeartRateManager.triggerPPGtest(); + break; + case BPJZ: + handleBPJZ(cmd,mConnection,mRuntime); + ICLogger.i("收到服务器血压校准命令"); + break; + case BPHT: + ICLogger.i("服务器收到上传的心率血压"); + break; + case BP84: + handleBP84(cmd,mConnection); + ICLogger.i("收到服务器白名单命令"); + break; + + case BP86: + //心率血压周期设置 + handleBP86(cmd,mConnection,mRuntime); +// ICLogger.i(""); + break; + case BP89: + //心率/血压阀值 + handleBP89(cmd,mConnection); + break; + } + + return ret; + + } + + + public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) { + + //只有需要传递二级制数据的才需要这个函数,目前只有BP28需要 + + boolean ret=true; + 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; + } + return ret; + } + +} diff --git a/app/src/main/java/com/ic/protocols/protocol_ic.java b/app/src/main/java/com/ic/protocols/protocol_ic.java index 423349d3..041ca162 100644 --- a/app/src/main/java/com/ic/protocols/protocol_ic.java +++ b/app/src/main/java/com/ic/protocols/protocol_ic.java @@ -38,6 +38,8 @@ public class protocol_ic { private static final String CMDHEADER = "IW"; private static final String CMDEND = "#"; private static final String CMDSPLIT = ","; + public static final String defaultServerIP="watch.jiai.pro"; + public static final int defaultServerPort=8090; public enum CMD_TYPE { /*终端发起*/ AP00,//登录包 @@ -321,9 +323,9 @@ public class protocol_ic { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append("getBP28AmrLen name = ").append(Name) @@ -605,7 +607,7 @@ public class protocol_ic { String strSex=list[6]; connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex))); - runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex)); + runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex)); ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女")); }else{ ICLogger.i("BPXY format error!"); @@ -846,12 +848,12 @@ public class protocol_ic { if (cmdarglist.length == 9){ imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); alarmtime=cmdarglist[5]; repeat=cmdarglist[6]; - alarmswitch=Integer.valueOf(cmdarglist[7]); - alarmtype = Integer.valueOf(cmdarglist[8]); + alarmswitch=Integer.parseInt(cmdarglist[7]); + alarmtype = Integer.parseInt(cmdarglist[8]); log(new StringBuilder("imei ").append(imei) .append(", cmdindex ").append(cmdindex) .append(", allswitch=").append(all_alarmswitch) @@ -870,8 +872,8 @@ public class protocol_ic { }else if (cmdarglist.length == 5) { imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); }else{ log("data len is too small!"); } @@ -879,8 +881,8 @@ public class protocol_ic { if (cmdarglist.length == 4){ alarmtime=cmdarglist[0]; repeat=cmdarglist[1]; - alarmswitch=Integer.valueOf(cmdarglist[2]); - alarmtype = Integer.valueOf(cmdarglist[3]); + alarmswitch=Integer.parseInt(cmdarglist[2]); + alarmtype = Integer.parseInt(cmdarglist[3]); log(new StringBuilder("set alarmtime ").append(alarmtime) .append(", relpeat ").append(repeat) @@ -975,9 +977,9 @@ public class protocol_ic { String[] cmdlist=cmd.split(CMDSPLIT); if (cmdlist.length==5){ String time=cmdlist[1]; - int packetCount=Integer.valueOf(cmdlist[2]); - int packetIndex=Integer.valueOf(cmdlist[3]); - int receiveSuccess=Integer.valueOf(cmdlist[4]); + int packetCount=Integer.parseInt(cmdlist[2]); + int packetIndex=Integer.parseInt(cmdlist[3]); + int receiveSuccess=Integer.parseInt(cmdlist[4]); ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗")); if (receiveSuccess == 1){ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送 @@ -1018,7 +1020,7 @@ public class protocol_ic { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); + int mod=Integer.parseInt(cmdlist[3]); int Cycle=900; switch(mod){ case ICLocation.NORMAL_MOD: @@ -1075,9 +1077,9 @@ public class protocol_ic { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); - int Cycle=Integer.valueOf(cmdlist[4]); - int gpson=Integer.valueOf(cmdlist[5]); + int mod=Integer.parseInt(cmdlist[3]); + int Cycle=Integer.parseInt(cmdlist[4]); + int gpson=Integer.parseInt(cmdlist[5]); String msg=AP34(cmdlist[2],mod); //设定当前工作模式及循环频率 @@ -1282,7 +1284,7 @@ public class protocol_ic { ICLogger.i("BP15 , 定位周期="+time+"秒"); Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS); - Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time)*60); + Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time)*60); runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context)); runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context)); //set AlarmCycle and trigger Location @@ -1347,9 +1349,9 @@ public class protocol_ic { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); packetData= Util.subArray(bytes,msg[0].length()+msg[1].length()+msg[2].length()+msg[3].length()+msg[4].length()+msg[5].length()+6,bytes.length-1); StringBuffer stringBuffer=new StringBuffer(); @@ -1515,7 +1517,7 @@ public class protocol_ic { //发送重置PPGCycle的广播,会在CoreServer里面执行 Intent intent = new Intent(); - intent.putExtra("PPGTestCycle",Integer.valueOf(cycle)); + intent.putExtra("PPGTestCycle",Integer.parseInt(cycle)); runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent); }else{ ICLogger.i("BP86 format error!"); @@ -1612,7 +1614,7 @@ public class protocol_ic { if (list.length==4){ String index=list[2]; String freqstr=list[3]; - int freq=Integer.valueOf(freqstr); + int freq=Integer.parseInt(freqstr); connection.send(genStringMessage("APTE",APTE(index,freq))); ICLogger.i("收到服务器指令:测量体温 "+freq+"分钟一次。"); Config.setTemperatureTestCycle(runtime,freq); @@ -1688,10 +1690,10 @@ public class protocol_ic { connection.send(genStringMessage("APJZ",APX1(index))); int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust; - ppg_adjust=Integer.valueOf(strXL); - bph_adjust=Integer.valueOf(strBPH); - bpl_adjust=Integer.valueOf(strBPL); - spo2_adjust=Integer.valueOf(strSpO2); + ppg_adjust=Integer.parseInt(strXL); + bph_adjust=Integer.parseInt(strBPH); + bpl_adjust=Integer.parseInt(strBPL); + spo2_adjust=Integer.parseInt(strSpO2); runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust); Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust); @@ -1992,18 +1994,17 @@ public class protocol_ic { String count=cmdlist[5]; String index=cmdlist[6]; String success=cmdlist[7]; - int ftype=Integer.valueOf(filetype); - int dtype=Integer.valueOf(datatype); - int packetCount=Integer.valueOf(count); - int packetIndex=Integer.valueOf(index); - int receiveSuccess=Integer.valueOf(success); + int ftype=Integer.parseInt(filetype); + int dtype=Integer.parseInt(datatype); + int packetCount=Integer.parseInt(count); + int packetIndex=Integer.parseInt(index); + int receiveSuccess=Integer.parseInt(success); ICLogger.i("服务器在收到 index "+time+", 文件类型 "+ftype+",内容类型 "+dtype+" "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗")); if (receiveSuccess == 1){ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送 voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex); } //发送消息,再次检查要发送的语音包,确认其发送完毕 - connection.DeliverCMDMessageToSystem("BPTU","SentBPFilePacket"); }else{ diff --git a/app/src/main/java/com/ic/protocols/protocol_jiai.java b/app/src/main/java/com/ic/protocols/protocol_jiai.java index 373a5801..bd72d1f1 100644 --- a/app/src/main/java/com/ic/protocols/protocol_jiai.java +++ b/app/src/main/java/com/ic/protocols/protocol_jiai.java @@ -38,6 +38,9 @@ public class protocol_jiai { private static final String CMDHEADER = "IW"; private static final String CMDEND = "#"; private static final String CMDSPLIT = ","; + public static final String defaultServerIP="watch.jiai.pro"; + public static final int defaultServerPort=8090; + public enum CMD_TYPE { /*终端发起*/ AP00,//登录包 @@ -275,9 +278,9 @@ public class protocol_jiai { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); StringBuffer stringBuffer=new StringBuffer(); stringBuffer.append("getBP28AmrLen name = ").append(Name) @@ -556,7 +559,7 @@ public class protocol_jiai { String strSex=list[6]; connection.send(genStringMessage("APJZ",APJZ(index,strBPH,strBPL,strAge,strSex))); - runtime.getHRS().setXY_Ref(Integer.valueOf(strBPH),Integer.valueOf(strBPL),Integer.valueOf(strAge),Integer.valueOf(strSex)); + runtime.getHRS().setXY_Ref(Integer.parseInt(strBPH),Integer.parseInt(strBPL),Integer.parseInt(strAge),Integer.parseInt(strSex)); ICLogger.i("Handle BPJZ IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", Age "+ strAge +", Sex "+ (strSex.equals("1")?"男":"女")); }else{ ICLogger.i("BPXY format error!"); @@ -797,12 +800,12 @@ public class protocol_jiai { if (cmdarglist.length == 9){ imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); alarmtime=cmdarglist[5]; repeat=cmdarglist[6]; - alarmswitch=Integer.valueOf(cmdarglist[7]); - alarmtype = Integer.valueOf(cmdarglist[8]); + alarmswitch=Integer.parseInt(cmdarglist[7]); + alarmtype = Integer.parseInt(cmdarglist[8]); log(new StringBuilder("imei ").append(imei) .append(", cmdindex ").append(cmdindex) .append(", allswitch=").append(all_alarmswitch) @@ -821,8 +824,8 @@ public class protocol_jiai { }else if (cmdarglist.length == 5) { imei=cmdarglist[1]; cmdindex=cmdarglist[2]; - all_alarmswitch=Integer.valueOf(cmdarglist[3]); - alarmcount=Integer.valueOf(cmdarglist[4]); + all_alarmswitch=Integer.parseInt(cmdarglist[3]); + alarmcount=Integer.parseInt(cmdarglist[4]); }else{ log("data len is too small!"); } @@ -830,8 +833,8 @@ public class protocol_jiai { if (cmdarglist.length == 4){ alarmtime=cmdarglist[0]; repeat=cmdarglist[1]; - alarmswitch=Integer.valueOf(cmdarglist[2]); - alarmtype = Integer.valueOf(cmdarglist[3]); + alarmswitch=Integer.parseInt(cmdarglist[2]); + alarmtype = Integer.parseInt(cmdarglist[3]); log(new StringBuilder("set alarmtime ").append(alarmtime) .append(", relpeat ").append(repeat) @@ -926,9 +929,9 @@ public class protocol_jiai { String[] cmdlist=cmd.split(CMDSPLIT); if (cmdlist.length==5){ String time=cmdlist[1]; - int packetCount=Integer.valueOf(cmdlist[2]); - int packetIndex=Integer.valueOf(cmdlist[3]); - int receiveSuccess=Integer.valueOf(cmdlist[4]); + int packetCount=Integer.parseInt(cmdlist[2]); + int packetIndex=Integer.parseInt(cmdlist[3]); + int receiveSuccess=Integer.parseInt(cmdlist[4]); ICLogger.i("服务器在"+time+" 收到语音 "+packetIndex+"/"+packetCount+" "+ (receiveSuccess==1?"成功":"失敗")); if (receiveSuccess == 1){ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送 @@ -969,7 +972,7 @@ public class protocol_jiai { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); + int mod=Integer.parseInt(cmdlist[3]); int Cycle=900; switch(mod){ case ICLocation.NORMAL_MOD: @@ -1026,9 +1029,9 @@ public class protocol_jiai { log("work mode "+cmdlist[3]); - int mod=Integer.valueOf(cmdlist[3]); - int Cycle=Integer.valueOf(cmdlist[4]); - int gpson=Integer.valueOf(cmdlist[5]); + int mod=Integer.parseInt(cmdlist[3]); + int Cycle=Integer.parseInt(cmdlist[4]); + int gpson=Integer.parseInt(cmdlist[5]); String msg=AP34(cmdlist[2],mod); //设定当前工作模式及循环频率 @@ -1197,7 +1200,7 @@ public class protocol_jiai { ICLogger.i("BP15 , 定位周期="+time+"秒"); Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS); - Config.setLocationCycle(runtime.getContextProxy().context,Integer.valueOf(time)); + Config.setLocationCycle(runtime.getContextProxy().context,Integer.parseInt(time)); runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context)); runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context)); //set AlarmCycle and trigger Location @@ -1262,9 +1265,9 @@ public class protocol_jiai { Name=msg[1]; appendIndex=msg[2]; - packetCount= Integer.valueOf(msg[3]); - currentId= Integer.valueOf(msg[4]); - packetLen= Integer.valueOf(msg[5]); + packetCount= Integer.parseInt(msg[3]); + currentId= Integer.parseInt(msg[4]); + packetLen= Integer.parseInt(msg[5]); packetData= Util.subArray(bytes,msg[0].length()+msg[1].length()+msg[2].length()+msg[3].length()+msg[4].length()+msg[5].length()+6,bytes.length-1); StringBuffer stringBuffer=new StringBuffer(); @@ -1396,7 +1399,7 @@ public class protocol_jiai { //发送重置PPGCycle的广播,会在CoreServer里面执行 Intent intent = new Intent(); - intent.putExtra("PPGTestCycle",Integer.valueOf(cycle)); + intent.putExtra("PPGTestCycle",Integer.parseInt(cycle)); runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START,intent); }else{ ICLogger.i("BP86 format error!");