private static final String CMDHEADER = "(";
private static final String CMDEND = ")";
private static final String CMDSPLIT = ",";
- // public static final String defaultServerIP = "13.59.36.164";
- // public static final int defaultServerPort = 7030;
- public static final String defaultServerIP = "snickersun.oicp.net";
- public static final int defaultServerPort = 54944;
+ public static final String defaultServerIP = "watch.gatorcn.com";
+ public static final int defaultServerPort = 27015;
+ // public static final String defaultServerIP = "snickersun.oicp.net";
+ // public static final int defaultServerPort = 54944;
public enum CMD_TYPE {
/* 服务器发起*/
String encreptedStr="";
String encreptionMSGHeader="GT";
encreptedStr=AESCipher.aesEncryptStringFixedKey(msg);
- String len= String.format("%04x",encreptedStr.length());
+ String len= String.format("%04x",encreptedStr.length()+8);
return encreptionMSGHeader+len+"01"+encreptedStr;
}
/**/
StringMessage sm = new StringMessage(new String[]{cmdName, msg});
//用此函数设置要发送的内容
sm.refresh(encrepteMsg(msg));
- // sm.refresh((msg));
+ // sm.refresh((msg));
//设置信息创建时间
sm.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());
return sm;
return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds,msg));
}
- //处理 登录 BP00
- public void handleAP03(Runtime runtime, String cmd) {
+ //时间同步成功失败反馈
+ public StringMessage BP03(Runtime ds,boolean success){
+ if (success){
+ return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+"00000000000000031"));
+ }else{
+ return genStringMessage(cmdMap.get(CMD_TYPE.BP03),AddHeader(ds,cmdMap.get(CMD_TYPE.BP03)+"00000000000000030"));
+ }
+ }
+ //时间同步,等同于登录成功回复
+ public void handleAP03(Runtime runtime, Connection connection, String cmd) {
String[] msg = cmd.split(CMDSPLIT);
// (003E357593060153353AP03,150728,152900,e0800,0000000000000003)
// 表示当前UTC时间为2015年7月28日,15点29分00秒,时区是东8区,此时间用于手表时间同步
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, msg[3], true);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
-
+ connection.send(BP03(runtime,true));
+ }else{
+ connection.send(BP03(runtime,false));
}
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
+
+ connection.send(BP03(runtime,false));
}
// Set Datetime 20200505112734
// Set TimeZone 8
-
} else {
log("handleAP03", "format Error");
}
//电量等级:5
//基站接入点:46000024820000DE127
//日期时间:151028,163100
- int batstat=0;
- int batlevel=ds.getBatterylevel();
- if (batlevel>0 && batlevel<= 15){
- batstat=0;
- }else if (batlevel>15 && batlevel<= 35){
- batstat=1;
- }else if (batlevel>35 && batlevel<= 55){
- batstat=2;
- }else if (batlevel>55 && batlevel<= 85){
- batstat=3;
- }else {
- batstat=4;
- }
- String netstat="46000024820000DE127";
- String msg=new StringBuffer(cmdMap.get(CMD_TYPE.BP33)).append(CMDSPLIT)
- .append(0).append(CMDSPLIT)
- .append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT)
- .append(batstat).append(CMDSPLIT)
- .append(netstat).append(CMDSPLIT)
- .append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
- .append(TimeUtil.getSystemTimeHHmmss())
- .toString();
-
- return genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds,msg));
- }
- public static StringMessage AP03(Runtime ds) {
- //示例数据:IWAP03,06000908000102,5555,30# IWAP03,000000null00000,0,0#
- //IW: 标识符
- //AP03:命令字
- //设备在静止时,可以通过该指令与平台保持连接和解决静态漂移
- //06000908000102:
- //060为GSM信号,
- //009为参与定位的卫星数,
- //080为电池电量,
- //0 为保留位,
- //01为设防状态,此处由两位十六进制表示,无取值时为 00 ,长度必需为两位,一共 8个bit 表示8种状态,各bit定义如下:(未列出的为当前未使用, 1表示有效 ,0 表示无效)
- //Bit0 设防状态<手表无效>
- //Bit1 为 1 表示夜灯为开,为0 夜灯为 关
- //02为工作模式 ,(设防,工作模式如果为00,则代表无或未设置)
- //5555: 计步步数,每次到达 9999 后重 0 开始计 (此处 9999 为示例,可以为2字节int 然后溢出归零)
- //30: 翻滚次数
- return genStringMessage(cmdMap.get(CMD_TYPE.AP03), 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(ds.isPowerConnected() ? "1" : "0")
- .append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)
- .append(ds.getTotalStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString());
- }
-
- public StringMessage BP03(boolean success){
- if (success){
- return genStringMessage(cmdMap.get(CMD_TYPE.BP03),cmdMap.get(CMD_TYPE.BP03)+"00000000000000031");
- }else{
- return genStringMessage(cmdMap.get(CMD_TYPE.BP03),cmdMap.get(CMD_TYPE.BP03)+"00000000000000030");
- }
- }
- public void handleAP04(Runtime ds,Connection connection,String cmd) {
- log("AP04读取版本,返回BP00");
- connection.send(BP00(ds));
- }
-
-
- public static StringMessage AP10(Runtime ds) {
-
- /**
- * IWAP10080524A2232.9806N11404.9355E000.1061830323.8706000908000502,
- * 460,0,9520,3671,
- * 00,zh-cn,00,
- * 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回复.
- * 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#
- */
- return genStringMessage(cmdMap.get(CMD_TYPE.AP10), 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 StringMessage 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 genStringMessage(cmdMap.get(CMD_TYPE.AP01), 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 StringMessage 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 genStringMessage(cmdMap.get(CMD_TYPE.AP02), 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 StringMessage APXL(String id) {
-//设备响应: IWAPXL,080835#
- //080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(APXL(index));
- } else {
- ICLogger.i("BPXL format error!");
- }
-
- }
-
- public static StringMessage APXY(String id) {
-//设备响应: IWAPXY,080835#
- //080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(APXY(index));
- } else {
- ICLogger.i("BPXY format error!");
- }
-
- }
-
-
- public static StringMessage APJZ(String id, String BPH, String BPL, String Age, String Sex) {
- //设备响应: IWAPJZ,792997,120,85,42,1#
- //792997:指令流水号
- // 高压120,低压85,年龄42,1 男性
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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) {
- try {
- 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(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") ? "男" : "女"));
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BPXY format error!");
- }
- }
-
-
- //重启
-
-
- public static StringMessage AP18(String index) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP18), 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(AP18(cmdlist[2]));
-
- }
- }
- //恢复出厂设置
-
- public static StringMessage AP17(String index) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(AP17(cmdlist[2]));
-
- }
- }
-
- //关机
-
-
- public static StringMessage AP31(String index) {
- return genStringMessage("AP31", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(AP31(cmdlist[2]));
-
- }
- }
-
- //设置SOS号码
- public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {
- return genStringMessage("AP12", 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(AP12(index, phNum1, phNum2, phNum3));
-
- ArrayList<Contact> contactArray = new ArrayList<Contact>();
-// if(Config.custom_branch_name.equals("AK")){
-//
-// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", "07522312120"));
-// if (!phNum1.isEmpty())
-// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum1));
-// if (!phNum2.isEmpty())
-// contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum2));
-// }else {
- 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 StringMessage AP14(String index, String[] phnumbs) {
- return genStringMessage("AP14", 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(AP14(index, phnums));
- ArrayList<Contact> contactArray = new ArrayList<Contact>();
-
- if (Config.custom_name.equals("YT")) {
- ICLogger.i("=====add hotline 96885 ");
- contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
- }
- 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 StringMessage AP85(Runtime ds, String cmddata) {
-//示例数据:IWAP49,68##
- return genStringMessage("AP85", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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<Alarm> 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) {
- try {
- 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", "闹铃"));
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else if (cmdArgList.length == 5) {
- try {
- imei = cmdArgList[1];
- cmdindex = cmdArgList[2];
- all_alarmswitch = Integer.parseInt(cmdArgList[3]);
- alarmcount = Integer.parseInt(cmdArgList[4]);
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- log("data len is too small!");
- }
- } else {
- if (cmdArgList.length == 4) {
- try {
- 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", "闹铃"));
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } 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(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, Connection connection) {
-//平台响应: IWBP07,20140818064408,6,1,1#
-//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒
-//6:语音包分包总数
-//1:当前设备收到的是第几个包
-//1:表示服务器接受数据成功,0表示服务器接受数据失败
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 5) {
- try {
- 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("SentVoicePacket", "SentVoicePacket");
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i(" BP07 Format error!");
- }
- }
-
-
- public static StringMessage AP33(String cmdindex, int workMode) {
-//IWAP33,080835,1#
-//080835:指令流水号
-//1:设置信息,供服务器同步
- return genStringMessage("AP33", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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("com.ic.work mode " + cmdlist[3]);
- try {
- 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;
-
- }
-
- StringMessage msg = AP33(cmdlist[2], mod);
- //设定当前工作模式及循环频率
- connection.send(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);
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
-// CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
- //此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
- }
-
- }
-
-
- public static StringMessage AP34(String cmdindex, int workMode) {
-//IWAP34,588854,1#
-//080835:指令流水号
-//8:模式
- return genStringMessage("AP34", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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("com.ic.work mode " + cmdlist[3]);
- try {
- int mod = Integer.parseInt(cmdlist[3]);
- int Cycle = Integer.parseInt(cmdlist[4]);
- int gpson = Integer.parseInt(cmdlist[5]);
-
- StringMessage msg = AP34(cmdlist[2], mod);
- //设定当前工作模式及循环频率
- connection.send(msg);
-
- if (gpson == 1) {
- mod = ICLocation.CUSTOM_MOD8_GPS;
- } else {
- mod = ICLocation.CUSTOM_MOD8_WIFI;
- }
- log("reply msg " + msg.isFromCache());
- 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通过消息开始执行及时定位操作。
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- }
-
- }
-
- public void handleBP40(Connection connection, Runtime runtime, String cmd) {
-
-// IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#
-// IW:标识符
-// BP40 : 命令字符
-// 353456789012345:IMEI号,设备唯一ID
-// 080835 :指令流水号
-// XXXXXXXXXXXX : 表示文字内容GB2312编码
-
- ICLogger.d("cmd == > " + cmd);
- //这里的切割,如查是云图的后台,会有问题,如果文本内容里有,那么就会切割出错了。所以需要后台去解决这个问题。
- String[] cmdlist = cmd.split(",");
- ICLogger.d("cmdlist length == > " + cmdlist);
- if (cmdlist.length == 4) {
- String cmdindex = cmdlist[2];
- String txtmsg = cmdlist[3];
- StringBuilder sb = new StringBuilder();
- Runtime.PushtxtMsg_srv_index = cmdindex;//给回复AP94用
- sb.append(cmdindex).append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss()).append(CMDSPLIT).append(txtmsg);
- if (Config.custom_name.equals("VitracK")) {
-
- } else if (Util.getSystemProperties("persist.sys.pushtxt_encode", "gb2312").equals("utf-8")) {
- // txtmsg = Util.decodeUnicode2Utf8(txtmsg);
-// txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
- txtmsg = Util.UrlUTF8ToStrUTF8(txtmsg);
- } else {
- txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
- }
- StringMessage msg = AP40(cmdindex, 1);
- //设定当前工作模式及循环频率
- connection.send(msg);
- ICLogger.i("received Txt Msg " + txtmsg);
- if (!Config.noPushTxtReadReply) {
- Config.setLastUnReadMessage(runtime.getContextProxy().context, sb.toString());
- runtime.getContextProxy().sendMsgBroadcast(txtmsg, 3);//msgType 3需要回复,0不需要回复
- } else {
- //判断产品类型,如果是S123的,那么就不发广播了
- //读取一个变量值,判断是否弹窗
- String forceReadMsg = Util.getSystemProperties("persist.sys.forcereadmsg");
- ICLogger.d("forceReadMsg == > " + forceReadMsg);
- if (!TextUtils.isEmpty(forceReadMsg)) {
- MsgMustReadDialog instance = MsgMustReadDialog.getInstance();
- instance.showMsgDialog();
- List<String> list = new ArrayList<>();
- list.add(txtmsg);
- instance.addData(list);
- } else {
- runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);//msgType 3需要回复,0不需要回复
- }
- }
- //保存到数据库里
- runtime.getContextProxy().saveMstToSMSDB(txtmsg);
- } else {
- ICLogger.i("BP40 format error!");
+ int batstat=0;
+ int batlevel=ds.getBatterylevel();
+ if (batlevel>0 && batlevel<= 15){
+ batstat=0;
+ }else if (batlevel>15 && batlevel<= 35){
+ batstat=1;
+ }else if (batlevel>35 && batlevel<= 55){
+ batstat=2;
+ }else if (batlevel>55 && batlevel<= 85){
+ batstat=3;
+ }else {
+ batstat=4;
}
- }
-
- public static StringMessage AP40(String cmdindex, int success) {
-
-// IWAP40,080835,1#
-// 080835:指令流水号
-// 1:表示设备接受数据成功,0表示设备接受数据失败
- return genStringMessage("AP40", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(cmdindex)
- .append(CMDSPLIT).append(success)
- .append(CMDEND).toString());
- }
+ String netstat="46 00 002482 0000DE127";
+ netstat = ds.getGatorLBSData();
- /**
- * 心率上传,返回协议字串
- *
- * @param ds
- * @return
- */
- public static StringMessage AP49(Runtime ds) {
- //示例数据:IWAP49,68##
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(ds.getHRS().getPPG())
- .append(CMDEND).toString());
-
- }
-
+ String msg=new StringBuffer(cmdMap.get(CMD_TYPE.BP33)).append(CMDSPLIT)
+ .append(0).append(CMDSPLIT)
+ .append(String.format("%08X", ds.getTotalStepCount())).append(CMDSPLIT)
+ .append(batstat).append(CMDSPLIT)
+ .append(netstat).append(CMDSPLIT)
+ .append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
+ .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
+ .append("0,0,0")
+ .toString();
- /**
- * 返回上传心率血压的协议字串
- *
- * @param ds
- * @return
- */
- public static StringMessage APHT(Runtime ds) {
- //IWAPHT,60,130,85#
- //说明:
- //IW:标识符
- //APHT : 命令字符
- //60 : 表示心率
- //130: 血压高压 [收缩压]
- //85 : 血压低压 [舒张压]
- //平台响应: IWBPHT#
- //表示平台已接收,可不作响应
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(ds.getHRS().getPPG())
- .append(CMDSPLIT).append(ds.getHRS().getBPH())
- .append(CMDSPLIT).append(ds.getHRS().getBPL())
- .append(CMDEND).toString());
- }
+ StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds,msg));
- public static StringMessage APHT(int ppg, int bph, int bpl) {
- //IWAPHT,60,130,85#
- //说明:
- //IW:标识符
- //APHT : 命令字符
- //60 : 表示心率
- //130: 血压高压 [收缩压]
- //85 : 血压低压 [舒张压]
- //平台响应: IWBPHT#
- //表示平台已接收,可不作响应
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(ppg)
- .append(CMDSPLIT).append(bph)
- .append(CMDSPLIT).append(bpl)
- .append(CMDEND).toString());
+ return ret;
}
- //立即定位反馈
- public static StringMessage AP16(String cmdindex) {
-//IWAP16,080835#
-//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP16), 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(AP16(cmdlist[2]));
- } else {
- log("error BP16 format");
- }
+ public void handleAP04(Runtime ds,Connection connection,String cmd) {
+ log("AP04读取版本,返回BP00");
+ connection.send(BP00(ds));
}
-
-
- /*通过基站获取时间和坐标*/
- public static StringMessage APTM(Runtime ds) {
- //示例数据:IWAPTM,460,0,9750,3613#
- //说明:
- //IW:标识符
- //APTM : 命令字符
- //460:MCC
- //0: MNC
- //9750: LAC
- //3613: CID
-
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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 handleAP00(Runtime ds,Connection connection,String cmd) {
+ log("AP00读取版本,返回BP30");
}
- 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 void handleAP30(){
}
+ //定位信息
+ public void BP30(Runtime ds,Connection connection,String cmd) {
+ log("AP04读取版本,返回BP00");
- public static StringMessage AP15(String index) {
-//IWAP15, 080835#
-//080835:指令流水号
- return genStringMessage("AP15", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
- .append(CMDSPLIT).append(index)
- .append(CMDEND).toString());
}
+// (0019357593060153353AP00) 下行一次location。
- //设置定位周期
- 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(AP15(index));
- ICLogger.i("BP15 , 定位周期=" + time + "秒");
-
- try {
- 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());
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BP15 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);
+ cmd = cmd.replace(" ", "");
+ switch (type) {
+ case AP03: //登录包
+ handleAP03(mRuntime, mConnection,cmd);
+ ICLogger.i("服务器收到登录包");
+ mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
+ break;
+ case AP04://查询终端版本消息
+ handleAP04(mRuntime,mConnection,cmd);
+ break;
+ case AP30:// 定位数据接收成功
+ mConnection.DeliverCMDMessageToSystem("BP30", cmd);//通知下面线程状态变化
+ break;
+// case AP14: //gps定位包
+// handleBP01(cmd);
+// ICLogger.i("服务器收到定位AP01");
+// mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
+// break;
- /*语音下行反馈*/
- public static StringMessage AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {
- //示例数据:IWAP28,D3590D54,xxxx,6,1,1#
- return genStringMessage("AP28", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(Connection 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) {
-
- try {
- 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(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);//通知下面线程状态变化
- }
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
-
- } 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 StringMessage AP84(String index, int success) {
-
- //设备响应: IWAP80,080835,1#
- //080835:指令流水号
- //1:表示设备执行成功,0 表示设备执行失败
- return genStringMessage("AP84", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(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.绑定解绑(下行协议号:BP68,响应:AP68)
- public static StringMessage AP68(String index, String cmd) {
-
- //设备响应: IWAP86, 080835,1#
- //080835:指令流水号
- return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(index)
- .append(CMDSPLIT).append(cmd)
- .append(CMDEND).toString());
- }
-
- public void handleBP68(String cmd, Connection connection, Runtime runtime) {
-
- //示例:
- //IWBP68,353456789012345,080835,1#
- //说明:
- //IW:标识符
- //BP68 : 命令字符
- //353456789012345:IMEI号,设备唯一ID
- //080835 :指令流水号
- //1 : 表示设备为激活状态(绑定成功) 0:表示设备为未激活状态(解绑成功)
-
- String[] list = cmd.split(CMDSPLIT);
-
- if (list.length == 4) {
- String index = list[2];
- String type = list[3];
- connection.send(AP68(index, type));
- ICLogger.i("收到服务器消息:" + (type.equals("1") ? "绑定成功 " : "未激活或者解绑"));
- if (Config.custom_name.equals("YQ") || Config.custom_name.equals("YQ_EN")) {//AK-YQ
- if (type.equals("1")) {
- WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-// runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
- Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
- Config.setNeedAntiOff(runtime.getContextProxy().context, true);
- Config.setNeedCutOff(runtime.getContextProxy().context, true);
- runtime.setNeedAntioff(true);
- runtime.setNeddReportCutoff(true);
- } else {
- WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
- runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
- Config.setNeedAntiOff(runtime.getContextProxy().context, false);
- Config.setNeedCutOff(runtime.getContextProxy().context, false);
- runtime.setNeedAntioff(false);
- runtime.setNeddReportCutoff(false);
- //1 分钟后重置
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- Util.doMasterClear(runtime.getContextProxy().context);
- }
- }, 5000);
- }
- }
-
- } else {
- ICLogger.i("BP86 format error!");
- }
-
- }
-
-
- //17.设置心率/血压测量周期(下行协议号:BP86,响应:AP86)
- public static StringMessage AP86(String index) {
-
- //设备响应: IWAP86, 080835#
- //080835:指令流水号
- return genStringMessage("AP86", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(index)
- .append(CMDEND).toString());
- }
-
- public void handleBP86(String cmd, Connection connection, Runtime runtime) {
-
- //示例:
- //IWBP86, 353456789012345, 080835,1,720#
- //说明:IWBP86,867400020316612,858663,1,30
- //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(AP86(index));
- ICLogger.i("收到服务器指令:设置" + (type.equals("1") ? "心率周期 " : "血压周期 ") + cycle + "分钟");
-
- try {
- //发送重置PPGCycle的广播,会在CoreServer里面执行
- CoreService.getInstance().setHeartRateDetectAlarm(Integer.parseInt(cycle));
-// Intent intent = new Intent();
-// intent.putExtra("PPGTestCycle", Integer.parseInt(cycle));
-// intent.setFlags(FLAG_INCLUDE_STOPPED_PACKAGES);
-// intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
-// runtime.getContextProxy().sendBrodcast(ACTION_HEATR_RATE_START, intent);
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BP86 format error!");
- }
-
- }
-
- //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
- public static StringMessage AP87() {
-
- //设备响应: IWAP86, 080835#
- //080835:指令流水号
- return genStringMessage("AP87", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDEND).toString());
- }
-
- public void handleBP87(String cmd, Connection connection, Runtime runtime) {
-
- //IWBP87,http://cn.map20000.com/physicalReport.html?lang=zh-CN&imeis=866671044898063#
-
- String[] list = cmd.split(CMDSPLIT);
-
- if (list.length == 2) {
- String furl = list[1];//.replace("#","");
- ICLogger.i("收到服务器指令 BP87:Qrcode url " + furl);
-// connection.send(AP87());
- try {
- String qrfilepath = Util.getLogfilePath(runtime, TimeUtil.getSystemDateYYMMDD());
- Util.setSystemProperties(Config.KeyQRURIFILE, qrfilepath);
- FileOutputStream fos = new FileOutputStream(new File(qrfilepath));
- fos.write(furl.getBytes());
- fos.close();
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BP87 format error!");
- }
-
- }
-
- public static StringMessage AP88(String index) {
- //设备响应: IWAP88, 080835#
- //080835:指令流水号
- return genStringMessage("AP88", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(index)
- .append(CMDEND).toString());
- }
-
- public static void handleBP88(String cmd, Connection connection) {
-// IWBP88,080835#
- String[] list = cmd.split(CMDSPLIT);
-
- if (list.length == 2) {
- String index = list[1];
- connection.send(AP88(index));
- ICLogger.i("收到服务器消息:查询设备");
-
- } else {
- ICLogger.i("BP88 format error!");
- }
- }
-
- //18.18.设置心率/血压阀值(下行协议号:BP89,响应:AP89)
- public static StringMessage AP89(String index) {
-
- //设备响应: IWAP89, 080835#
- //080835:指令流水号
- return genStringMessage("AP89", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .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(AP89(index));
-
-
- ICLogger.i("收到服务器指令:心率/血压阀值 " + PPGH + "," + PPGL + "," + BPH_H + "," + BPH_L + "," + BPL_H + "," + BPL_L);
- } else {
- ICLogger.i("BP89 format error!");
- }
-
- }
-
- //体温间隔测量 (后台测试体温)(下行协议号:BPTE,响应:APTE)
- public static StringMessage APTE(String index, int freq) {
-
- //设备响应: IWAPTE,080835,60#
- //080835:指令流水号
- //1:表示设备接受数据成功,0表示设备接受数据失败
- return genStringMessage("APTE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(index)
- .append(CMDSPLIT).append(freq)
- .append(CMDEND).toString());
- }
-
- public void handleBPTE(String cmd, Connection connection, Runtime runtime) {
- //示例:
- //IWBPTE,353456789012345,080835,60#
- //说明:
- //IW:标识符
- //BPTE : 命令字符
- //353456789012345:IMEI号,设备唯一ID
- //080835 :指令流水号
- //60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器)
- String[] list = cmd.split(CMDSPLIT);
- if (list.length == 4) {
- try {
- String index = list[2];
- String freqstr = list[3];
- int freq = Integer.parseInt(freqstr);
- connection.send(APTE(index, freq));
- ICLogger.i("收到服务器指令:测量体温 " + freq + "分钟一次。");
- Config.setTemperatureTestCycle(runtime, freq * 60);
- CoreService.getInstance().setTempAlarm(true);
- if (runtime.check_stat_do_temp_test())
- TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BPTE format error!");
- }
-
- }
-
- //体温上行(上行协议号:APTP,响应:BPTP)
- public static StringMessage APTP(double wrist_temp, double body_temp, double tempout) {
-
- //设备: IWAPTP,36.3,33,132#
- //IW:标识符
- //APTP : 命令字符
- //35.3:测量体温 (摄氏度)
- //33,132:温补用的参数,此处不用,可以用0 来代替。 目前是代表的腕温,室外温度
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(String.format("%1$.1f", body_temp))
- .append(CMDSPLIT).append(String.format("%1$.1f", wrist_temp))
- .append(CMDSPLIT).append(String.format("%1$.1f", tempout))
- .append(CMDEND).toString());
- }
-
- public void handleBPTP() {
-
- ICLogger.d("BPTP 服务器收到体温数据!");
-
- }
-
-
- public static StringMessage APX1(String id) {
- //设备响应: IWAPX1, 080835#
- //080835:指令流水号
- return genStringMessage("APX1", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDEND).toString());
- }
-
- /**
- * @param cmd
- * @param connection
- * @param runtime
- */
- public void handleBPX1(String cmd, Connection connection, Runtime runtime) {
- //IWBPX1,353456789012345,080835,2,1,-3,0#
- //说明:
-// IW:标识符
-// BPX1 : 命令字符
-// 353456789012345:IMEI号,设备唯一ID
-// 080835 :指令流水号
-// 2: 心率修正值
-// 1:高压修正值
-// -3:低压修正值
-// 0:血氧修正值
- String[] list = cmd.split(CMDSPLIT);
- if (list.length == 7) {
- String index = list[2];
- String imei = list[1];
- String strXL = list[3];
- String strBPH = list[4];
- String strBPL = list[5];
- String strSpO2 = list[6];
-
- connection.send(APX1(index));
-
- try {
- int ppg_adjust, bph_adjust, bpl_adjust, spo2_adjust;
- 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);
- Config.setBPHAdjust(mRuntime.getContextProxy().context, bph_adjust);
- Config.setBPLAdjust(mRuntime.getContextProxy().context, bpl_adjust);
- Config.setSPo2Adjust(mRuntime.getContextProxy().context, spo2_adjust);
- String ShareAdjValue = new StringBuilder().append(ppg_adjust).append(CMDSPLIT)
- .append(bph_adjust).append(CMDSPLIT)
- .append(bpl_adjust).append(CMDSPLIT)
- .append(spo2_adjust).append(CMDSPLIT).toString();
- Config.setPPG_ECG_adjustValue(ShareAdjValue);
- ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", BPH " + strBPH + ", BPL " + strBPL + ", PPG " + strXL + ", Sp02 " + strSpO2 + " , Shared Adjust Value " + ShareAdjValue);
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BPX1 format error!");
- }
- }
-
-
- public static StringMessage APS4(String id) {
- //设备响应: IWAPS4,080835#
- //080835:指令流水号
- return genStringMessage("APS4", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDEND).toString());
- }
-
- /**
- * 主要为久坐设置提醒时长。
- *
- * @param cmd
- * @param connection
- * @param runtime
- */
- public void handleBPS4(String cmd, Connection connection, Runtime runtime) {
- //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#
- //说明:
-// IW:标识符
-// BPS4: 命令字符
-// 353456789012345:设备IMEI或者ID
-// 080835 :指令流水号
-// 1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)
-// 重复周期、开始结束时间格式 参考BP85闹钟设置,
-//#:结尾标识符
- String[] list = cmd.split(CMDSPLIT);
- if (list.length >= 4) {
-
- String index = list[2];
- String imei = list[1];
- connection.send(APS4(index));
-
- String setting1;
- switch (list.length) {
- case 10:
- setting1 = list[9];
- ICLogger.i("set 7th alarm " + setting1);
- case 9:
- setting1 = list[8];
- ICLogger.i("set 6th alarm " + setting1);
- case 8:
- setting1 = list[7];
- ICLogger.i("set 5th alarm " + setting1);
- case 7:
- setting1 = list[6];
- ICLogger.i("set 4th alarm " + setting1);
- case 6:
- setting1 = list[5];
- ICLogger.i("set 3rd alarm " + setting1);
- case 5:
- setting1 = list[4];
- ICLogger.i("set 2nt alarm " + setting1);
- case 4:
- setting1 = list[3];
- ICLogger.i("set 1st alarm " + setting1);
- break;
- }
-
- ICLogger.i("Handle BPX1 IMEI " + imei + ",index " + index + ", get " + (list.length - 3) + " settings");
- } else {
- ICLogger.i("BPX1 format error!");
- }
- }
-
- public static StringMessage APHP(Runtime ds) {
- //IWAPHP,60,130,85,95,90, , , , , , , , #
- //IW:标识符
- //APHT : 命令字符
- //60 : 表示心率
- //130: 血压高压 [收缩压]
- //85 : 血压低压 [舒张压]
- //95:血氧
- //90:血糖
-// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(ds.getHRS().getPPG())
- .append(CMDSPLIT).append(ds.getHRS().getBPH())
- .append(CMDSPLIT).append(ds.getHRS().getBPL())
- .append(CMDSPLIT).append(ds.getHRS().getSpo2())
- .append(CMDSPLIT).append(0)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDEND).toString());
- }
-
- public static StringMessage APHP(int ppg, int bph, int bpl, int spo2) {
- //IWAPHP,60,130,85,95,90, , , , , , , , #
- //IW:标识符
- //APHT : 命令字符
- //60 : 表示心率
- //130: 血压高压 [收缩压]
- //85 : 血压低压 [舒张压]
- //95:血氧
- //90:血糖
-// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(ppg)
- .append(CMDSPLIT).append(bph)
- .append(CMDSPLIT).append(bpl)
- .append(CMDSPLIT).append(spo2)
- .append(CMDSPLIT).append(0)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDSPLIT)
- .append(CMDEND).toString());
- }
-
-
- public void handleBPHP() {
-
- ICLogger.i("服务器收到APHP 心率血压血氧 !");
-
- }
-
- public static StringMessage APDE(String id) {
- /***
- * 示例:
- * 设备响应: IWAPDE,080835#
- * 080835:指令流水号
- * 说明: 本消息适用所有终端
- */
- return genStringMessage("APDE", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDEND).toString());
- }
-
- public void handleBPDE(Connection connection, String cmd, Runtime runtime) {
-/***
- * 示例:
- * IWBPDE,867400020316612,853676,0
- * 说明:
- * IW:标识符
- * BPDE: 命令字符
- * 353456789012345:设备IMEI或者ID
- * 080835 :指令流水号
- * 0:进入禁止区域 1离开禁止区域
- * #:结尾标识符
- * 设备响应: IWAPDE,080835#
- * 080835:指令流水号
- * 说明: 本消息适用所有终端
- */
- String[] list = cmd.split(CMDSPLIT);
- if (list.length == 4) {
-
- String index = list[2];
- String msg = list[3];
- connection.send(APDE(index));
- try {
- if (Integer.parseInt(msg) == 0) {
- ICLogger.i("Handle BPDE index " + index + ", 进入禁止区域 ");
- runtime.Fence_Warning_flag = 1;
- WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
- runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_out_wall), 2);
- } else {
- ICLogger.i("Handle BPDE index " + index + ", 离开禁止区域 ");
- runtime.Fence_Warning_flag = 0;
-// Util.ShowToast(runtime,"");
- runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_cross_boundary), 0);
- }
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i("BPDE format error!");
- }
-
-
- }
-
- public static StringMessage APDG(String id) {
- return genStringMessage("APDG", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDEND).toString());
- }
-
- public void handleBPDG(Connection connection, String cmd, Runtime runtime) {
-/**
- * 示例:
- * IWBPDG,353456789012345,1,30.0,37.3 #
- * 说明:IWBPDG,867400020316612,502102,1,33,44
- * IW:标识符
- * BPDG: 命令字符
- * 353456789012345:设备IMEI或者ID
- * 080835 :指令流水号
- * 1:开关 1开, 0 关
- * 30.0: 低温阀值
- * 37.3: 高温阀值
- * #:结尾标识符
- * */
- String[] list = cmd.split(CMDSPLIT);
- if (list.length == 6) {
-
- try {
- String index = list[2];
- String switch_on = list[3];
- String min_temp = list[4];
- String max_temp = list[5];
- connection.send(APDG(index));
- if (Integer.parseInt(switch_on) == 1) {
- ICLogger.i("Handle BPDG index " + index + ", 体温报警阈值开 min=" + min_temp + ",max=" + max_temp);
- runtime.tempInfo.setBodyTempThreshold(Double.valueOf(max_temp), Double.valueOf(min_temp));
- Config.needTemperature_abnormal_alarm = true;
- } else {
- ICLogger.i("Handle BPDG index " + index + ", 体温报警阈值关 ");
- Config.needTemperature_abnormal_alarm = false;
- }
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
-
- } else {
- ICLogger.i("BPDG format error!");
- }
- }
-
- /***
- *
- * @param packetTime 做指令流水号用
- * @param filetype 文件类型, 1语音,2图片
- * @param datatype 数据内容类型,例如和文件类型相关,例如 监听语音,sos语音,签到图片等等
- * @param count 内容分包总数
- * @param index 当前分包数
- * @param datalen 分包数据长度,最长1024,不足按照实际大小。
- * @param amrdata 文件分包内容数据
- * @return
- */
- public static byte[] APTU(String packetTime, int filetype, int datatype, int count, int index, int datalen, byte[] amrdata) {
- /**
- * 10.设备录音图片(设备上行)(上行协议:APTU,响应:BPTU)
- * 示例:
- * IWAPTU,6654111,080835,1,1,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
- * 说明:
- * IW:标识符
- * BPCU : 命令字符
- * 6654111:语音图片文字目标 (同步监护人列表的用户唯一标识ID)<扩展字段目前不需要,可以传空字符>
- * 080835 :指令流水号
- * 1:文件类型
- * 1:内容类型 类型说明如下表
- * 文件类型 内容类型
- * 1 语音—— 1.监听语音 * 2.SOS语音 * 3.扩展
- * 2 图片—— 1.签到图片 * 2.指令图片 * 3.设备图片 * 4.扩展
- * 6:内容包分包总数
- * 1 :当前包数,第一包为1,第二包为2,。。。。。。同一个语音包的语音时间相同
- * 1024 :语音包长度
- * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:当前音频数据, 每个音频数据包大小为1024字节,最后一包不足1024的取实际字节数
- * 语音包上传规则:
- * 按包次序依次上传,上传后如果没有收到服务器的响应包,则继续上传该语音包。
- * 收到设备回复确认数据包接收成功状态后,继续开始依次上传下一个数据包。。。。。。
- * 如果设备回复确认数据包接收失败状态,则重复发送上一个数据包
- */
- String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT)
- .append(CMDSPLIT).append(packetTime)
- .append(CMDSPLIT).append(filetype)
- .append(CMDSPLIT).append(datatype)
- .append(CMDSPLIT).append(count)
- .append(CMDSPLIT).append(index)
- .append(CMDSPLIT).append(datalen * 2)
- .append(CMDSPLIT).toString();
-
- byte[] sentbuf = new byte[sb.length() + datalen * 2 + 1];
- byte[] amrdata2 = Util.bytesToHexString(amrdata).getBytes();
- System.arraycopy(sb.getBytes(), 0, sentbuf, 0, sb.length());
- System.arraycopy(amrdata2, 0, sentbuf, sb.length(), datalen * 2);
- sentbuf[sb.length() + datalen * 2] = '#';
- return sentbuf;
- }
-
-
- public void handleBPTU(String cmd, Connection connection) {
-/***
- * 平台响应
- * IWBPTU,6654111,080835,1,1,6,1,1#
- * IW:标识符
- * APCU : 命令字符
- * 6654111:语音图片文字目标
- * 080835 :流水号
- * 1:文件类型
- * 1:内容类型
- * 6:内容总包数
- * 1:当前包序号
- * 1:成功 (0:失败)
- */
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 8) {
- try {
- String time = cmdlist[2];
- String filetype = cmdlist[3];
- String datatype = cmdlist[4];
- String count = cmdlist[5];
- String index = cmdlist[6];
- String success = cmdlist[7];
- 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);
- //voicePacket.getInstanceSent().setFileType(ftype,dtype);
- }
- //发送消息,再次检查要发送的语音包,确认其发送完毕
- connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentBPFilePacket");
- } catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
- }
- } else {
- ICLogger.i(" BPTU Format error!");
- }
- }
-
- public static StringMessage APSL(String date, int deepsleep, int lightsleep, int score) {
-/***
- * 示例:
- * IWAPSL,20200803,240,120,90#
- * 说明:睡眠计算时间 当日21:00至 次日 9:00, 睡眠时间记录为当日时间。如2020-8-3的睡眠时间段为 2020-8-3 21:00 ~ 2020-8-4 09:00
- * IW:标识符
- * APSL:命令字
- * 202008003:睡眠时间 (手表本地时间)
- * 240:深睡时间 (手表本地时间),单位分钟
- * 120:浅睡时间(手表本地时间),单位分钟
- * 90睡眠分数
- * 睡眠算法
- * 使用记步同样的算法,计算翻身次数
- * 平均每60秒记录一次
- * 深睡眠,通过加速度传感器,在60秒内翻身次数小于6
- * 浅睡眠,通过加速度传感器,在60秒内翻身次数大于等于6, 且小于12 ,否则认为未睡
- * 换算分数后发送到服务器
- * #:结束符
- */
- String sb = new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(date)
- .append(CMDSPLIT).append(deepsleep)
- .append(CMDSPLIT).append(lightsleep)
- .append(CMDSPLIT).append(score)
- .append(CMDEND).toString();
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14), sb);
- }
-
- public static StringMessage AP46(String id, String cmd) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
- new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cmd)
- .append(CMDEND).toString());
- }
-
- public void handleBP46(String cmd, Connection connection, Runtime runtime) {
-/***
- * IWBP46,353456789012345,080835,1,[参数]#
- * 说明:
- * IW:标识符
- * BP46 : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 1: 表示立即拍照
- * [参数]: 此为可选项。根据不同类型设备扩展
- * #:结尾标识符
- * 设备响应: IWAP46,080835,1#
- * 080835:指令流水号
- * 1 成功 0失败
- * # 结尾标识符
- */
- String[] cmdlist = cmd.split(CMDSPLIT);
-
- if (cmdlist.length >= 4) {
- String imei = cmdlist[1];
- String id = cmdlist[2];
- String cdd = cmdlist[3];
- if (cmdlist.length == 5) {
- String tmp = cmdlist[4];
- }
- connection.send(AP46(id, cdd));
- Context context = mRuntime.getContextProxy().context.getApplicationContext();
- if (cdd.equals("1")) {
- //delay 启动
-
-// Intent intent = new Intent(context, com.enqualcomm.support.CoreService.class);
-// intent.setAction(ACTION_REMOTE_CAMERA);
-// intent.putExtra("remote_number", id);
-// context.startService(intent);
-// runtime.getContextProxy().context.sendBroadcast(intent);
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- (new CameraUtil(context)).getPicture(id);
- }
- });
-
- } else if (cdd.equals("2")) {
- Intent intent = new Intent();
- intent.setAction(DIALOG_ACTION);
- intent.putExtra("takephoto", "Take Photo !");
- context.sendBroadcast(intent);
- }
- } else {
- ICLogger.i(" BP46 Format error!");
- }
-
- }
-
-
- public static StringMessage APDH(String id, String cmd) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
- new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cmd)
- .append(CMDEND).toString());
- }
-
-
- public void handleBPDH(Connection connection, Runtime runtime, String cmd) {
- /***
- * IWBPDH,353456789012345,080835,1,[参数]#
- * 说明:
- * IW:标识符
- * BPDH : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 1: 表示立即聆听 可扩展
- * [参数]: 此为可选项。录音时间 为空默认15秒
- * #:结尾标识符
- * 设备响应: IWAPDH,080835,1#
- * 080835:指令流水号
- * 1 成功 0失败
- * # 结尾标识符
- */
-
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 5) {
- String imei = cmdlist[1];
- String id = cmdlist[2];
- String cdd = cmdlist[3];
- String tmp = cmdlist[4];
-
- tmp = tmp.replace(CMDEND, "").trim();
-
- if (tmp.isEmpty()) tmp = "15";
- connection.send(APDH(id, cdd));
-
- if (cdd.equals("1")) {
- //delay 启动
-// Context context = mRuntime.getContextProxy().context.getApplicationContext();
- CoreService.getInstance().DevliverStringMessage("StartMonitor", tmp);
- }
- } else {
- ICLogger.i(" BPDH Format error!");
- }
- }
-
- public static StringMessage APTQ(Runtime runtime) {
- /**
- * IWAPTQ,460,0,9520,3671,0#
- * APTQ : 命令字符
- * 460,0,9520,3671基站信息
- * 0:语言标志位 0 默认为中文,1为英文
- */
- //或者仅仅使用 locale = Locale.getDefault(); 不需要考虑接口 deprecated(弃用)问题
- Locale locale = Locale.getDefault();
- String lang = locale.getLanguage() + "-" + locale.getCountry();
- int language = 0;
- if (!lang.contains("zh")) {
- language = 1;
- }
- return genStringMessage("APTQ", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(runtime.getLocationInstance().getMCC())
- .append(CMDSPLIT).append(runtime.getLocationInstance().getMNC())
- .append(CMDSPLIT).append(runtime.getLocationInstance().getLAC())
- .append(CMDSPLIT).append(runtime.getLocationInstance().getGSMStationCID())
- .append(CMDSPLIT).append(language)
- .append(CMDEND).toString());
- }
-
-
- public void handleBPTQ(Connection connection, Runtime runtime, String cmd) {
- /***
- *
- * IWBPTQ,20-10-11,19:32:02,6674,32,27,22,30,20-10-12,19:32:02,6674,32,27,22,30,20-10-13,19:32:02,6674,32,27,22,30,53575C71533A
- * IWBPTQ, 16-09-24,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-25,11:00:00,b6e0d4c6,2,-5,-12,22,16-09-26,11:00:00,b6e0d4c6,2,-5,-12,22,316df15733#
- * 年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,城市名
- * 注:天气描述用Unicode编码,城市名使用Unicode编码, 第一组为当天,后2组依次为后续2天天气
- * 如天气编号及描述对应如下(天气描述不需要发送括号内的白天晚上)
- * 0:龙卷风
- * 1:热带风暴
- * 2:飓风
- * 3:严重的雷暴
- * 4:雷暴
- * 5:混合雨雪
- * 6:混合降雨和冰雹
- * 7:混合雪和雨夹雪
- * 8:冻结小雨
- * 9:小雨
- * 10:冻雨
- * 11:阵雨
- * 12:阵雨
- * 13:雪飘雪
- * 14:小雪阵雨
- * 15:吹雪
- * 16:雪
- * 17:冰雹
- * 18:雨夹雪
- * 19:尘埃
- * 20:雾
- * 21:霾
- * 22:黑烟
- * 23:大风
- * 24:风
- * 25:低温
- * 26:多云
- * 27:多云(晚上)
- * 28:多云(白天)
- * 29:局部多云(晚上)
- * 30:局部多云(天)
- * 31:清爽(晚)
- * 32:晴天
- * 33:晴朗(晚)
- * 34:晴朗(天)
- * 35:混合雨和冰雹
- * 36:热
- * 37:局部地区性雷暴
- * 38:零星雷暴
- * 39:零星雷暴
- * 40:零星阵雨
- * 41:大雪
- * 42:零星阵雪
- * 43:大雪
- * 44:多云
- * 45:雷阵雨
- * 46:阵雪
- * 47:局部雷阵雨
- */
-
- log("BPTQ " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 23) {
-
- StringBuilder sb = new StringBuilder();
- StringBuilder msg = new StringBuilder();
- for (int i = 0; i < 3; i++) {
- String DayTime = cmdlist[1 + i * 7] + " " + cmdlist[2 + i * 7];
- String date = "20" + cmdlist[1 + i * 7].trim();
- String weather_name = Util.decodeUnicode2Utf8(cmdlist[3 + i * 7].trim());
- String weather_id = cmdlist[4 + i * 7];
- String temp_current = cmdlist[5 + i * 7];
- String temp_high = cmdlist[6 + i * 7];
- String temp_low = cmdlist[7 + i * 7];
-
- sb.append(" " + DayTime);
- sb.append(",天气:" + weather_name);
- sb.append(",ID " + weather_id);
- sb.append(",当前温度 " + temp_current);
- sb.append(",最高温度 " + temp_high);
- sb.append(",最低温度 " + temp_low);
- sb.append("\n");
-
- msg.append(date);
- msg.append("," + weather_name);
- msg.append("," + weather_id);
- msg.append("," + temp_current);
- msg.append("," + temp_high);
- msg.append("," + temp_low);
- msg.append(";");
- }
- String City = Util.decodeUnicode2Utf8(cmdlist[22]);
-
- ICLogger.i(City + " \n" + sb.toString());
-
- msg.insert(0, City + ";");
- String weatherstr = msg.toString();
- if (weatherstr.endsWith(";")) {
- weatherstr = weatherstr.substring(0, weatherstr.lastIndexOf(";"));
- }
- Intent intent = new Intent(Constants.ACTION_WEATHER_RECEIVED);
- intent.putExtra(Constants.KEY_Weather, weatherstr);
- ICLogger.i("send Broadcast " + Constants.ACTION_WEATHER_RECEIVED + "\n" + weatherstr + "\n");
- CoreService.getInstance().sendBroadcast(intent);
-
- } else {
- ICLogger.i(" BPTQ Format error!");
- }
- }
-
-
- public static StringMessage AP94() {
- /***
- * 15确认已读文字(上行协议号:AP94,响应:BP94)
- * 示例:
- * IWAP94,123456,1#
- * 说明:
- * IWAP94:标识符
- * APHCI: 命令字符
- * 123456: 文字来源系统流水号
- * 1:确认阅读、0:取消阅读
- * 平台响应: IWBP94#
- * 表示平台已接收,可不作响应
- * 说明: 本消息适用所有终端
- */
-
- //在UI逻辑中,只要有处理就都是已经阅读。所以不存在取消阅读的说法。
- return genStringMessage(cmdMap.get(protocol_gator.CMD_TYPE.AP14), new StringBuffer(CMDHEADER).append(cmdMap.get(protocol_gator.CMD_TYPE.AP14))
- .append(CMDSPLIT).append(Runtime.PushtxtMsg_srv_index)
- .append(CMDSPLIT).append("1")
- .append(CMDEND).toString());
-
- }
-
-
- public static StringMessage APAT(String id, String cmd) {
- return genStringMessage("APAT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cmd)
- .append(CMDEND).toString());
- }
-
- /***
- * 响应剪断开关设定消息
- * @param connection
- * @param runtime
- * @param cmd
- */
- public void handleBPAT(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPAT,353456789012345,080835,1#
- * 说明:是否提示表带是否连接的开关,即剪断报警开关
- * IW:标识符
- * BPAT : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * 1: 表示剪断报警开关,1为开,0 为关
- * 设备响应: IWAPAT,080835, 1#
- * 080835:指令流水号
- * 1: 剪断开关状态(实际上与下行的命令一致)
- */
-
- log("BPAT " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 4) {
-
- String imei = cmdlist[1];
- String id = cmdlist[2];
- String cmdid = cmdlist[3];
- connection.send(APAT(id, cmdid));
- if (cmdid.trim().equals("1")) {
- WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
-// runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success), 2);
- Util.ShowToast(runtime, runtime.getContextProxy().context.getResources().getString(R.string.alarm_lock_success));
- Config.setNeedAntiOff(runtime.getContextProxy().context, true);
- Config.setNeedCutOff(runtime.getContextProxy().context, true);
- runtime.setNeedAntioff(true);
- runtime.setNeddReportCutoff(true);
- } else {
- WakeLockUtil.ScreenOnWakeLockTemperary(runtime.getContextProxy().context);
- runtime.getContextProxy().sendMsgBroadcast(runtime.getContextProxy().context.getResources().getString(R.string.alarm_unbind_success), 2);
- Config.setNeedAntiOff(runtime.getContextProxy().context, false);
- Config.setNeedCutOff(runtime.getContextProxy().context, false);
- runtime.setNeedAntioff(false);
- runtime.setNeddReportCutoff(false);
- }
- } else {
- ICLogger.i(" BPAT Format error!");
- }
- }
-
-
- public static StringMessage APCH(int charging) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP14),
- new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(charging)
- .append(CMDEND).toString());
- }
-
-
- public static StringMessage APBT(String id, String cycle) {
- return genStringMessage("APBT", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cycle)
- .append(CMDEND).toString());
- }
-
- /***
- * 响应蓝牙扫描周期设定
- * @param connection
- * @param runtime
- * @param cmd
- */
- public void handleBPBT(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPBT,353456789012345,080835,1#
- * 说明:设置蓝牙扫描周期,单位时间分钟
- * IW:标识符
- * BPBT : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * 1: 扫描周期,对应单位为分钟
- * 设备响应: IWAPBT,080835, 1#
- * 080835:指令流水号
- * 1: 剪断开关状态(实际上与下行的命令一致)
- */
-
- log("BPBT " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 4) {
- String id = cmdlist[2];
- String cycle = cmdlist[3].replace("#", "");
- connection.send(APBT(id, cycle));
-
- if (Util.isNumeric(cycle)) {
- int intcycle = Integer.parseInt(cycle);
- Config.setBleScanCycle(runtime.getContextProxy().context, intcycle);
- runtime.bleInfo.bleScanCycle = intcycle;
- ICLogger.i("设置蓝牙扫描周期 " + intcycle + " 秒");
- CoreService.getInstance().setBleScanAlarm(intcycle);
- } else {
- ICLogger.i(" BPBT Format error!");
- }
-
- } else {
- ICLogger.i(" BPBT Format error!");
- }
- }
-
- /***
- * 发送蓝牙扫描结果
- * @param runtime
- * @return
- */
- public static StringMessage APBR(Runtime runtime) {
-
- /***
- * IWAPBR,IMEI,yyyyMMddHHmmss,beaconCount,major0,minor0,mac0,rssi0,major1,minor1,mac1,rssi1...#
- */
- if (runtime.bleInfo.btScanResult.size() > 0) {
- StringBuffer sb = new StringBuffer();
- sb.append(runtime.bleInfo.btScanResult.size());
- for (String it : runtime.bleInfo.btScanResult) {
- sb.append(CMDSPLIT).append(it);
- }
- return genStringMessage("APBR", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(runtime.IMEI())
- .append(CMDSPLIT).append(TimeUtil.getSystemTimeyyyyMMddHHmmss())
- .append(CMDSPLIT).append(sb.toString())
- .append(CMDEND).toString());
-
- } else {
- return null;
- }
- }
-
- public static StringMessage APBS(String id, String cycle) {
- return genStringMessage("APBS", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cycle)
- .append(CMDEND).toString());
- }
-
- public void handleBPBS(Connection connection, Runtime runtime, String cmd) {
-/***
- * IWBPBS,353456789012345,080835,150&151#
- * 说明:设置蓝牙扫描绑定的 major id
- * IW:标识符
- * BPBS : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835:指令流水号
- * majorIDs: 用 & 分隔的 多个 Majorid
- * 设备响应: IWAPBS,080835, 1#
- * 080835:指令流水号
- * 1: 成功,0失败
- */
- log("BPBS " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 4) {
- String id = cmdlist[2];
- connection.send(APBS(id, "1"));
-
- ICLogger.i("设置蓝牙扫描绑定MajorID " + cmdlist[3] + " ");
- String[] majorlist = cmdlist[3].split("&");
- runtime.bleInfo.btMajorList.clear();
- for (int i = 0; i < majorlist.length; i++) {
- runtime.bleInfo.btMajorList.add(majorlist[i]);
- }
-
- } else {
- ICLogger.i(" BPBS Format error!");
- }
- }
-
- /**
- * 85.设置联系人白名单(10个)(下行协议:BPWL,响应:APWL)
- * 示例:
- * IWBPWL,353456789012345,080835,D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx #
- * 说明:
- * IW:标识符
- * BPWL : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * D3590D54|135xxxxxxxxxx|9507xxxxxxxx : 一组联系人,使用|分隔名称和电话号码和绑定号码,名称使用UNICODE编码直接下发byte,多组之间使用逗号分隔,未填写的可为空,但位置仍需保留
- * 设备响应: IWAPWL,080835, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx, D3590D54|135xxxxxxxxxx#
- * 080835: 设备响应的时候带上响应流水号
- * D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx, D3590D54|135xxxxxxxxxx|9507xxxxxxxx回复设备当前设置的主控号码供平台同步使用
- * 说明: 本消息适用所有终端
- */
- public static StringMessage APWL(String index, String[] phnumbs) {
- return genStringMessage("APWL", 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 handleBPWL(Connection connection, String cmd, Runtime runtime) {
-// IWBPWL,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
-/**
- * IWBPWL,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(APWL(index, phnums));
- ArrayList<Contact> contactArray = new ArrayList<Contact>();
-
- if (Config.custom_name.equals("YT")) {
- ICLogger.i("=====add hotline 96885 ");
- contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
- }
- 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(" BPWL format error!");
- }
-
- }
-
-
- public static StringMessage AP65(String id, String cy) {
- return genStringMessage("AP65", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cy)
- .append(CMDEND).toString());
- }
-
- public void handleBP65(Connection connection, Runtime runtime, String cmd) {
-/***
- * 36.音量设置(下行协议:BP65,响应:AP65)
- * 示例:
- * IWBP65,353456789012345,080835,1#
- * 说明:
- * IW:标识符
- * BP65: 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 1 : 表示音量等级为1
- * 设备响应: IWAP65,080835, 1#
- * 080835: 设备响应的时候带上响应流水号
- * 1: 表示指令执行成功,音量等级为1
- */
-
- log("BP65 " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 4) {
- String id = cmdlist[2];
- String cycle = cmdlist[3].replace("#", "");
- connection.send(AP65(id, cycle));
-
- if (Util.isNumeric(cycle)) {
- int mastervolume = Integer.parseInt(cycle);
-
- ICLogger.i("设置音量 " + mastervolume);
- //实际设备音量 0~15 协议音量0~7需要转换
- int volume = mastervolume * 2;
- if (volume < 0) volume = 0;
- if (volume >= 14) volume = 15;
- Config.setMasterVolume(runtime.getContextProxy().context, mastervolume * 2);
- ICAudioManager.setMasterVolumn(runtime.getContextProxy().context, mastervolume * 2);
-
- } else {
- ICLogger.i(" BP65 Format error!");
- }
-
- } else {
- ICLogger.i(" BP65 Format error!");
- }
- }
-
- public static StringMessage AP47(String id, String cycle) {
- return genStringMessage("AP47", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP14))
- .append(CMDSPLIT).append(id)
- .append(CMDSPLIT).append(cycle)
- .append(CMDEND).toString());
- }
-
-
- public void handleBP47(Connection connection, Runtime runtime, String cmd) {
-/***
- * 37.震动设置(下行协议号:BP47,响应:AP47)
- * 示例:
- * IWBP47,353456789012345,080835,10#
- * 说明:
- * IW:标识符
- * BP47 : 命令字符
- * 353456789012345:IMEI号,设备唯一ID
- * 080835 :指令流水号
- * 10: 表示震动时长,此处单位为称,表示震动10秒钟
- * 设备响应: IWAP47,080835,1#
- * 080835:指令流水号
- * 1:表示设备执行成功,0 表示设备执行失败
- */
-
- log("BP47 " + cmd);
- String[] cmdlist = cmd.split(CMDSPLIT);
- if (cmdlist.length == 4) {
- String id = cmdlist[2];
- String cycle = cmdlist[3].replace("#", "");
- connection.send(AP47(id, cycle));
-
- if (Util.isNumeric(cycle)) {
- int vibduration = Integer.parseInt(cycle);
- ICLogger.i("设置震动时长 " + vibduration + " 秒");
- Config.setDurationOfVibration(runtime.getContextProxy().context, vibduration);
- VibrateUtil.setVibPattern(vibduration * 1000);
-
- } else {
- ICLogger.i(" BP47 Format error!");
- }
-
- } else {
- ICLogger.i(" BP47 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);
- cmd = cmd.replace(" ", "");
- switch (type) {
- case AP03: //登录包
- handleAP03(mRuntime, cmd);
- ICLogger.i("服务器收到登录包");
- mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
- break;
- case AP14: //gps定位包
- handleBP01(cmd);
- ICLogger.i("服务器收到定位AP01");
- mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
- break;
- case AP04://查询终端版本消息
- handleAP04(mRuntime,mConnection,cmd);
- break;
// case AP14:// wifi定位包
// handleBP02(cmd);
// ICLogger.i("服务器收到定位AP02");