package com.ic.protocols;
+import android.Manifest;
import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Environment;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.support.v4.app.ActivityCompat;
+import android.text.TextUtils;
+import android.widget.Toast;
import com.ic.protocolSrv.Config;
+import com.ic.protocolSrv.Constants;
import com.ic.protocolSrv.CoreService;
+import com.ic.protocolSrv.LocationClient;
import com.ic.protocolSrv.bean.Alarm;
import com.ic.protocolSrv.bean.Contact;
-import com.ic.protocolSrv.bean.Content;
import com.ic.protocolSrv.bean.ICLocation;
import com.ic.protocolSrv.bean.Runtime;
import com.ic.protocolSrv.bean.StringMessage;
import com.ic.protocolSrv.bean.VoiceContent;
import com.ic.protocolSrv.bean.voicePacket;
+import com.ic.protocolSrv.provider.ICAlarmProvider;
+import com.ic.protocolSrv.provider.ICDatabaseHelper;
+import com.ic.protocolSrv.provider.ICMembersProvider;
+import com.ic.protocolSrv.provider.WeTalkMessageProvider;
import com.ic.protocolSrv.service.HeartRateManager;
+import com.ic.protocolSrv.service.SilentManager;
+import com.ic.protocolSrv.utils.CameraUtil;
+import com.ic.protocolSrv.utils.CellInfoUtil;
import com.ic.protocolSrv.utils.Connection;
import com.ic.protocolSrv.utils.DeviceInfoUtil;
+import com.ic.protocolSrv.utils.HeartRateOxygenTestType;
import com.ic.protocolSrv.utils.ICLogger;
import com.ic.protocolSrv.utils.TemperatureUtil;
import com.ic.protocolSrv.utils.TimeUtil;
+
+
import com.ic.protocolSrv.utils.Util;
+import com.ic.s123.GenericWeatherInfo;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.List;
+import java.util.TimeZone;
+import static com.ic.protocolSrv.Constants.ACTION_ALARM_ALARM_CHANGE;
+import static com.ic.protocolSrv.Constants.DIALOG_ACTION;
import static com.ic.protocolSrv.Constants.FROM_SERVER;
import static com.ic.protocolSrv.LocationClient.LOCATION_MODE;
-import static com.ic.protocolSrv.bean.Contact.GROUP_ALL;
import static java.lang.Math.abs;
public class protocol_beehome {
private static final String CMDSPLIT = ",";
public static final String defaultServerIP = "en.beehome360.com";
public static final int defaultServerPort = 5018;
+ private Handler mHandler = null;
+
+
+ public static byte[] AP42(String packetTime, int count, int index, int datalen, byte[] amrdata) {
+ String sb = new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP42))
+ .append(CMDSPLIT).append(packetTime)
+ .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 static StringMessage genUD2FromUD(StringMessage ud) {
+ String data, tmp;
+ tmp = ud.isFromCache();
+ if (isCmdStr(tmp).equals("AP01")) {
+ tmp = ud.isFromCache().replace("]", "");
+ int index = tmp.indexOf("AP01,");
+ data = tmp.substring(index + 3);
+ return genStringMessage("APH1 ", data);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * 解析测试指令
+ *
+ * @param cmd
+ */
+ public void parserTesterCmdStr(String cmd) {
+ if (cmd.length() < 4) {
+ ICLogger.d("cmd length error..." + cmd);
+ return;
+ }
+
+ ICLogger.d("cmd ==> " + cmd);
+ String cmdKey = cmd.substring(2, 6);
+ ICLogger.d("cmdKey ==> " + cmdKey);
+ CMD_TYPE cmd_type = cmdMap.get(cmdKey);
+ handleCmd(cmd_type, cmd);
+ }
+
+ public void sendMsg2Web(String cmdIndex, String msg) {
+ //返回的消息在短信处理之后进行返回
+ mConnection.send(genStringMessage(cmdStrMap.get(CMD_TYPE.APSM),
+ new StringBuffer(CMDHEADER)
+ .append(cmdStrMap.get(CMD_TYPE.APSM))
+ .append(CMDSPLIT)
+ .append(cmdIndex)
+ .append(CMDSPLIT)
+ .append(msg)
+ .toString()));
+ }
+
+ public void doAP05() {
+ ICLogger.d("doAP05...");
+ String ap05Msg = AP05(true);
+ StringMessage stringMessage = genStringMessage(cmdStrMap.get(CMD_TYPE.AP05), ap05Msg);
+ mConnection.send(stringMessage);
+ }
public enum CMD_TYPE {
/*终端发起*/
BP28, //语音下行
AP31,
BP31,//关机
+ BP32,//拨号指令
+ AP32,
AP33,
BP33,//工作模式
AP34,
BP85,//设置闹钟
AP86,
BP86,//绑定解绑
+ AP87,//二维码获取
+ BP87,
AP88,
BP88,//查找手表
AP89,
UNKNOWN_CMD,
BPTF,//时间设置
APTF,//时间设置
- }
-
- private static HashMap<CMD_TYPE, String> cmdMap = null;
+ BPSQ,//设置体征信息监测间隔
+ APSQ,
+ BPMC,//专门控制skipmovecheck
+ APMC,//
+ BPPH,//拨号功能开关
+ APPH,
+ APJK,//上传健康数据,用这个接口,可以去掉体温心率的接口了
+ BPJK,//平台响应
+ BPSM,//平台下发短信指令
+ APSM,//设备回复是否收到平台短信指令
+ APTQ,//天气信息请求
+ BPTQ,//天气信息响应
+ BP75,//闹钟数据下发
+ AP75,//闹钟数据回复
+ AP46,//立即拍照
+ BP46,
+ AP42,//图片上传
+ BP42,
+ APH1,//无网络状态下的定位数据
+ BPH1,
+ BPOX, //IWBPOX,IMEI,流水号,1#
+ APOX,
+ }
+
+ private static HashMap<CMD_TYPE, String> cmdStrMap = null;
+ private static HashMap<String, CMD_TYPE> cmdMap = null;
static {
- cmdMap = new HashMap<CMD_TYPE, String>();
- 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.BPVR,"BPVR");
- cmdMap.put(CMD_TYPE.APVR,"APVR");
- 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.AP40, "AP40");
- cmdMap.put(CMD_TYPE.BP40, "BP40");
- cmdMap.put(CMD_TYPE.AP68, "AP68");
- cmdMap.put(CMD_TYPE.BP68, "BP68");
- 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.AP88, "AP88");
- cmdMap.put(CMD_TYPE.BP88, "BP88");
- cmdMap.put(CMD_TYPE.AP89, "AP89");
- cmdMap.put(CMD_TYPE.BP89, "BP89");
- cmdMap.put(CMD_TYPE.APTE, "APTE");
- cmdMap.put(CMD_TYPE.BPTE, "BPTE");
- cmdMap.put(CMD_TYPE.APTP, "APTP");
- cmdMap.put(CMD_TYPE.BPTP, "BPTP");
- cmdMap.put(CMD_TYPE.APX1, "APX1");
- cmdMap.put(CMD_TYPE.BPX1, "BPX1");
- cmdMap.put(CMD_TYPE.APS4, "APS4");
- cmdMap.put(CMD_TYPE.BPS4, "BPS4");
- cmdMap.put(CMD_TYPE.APHP, "APHP");
- cmdMap.put(CMD_TYPE.BPHP, "BPHP");
- cmdMap.put(CMD_TYPE.BPTF, "BPTF");
- cmdMap.put(CMD_TYPE.APTF, "APTF");
+ cmdStrMap = new HashMap<>();
+ cmdStrMap.put(CMD_TYPE.AP00, "AP00");
+ cmdStrMap.put(CMD_TYPE.BP00, "BP00");
+ cmdStrMap.put(CMD_TYPE.AP01, "AP01");
+ cmdStrMap.put(CMD_TYPE.BP01, "BP01");
+ cmdStrMap.put(CMD_TYPE.AP02, "AP02");
+ cmdStrMap.put(CMD_TYPE.BP02, "BP02");
+ cmdStrMap.put(CMD_TYPE.AP92, "AP92");
+ cmdStrMap.put(CMD_TYPE.BP92, "BP92");
+ cmdStrMap.put(CMD_TYPE.AP03, "AP03");
+ cmdStrMap.put(CMD_TYPE.BP03, "BP03");
+ cmdStrMap.put(CMD_TYPE.AP05, "AP05");
+ cmdStrMap.put(CMD_TYPE.BP05, "BP05");
+ cmdStrMap.put(CMD_TYPE.AP07, "AP07");
+ cmdStrMap.put(CMD_TYPE.BP07, "BP07");
+ cmdStrMap.put(CMD_TYPE.AP10, "AP10");
+ cmdStrMap.put(CMD_TYPE.BP10, "BP10");
+ cmdStrMap.put(CMD_TYPE.AP49, "AP49");
+ cmdStrMap.put(CMD_TYPE.BP49, "BP49");
+ cmdStrMap.put(CMD_TYPE.APHT, "APHT");
+ cmdStrMap.put(CMD_TYPE.BPHT, "BPHT");
+ cmdStrMap.put(CMD_TYPE.APTM, "APTM");
+ cmdStrMap.put(CMD_TYPE.BPTM, "BPTM");
+ cmdStrMap.put(CMD_TYPE.BPVR, "BPVR");
+ cmdStrMap.put(CMD_TYPE.APVR, "APVR");
+ cmdStrMap.put(CMD_TYPE.AP12, "AP12");
+ cmdStrMap.put(CMD_TYPE.BP12, "BP12");
+ cmdStrMap.put(CMD_TYPE.AP14, "AP14");
+ cmdStrMap.put(CMD_TYPE.BP14, "BP14");
+ cmdStrMap.put(CMD_TYPE.AP15, "AP15");
+ cmdStrMap.put(CMD_TYPE.BP15, "BP15");
+ cmdStrMap.put(CMD_TYPE.AP16, "AP16");
+ cmdStrMap.put(CMD_TYPE.BP16, "BP16");
+ cmdStrMap.put(CMD_TYPE.AP17, "AP17");
+ cmdStrMap.put(CMD_TYPE.BP17, "BP17");
+ cmdStrMap.put(CMD_TYPE.AP18, "AP18");
+ cmdStrMap.put(CMD_TYPE.BP18, "BP18");
+ cmdStrMap.put(CMD_TYPE.AP21, "AP21");
+ cmdStrMap.put(CMD_TYPE.BP21, "BP21");
+ cmdStrMap.put(CMD_TYPE.AP28, "AP28");
+ cmdStrMap.put(CMD_TYPE.BP28, "BP28");
+ cmdStrMap.put(CMD_TYPE.AP31, "AP31");
+ cmdStrMap.put(CMD_TYPE.BP31, "BP31");
+ cmdStrMap.put(CMD_TYPE.BP32, "BP32");
+ cmdStrMap.put(CMD_TYPE.AP32, "AP32");
+ cmdStrMap.put(CMD_TYPE.AP33, "AP33");
+ cmdStrMap.put(CMD_TYPE.BP33, "BP33");
+ cmdStrMap.put(CMD_TYPE.AP34, "AP34");
+ cmdStrMap.put(CMD_TYPE.BP34, "BP34");
+ cmdStrMap.put(CMD_TYPE.AP40, "AP40");
+ cmdStrMap.put(CMD_TYPE.BP40, "BP40");
+ cmdStrMap.put(CMD_TYPE.AP68, "AP68");
+ cmdStrMap.put(CMD_TYPE.BP68, "BP68");
+ cmdStrMap.put(CMD_TYPE.APXL, "APXL");
+ cmdStrMap.put(CMD_TYPE.BPXL, "BPXL");
+ cmdStrMap.put(CMD_TYPE.APXY, "APXY");
+ cmdStrMap.put(CMD_TYPE.BPXY, "BPXY");
+ cmdStrMap.put(CMD_TYPE.APJZ, "APJZ");
+ cmdStrMap.put(CMD_TYPE.BPJZ, "BPJZ");
+ cmdStrMap.put(CMD_TYPE.AP84, "AP84");
+ cmdStrMap.put(CMD_TYPE.BP84, "BP84");
+ cmdStrMap.put(CMD_TYPE.AP85, "AP85");
+ cmdStrMap.put(CMD_TYPE.BP85, "BP85");
+ cmdStrMap.put(CMD_TYPE.AP86, "AP86");
+ cmdStrMap.put(CMD_TYPE.BP86, "BP86");
+ cmdStrMap.put(CMD_TYPE.AP88, "AP88");
+ cmdStrMap.put(CMD_TYPE.BP88, "BP88");
+ cmdStrMap.put(CMD_TYPE.AP89, "AP89");
+ cmdStrMap.put(CMD_TYPE.BP89, "BP89");
+ cmdStrMap.put(CMD_TYPE.APTE, "APTE");
+ cmdStrMap.put(CMD_TYPE.BPTE, "BPTE");
+ cmdStrMap.put(CMD_TYPE.APTP, "APTP");
+ cmdStrMap.put(CMD_TYPE.BPTP, "BPTP");
+ cmdStrMap.put(CMD_TYPE.APX1, "APX1");
+ cmdStrMap.put(CMD_TYPE.BPX1, "BPX1");
+ cmdStrMap.put(CMD_TYPE.APS4, "APS4");
+ cmdStrMap.put(CMD_TYPE.BPS4, "BPS4");
+ cmdStrMap.put(CMD_TYPE.APHP, "APHP");
+ cmdStrMap.put(CMD_TYPE.BPHP, "BPHP");
+ cmdStrMap.put(CMD_TYPE.BPTF, "BPTF");
+ cmdStrMap.put(CMD_TYPE.APTF, "APTF");
+ cmdStrMap.put(CMD_TYPE.BPSQ, "BPSQ");
+ cmdStrMap.put(CMD_TYPE.APSQ, "APSQ");
+ cmdStrMap.put(CMD_TYPE.BPMC, "BPMC");
+ cmdStrMap.put(CMD_TYPE.APMC, "APMC");
+ cmdStrMap.put(CMD_TYPE.BPPH, "BPPH");
+ cmdStrMap.put(CMD_TYPE.APPH, "APPH");
+ cmdStrMap.put(CMD_TYPE.APJK, "APJK");
+ cmdStrMap.put(CMD_TYPE.BPJK, "BPJK");
+ cmdStrMap.put(CMD_TYPE.BPSM, "BPSM");
+ cmdStrMap.put(CMD_TYPE.APSM, "APSM");
+ cmdStrMap.put(CMD_TYPE.APTQ, "APTQ");
+ cmdStrMap.put(CMD_TYPE.BPTQ, "BPTQ");
+ cmdStrMap.put(CMD_TYPE.BP75, "BP75");
+ cmdStrMap.put(CMD_TYPE.AP75, "AP75");
+ cmdStrMap.put(CMD_TYPE.AP46, "AP46");
+ cmdStrMap.put(CMD_TYPE.BP46, "BP46");
+ cmdStrMap.put(CMD_TYPE.AP42, "AP42");
+ cmdStrMap.put(CMD_TYPE.BP42, "BP42");
+ cmdStrMap.put(CMD_TYPE.APH1, "APH1");
+ cmdStrMap.put(CMD_TYPE.BPH1, "BPH1");
+ cmdStrMap.put(CMD_TYPE.BPOX, "BPOX");
+ cmdStrMap.put(CMD_TYPE.APOX, "APOX");
+
+ //
+ cmdMap = new HashMap<>();
+ cmdMap.put("AP00", CMD_TYPE.AP00);
+ cmdMap.put("BP00", CMD_TYPE.BP00);
+ cmdMap.put("AP01", CMD_TYPE.AP01);
+ cmdMap.put("BP01", CMD_TYPE.BP01);
+ cmdMap.put("AP02", CMD_TYPE.AP02);
+ cmdMap.put("BP02", CMD_TYPE.BP02);
+ cmdMap.put("AP92", CMD_TYPE.AP92);
+ cmdMap.put("BP92", CMD_TYPE.BP92);
+ cmdMap.put("AP03", CMD_TYPE.AP03);
+ cmdMap.put("BP03", CMD_TYPE.BP03);
+ cmdMap.put("AP05", CMD_TYPE.AP05);
+ cmdMap.put("BP05", CMD_TYPE.BP05);
+ cmdMap.put("AP07", CMD_TYPE.AP07);
+ cmdMap.put("BP07", CMD_TYPE.BP07);
+ cmdMap.put("AP10", CMD_TYPE.AP10);
+ cmdMap.put("BP10", CMD_TYPE.BP10);
+ cmdMap.put("AP49", CMD_TYPE.AP49);
+ cmdMap.put("BP49", CMD_TYPE.BP49);
+ cmdMap.put("APHT", CMD_TYPE.APHT);
+ cmdMap.put("BPHT", CMD_TYPE.BPHT);
+ cmdMap.put("APTM", CMD_TYPE.APTM);
+ cmdMap.put("BPTM", CMD_TYPE.BPTM);
+ cmdMap.put("BPVR", CMD_TYPE.BPVR);
+ cmdMap.put("APVR", CMD_TYPE.APVR);
+ cmdMap.put("AP12", CMD_TYPE.AP12);
+ cmdMap.put("BP12", CMD_TYPE.BP12);
+ cmdMap.put("AP14", CMD_TYPE.AP14);
+ cmdMap.put("BP14", CMD_TYPE.BP14);
+ cmdMap.put("AP15", CMD_TYPE.AP15);
+ cmdMap.put("BP15", CMD_TYPE.BP15);
+ cmdMap.put("AP16", CMD_TYPE.AP16);
+ cmdMap.put("BP16", CMD_TYPE.BP16);
+ cmdMap.put("AP17", CMD_TYPE.AP17);
+ cmdMap.put("BP17", CMD_TYPE.BP17);
+ cmdMap.put("AP18", CMD_TYPE.AP18);
+ cmdMap.put("BP18", CMD_TYPE.BP18);
+ cmdMap.put("AP21", CMD_TYPE.AP21);
+ cmdMap.put("BP21", CMD_TYPE.BP21);
+ cmdMap.put("AP28", CMD_TYPE.AP28);
+ cmdMap.put("BP28", CMD_TYPE.BP28);
+ cmdMap.put("AP31", CMD_TYPE.AP31);
+ cmdMap.put("BP31", CMD_TYPE.BP31);
+ cmdMap.put("AP33", CMD_TYPE.AP33);
+ cmdMap.put("BP33", CMD_TYPE.BP33);
+ cmdMap.put("AP34", CMD_TYPE.AP34);
+ cmdMap.put("BP34", CMD_TYPE.BP34);
+ cmdMap.put("AP40", CMD_TYPE.AP40);
+ cmdMap.put("BP40", CMD_TYPE.BP40);
+ cmdMap.put("AP68", CMD_TYPE.AP68);
+ cmdMap.put("BP68", CMD_TYPE.BP68);
+ cmdMap.put("APXL", CMD_TYPE.APXL);
+ cmdMap.put("BPXL", CMD_TYPE.BPXL);
+ cmdMap.put("APXY", CMD_TYPE.APXY);
+ cmdMap.put("BPXY", CMD_TYPE.BPXY);
+ cmdMap.put("APJZ", CMD_TYPE.APJZ);
+ cmdMap.put("BPJZ", CMD_TYPE.BPJZ);
+ cmdMap.put("AP84", CMD_TYPE.AP84);
+ cmdMap.put("BP84", CMD_TYPE.BP84);
+ cmdMap.put("AP85", CMD_TYPE.AP85);
+ cmdMap.put("BP85", CMD_TYPE.BP85);
+ cmdMap.put("AP86", CMD_TYPE.AP86);
+ cmdMap.put("BP86", CMD_TYPE.BP86);
+ cmdMap.put("AP88", CMD_TYPE.AP88);
+ cmdMap.put("BP88", CMD_TYPE.BP88);
+ cmdMap.put("AP89", CMD_TYPE.AP89);
+ cmdMap.put("BP89", CMD_TYPE.BP89);
+ cmdMap.put("APTE", CMD_TYPE.APTE);
+ cmdMap.put("BPTE", CMD_TYPE.BPTE);
+ cmdMap.put("APTP", CMD_TYPE.APTP);
+ cmdMap.put("BPTP", CMD_TYPE.BPTP);
+ cmdMap.put("APX1", CMD_TYPE.APX1);
+ cmdMap.put("BPX1", CMD_TYPE.BPX1);
+ cmdMap.put("APS4", CMD_TYPE.APS4);
+ cmdMap.put("BPS4", CMD_TYPE.BPS4);
+ cmdMap.put("APHP", CMD_TYPE.APHP);
+ cmdMap.put("BPHP", CMD_TYPE.BPHP);
+ cmdMap.put("BPTF", CMD_TYPE.BPTF);
+ cmdMap.put("APTF", CMD_TYPE.APTF);
+ cmdMap.put("BPSQ", CMD_TYPE.BPSQ);
+ cmdMap.put("APSQ", CMD_TYPE.APSQ);
+ cmdMap.put("BPMC", CMD_TYPE.BPMC);
+ cmdMap.put("APMC", CMD_TYPE.APMC);
+ cmdMap.put("BPPH", CMD_TYPE.BPPH);
+ cmdMap.put("APPH", CMD_TYPE.APPH);
+ cmdMap.put("APJK", CMD_TYPE.APJK);
+ cmdMap.put("BPJK", CMD_TYPE.BPJK);
+ cmdMap.put("BPSM", CMD_TYPE.BPSM);
+ cmdMap.put("APSM", CMD_TYPE.APSM);
+ cmdMap.put("BPTQ", CMD_TYPE.BPTQ);
+ cmdMap.put("APTQ", CMD_TYPE.APTQ);
+ cmdMap.put("AP75", CMD_TYPE.AP75);
+ cmdMap.put("BP75", CMD_TYPE.BP75);
+ cmdMap.put("BP46", CMD_TYPE.BP46);
+ cmdMap.put("AP46", CMD_TYPE.AP46);
+ cmdMap.put("BP42", CMD_TYPE.BP42);
+ cmdMap.put("AP42", CMD_TYPE.AP42);
+ cmdMap.put("APH1", CMD_TYPE.APH1);
+ cmdMap.put("BPH1", CMD_TYPE.BPH1);
+ cmdMap.put("BPOX", CMD_TYPE.BPOX);
+ cmdMap.put("APOX", CMD_TYPE.APOX);
+
}
public protocol_beehome(Connection connect, Runtime runtime) {
mConnection = connect;
mRuntime = runtime;
-
+ if (mHandler == null) {
+ HandlerThread handlerThread = new HandlerThread("ic:protocol_s123-handler-thread");
+ handlerThread.start();
+ mHandler = new Handler(handlerThread.getLooper());
+ }
}
private StringBuffer cmdbuf = new StringBuffer();
return "";
}
- for (CMD_TYPE key : cmdMap.keySet()) {
- if (msg.startsWith(CMDHEADER + cmdMap.get(key))) {
- ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key));
- return cmdMap.get(key);
+ for (CMD_TYPE key : cmdStrMap.keySet()) {
+ if (msg.startsWith(CMDHEADER + cmdStrMap.get(key))) {
+ ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdStrMap.get(key));
+ return cmdStrMap.get(key);
}
}
}
- /**/
public static StringMessage genStringMessage(String cmdName, String msg) {
+ ICLogger.d("msg ==> " + msg);
//设置cmdName,在这里配置进去的msg没有实际用到
StringMessage sm = new StringMessage(new String[]{cmdName, msg});
//用此函数设置要发送的内容
sm.refresh(msg);
//设置信息创建时间
- sm.setDate(TimeUtil.getSystemDateYYMMDD(), TimeUtil.getSystemTimeHHmmss());
+ sm.setDate(TimeUtil.getUTCSystemDateYYMMDD(), TimeUtil.getUTCSystemTimeHHmmss());
return sm;
}
boolean ret = true;
String last_inCompletecmd = "";
String cmd_msgbuf = new String(bytes);
- log("bytes.size " + bytes.length);
+ ICLogger.d("bytes.size " + bytes.length);
// cmdbuf.append(cmd_msgbuf);
cmdbuf.append(cmd_msgbuf);
- log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());
+ ICLogger.d("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());
/*
如果不是 #结尾,就认为 接收数据不全,置位。
*/
}
String[] cmdlist = cmd_msgbuf.split(CMDEND);
int listlen = cmdlist.length;
- log("listlen " + listlen);
+ ICLogger.d("listlen " + listlen);
/*
如果解析出来的cmdlist不是空,且数据不是完整cmd则保留 最后一条数据到last_inCompletecmd
*/
if (cmdlist.length > 0 && iscmdComplete == false) {
listlen -= 1;
last_inCompletecmd = cmdlist[listlen];
- log("cmd not complete , " + last_inCompletecmd);
+ ICLogger.d("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]);
+ String cmdItem = cmdlist[i];
+ if (cmdItem.startsWith(CMDHEADER)) {
+ //获取到指令
+ String cmdStr = cmdItem.substring(2, 6);
+ ICLogger.d("cmdStr ==> " + cmdStr);
+ CMD_TYPE key = cmdMap.get(cmdStr);
+ if (key == null) {
+ ICLogger.d("不支持该指令==> " + cmdlist[i]);
+ return false;
+ }
+ ICLogger.d("found cmd keyid=" + key + " ,keyname=" + cmdStrMap.get(key) + " , " + cmdlist[i]);
+ if (key == CMD_TYPE.BP28) {
+ //如果是BP28则 后面的数据是音频,需要保留
+ int amrLen = getBP28Amrlen(cmdlist[i]);
+ if (bytes.length > amrLen) {
+ handleCmd(key, cmdlist[i], bytes);
}
+ } else {
+ handleCmd(key, cmdlist[i]);
}
}
}
return ret;
}
+
+ public void handleBP42(String cmd, Connection connection) {
+ /***
+ * 平台响应
+ * IWBP42,20140818064408,6,1,1#
+ * IW:标识符
+ * BP42 : 命令字符
+ * 20220217174924:语音图片文字目标
+ * 11:内容总包数
+ * 1:当前包序号
+ */
+ String[] cmdlist = cmd.split(CMDSPLIT);
+ if (cmdlist.length == 5) {
+ try {
+ String time = cmdlist[1];
+ String count = cmdlist[2];
+ String index = cmdlist[3];
+ String success = cmdlist[4];
+ int packetCount = Integer.parseInt(count);
+ int packetIndex = Integer.parseInt(index);
+ ICLogger.d("是否成功===>" + success);
+ ICLogger.i("服务器在收到 index " + time + " " + packetIndex + "/" + packetCount);
+ //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送
+ if ("1".equals(success)) {
+ 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 int getBP28Amrlen(String cmd) {
String Name;
.append(",packetCount = ").append(packetCount)
.append(",currentId = ").append(currentId)
.append(",packetLen = ").append(packetLen);
-
-
log(stringBuffer.toString());
return packetLen;
} catch (Exception e) {
/*登录*/
public static StringMessage AP00(Runtime ds) {
//示例数据:IWAP00867155030001063#
- return genStringMessage(cmdMap.get(CMD_TYPE.AP00),
- new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP00))
- .append(ds.IMEI())
- .append(CMDEND).toString());
+// IWAP00860315002003375,12345678901234567890,9466970701492096# 三个参数分别是IMEI,ICCID,IMSI
+ CellInfoUtil.getPhoneStatus(ds);//获取IMSI,ICCID
+ StringBuffer cmdbuf = new StringBuffer(CMDHEADER);
+ cmdbuf.append(cmdStrMap.get(CMD_TYPE.AP00)).append(ds.IMEI())
+ .append(CMDSPLIT).append(ds.getIccid())
+ .append(CMDSPLIT).append(ds.getImsi())
+ .append(CMDEND);
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP00), cmdbuf.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.ic.protocolSrv I/ICSrv.protocolAPIHelper: found cmd keyid=BP00 ,keyname=BP00 , IWBP00,20191229171933,8
-
+ //get Msg :IWBP00,20191229171933,8# (size)24
+ //12-30 01:19:33.861 6492-6492/com.ic.protocolSrv
+ //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]);
try {
- Date datetime = TimeUtil.parseDatetiime(msg[1]);
int timezone = Integer.parseInt(msg[2]);
+ String timezone_name = "";
+ if (timezone > 0) {
+ timezone_name = String.format("GMT+%1$02d:00", Math.abs(timezone));
+
+ } else {
+ timezone_name = String.format("GMT-%1$02d:00", Math.abs(timezone));
+ }
+ Date datetime = TimeUtil.parseDatetiime(msg[1], TimeZone.getTimeZone(timezone_name));
if (datetime != null) {
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
- TimeUtil.setTimeZone(runtime.getContextProxy().context, timezone);
-
+ //TimeUtil.setTimeZone(runtime.getContextProxy().context, timezone);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
TimeUtil.setSysDateTime(runtime.getContextProxy().context, datetime, timezone, true);
ICLogger.i("===" + TimeUtil.getDefaultTimeZone());
-
}
// Set Datetime 20200505112734
// Set TimeZone 8
}
}
+ /**
+ * 发送语音数据
+ *
+ * @param duration
+ * @param remoteNum
+ * @param content
+ * @param voiceId
+ */
+ public void sendVoice(int duration, String remoteNum, String content, String voiceId) {
+ // IWAP07,353456789012345,080835,20140818064408 ,135xxx,0,6,1,1024,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#
+ File file = new File(content);
+ if (!file.exists()) {
+ ICLogger.d("语音文件不存在.");
+ return;
+ }
+ if (remoteNum == null || remoteNum.isEmpty()) {
+ remoteNum = "0";
+ }
+ ICLogger.d("remoteNum =====> " + remoteNum);
+ //这个分类目前用不了,用号码就是单聊,没号码就是群聊
+ final VoiceContent voiceContent =
+ VoiceContent.placeHolderOut(1, remoteNum, String.format("%04X", duration), content, 1, 3);
+ // 把voiceContent拆解成1024的分包
+ Util.parseToVoicePacketSent(voiceContent, 1024);
+ //trigger 分包发送
+ if (CoreService.getInstance().getConnection() != null) {
+ CoreService.getInstance().getConnection()
+ .DeliverCMDMessageToSystem("SentVoicePacket", "");
+ }
+ }
+
public static StringMessage AP03(Runtime ds) {
//示例数据:IWAP03,06000908000102,5555,30# IWAP03,000000null00000,0,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())))
+ //定位模式
+ //定位周期cycle 单位秒
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP03), new StringBuffer(CMDHEADER).append(cmdStrMap.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());
+ .append(ds.getTotalStepCount()).append(CMDSPLIT)
+ .append(ds.getRolltimes()).append(CMDSPLIT)
+ .append(ds.getLocationInstance().getWorkingMod()).append(CMDSPLIT)
+ .append(ds.getLocationInstance().getLocation_cycle())
+ .append(CMDEND).toString());
}
//处理 心跳 BP03
* 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())
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP10), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP10)).append(TimeUtil.getUTCSystemDateYYMMDD())
+ .append(ds.getGPSData()).append(TimeUtil.getUTCSystemTimeHHmmss()).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)
// 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());
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP01),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP01)).append(TimeUtil.getUTCSystemDateYYMMDD())
+ .append(ds.getGPSData())
+ .append(TimeUtil.getUTCSystemTimeHHmmss()).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
}
ICLogger.i("Wifi ap sum " + apsum);
- return genStringMessage(cmdMap.get(CMD_TYPE.AP02), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP02), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP02)).append(CMDSPLIT)
.append(ds.getLanguage()).append(CMDSPLIT)
.append(0).append(CMDSPLIT) //为0时不回复地址
.append(ds.getLBSMultiStationData()).append(CMDSPLIT) //基站信息数据
public static StringMessage APXL(String id) {
//设备响应: IWAPXL,080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.APXL), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APXL), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APXL))
.append(CMDSPLIT).append(id)
.append(CMDEND).toString());
}
-
/**
* 测量心率
*
}
+
+ public static StringMessage APOX(String id,String cmdname) {
+//设备响应: IWAPOX,080835,1#
+ //080835:指令流水号
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APOX), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APOX))
+ .append(CMDSPLIT).append(id)
+ .append(CMDSPLIT).append(cmdname)
+ .append(CMDEND).toString());
+ }
+ /**
+ * 测量血氧
+ *
+ * @param cmd
+ * @param connection
+ */
+ public void handleBPOX(String cmd, Connection connection) {
+ //IWBPOX,353456789012345,080835,1#
+ //IWBPOX,IMEI,流水号,1#
+
+ String[] list = cmd.split(CMDSPLIT);
+ if (list.length == 4) {
+ String index = list[2];
+ String imei = list[1];
+ String cmdname = list[3];
+ ICLogger.i("Handle BPOX IMEI " + imei + ",index " + index +",cmdname "+cmdname);
+ connection.send(APOX(index,cmdname));
+ } else {
+ ICLogger.i("BPOX format error!");
+ }
+
+ }
+
public static StringMessage APXY(String id) {
//设备响应: IWAPXY,080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.APXY), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APXY), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APXY))
.append(CMDSPLIT).append(id)
.append(CMDEND).toString());
}
//设备响应: IWAPJZ,792997,120,85,42,1#
//792997:指令流水号
// 高压120,低压85,年龄42,1 男性
- return genStringMessage(cmdMap.get(CMD_TYPE.APJZ), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APJZ))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APJZ), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APJZ))
.append(CMDSPLIT).append(id)
.append(CMDSPLIT).append(BPH)
.append(CMDSPLIT).append(BPL)
public static StringMessage AP18(String index) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP18))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP18), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP18))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
//恢复出厂设置
public static StringMessage AP17(String index) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP17), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP17))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP17), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP17))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
// IWBP17,867155030001063,161723
String[] cmdlist = cmd.split(CMDSPLIT);
if (cmdlist.length == 3) {
-
connection.send(AP17(cmdlist[2]));
-
}
}
- //关机
-
+ /**
+ * 1. 请求天气(上行协议号:APTQ,响应:BPTQ)(不支持国外)
+ * 示例:
+ * IWAPTQ,460,0,9520,3671,0#
+ * 说明:
+ * IW:标识符APTQ : 命令字符460,0,9520,3671基站信息0:语言标志位 0 默认为中文,1为英文
+ *
+ * @param runtime
+ * @return
+ */
+ public static StringMessage APTQ(Runtime runtime) {
+ //IWAPTQ,460,0,9520,3671,0#
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APTQ),
+ new StringBuffer(CMDHEADER)
+ .append(cmdStrMap.get(CMD_TYPE.APTQ))
+ .append(CMDSPLIT)
+ .append(runtime.getLBSMultiStationData())
+ .append(CMDSPLIT)
+ .append("0")//中文
+ .toString());
+ }
+ //关机
public static StringMessage AP31(String index) {
- return genStringMessage(cmdMap.get(CMD_TYPE.AP31), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP31))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP31), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP31))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
public void handleBP31(Connection connection, String cmd) {
-
- // IWBP31,867155030001063,161723
+ //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(cmdMap.get(CMD_TYPE.AP12), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP12), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP12))
.append(CMDSPLIT).append(index)
.append(CMDSPLIT).append(phNum1)
.append(CMDSPLIT).append(phNum2)
//设置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]) : "";
+ 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 (!phNum1.isEmpty())
+ runtime.getContextProxy()
+ .getResolver().delete(Uri.parse(ICMembersProvider.MEMBERS),
+ ICDatabaseHelper.fType + "=?", new String[]{String.valueOf(ICDatabaseHelper.MemberType.SOS)});
+ ArrayList<Contact> contactArray = new ArrayList<>();
+ if (!phNum1.isEmpty()) {
contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
- if (!phNum2.isEmpty())
+ }
+ if (!phNum2.isEmpty()) {
contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
- if (!phNum3.isEmpty())
+ }
+ if (!phNum3.isEmpty()) {
contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
-
+ }
+ //保存到IC的数据库上
+ for (int i = 0; i < contactArray.size(); i++) {
+ //数据入库
+ Contact contact = contactArray.get(i);
+ ContentValues item = new ContentValues();
+ item.put(ICDatabaseHelper.fType, ICDatabaseHelper.MemberType.SOS);
+ item.put(ICDatabaseHelper.fUserName, contact.name);
+ item.put(ICDatabaseHelper.fPhoneNum, contact.number);
+ runtime.getContextProxy()
+ .getResolver()
+ .insert(Uri.parse(ICMembersProvider.MEMBERS), item);
+ }
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(cmdMap.get(CMD_TYPE.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());
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP14),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.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#
- */
+ //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 ");
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));
+ String phoneNum = tmp[1];
+ //保存到数据库中
+ ICLogger.i(i / 2 + " 姓名 " + name + ", 电话 " + phoneNum);
+ contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phoneNum));
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ICDatabaseHelper.fType, ICDatabaseHelper.MemberType.WHITE_LIST);
+ contentValues.put(ICDatabaseHelper.fPhoneNum, phoneNum);
+ contentValues.put(ICDatabaseHelper.fID, phoneNum);
+ contentValues.put(ICDatabaseHelper.fUserName, name);
+ contentValues.put(ICDatabaseHelper.fCreateTime, System.currentTimeMillis());
+ contentValues.put(ICDatabaseHelper.fUpdateTime, System.currentTimeMillis());
+ //保存联系人列表,类型为白名单
+ runtime.getContextProxy().getResolver().insert(Uri.parse(ICMembersProvider.MEMBERS), contentValues);
} else {
- ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
-
+ ICLogger.i("phoneNumber[" + 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);
-
+ 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(cmdMap.get(CMD_TYPE.AP85), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP85))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP85), new StringBuffer(CMDHEADER).append(cmdStrMap.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 表示久坐提醒
-//多组闹钟之间用”@”符号分隔
+ // 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 为关*/,
.append(", alarmtype=").append(alarmtype)
.toString()
);
-
+ //TODO:
alarmlist.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
} else {
}
}//循环获取alarm数据结束
- runtime.getDbHelper().saveAlarm(alarmlist);
-
- //do clean and set alarm things
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
}
}
-//IWBP85,867155030002145,410385,1,0,#
-
+ //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);
}
-// 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))
+ // AP05命令L02服务器不适用
+ public static String AP05(boolean recFlat) {
+ return new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP05))
+ .append(CMDSPLIT).append(recFlat ? 1 : 0)
+ .append(CMDEND).toString();
+ }
+
+ public void handleBP05(String cmd) {
+ 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(cmdStrMap.get(CMD_TYPE.AP07))
.append(CMDSPLIT).append(packetTime)
.append(CMDSPLIT).append(count)
.append(CMDSPLIT).append(index)
- .append(CMDSPLIT).append(datalen)
+ .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] = '#';
+ 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;
+ 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) {
+ //IWBP07,20211222103621,6,1,1#
+ public void handleBP07(String cmd) {
+ //TODO:判断是否要进行下一个包发送
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.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的时候表示所有包发送完毕,停止继续发送
+ String totalPackageCount = split[2];
+ ICLogger.d("totalPackageCount ==> " + totalPackageCount);
+ String currentPackage = split[3];
+ ICLogger.d("currentPackage ==> " + currentPackage);
+ String isSuccessStr = split[4];
+ ICLogger.d("是否接收成功:" + isSuccessStr);
+ if ("1".equals(isSuccessStr) && !currentPackage.equals(totalPackageCount)) {
+ int packetIndex = Integer.parseInt(currentPackage);
+ //发送下一包
voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);
}
- //发送消息,再次检查要发送的语音包,确认其发送完毕
- connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
+
+ //如果不成功则重发
+ if (!currentPackage.equals(totalPackageCount)) {
+ ICLogger.d("发送下一包数据..." + currentPackage);
+ mConnection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
+ }
} catch (Exception e) {
- ICLogger.e(e.getMessage(), e);
+ e.printStackTrace();
}
} else {
- ICLogger.i(" BP07 Format error!");
+ ICLogger.d("parse BP07 error.");
}
+ //平台收到语音数据
+ ICLogger.d("平台收到语音数据" + cmd);
}
public static StringMessage AP33(String cmdindex, int workMode) {
-//IWAP33,080835,1#
-//080835:指令流水号
-//1:设置信息,供服务器同步
- return genStringMessage(cmdMap.get(CMD_TYPE.AP33), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP33))
+ //IWAP33,080835,1#
+ //080835:指令流水号
+ //1:设置信息,供服务器同步
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP33), new StringBuffer(CMDHEADER).append(cmdStrMap.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:紧急模式
+ //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]);
+ String[] cmdList = cmd.split(",");
+ if (cmdList.length == 4) {
+ log("com.ic.work mode " + cmdList[3]);
try {
- int mod = Integer.parseInt(cmdlist[3]);
+ int mod = Integer.parseInt(cmdList[3]);
int Cycle = 900;
switch (mod) {
case ICLocation.NORMAL_MOD:
case ICLocation.REALTIME_MOD:
Cycle = 60;
break;
-
}
-
- StringMessage msg = AP33(cmdlist[2], mod);
+ StringMessage msg = AP33(cmdList[2], mod);
//设定当前工作模式及循环频率
connection.send(msg);
log("reply msg " + msg);
Config.setLocationCycle(runtime.getContextProxy().context, Cycle);
runtime.getLocationInstance().setLocation_cycle(Cycle);
runtime.getLocationInstance().setWorkingMod(mod);
-// CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+ //CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
//此处设置好配置后,会在LocationClient通过消息开始执行及时定位操作。
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
public static StringMessage AP34(String cmdindex, int workMode) {
-//IWAP34,588854,1#
-//080835:指令流水号
-//8:模式
- return genStringMessage(cmdMap.get(CMD_TYPE.AP34), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP34))
+ //IWAP34,588854,1#
+ //080835:指令流水号
+ //8:模式
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP34), new StringBuffer(CMDHEADER).append(cmdStrMap.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) {
-
+ //IWBP34,867155030001063,588854,8,900,1#
+ //IW:标识符
+ //BP33 : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835:指令流水号
+ //1:设备工作模式,1:正常模式,2:省电模式,3:紧急模式
- log("com.ic.work mode " + cmdlist[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]);
+ int mod = Integer.parseInt(cmdList[3]);
+ int Cycle = Integer.parseInt(cmdList[4]);
+ int gpson = Integer.parseInt(cmdList[5]);
- StringMessage msg = AP34(cmdlist[2], mod);
+ StringMessage msg = AP34(cmdList[2], mod);
//设定当前工作模式及循环频率
connection.send(msg);
Config.setLocationCycle(runtime.getContextProxy().context, Cycle);
runtime.getLocationInstance().setLocation_cycle(Cycle);
runtime.getLocationInstance().setWorkingMod(mod);
-// CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+ //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编码
-
-
- String[] cmdlist = cmd.split(",");
- if (cmdlist.length == 4) {
- String cmdindex = cmdlist[2];
- String txtmsg = cmdlist[3];
-
- txtmsg = Util.UrlGB2312ToUTF8(txtmsg);
- StringMessage msg = AP40(cmdindex, 1);
+ //IWBP40,353456789012345,080835,XXXXXXXXXXXXXX#
+ //IW:标识符
+ //BP40 : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
+ //XXXXXXXXXXXX : 表示文字内容GB2312编码
+
+ String[] cmdList = cmd.split(",");
+ if (cmdList.length == 4) {
+ String cmdIndex = cmdList[2];
+ String txtMsg = cmdList[3];
+ txtMsg = Util.UrlGB2312ToUTF8(txtMsg);
+ StringMessage msg = AP40(cmdIndex, 1);
//设定当前工作模式及循环频率
connection.send(msg);
- ICLogger.i("received Txt Msg " + txtmsg);
- runtime.getContextProxy().sendMsgBroadcast(txtmsg, 0);
- runtime.getContextProxy().saveMstToSMSDB(txtmsg);
+ ICLogger.i("received Txt Msg " + txtMsg);
+ runtime.getContextProxy().sendMsgBroadcast(txtMsg, 0);
+ runtime.getContextProxy().saveMstToSMSDB(txtMsg);
} else {
ICLogger.i("BP40 format error!");
}
// IWAP40,080835,1#
// 080835:指令流水号
// 1:表示设备接受数据成功,0表示设备接受数据失败
- return genStringMessage(cmdMap.get(CMD_TYPE.AP40), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP40))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP40), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP40))
.append(CMDSPLIT).append(cmdindex)
.append(CMDSPLIT).append(success)
.append(CMDEND).toString());
*/
public static StringMessage AP49(Runtime ds) {
//示例数据:IWAP49,68##
- return genStringMessage(cmdMap.get(CMD_TYPE.AP49), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP49))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP49), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP49))
.append(CMDSPLIT).append(ds.getHRS().getPPG())
.append(CMDEND).toString());
//85 : 血压低压 [舒张压]
//平台响应: IWBPHT#
//表示平台已接收,可不作响应
- return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APHT))
.append(CMDSPLIT).append(ds.getHRS().getPPG())
.append(CMDSPLIT).append(ds.getHRS().getBPH())
.append(CMDSPLIT).append(ds.getHRS().getBPL())
//85 : 血压低压 [舒张压]
//平台响应: IWBPHT#
//表示平台已接收,可不作响应
- return genStringMessage(cmdMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHT))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APHT), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APHT))
.append(CMDSPLIT).append(ppg)
.append(CMDSPLIT).append(bph)
.append(CMDSPLIT).append(bpl)
//立即定位反馈
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))
+ //IWAP16,080835#
+ //080835:指令流水号
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP16), new StringBuffer(CMDHEADER).append(cmdStrMap.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 :指令流水号
+ //IWBP16,353456789012345,080835#
+ //说明:
+ //IW:标识符
+ //BP16 : 命令字符
+ //353456789012345:IMEI号,设备唯一ID
+ //080835 :指令流水号
String[] cmdlist = cmd.split(",");
if (cmdlist.length == 3) {
log("imei " + cmdlist[1] + ", cmdindex " + cmdlist[2]);
//9750: LAC
//3613: CID
- return genStringMessage(cmdMap.get(CMD_TYPE.APTM), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTM))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APTM), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APTM))
.append(CMDSPLIT).append(ds.getLocationInstance().getMCC())
.append(CMDSPLIT).append(ds.getLocationInstance().getMNC())
.append(CMDSPLIT).append(ds.getLocationInstance().getLAC())
//IMEI:
/// Version String
- return genStringMessage(cmdMap.get(CMD_TYPE.APVR), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APVR))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APVR), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APVR))
.append(CMDSPLIT).append(ds.IMEI())
.append(CMDSPLIT).append(DeviceInfoUtil.getSWVersionDisplayName())
.append(CMDEND).toString());
public static StringMessage AP15(String index) {
//IWAP15, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP15), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP15), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP15))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
}
-
/*语音下行反馈*/
- public static StringMessage AP28(String name, String msg, int packagecount, int currentpackageindex, int received_success) {
+ public static StringMessage AP28(String name, String msg, int packageCount, int currentPackageIndex, int received_success) {
//示例数据:IWAP28,D3590D54,xxxx,6,1,1#
- return genStringMessage(cmdMap.get(CMD_TYPE.AP28), 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());
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP28),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.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(Connection connection, String cmd, Runtime runtime, byte[] bytes) {
+ public void handleBP28(Connection connection, String cmd, 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;
+ /**
+ * 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;
if (msg.length >= 6) {
try {
- Name = msg[1];
+ String originalName = msg[1];
+// if (TextUtils.isEmpty(originalName)) {
+// name = "group";
+// } else {
+// name = Util.decodeUnicode2Utf8(originalName);
+// }
+ name = "group";
appendIndex = msg[2];
packetCount = Integer.parseInt(msg[3]);
currentId = Integer.parseInt(msg[4]);
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)
+ 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);
+ .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);
+ connection.send(AP28(originalName, 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);
-
+ message2Db("", amrFilepath, ICDatabaseHelper.MessageType.VOICE);
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)));
+ ICLogger.d("format Error");
+ }
+
+ }
+
+ private void message2Db(String remoteId, String amrFilepath, int type) {
+ //计算文件时长
+ int amrDuration = 0;
+ if (type == ICDatabaseHelper.MessageType.VOICE ||
+ type == ICDatabaseHelper.MessageType.FRIEND_VOICE) {
+ try {
+ File file = new File(amrFilepath);
+ amrDuration = getAmrDuration(file);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
+ ContentResolver resolver = mRuntime.getContextProxy().getResolver();
+ ContentValues contentValues = new ContentValues();
+ //路径
+ contentValues.put("content", amrFilepath);
+ //类型为声音
+ contentValues.put("type", type);
+ //状态:0表示未读
+ contentValues.put("state", 0);
+ //文件时长
+ contentValues.put("duration", amrDuration);
+ //接受还是发送,1表示来信
+ contentValues.put("in_or_out", 1);
+ //对方号码是没有的
+ contentValues.put("remote_num", remoteId);
+ contentValues.put("create_time", System.currentTimeMillis());
+ contentValues.put("update_time", System.currentTimeMillis());
+ resolver.insert(Uri.parse(WeTalkMessageProvider.MESSAGES), contentValues);
+ }
+ /**
+ * 获取声音时长,代码来源于网络,单位:秒
+ *
+ * @param file
+ * @return
+ * @throws IOException
+ */
+ public int getAmrDuration(File file) throws IOException {
+ long duration = -1;
+ int[] packedSize = {12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0,
+ 0, 0};
+ RandomAccessFile randomAccessFile = null;
+ try {
+ randomAccessFile = new RandomAccessFile(file, "rw");
+ // 文件的长度
+ long length = file.length();
+ // 设置初始位置
+ int pos = 6;
+ // 初始帧数
+ int frameCount = 0;
+ int packedPos = -1;
+ // 初始数据值
+ byte[] data = new byte[1];
+ while (pos <= length) {
+ randomAccessFile.seek(pos);
+ if (randomAccessFile.read(data, 0, 1) != 1) {
+ duration = length > 0 ? ((length - 6) / 650) : 0;
+ break;
+ }
+ packedPos = (data[0] >> 3) & 0x0F;
+ pos += packedSize[packedPos] + 1;
+ frameCount++;
+ }
+ // 帧数*20
+ duration += frameCount * 20;
+ } finally {
+ if (randomAccessFile != null) {
+ randomAccessFile.close();
+ }
+ }
+ return (int) ((duration / 1000) + 1);
}
+
public void sendBroadcast(String cmd, Runtime dev) {
ComponentName componentName = new ComponentName("com.ic.watch", "com.ic.watch.launcher.ChatActivity");
//设备响应: IWAP80,080835,1#
//080835:指令流水号
//1:表示设备执行成功,0 表示设备执行失败
- return genStringMessage(cmdMap.get(CMD_TYPE.AP84), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP84), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP84))
.append(CMDSPLIT).append(index)
.append(CMDSPLIT).append(success)
.append(CMDEND).toString());
//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!");
}
//设备响应: IWAP86, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP68), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP68))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP68), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP68))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
//设备响应: IWAP86, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP86), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP86))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP86), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP86))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
public static StringMessage AP88(String index) {
//设备响应: IWAP88, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP88), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP88), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP88))
.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!");
}
//设备响应: IWAP89, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.AP89), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP89))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP89), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP89))
.append(CMDSPLIT).append(index)
.append(CMDEND).toString());
}
//设备响应: IWAPTE,080835,60#
//080835:指令流水号
//1:表示设备接受数据成功,0表示设备接受数据失败
- return genStringMessage(cmdMap.get(CMD_TYPE.APTE), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTE))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APTE), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APTE))
.append(CMDSPLIT).append(index)
.append(CMDSPLIT).append(freq)
.append(CMDEND).toString());
//080835 :指令流水号
//60 : 上传间隔,单位分钟(60分钟上传一次体温,终端收到后立即开始测量一次并重置定时器)
String[] list = cmd.split(CMDSPLIT);
- if (list.length == 4) {
+ if (list.length >= 3) {
try {
String index = list[2];
- String freqstr = list[3];
+
+ String freqstr = "0";
+ if (list.length == 4)
+ freqstr =list[3];
+
int freq = Integer.parseInt(freqstr);
connection.send(APTE(index, freq));
ICLogger.i("收到服务器指令:测量体温 " + freq + "分钟一次。");
- Config.setTemperatureTestCycle(runtime, freq * 60);
+ //if(freq>0) {
+ Config.setTemperatureTestCycle(runtime, freq * 60);
+ //}
CoreService.getInstance().setTempAlarm(true);
+ //setTempAlarm中执行温度检测,下面无需再执行了!
- if (runtime.check_stat_do_temp_test())
- TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
+ //if (runtime.check_stat_do_temp_test())
+ // TemperatureUtil.getInstance().doTempTestInThread(FROM_SERVER);
} catch (Exception e) {
ICLogger.e(e.getMessage(), e);
}
// connection.send(genStringMessage("APTP",temperatureMsg));
// ICLogger.i("发送体温测量值 "+temperatureMsg);
} else {
- ICLogger.i("BP89 format error!");
+ ICLogger.i("BPTE format error!");
}
}
//APTP : 命令字符
//35.3:测量体温 (摄氏度)
//33,132:温补用的参数,此处不用,可以用0 来代替。
- return genStringMessage(cmdMap.get(CMD_TYPE.APTP),
- new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APTP))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APTP),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APTP))
.append(CMDSPLIT).append(String.format("%1$.2f", body_temp))
.append(CMDSPLIT).append(String.format("%1$.2f", wrist_temp))
.append(CMDSPLIT).append(0)
public static StringMessage APX1(String id) {
//设备响应: IWAPX1, 080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.APX1), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APX1), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APX1))
.append(CMDSPLIT).append(id)
.append(CMDEND).toString());
}
public static StringMessage APS4(String id) {
//设备响应: IWAPS4,080835#
//080835:指令流水号
- return genStringMessage(cmdMap.get(CMD_TYPE.APS4), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APS4), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APS4))
.append(CMDSPLIT).append(id)
.append(CMDEND).toString());
}
ICLogger.d("is24Hour == > " + is24Hour);
TimeUtil.set24Hour(mRuntime.getContextProxy().context, is24Hour);
mConnection.send(
- genStringMessage(cmdMap.get(CMD_TYPE.APTF),
+ genStringMessage(cmdStrMap.get(CMD_TYPE.APTF),
new StringBuilder(CMDHEADER)
- .append(cmdMap.get(CMD_TYPE.APTF))
+ .append(cmdStrMap.get(CMD_TYPE.APTF))
.append(CMDSPLIT)
.append(split[2]).append(CMDEND).toString())
);
}
}
+ public static StringMessage APSQ(String id, int type, int cycle) {
+ //设备响应: IWAPSQ,080835,1,60#
+ //080835:指令流水号
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APSQ),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APSQ))
+ .append(CMDSPLIT).append(id)
+ .append(CMDSPLIT).append(type)
+ .append(CMDSPLIT).append(cycle)
+ .append(CMDEND).toString());
+ }
+
+ /**
+ * 上传健康数据,IWAPJK,2021-05-29 13:00:00,1,69|120#
+ *
+ * @param type 1表示血压,2表示心率,3表示体温
+ * @return
+ */
+ public static StringMessage APJK(int type, Runtime runtime) {
+ StringBuilder sb = new StringBuilder(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APJK));
+ sb.append(CMDSPLIT);
+ //添加时间
+ sb.append(TimeUtil.getUTCTimeForCameraMark()).append(CMDSPLIT);
+ sb.append(type).append(CMDSPLIT);
+ if (type == 1) {
+ //血压
+ sb.append(runtime.getHRS().getBPL()).append("|").append(runtime.getHRS().getBPH());
+ } else if (type == 2) {
+ //心率
+ sb.append(runtime.getHRS().getPPG());
+ } else if (type == 3) {
+ sb.append(String.format("%1$.2f", runtime.tempInfo.currentBodyTemp));
+ } else if (type == 4) {
+ sb.append(runtime.getHRS().getSpo2());
+ }
+ sb.append(CMDEND);
+ String s = sb.toString();
+ ICLogger.d("apjk ==> " + s);
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APTP), s);
+ }
+
+ private void handleBPMC(String cmd) {
+ //指令,IMEI,流水,值:0,1,2。
+ //0表示关闭,1表示打开,2表示获取当前的状态,不做设置,只返回
+ //IWBPMC,353456789012345,080835,1#
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 4) {
+ String index = split[2];
+ String value = split[3];
+ ICLogger.d("BPMC index ==> " + index + " value==> " + value);
+ //判断value,返回内容
+ boolean responseValue = false;
+ if ("0".equals(value)) {
+ responseValue = false;
+ LocationClient.setSkipMoveCheck(false);
+ Config.setSkipMoveCheckFlagGlobal(mRuntime.getContextProxy().context, false);
+ } else if ("1".equals(value)) {
+ responseValue = true;
+ LocationClient.setSkipMoveCheck(true);
+ Config.setSkipMoveCheckFlagGlobal(mRuntime.getContextProxy().context, true);
+ } else if ("2".equals(value)) {
+ responseValue = LocationClient.getSkipMoveCheck();
+ }
+ //返回结果
+ StringMessage apmc = APMC(index, responseValue);
+ ICLogger.d("apmc ==> " + apmc);
+ mConnection.send(apmc);
+ } else {
+ ICLogger.d("parse error ==> " + cmd);
+ }
+ }
+
+ private StringMessage APMC(String index, boolean responseValue) {
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APMC), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APMC))
+ .append(CMDSPLIT).append(index)
+ .append(CMDSPLIT).append(responseValue)
+ .append(CMDEND).toString());
+ }
+
+ /**
+ * 处理天气信息
+ * 平台响应: 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天天气如天气编号及描述对应如下
+ * (天气描述不需要发送括号内的白天晚上)
+ * 因天气接口的变更 返
+ * 回天气类型暂时支持 11 16 26 32
+ * 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:局部雷阵雨
+ *
+ * @param cmd
+ */
+ private void handleBPTQ(String cmd) {
+ //对指令进行切割
+ String[] cmdList = cmd.split(CMDSPLIT);
+ if (cmdList.length == 23) {
+
+ StringBuilder sb = new StringBuilder();
+ StringBuilder msg = new StringBuilder();
+ String cityName = Util.decodeUnicode2Utf8(cmdList[22]);
+ List<GenericWeatherInfo> weatherInfo = new ArrayList<>();
+ 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(";");
+
+ //返回数据给UI
+ GenericWeatherInfo itemFirst = new GenericWeatherInfo(DayTime,
+ weather_name, weather_id, temp_current, temp_low, temp_high, cityName);
+ //封装数据
+ weatherInfo.add(itemFirst);
+ }
+ ICLogger.i(cityName + " \n" + sb.toString());
+
+ msg.insert(0, cityName + ";");
+ 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);
+ mRuntime.updateS123Weather(weatherInfo);
+ } else {
+ ICLogger.i(" BPTQ Format error!");
+ }
+ }
+
+ public void handleBP87(String cmd, 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);
+ 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!");
+ }
+
+ }
+
+ /**
+ * 拨打电话(下行协议号:BP32,响应:AP32)
+ * IWBP32,353456789012345,080835,133xxxxxxxx#
+ * <p>
+ * 响应:
+ * IWAP32,080835#
+ *
+ * @param cmd
+ */
+ private void handleBP32(String cmd) {
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 4) {
+ String cmdIndex = split[2];
+ //回复消息
+ mConnection.send(AP32(cmdIndex));
+ //开始拨号
+ String targetNumber = split[3];
+ ICLogger.d("target number is ==> " + targetNumber);
+ Intent intent = new Intent(Intent.ACTION_CALL);
+ intent.setData(Uri.parse("tel:" + targetNumber));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (ActivityCompat.checkSelfPermission(mRuntime.getContextProxy().context,
+ Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
+ ICLogger.d("no permission to call...");
+ return;
+ }
+ mRuntime.getContextProxy().context.startActivity(intent);
+ } else {
+ ICLogger.d("BP32 format error==> " + cmd);
+ }
+ }
+
+ /**
+ * 拨号指令返回
+ *
+ * @param cmdIndex
+ * @return
+ */
+ private StringMessage AP32(String cmdIndex) {
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP32),
+ new StringBuilder(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP32))
+ .append(CMDSPLIT).append(cmdIndex).append(CMDEND).toString());
+ }
+
+ /**
+ * 下发内容
+ * IWBP75,353456789012345,080835,1,3,D3590D54,0900 ,135,1@D3590D54,0900 ,135,1@D3590D54,0900 ,135,1#
+ * 回复消息
+ * IWAP75,080835, 1,3,D3590D54,0900 ,135,1@D3590D54,0900 ,135,1@D3590D54,0900 ,135,1#
+ *
+ * @param mRuntime
+ * @param cmd
+ */
+ private void handleBP75(Runtime mRuntime, String cmd) {
+ //IWBP75,353456789012345,080835,
+ // 1,
+ // 3,
+ // D3590D54,0900 ,135,1
+ // @
+ // D3590D54,0900 ,135,1
+ // @
+ // D3590D54,0900 ,135,1#
+ //解析数据
+ ICLogger.d("cmd is == > " + cmd);
+ String ap75Str = cmd.replace("BP75", "AP75");
+ String responseMsg =
+ ap75Str.replace(mRuntime.IMEI() + CMDSPLIT,
+ "") + CMDEND;
+ ICLogger.d("responseMsg == > " + responseMsg);
+ mConnection.send(genStringMessage(cmdStrMap.get(CMD_TYPE.AP75), responseMsg));
+ try {
+ String[] split = cmd.split(CMDSPLIT);
+ int cmdLen = 0;
+ cmdLen += split[0].length() + 1;
+ cmdLen += split[1].length() + 1;
+ String streamCode = split[2];
+ cmdLen += streamCode.length() + 1;
+ ICLogger.d("streamCode == > " + streamCode);
+ String isAllOpen = split[3];
+ cmdLen += isAllOpen.length() + 1;
+ ICLogger.d("isAllOpen == > " + isAllOpen);
+ String alarmCount = split[4];
+ ICLogger.d("alarmCount = > " + alarmCount);
+ cmdLen += alarmCount.length() + 1;
+ String substring = cmd.substring(cmdLen);
+ String[] alarmItemArray = substring.split("@");
+ ContentResolver resolver = mRuntime.getContextProxy().getResolver();
+ //删除之前先取消已经设置的闹钟
+ List<Alarm> oldAlarmList = mRuntime.getDbHelper().queryIcAlarm();
+ //取消掉上次的闹钟,再进行设置新的
+ SilentManager.getInstance().cancelAlarm(oldAlarmList);
+ //闹钟下发,也是要清空闹钟的
+ resolver.delete(Uri.parse(ICAlarmProvider.ALARMS), null, null);
+ for (String itemStr : alarmItemArray) {
+ ICLogger.d("itemStr==> " + itemStr);
+ String[] itemDetail = itemStr.split(CMDSPLIT);
+ //第一个是名称
+ String alarmName = Util.decodeUnicode2Utf8(itemDetail[0]);
+ ICLogger.d("alarmName == > " + alarmName);
+ //第二个是时间
+ String alarmTime = itemDetail[1];
+ ICLogger.d("alarmTime == > " + alarmTime);
+ //第三个是循环星期
+ String weekItem = itemDetail[2];
+ ICLogger.d("weekItem == > " + weekItem);
+ //第四个是开关,有可能是 2,如果是2的话,那么就是单次响铃
+ String isOpen = itemDetail[3];
+ ICLogger.d("isOpen == > " + isOpen);
+ //如果是全部关闭,那么所有的闹钟都会为0
+ if ("0".equals(isAllOpen)) {
+ isOpen = "0";
+ }
+ if (TextUtils.isEmpty(alarmTime)) {
+ continue;
+ }
+ //添加到闹钟数据库中
+ String hour = alarmTime.substring(0, 2);
+ String minute = alarmTime.substring(2);
+ if (TextUtils.isEmpty(hour) || TextUtils.isEmpty(minute)) {
+ ICLogger.d("date ERROR...");
+ continue;
+ }
+ String status = "ON";
+ if ("0".equals(isOpen)) {
+ status = "OFF";
+ } else if ("1".equals(isOpen)) {
+ status = "ON";
+ } else if ("2".equals(isOpen)) {
+ status = "ONCE";
+ }
+ Alarm alarmItem = new Alarm("ST" + hour + "." + minute,
+ "W" + weekItem, "CON", status, alarmName);
+ ICLogger.d("alarmItem == > " + alarmName);
+ //入库
+ ICLogger.d(" alarmItem.name==> " + alarmItem.name);
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(ICDatabaseHelper.alarm_name, alarmItem.name);
+ contentValues.put(ICDatabaseHelper.alarm_week, alarmItem.week);
+ contentValues.put(ICDatabaseHelper.alarm_ring, alarmItem.ring);
+ contentValues.put(ICDatabaseHelper.alarm_time, alarmItem.time);
+ contentValues.put(ICDatabaseHelper.alarm_status, alarmItem.status);
+ contentValues.put(ICDatabaseHelper.updateTime, System.currentTimeMillis());
+ contentValues.put(ICDatabaseHelper.createTime, System.currentTimeMillis());
+ resolver.insert(Uri.parse(ICAlarmProvider.ALARMS), contentValues);
+ }
+ //设置闹钟
+ mRuntime.getContextProxy().context.sendBroadcast(new Intent(ACTION_ALARM_ALARM_CHANGE));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void handleBPSQ(String cmd, Connection connection, Runtime runtime) {
+ //IWBPSQ,353456789012345,080835,1,60#
+ //说明:
+ // 080835为序列号,1,是传感器类型(1是心率,2是血压,3是体温,4是血氧),60为间隔时间,单位为秒
+ String[] list = cmd.split(CMDSPLIT);
+ if (list.length >= 5) {
+ String imei = list[1];
+ String index = list[2];
+ String typestr = list[3].trim();
+ String cyclestr = list[4].trim();
+ int type = 0;
+ int cycle_seconds = 0;
+ int cycle_minutes = 0;
+ try {
+ type = Integer.parseInt(typestr);
+ cycle_seconds = Integer.parseInt(cyclestr);
+ connection.send(APSQ(index, type, cycle_seconds));
+ cycle_minutes = cycle_seconds / 60;
+ String type_name = "未知";
+ switch (type) {
+ case 1:
+ type_name = "心率";
+ //发送重置PPGCycle的广播,会在CoreServer里面执行
+ CoreService.getInstance().setHeartRateDetectAlarm(cycle_minutes);
+ break;
+ case 2:
+ type_name = "血压";
+ //发送重置PPGCycle的广播,会在CoreServer里面执行
+ CoreService.getInstance().setHeartRateDetectAlarm(cycle_minutes);
+ break;
+ case 3:
+ type_name = "体温";
+ Config.setTemperatureTestCycle(runtime, cycle_seconds);
+ CoreService.getInstance().setTempAlarm(true);
+ break;
+ case 4:
+ type_name = "血氧";
+ //发送重置PPGCycle的广播,会在CoreServer里面执行
+ CoreService.getInstance().setHeartRateDetectAlarm(cycle_minutes);
+ break;
+ default:
+ type_name = "未知";
+ break;
+ }
+ ICLogger.i("收到 BPSQ 指令,设置体征传感器测试周期, IMEI " + imei + ", index " + index + ", 传感器类型 " + type + " " + type_name + " 间隔" + cycle_seconds + "秒,相当于" + cycle_minutes + "分钟");
+ } catch (Exception e) {
+ ICLogger.e(e.getMessage(), e);
+ }
+ } else {
+ ICLogger.i("BPSQ format error!");
+ }
+ }
+
public static StringMessage APHP(Runtime ds) {
//IWAPHP,60,130,85,95,90, , , , , , , , #
//IW:标识符
- //APHT : 命令字符
+ //APHP : 命令字符
//60 : 表示心率
//130: 血压高压 [收缩压]
//85 : 血压低压 [舒张压]
//95:血氧
//90:血糖
// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
- return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APHP))
.append(CMDSPLIT).append(ds.getHRS().getPPG())
.append(CMDSPLIT).append(ds.getHRS().getBPH())
.append(CMDSPLIT).append(ds.getHRS().getBPL())
.append(CMDEND).toString());
}
+ /**
+ * 处理拨号开关,数据入库,进入拨号前要获取一下,是否可以拨号,
+ *
+ * @param cmd IWBPPH,353456789012345,080835,1#
+ * IWAPPH,080835,1#
+ */
+ private void handleBPPH(String cmd) {
+ //解析数据
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 4) {
+ try {
+ String id = split[2];
+ String value = split[3];
+ //1 : 表示设备可以拨号 0:表示设备不可拨号, 用于同步平台设置。
+ Util.setSystemProperties("persist.sys.phone.enable", value);
+ //返回结果
+ responseWithId(cmdStrMap.get(CMD_TYPE.APPH), id, value);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ ICLogger.d("handleBPPH error...");
+ }
+ }
+
+ /**
+ * 处理服务器模拟的短信指令
+ *
+ * @param cmd
+ */
+ private void handleBPSM(String cmd) {
+ //短信指令里的#要用@替换掉,逗号要用-代替(建议是平台去完成这个替换,用户还是按原指令去写)
+ //比如说短信指令是:#logctl#=upload,all
+ //改成:@logctl@=upload-all
+ //IWBPSM,353456789012345,080835,指令内容#
+ //IWBPSM:标示符
+ //353456789012345:IMEI号
+ //080835:流水号
+ //设备回复:
+ //IWAPSM,080835,1/0#
+ //1表示成功,0表示失败
+ String[] split = cmd.split(CMDSPLIT);
+ if (split.length == 4) {
+ String indexId = split[2];
+ String smsContent = split[3];
+ String targetSmsContent = smsContent.replaceAll("@", "#").replaceAll("-", ",");
+ ICLogger.d("targetSmsContent ==> " + targetSmsContent);
+ if (CoreService.smsManager != null) {
+ ICLogger.d("handle sms cmd....");
+ //"WEB-"就是靠这个标记给后台发送东西的了
+ CoreService.smsManager.handleSMS_CMD("WEB-" + indexId, targetSmsContent);
+ }
+ } else {
+ ICLogger.d("parse BPSM error..");
+ }
+ }
+
+
+ private void responseWithId(String cmd, String id, String... args) {
+ StringBuilder append = new StringBuilder(CMDHEADER).append(cmd)
+ .append(CMDSPLIT).append(id);
+ for (String arg : args) {
+ append.append(CMDSPLIT).append(arg);
+ }
+ append.append(CMDEND);
+ ICLogger.d("response content ==> " + append.toString());
+ StringMessage stringMessage = genStringMessage(cmd, append.toString());
+ mConnection.send(stringMessage);
+ }
+
+
+ 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.ic.protocolSrv.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 AP46(String id, String cmd) {
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.AP46),
+ new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.AP46))
+ .append(CMDSPLIT).append(id)
+ .append(CMDSPLIT).append(cmd)
+ .append(CMDEND).toString());
+ }
+
+
public static StringMessage APHP(int ppg, int bph, int bpl, int spo2) {
//IWAPHP,60,130,85,95,90, , , , , , , , #
//IW:标识符
//95:血氧
//90:血糖
// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空
- return genStringMessage(cmdMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))
+ return genStringMessage(cmdStrMap.get(CMD_TYPE.APHP), new StringBuffer(CMDHEADER).append(cmdStrMap.get(CMD_TYPE.APHP))
.append(CMDSPLIT).append(ppg)
.append(CMDSPLIT).append(bph)
.append(CMDSPLIT).append(bpl)
}
public void handleBPHP() {
-
ICLogger.i("服务器收到APHP 心率血压血氧 !");
-
}
public boolean handleCmd(CMD_TYPE type, String cmd) {
-
+ if (type == null) {
+ ICLogger.d("type is null ==> " + cmd);
+ return false;
+ }
//普通非二进制命令用此函数处理
boolean ret = true;
ICLogger.i("handleCmd " + type.name() + " strLen=" + cmd.length());
ICLogger.i("服务器收到定位AP01");
mConnection.DeliverCMDMessageToSystem("AP01", cmd);//通知下面线程状态变化
break;
+ case BPH1: //gps定位包
+ handleBP01(cmd);
+ ICLogger.i("服务器收到历史定位BPH1");
+ mConnection.DeliverCMDMessageToSystem("BPH1", cmd);//通知下面线程状态变化
+ break;
case BP02:// wifi定位包
handleBP02(cmd);
ICLogger.i("服务器收到定位AP02");
ICLogger.i("服务器收到心跳包AP03");
mConnection.DeliverCMDMessageToSystem("heartbeat", cmd);//通知下面线程状态变化
break;
-
case BP07:
//收到发送的语音包
- handleBP07(cmd, mConnection);
+ handleBP07(cmd);
break;
case BP10:
//报警包
mConnection.DeliverCMDMessageToSystem("AP10", cmd);//通知下面线程状态变化
break;
-
case BPTM:
//校时命令
handleBPTM(cmd);
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("收到服务器恢复出厂设置命令BP17");
mConnection.DeliverCMDMessageToSystem("FactoryReset", cmd);//通知下面线程状态变化
break;
-
case BP18:
//收到重启
handleBP18(mConnection, cmd);
ICLogger.i("收到服务器推送文本消息");
mConnection.DeliverCMDMessageToSystem("showTxt", cmd);//通知下面线程状态变化
break;
-
case BPXL:
handleBPXL(cmd, mConnection);
ICLogger.i("收到服务器心率检测命令");
+ Config.testType = HeartRateOxygenTestType.JUST_HEART_RATE;
+ if (mRuntime.check_stat_do_ppg_test())
+ HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
+ break;
+ case BPOX:
+ handleBPOX(cmd, mConnection);
+ ICLogger.i("收到服务器血氧检测命令");
+ Config.testType = HeartRateOxygenTestType.JUST_OXYGEN;
if (mRuntime.check_stat_do_ppg_test())
HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
break;
case BP86:
//绑定解绑消息
handleBP86(cmd, mConnection, mRuntime);
- mConnection.DeliverCMDMessageToSystem("AP86", cmd);//通知下面线程状态变化
-
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("AP86", cmd);
break;
-
case BP88:
//收到查找设备消息
handleBP88(cmd, mConnection);
- mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("findDev", cmd);
break;
case BP89:
//心率/血压阀值
handleBP89(cmd, mConnection);
- mConnection.DeliverCMDMessageToSystem("AP89", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("AP89", cmd);
break;
case BPTE: //设置测试体温
handleBPTE(cmd, mConnection, mRuntime);
- mConnection.DeliverCMDMessageToSystem("APTE", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("APTE", cmd);
break;
case BPTP:
handleBPTP();
- mConnection.DeliverCMDMessageToSystem("APTP", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("APTP", cmd);
break;
case BPHP:
handleBPHP();
- mConnection.DeliverCMDMessageToSystem("APHP", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("APHP", cmd);
break;
case BPX1://设置 心率血压血氧修正值
handleBPX1(cmd, mConnection, mRuntime);
ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1");
- mConnection.DeliverCMDMessageToSystem("APX1", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("APX1", cmd);
break;
case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。
handleBPS4(cmd, mConnection, mRuntime);
ICLogger.i("收到 提醒设置(时间段)");
- mConnection.DeliverCMDMessageToSystem("APS4", cmd);//通知下面线程状态变化
+ //通知下面线程状态变化
+ mConnection.DeliverCMDMessageToSystem("APS4", cmd);
break;
case BPTF:
handleBPTF(cmd, mConnection, mRuntime);
ICLogger.d("收到修改时间格式的指令...");
break;
- }
+ case BPSQ:
+ handleBPSQ(cmd, mConnection, mRuntime);
+ ICLogger.d("收到设置体征信息检测间隔的指令...");
+ break;
+ case BPMC:
+ ICLogger.d("收到服务器下发的修改skipmovecheck");
+ handleBPMC(cmd);
+ break;
+ case BPPH:
+ //收到服务器拨号功能开关
+ ICLogger.d("收到服务器拨号功能开关.");
+ handleBPPH(cmd);
+ break;
+ case BPJK:
+ mConnection.DeliverCMDMessageToSystem("APJK", cmd);//通知下面线程状态变化
+ ICLogger.d("服务器收到健康数据上报" + cmd);
+ break;
+ case BPSM:
+ //收到设置短信指令的信息
+ handleBPSM(cmd);
+ break;
+ case BPTQ:
+ //处理下发的天气信息
+ handleBPTQ(cmd);
+ break;
+ case BP75:
+ ICLogger.d("收到闹钟设置指令BP75");
+ handleBP75(mRuntime, cmd);
+ break;
+ case BP32:
+ ICLogger.d("收到后台下发的拨号指令BP32.");
+ handleBP32(cmd);
+ break;
+ case BP87:
+ ICLogger.d("接收到二维码的图片.");
+ handleBP87(cmd, mRuntime);
+ break;
+ case BP05:
+ ICLogger.d("收到服务器BP05");
+ handleBP05(cmd);
+ break;
+ case BP46: //立即拍照
+ ICLogger.i("立即拍照!");
+ handleBP46(cmd, mConnection, mRuntime);
+ break;
+ case BP42:
+ handleBP42(cmd, mConnection);
+ break;
+ }
return ret;
-
}
+
public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {
//只有需要传递二级制数据的才需要这个函数,目前只有BP28需要
if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " + new String(bytes));
switch (type) {
case BP28:
- handleBP28(mConnection, cmd, mRuntime, bytes);
+ handleBP28(mConnection, cmd, bytes);
ICLogger.i("收到服务器语音BP28");
mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化
break;