-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":918,"versionName":"2108251623","enabled":true,"outputFile":"ICProtocol8.1_V918_2108251623_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V918_2108251623_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":920,"versionName":"2108270026","enabled":true,"outputFile":"ICProtocol8.1_V920_2108270026_release.apk","fullName":"release","baseName":"release"},"path":"ICProtocol8.1_V920_2108270026_release.apk","properties":{}}]
\ No newline at end of file
<protected-broadcast android:name="com.ic.protocolSrv.ACTION_EQC_ALARM" />
<protected-broadcast android:name="com.ic.heartrate.action.SILENT_START" />
<protected-broadcast android:name="com.ic.protocolSrv.ACTION_ISCONNECTED" />
- <protected-broadcast android:name="com.ic.deskclock.YUN_ALARM_CHANGE" />
+ <protected-broadcast android:name="com.ic.protocol.ACTION_IS_SERVER_CONNECTED" />
<protected-broadcast android:name="com.ic.protocolSrv.sos" />
<application
import java.util.HashMap;
import static com.ic.protocolSrv.bean.ICLocation.CUSTOM_MOD8_GPS;
+import static com.ic.protocolSrv.bean.ICLocation.CUSTOM_MOD9_WIFI_FIRST;
import static com.ic.protocolSrv.bean.ICLocation.NORMAL_MOD;
import static com.ic.protocolSrv.bean.Runtime.AlarmType.ALARM_LOWBATTERY;
import static com.ic.protocolSrv.utils.Util.getSystemProperties;
public static final int PROTOCOL_ANAN = 5;
public static final int PROTOCOL_S123 = 6;
public static final int PROTOCOL_GATOR = 7;
+ public static final int PROTOCOL_W100 = 8;
public static final int PROTOCOL_UNKNOWN = 255;
public static int protocol_no = getProtocolNumber();
DefaultLocationCycle = 15 * 60;
DefaultPPGTestCycleInMinutes = 15;
DefaultTemperatureTestCycle = 15 * 60;
-
+ } else if (Config.custom_name.equals("18cube") ) {
+ //C46-W100 config
+ Config.ConfigAlarm(Runtime.AlarmType.ALARM_SOS, true);
+ Config.ConfigAlarm(Runtime.AlarmType.ALARM_LOWBATTERY, true);
+ enableSleep = false;
+ DefaultLocationMode = CUSTOM_MOD9_WIFI_FIRST;
+ DefaultLocationCycle = 15 * 60;
+ DefaultPPGTestCycleInMinutes = 0;
+ DefaultTemperatureTestCycle = 0;
+ noBroadCastPushTxtNotify = true;
+ forceGPSMoveCheck = true; //即爱对gps不进行运动检测,此变量专门为了给其他协议进行强制运动检测用的。
} else {
DefaultLocationMode = NORMAL_MOD;
DefaultLocationCycle = 900;
private static CoreService mProtocolServer = null;
private static LBSHelper lbshelper = null;
- public static final String ACTION_ALARM = "com.ic.protocolSrv.ACTION_ALARM";
-
private static final int GRAY_SERVICE_ID = android.os.Process.myPid();
public static String CHANNEL_ID_STRING = CoreService.class.getPackage().getName();
ICLogger.d("heartRateDetectAlarmCycleMinutes == > " + heartRateDetectAlarmCycleMinutes);
ICLogger.d("ppgtestCycle == > " + heartRateDetectAlarmCycleMinutes);
//如果周期不为0,那么就设置到配置信息里头去。
- if (heartRateDetectAlarmCycleMinutes > 1) {
- Config.setPPGTestCycleInMinutes(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes);
- runtime.setPpgTestCycleInMinutes(Config.getPPGTestCycleInMinutes(runtime.getContextProxy().context));
- ICLogger.i("get and set PPGTestCycle " + heartRateDetectAlarmCycleMinutes);
- }
+// if (heartRateDetectAlarmCycleMinutes > 1) {
+ Config.setPPGTestCycleInMinutes(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes);
+ runtime.setPpgTestCycleInMinutes(Config.getPPGTestCycleInMinutes(runtime.getContextProxy().context));
+ ICLogger.i("get and set PPGTestCycle " + heartRateDetectAlarmCycleMinutes);
+// }
StringBuilder sb = new StringBuilder();
- if (heartRateDetectAlarmCycleMinutes > 1) {
+ if (heartRateDetectAlarmCycleMinutes > 5) {
AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context, heartRateDetectAlarmCycleMinutes, ACTION_HEATR_RATE_START);
}
import static com.ic.protocolSrv.Constants.ACTION_TINTERNAL_TEST;
import static com.ic.protocolSrv.Constants.FROM_SERVER;
import static com.ic.protocolSrv.Constants.KeyReplyData;
+import static com.ic.protocolSrv.bean.ICLocation.CUSTOM_MOD9_WIFI_FIRST;
import static com.ic.protocolSrv.utils.SimSignalUtil.send_at_cmd;
import static com.ic.protocolSrv.utils.SimSignalUtil.send_at_setImei0;
case ICLocation.CUSTOM_MOD:
case ICLocation.CUSTOM_MOD8_GPS:
case ICLocation.CUSTOM_MOD8_WIFI:
+ case CUSTOM_MOD9_WIFI_FIRST:
break;
default:
sendSMS(phoneNumber, "set to Location Failed ,value range should be Mod in (1,2,3,4,5,8,9) and cycle >=30!");
case 2:
case 3:
case 4:
+ case 5:
+ case 6:
+ case 7:
Util.setSystemProperties("persist.sys.protocol_no", strtmp);
Config.getProtocolNumber();
Config.loadServerSettings(runtime);
CoreService.getInstance().ReConnectToServer();
break;
default:
- sendSMS(phoneNumber, "setprotocol only support Protocol 0/1/2/3/4 by now! ");
+ sendSMS(phoneNumber, "setprotocol only support Protocol 0/1/2/3/4/5/6/7 by now! ");
break;
}
private static int checktimes = 0;
private static boolean timeout = false;
+ private static boolean wifi_timeout = false;
private static boolean isLocating = false;
private static boolean isWifiScanning = false;
LBSHelper.OnWiFiInfoListener wifiinfoListener = new LBSHelper.OnWiFiInfoListener() {
gps_ok = true;
if (runtime.getLocationInstance().getLocationStat() == ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT)
gps_nosignal = true;
- lbs_ok = (runtime.getLocationInstance().isDataChanged() == false
- || (runtime.getLocationInstance().getMNC().equals("0")
- && runtime.getLocationInstance().getMCC().equals("0")
- && runtime.getLocationInstance().getGSMStationCID() == 0
- && runtime.getLocationInstance().getLAC() == 0)) ? false : true;
+ lbs_ok = (
+ runtime.getLocationInstance().isDataChanged() == false /*如果mcc,mnc等都没有变过 */||
+ ( runtime.getLocationInstance().getMNC().equals("0") && runtime.getLocationInstance().getMCC().equals("0")
+ && runtime.getLocationInstance().getGSMStationCID() == 0 && runtime.getLocationInstance().getLAC() == 0
+ )
+ )? false : true;
// ICLogger.i("getMNC "+runtime.getLocationInstance().getMNC()+" getMCC "+runtime.getLocationInstance().getMCC()+" getGSMStationCID " + runtime.getLocationInstance().getGSMStationCID()+ " getLAC "+runtime.getLocationInstance().getLAC()+" changed "+runtime.getLocationInstance().isDataChanged());
ICLogger.i("waitAndSendLocation " + checktimes + ", lbs=" + lbs_ok + ", wifi=" + wifi_ok + ", gps=" + gps_ok + ", mode=" + mode);
case ICLocation.CUSTOM_MOD:
case ICLocation.CUSTOM_MOD8_GPS:
case ICLocation.EMERGNECY_MOD:
- case ICLocation.REALTIME_MOD:
+ case ICLocation.REALTIME_MOD: {
//GPS 优先的话多给些时间(10秒)
if (checktimes > GPSLocationTimeoutInSeconds) {
ICLogger.i("waitAndSendLocation " + checktimes + " timeout");
ICLogger.i("waitAndSendLocation " + timeCost + "> 50000ms timeout");
//timeout=true;
}
-
// lbs only +timeout, lbs+wifi+gpsNosignal, libs+ , lbs+gps+wifi, Timeout can override wifi and gps
if ((lbs_ok && timeout)
|| (gps_ok)
if (Config.LOG_TOFILE)
ICLogger.logToFile("GPS", "timeout no location ");
}
+ }
break;
+ case ICLocation.CUSTOM_MOD9_WIFI_FIRST: {
+ //检测wifi和lbs先,成功则直接返回,失败则开启GPS
+ if (checktimes > WiFiLocationTimeoutInSeconds) {
+ ICLogger.i("waitAndSendLocation " + checktimes + " WIFI Timeout start GPS location");
+ wifi_timeout = true;
+ startGpsLocate();
+ }
+ if (checktimes > GPSLocationTimeoutInSeconds) {
+ ICLogger.i("waitAndSendLocation " + checktimes + " GPS timeout");
+ timeout = true;
+ }
+ if (NoMoveTimeout && (timeout || gps_nosignal)) {
+ //没有移动,GPS超时或者没信号都会给 计数 加 1
+ gpsTimeoutCountOnNoMove++;
+ }
+ timeCost = System.currentTimeMillis() - startCheckTime;
+ if ((startCheckTime != 0L) && (timeCost > 50 * 1000L)) {
+ //有时timer计数不准,则根据实际时间计算
+ ICLogger.i("waitAndSendLocation " + timeCost + "> 50000ms timeout");
+ //timeout=true;
+ }
+ // lbs only +timeout, lbs+wifi+gpsNosignal, libs+ , lbs+gps+wifi, Timeout can override wifi and gps
+ String locationtype = "LBS";
+ if (wifi_ok) {
+ locationtype = "WiFi";
+ runtime.getLocationInstance().setLocationType(locationtype);
+ runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
+ if (startSOSLocation) {
+ StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
+ DeliverMessage(AP10_CMD);
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_REMOVE_SOS);
+ startSOSLocation = false;
+ }
+ if (startNomalLocation = true) {
+ startNomalLocation = false;
+ StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);
+ DeliverMessage(AP02_CMD);
+ }
+ stopCheckLocationResult();
+ String msg = "Location Fixed Type " + runtime.getLocationInstance().getLocationType() + " at " + runtime.getLocationInstance().getLocationTime() + " timeout " + timeout;
+ ICLogger.i(msg);
+ if (responseUrl != null) {
+ responseUrl.replyCallBack("Location Fixed Type " + locationtype);
+ }
+ if (Config.LOG_TOFILE)
+ ICLogger.logToFile("GPS", msg);
+
+ } else if (wifi_timeout) {
+
+ if ((lbs_ok && timeout)
+ || (gps_ok)
+ || (lbs_ok && (gps_ok || startSOSLocation))
+ || (lbs_ok && (gps_ok || startSOSLocation) && wifi_ok)
+ || (lbs_ok && gps_nosignal && wifi_ok)
+ ) {
+
+ if (gps_ok) {
+ locationtype = "GPS";
+ }
+ runtime.getLocationInstance().setLocationType(locationtype);
+ runtime.getLocationInstance().setLocationTime(TimeUtil.getSystemTime3());
+ if (startSOSLocation) {
+ StringMessage AP10_CMD = protocolAPIHelper.getWarningMSG(runtime);
+ DeliverMessage(AP10_CMD);
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_REMOVE_SOS);
+ startSOSLocation = false;
+ }
+ if (startNomalLocation = true) {
+ startNomalLocation = false;
+ if (gps_ok) {
+ if (!TextUtils.isEmpty(runtime.getWifiInfo())) {
+ StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);
+ DeliverMessage(AP01_CMD);
+ }
+ } else {
+ StringMessage AP02_CMD = protocolAPIHelper.getLBSLocationMSG(runtime);
+ DeliverMessage(AP02_CMD);
+ }
+ }
+ stopCheckLocationResult();
+ String msg = "Location Fixed Type " + runtime.getLocationInstance().getLocationType() + " at " + runtime.getLocationInstance().getLocationTime() + " timeout " + timeout;
+ ICLogger.i(msg);
+ if (responseUrl != null) {
+ if (locationtype.equals("GPS")) {
+ responseUrl.replyCallBack(runtime.getLocationInstance().getLocation().latGPSStr + "," + runtime.getLocationInstance().getLocation().lonGPSStr);
+ } else {
+ responseUrl.replyCallBack("Location Fixed Type " + locationtype);
+ }
+ }
+ if (Config.LOG_TOFILE) {
+ ICLogger.logToFile("GPS", msg);
+ }
+ } else if (timeout) {
+ //timeout + noLBS +noGPS
+ ICLogger.i("timeout no location ");
+ stopCheckLocationResult();
+ if (Config.LOG_TOFILE)
+ ICLogger.logToFile("GPS", "timeout no location ");
+ }
+ }
+ }
+ break;
case ICLocation.NORMAL_MOD:
case ICLocation.LOWPOWER_MOD:
case ICLocation.CUSTOM_MOD8_WIFI:
- default:
+ default: {
//wifi优先的话给20秒时间
if (checktimes > WiFiLocationTimeoutInSeconds) {
ICLogger.i("waitAndSendLocation " + checktimes + " timeout");
if (Config.LOG_TOFILE)
ICLogger.logToFile("GPS", "timeout no location ");
}
+ }
break;
}
ICLogger.i("needCheckAgain " + needCheckAgain);
clearGPSlocateStat(); //确保gps关闭,防止切换回来gps状态错误,尤其是不NoStop模式下的gps切换回来有此风险。
}
break;
+ case ICLocation.CUSTOM_MOD9_WIFI_FIRST:
+ //此处要暂时跳过GPS定位,待WiFi未定位再开始GPS定位!
+ if (!NoMoveAndNoGPSsignalSkipGpsFlag) {
+ if (runtime.getLocationInstance().getLocation_cycle() <= 60) {
+ nmeaListener.setNoStop(true);
+ } else {
+ nmeaListener.setNoStop(false);
+ }
+ //所有定位逻辑都和CUSTOM_MOD8_GPS 一致,除了开始GPS定位。后期开始就不用clean GPS状态了
+// startGpsLocate();
+ } else {
+ clearGPSlocateStat(); //如果wifi优先,则确保gps关闭,防止切换回来gps状态错误,尤其是不NoStop模式下的gps切换回来有此风险。
+ }
+ break;
case ICLocation.LOWPOWER_MOD:
case ICLocation.NORMAL_MOD:
case ICLocation.CUSTOM_MOD8_WIFI:
case ICLocation.CUSTOM_MOD8_GPS:
case ICLocation.EMERGNECY_MOD:
case ICLocation.REALTIME_MOD:
- case ICLocation.CUSTOM_MOD9_WIFI_FIRST:
//GPS 定位模式不关闭GPS,防止 1分钟定位超时后,重新关闭开启GPS。
//不给GPS继续定位的机会,造成第一次定位困难!
+ break;
+ case ICLocation.CUSTOM_MOD9_WIFI_FIRST:
+
break;
case ICLocation.LOWPOWER_MOD:
case ICLocation.NORMAL_MOD:
MESSAGE/*文字消息*/,
profile,//情景模式
SOSON,//w100SOS 报警开关
+ IP,//配置服务器地址
}
public static HashMap<CMD_TYPE, String> cmdMap = null;
cmdMap.put(CMD_TYPE.CALLING, "CALLING");
cmdMap.put(CMD_TYPE.RESET, "RESET");
cmdMap.put(CMD_TYPE.SOSON, "SOSON");
+ cmdMap.put(CMD_TYPE.IP, "IP");
}
private Connection mConnection = null;
return genFZDCMD(cmdMap.get(CMD_TYPE.hrtstart));
}
- public void handleHrtstart(Connection connection) {
-
+ public void handleHrtstart(Connection connection, Runtime runtime, String cmd, String data) {
+ //[IC*334588000000156*len*hrtstart,x]
+ // x 为上传间隔时间,单位秒,连续上传时最小时间不小于 300 秒,最大不超过 65535.
+ // 实例:[IC*334588000000156*len*hrtstart,300]
+ //终端会每隔 300 秒检测一次心率
+ //
+ //x 为 1 则代表终端心率单次上传,上传完后自动关闭。x 为 0 则代表终端心率上传关闭。
+
+ int testcycle=0;
+ try{
+ testcycle=Integer.parseInt(data);
+ }catch (Exception e){
+ ICLogger.e(e.getMessage());
+ testcycle=0;
+ ICLogger.i("Hrtstart format error!");
+ return;
+ }
connection.send(hrtstart());
+
+ if(testcycle>=0 && testcycle<65535) {
+ ICLogger.i("收到服务器指令:设置心率周期 " + testcycle + "秒 相当于 "+testcycle/60 +"分钟" );
+ try {
+ //发送重置PPGCycle的广播,会在CoreServer里面执行
+ CoreService.getInstance().setHeartRateDetectAlarm(testcycle/60);
+ } catch (Exception e) {
+ ICLogger.e(e.getMessage(), e);
+ }
+ }else{
+ ICLogger.i("收到服务器指令:设置心率周期超限[0~65535] " + testcycle + "秒 相当于 "+testcycle/60 +"分钟" );
+ }
+
+ }
+
+ public static StringMessage IP() {
+ return genFZDCMD(cmdMap.get(CMD_TYPE.IP));
}
+ public void handleIP(Connection connection, Runtime runtime, String cmd, String data) {
+ //平台发送:
+ // [IC*YYYYYYYYYYYYYYY*LEN*IP,IP地址或者域名,端口号]
+ // 实例:[IC*334588000000156*0013*IP,192.168.0.1,8099]
+ // 或者 [IC*334588000000156*0014*IP,myserver.com,8099]
+ // 终端回复:
+ // [IC*YYYYYYYYYYYYYYY*LEN*IP]
+ // 实例:[IC*334588000000156*0002*IP]
+ // 说明:设置服务器地址和端口
+
+ String[] cmdlist=data.split(CMD_SPLIT);
+ if(cmdlist.length==2) {
+ connection.send(IP());
+
+ try {
+ String ip = cmdlist[0];
+ int port = Integer.valueOf(cmdlist[1].replace("#", ""));
+ Config.setCustomServer(runtime.getContextProxy().context, true, ip, port);
+ Config.loadServerSettings(runtime);
+ CoreService.getInstance().disconnect_server();
+ CoreService.getInstance().ReConnectToServer();
+ }catch (Exception e){
+ ICLogger.e(e.getMessage(),e);
+ }
+ }else{
+ ICLogger.i("IP format error!");
+ }
+
+ }
+
+
public static StringMessage FIND() {
return genFZDCMD(cmdMap.get(CMD_TYPE.FIND));
}
mConnection.DeliverCMDMessageToSystem("poweroff", cmd);
break;
case hrtstart:
- handleHrtstart(mConnection);
ICLogger.i("收到服务器心率检测命令");
Config.testType = HeartRateOxygenTestType.JUST_HEART_RATE;
- if (mRuntime.check_stat_do_ppg_test()) {
- HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
- }
+ handleHrtstart(mConnection,mRuntime,cmd,data);
break;
case bldstart:
handleBldstart(mConnection);
ICLogger.d("收到服务器设置的SOS开发消息..");
handleSettings(type, data, mRuntime);
break;
+ case IP:
+ //设置服务器IP
+ ICLogger.d("设置服务器 IP 为 "+data);
+ handleIP(mConnection, mRuntime, cmd,data);
+ break;
}
return ret;
}
-#Wed Aug 25 16:23:34 CST 2021\r
-VERSION_CODE=918\r
+#Fri Aug 27 00:26:43 CST 2021\r
+VERSION_CODE=920\r
# Location of the SDK. This is only used by Gradle.\r
# For customization when using a Version Control System, please read the\r
# header note.\r
-#Tue Aug 24 16:58:39 CST 2021\r
-sdk.dir=E\:\\Android\\Sdk\r
+#Wed Aug 25 18:55:18 CST 2021\r
+sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk\r