release V615
authorsnickersun <scy@incartech.cn>
Mon, 14 Sep 2020 15:18:36 +0000 (23:18 +0800)
committersnickersun <scy@incartech.cn>
Mon, 14 Sep 2020 15:18:36 +0000 (23:18 +0800)
1、通过变量persist.sys.disableNTP 控制 NTP 时间同步是否开启,默认关闭NTP。因此协议中的时间设置都实现了一遍。
主要解决时间同步造成的系统多次重置时间,使得timer相关的线程出错的问题。
2、FZD协议添加AL,LGZONE
3、CoreService LocationClient 添加每次心跳进行BLE扫描,检测是否逃逸。

14 files changed:
app/app.iml
app/release/ICSer_V615_2009142317_release.apk [moved from app/release/ICSer_V612_2009121648_release.apk with 78% similarity]
app/release/output.json [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/Config.java
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/enqualcomm/support/bean/BLEInfo.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/KeepAlive.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_ic.java
app/src/main/java/com/ic/protocols/protocol_jiai.java
app/version_code.properties

index 10a5102..e442beb 100644 (file)
     <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes"/>\r
     <exclude-output/>\r
     <content url="file://$MODULE_DIR$">\r
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true"/>\r
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true"/>\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true"/>\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true"/>\r
-      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true"/>\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true"/>\r
       <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true"/>\r
similarity index 78%
rename from app/release/ICSer_V612_2009121648_release.apk
rename to app/release/ICSer_V615_2009142317_release.apk
index 11436e1..cc3c286 100644 (file)
Binary files a/app/release/ICSer_V612_2009121648_release.apk and b/app/release/ICSer_V615_2009142317_release.apk differ
diff --git a/app/release/output.json b/app/release/output.json
new file mode 100644 (file)
index 0000000..57207e6
--- /dev/null
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":615,"versionName":"2009142317","enabled":true,"outputFile":"ICSer_V615_2009142317_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V615_2009142317_release.apk","properties":{}}]
\ No newline at end of file
index 9fec9a4..8647020 100644 (file)
@@ -350,6 +350,30 @@ public class Config {
   public static boolean needTemperature_abnormal_alarm=false;\r
   public static boolean A9_noBroadCastActionStrip=false;\r
   public static boolean L004_BroadCastActionStrip=false;\r
+  public static boolean disable_ntp_server=false;\r
+\r
+  public static void enable_NTP_Server(Context context,boolean enable){\r
+    try {\r
+      int autotime = Settings.Global.getInt(context.getContentResolver(),Settings.Global.AUTO_TIME);\r
+      int autotimezone = Settings.Global.getInt(context.getContentResolver(),Settings.Global.AUTO_TIME_ZONE);\r
+\r
+      ICLogger.i("get NTP Settings AutoTime "+autotime+" AutoTimeZone "+autotimezone);\r
+\r
+      if(enable)\r
+      {\r
+        Settings.Global.putInt(context.getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 1);\r
+        Settings.Global.putInt(context.getContentResolver(), Settings.Global.AUTO_TIME, 1);\r
+      }else {\r
+        Settings.Global.putInt(context.getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 0);\r
+        Settings.Global.putInt(context.getContentResolver(), Settings.Global.AUTO_TIME, 0);\r
+      }\r
+      autotime = Settings.Global.getInt(context.getContentResolver(),Settings.Global.AUTO_TIME);\r
+      autotimezone = Settings.Global.getInt(context.getContentResolver(),Settings.Global.AUTO_TIME_ZONE);\r
+      ICLogger.i("get NTP Settings AutoTime "+autotime+" AutoTimeZone "+autotimezone);\r
+    } catch (Settings.SettingNotFoundException e) {\r
+      e.printStackTrace();\r
+    }\r
+  }\r
   public static void LoadMessageConfigs(){\r
     String tmp=Util.getSystemProperties("persist.sys.doBroadcastMSG");\r
     boolean ret=false;\r
@@ -358,6 +382,9 @@ public class Config {
 \r
     do_broadCast_message_no_indication = ret;\r
 \r
+    //默认关闭NTP\r
+    disable_ntp_server=Util.getSystemProperties("persist.sys.disableNTP","true").equals("true");\r
+\r
     c43_branch_name=Util.getSystemProperties("persist.sys.c43.branch");\r
 \r
     if ((c43_branch_name.equals("l03")) ||(c43_branch_name.equals("l05"))){\r
index b6e26e8..6789d04 100644 (file)
@@ -560,7 +560,6 @@ public class CoreService extends Service {
                 Config.setTemperatureTestCycle(runtime, 0);\r
                 Config.setConfigInitFlag(this, 1);\r
             }\r
-\r
         }else if (Config.custom_branch_name.equals("AK")) {\r
             if (Config.getConfigInitFlag(this)==0) {\r
                 Config.setPPGTestCycle(this, 0);\r
@@ -608,7 +607,7 @@ public class CoreService extends Service {
         Config.loadCustomServerAddr(this);\r
         Config.loadServerSettings(runtime);\r
 \r
-\r
+        Config.enable_NTP_Server(this,!Config.disable_ntp_server);\r
 \r
 \r
         //初始化温度测试相关参数\r
@@ -993,6 +992,7 @@ public class CoreService extends Service {
                 if (this.mKeepAlive != null) {\r
                     if (connection.isServerConnected() && runtime.isServerProtocolConnected()) {\r
                         this.mKeepAlive.onHeartAlarm(this.connection, this.runtime);\r
+                        locationClient.triggerBLEProcess();//每次心跳检测一次BLE\r
                     } else {\r
                        // if (this.mKeepAlive.is_retry_time_above_limit()) {\r
                             ICLogger.i("check 发送心跳包时,如果发现服务器没有响应,或者socket连接,则重新尝试连接服务器!");\r
index bfe9cdb..16a6cdc 100644 (file)
@@ -104,7 +104,7 @@ public class LocationClient {
   private int preLbsCid;\r
   \r
   int preNetworkTypeNomber;\r
-\r
+  private boolean scanBLEOnly=false;\r
 \r
   private static LocationClient gLocationCline=null;\r
 //  private BroadcastReceiver screenOnReceiver = new BroadcastReceiver() {\r
@@ -141,14 +141,32 @@ public class LocationClient {
         }\r
         ICLogger.i("Bt Dev Is in Area " + runtime.bleInfo.is_in_area);\r
 \r
-        if (runtime.bleInfo.is_in_area == false) {\r
-          ICLogger.i("BT 不在区域内,开启定位流程");\r
-          startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
-        }else{\r
-          ICLogger.i("BT 在区域内,直接发送区域坐标即可!");\r
-          StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);\r
-          Deliver.sendLocationMSG(AP01_CMD);\r
+        if(scanBLEOnly==true){\r
+          if (runtime.bleInfo.is_in_area == false ) {\r
+            runtime.updateFZDDevStatusEscape(true);\r
+            if ( runtime.bleInfo.last_is_in_area==true) {\r
+              //只有上一次在区域内,这次出区域才需要报警\r
+              StringMessage AL_CMD = protocolAPIHelper.getWarningMSG(runtime);\r
+              Deliver.sendLocationMSG(AL_CMD);\r
+            }\r
+          }\r
+        }else {\r
+          if (runtime.bleInfo.is_in_area == false) {\r
+            ICLogger.i("BT 不在区域内,开启定位流程");\r
+            startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
+          } else {\r
+            ICLogger.i("BT 在区域内,直接发送区域坐标即可!");\r
+            runtime.updateFZDDevStatusEscape(false);\r
+            StringMessage AP01_CMD = protocolAPIHelper.getGPSLocationMSG(runtime);\r
+            Deliver.sendLocationMSG(AP01_CMD);\r
+          }\r
         }\r
+\r
+        //处理过此次数据后,把当前状态赋值给上次检测状态\r
+        runtime.bleInfo.last_is_in_area=runtime.bleInfo.is_in_area;\r
+        //扫描结束就清掉scanBLEOnly,保证下次不会被误操作。\r
+        scanBLEOnly=false;\r
+\r
       }\r
     });\r
     gLocationCline=this;\r
@@ -221,6 +239,10 @@ public class LocationClient {
     mhandler.sendEmptyMessage(msgWhat_StartLocationProcess);\r
   }\r
 \r
+  public void triggerBLEProcess(){\r
+    mhandler.sendEmptyMessage(msgWhat_StartBLEProcess);\r
+  }\r
+\r
   public void triggerSOSLocationProcess(){\r
     mhandler.sendEmptyMessage(msgWhat_StartSOSLocationProcess);\r
   }\r
@@ -309,6 +331,7 @@ public class LocationClient {
 \r
   private final static int msgWhat_WaitAndSendLocation=100;\r
   private final static int msgWhat_StartLocationProcess=0;\r
+  private final static int msgWhat_StartBLEProcess=1;\r
   private final static int msgWhat_StartSOSLocationProcess=2;\r
   Handler mhandler=new Handler(){\r
 \r
@@ -318,15 +341,20 @@ public class LocationClient {
             Single.just(null).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {\r
               public void call(Object param1Object) { waitAndSendLocation(); }\r
             });\r
-          }else if (msg.what == msgWhat_StartLocationProcess){\r
-            if (runtime.bleInfo.btMacList.size()>0){\r
+          }else if (msg.what == msgWhat_StartLocationProcess) {\r
+            if (runtime.bleInfo.btMacList.size() > 0) {\r
               //有蓝牙搜索要求则 先进行蓝牙扫描\r
               btHelper.scanBLE();\r
-            }else{\r
+            } else {\r
               //没有蓝牙搜索要求,就正常定位\r
               startLocationProcess(runtime.getLocationInstance().getWorkingMod());\r
             }\r
-\r
+          }else if (msg.what == msgWhat_StartBLEProcess){\r
+            if (runtime.bleInfo.btMacList.size() > 0) {\r
+              //有蓝牙搜索要求则 先进行蓝牙扫描\r
+              scanBLEOnly=true;\r
+              btHelper.scanBLE();\r
+            }\r
           }else if (msg.what == msgWhat_StartSOSLocationProcess){\r
             startSOSLocation=true;//启动SOS定位,为了快速响应,只要wifi定位即可。\r
             forceLocation=1;\r
@@ -625,6 +653,8 @@ public void updateCellInfo() {
       return;\r
     }\r
     noMove=runtime.getLastStepCount() == runtime.getTotalStepCount();\r
+    runtime.updateFZDDevStatusMoving(!noMove); //设置当前运动状态\r
+\r
     // 不强制定位 且 WorkingMod 不是紧急模式,且 没有移动过\r
     if ( ( forceLocation != 1 ) &&\r
             ( mod != ICLocation.REALTIME_MOD )&&\r
index 7f09f53..09d8b7e 100644 (file)
@@ -11,6 +11,6 @@ public class BLEInfo {
     public String gps_n="";\r
     public String gps_e="";\r
     public boolean is_in_area=false;\r
-\r
+    public boolean last_is_in_area=false;\r
 \r
 }\r
index bdd03f3..33be529 100644 (file)
@@ -146,12 +146,6 @@ public class Runtime {
     language=_language;\r
   }\r
 \r
-  private String alarmType="00";\r
-  public String getAlarmType(){\r
-    return alarmType;\r
-  }\r
-\r
-\r
 \r
 \r
   //0 代表没有出围栏,如果出围栏则置1,每次报警再加1\r
@@ -181,18 +175,33 @@ public class Runtime {
       ALARM_TEMP_HIGH,\r
       ALARM_TEMP_LOW,\r
       ALARM_POWER_OFF,\r
+      ALARM_ESCAPE,\r
       ALARM_NONE,\r
     };\r
 \r
   private AlarmType g_alarm=AlarmType.ALARM_NONE;\r
-/***\r
+\r
+    private String alarmType="00";\r
+    public String getAlarmType(){\r
+        return alarmType;\r
+    }\r
+\r
+    //32 bit 数据\r
+    private int fzdDevStatus=0x00000000;\r
+\r
+\r
+    /***\r
  *    00为报警状态,00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05:剪断报警,06:跌倒报警,\r
  *    07:心率异常, 08:心率过高, 09:心率过低,10:收缩压过高,11:收缩压过低,12:舒张压过高,13:舒张压过低,\r
- *    14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低)\r
+ *    14:久坐提醒,15:非法解锁(剪断报警),16:锁定提醒(佩戴提醒),17:体温过高,18体温过低) 19 关机事件(非服务器指令关机), 20,escape逃跑事件(离开蓝牙管控范围)\r
   */\r
    public void setAlarmType(AlarmType alarm){\r
 //    if ( !fall && !lowbattery && !sos && antioff)\r
        g_alarm=alarm;\r
+\r
+       //同时更新防走丢设备状态标志\r
+       setFZDDevStatus(alarm);\r
+\r
       switch (alarm){\r
           case ALARM_SOS:\r
               alarmType="01";\r
@@ -261,7 +270,11 @@ public class Runtime {
               alarmType="18";\r
               break;\r
           case ALARM_POWER_OFF:\r
+              alarmType="19";\r
+              break;\r
           case ALARM_NONE:\r
+              alarmType="20";\r
+              break;\r
           default:\r
               alarmType="00";\r
               break;\r
@@ -269,6 +282,157 @@ public class Runtime {
 \r
   }\r
 \r
+\r
+    /***\r
+     * 终端状态    00000000 ( 16 进\r
+     * 制)  用二进制字符串表示为\r
+     * 0000 0000 0000 0010 0000 0000 0000 0000 含义如下:\r
+     * 左边高 16bit 表示报警,右边低 16bit 表示状态. Bit 位(0 开始)    含义(1 有效)\r
+     * 0低电状态                    00000000000000000000000000000001       0x00000001\r
+     * 1出围栏状态(目前没用到)     00000000000000000000000000000010       0x00000002\r
+     * 2进围栏状态(目前没用到)     00000000000000000000000000000100       0x00000004\r
+     * 3手环戴上取下状态 (佩戴检测)  00000000000000000000000000001000        0x00000008\r
+     * 4手表运行静止状态            00000000000000000000000000010000        0x00000010\r
+     * 16SOS 报警                  00000000000000010000000000000000        0x00010000\r
+     * 17低电报警                  00000000000000100000000000000000         0x00020000\r
+     * 18出围栏报警(逃跑出蓝牙监控范围)   00000000000001000000000000000000        0x00040000\r
+     * 19进围栏报警(目前没用到)   00000000000010000000000000000000         0x00080000\r
+     * 20手环拆除报警 (表带剪断)    00000000000100000000000000000000          0x00100000\r
+     * 21跌倒报警                  00000000001000000000000000000000         0x00200000\r
+     * 22震动报警                  00000000010000000000000000000000         0x00400000\r
+     * 23断电报警 (手表关机报警)  00000000100000000000000000000000         0x00800000\r
+     * 24心率骤降报警              00000001000000000000000000000000          0x01000000\r
+     * 25车辆启动 (手表用不到)    00000010000000000000000000000000         0x02000000\r
+     *                 比如 00200010,即表示00000000001000000000000000010000\r
+     * 这个项目需要支持防拆 20、00000000000100000000000000000000   0x 00100000 1048576\r
+     * 低电 17、00000000000000100000000000000000    0x 00020000 131072\r
+     * 离线 23、00000000100000000000000000000000    0x 00800000 8388608\r
+     * 逃逸报警 18\  00000000000001000000000000000000   0x 00040000  262144\r
+     * 分别是第四位为 1,第 21 位为 1,对应 21 位是跌倒报警\r
+     * @param runtime\r
+     * @return\r
+     */\r
+    public String getFZDDevStatus(Runtime runtime) {\r
+        StringBuilder sb = new StringBuilder();\r
+        sb.append(Integer.toHexString(runtime.fzdDevStatus));\r
+        if (sb.length() <8) {\r
+            for (int i=0;i< 8-sb.length();i++)\r
+                sb.insert(0, '0'); // pad with leading zero if needed\r
+        }\r
+        String hex = sb.toString();\r
+        return hex;\r
+    }\r
+\r
+\r
+    public void updateFZDDevStatusLowbat(boolean lowbattery){\r
+\r
+        if(lowbattery){\r
+            fzdDevStatus&=0x00000001;\r
+        }else{\r
+            fzdDevStatus&=~0x00000001;\r
+        }\r
+    }\r
+    public void updateFZDDevStatusWeared(boolean weared) {\r
+        if(weared){\r
+            fzdDevStatus&=0x00000008;\r
+        }else{\r
+            fzdDevStatus&=~0x00000008;\r
+        }\r
+    }\r
+\r
+    public void updateFZDDevStatusMoving(boolean moving) {\r
+        if(moving){\r
+            fzdDevStatus&=~0x00000010;\r
+        }else{\r
+            fzdDevStatus&=0x00000010;\r
+        }\r
+    }\r
+\r
+    public void updateFZDDevStatusEscape(boolean escape){\r
+        if(escape){\r
+            fzdDevStatus&=0x00040000;\r
+        }else{\r
+            fzdDevStatus&=~0x00040000;\r
+        }\r
+\r
+    }\r
+\r
+    public void setFZDDevStatus(AlarmType _alarmType){\r
+\r
+        switch (_alarmType){\r
+            case ALARM_SOS:\r
+                fzdDevStatus&=0x00010000;\r
+                break;\r
+            case ALARM_LOWBATTERY:\r
+                fzdDevStatus&=0x00020000;\r
+                break;\r
+            case ALARM_ANTIOFF:\r
+//                fzdDevStatus&=0x00000008;\r
+                updateFZDDevStatusWeared(false);\r
+                break;\r
+            case ALARM_WEARED:\r
+                updateFZDDevStatusWeared(true);\r
+//                fzdDevStatus&=~0x00000008;\r
+                break;\r
+            case ALARM_LOCK_WATCH:\r
+                fzdDevStatus&=~0x00100000;\r
+                break;\r
+            case ALARM_CUTOFF:\r
+            case ALARM_ILLEGAL_CUTOFF:\r
+                fzdDevStatus&=0x00100000;\r
+                break;\r
+            case ALARM_FALL:\r
+                fzdDevStatus&=0x00200000;\r
+                break;\r
+            case ALARM_ABNORMAL_HEART_RATE:\r
+                fzdDevStatus&=0x01000000;\r
+                break;\r
+            case ALARM_HEART_RATE_HIGH:\r
+//                alarmType1="08";\r
+                break;\r
+\r
+            case ALARM_HEART_RATE_LOW:\r
+//                alarmType1="09";\r
+                break;\r
+\r
+            case ALARM_BPH_HIGH:\r
+//                alarmType1="10";\r
+                break;\r
+\r
+            case ALARM_BPH_LOW:\r
+//                alarmType1="11";\r
+                break;\r
+\r
+            case ALARM_BPL_HIGH:\r
+//                alarmType1="12";\r
+                break;\r
+\r
+            case ALARM_BPL_LOW:\r
+//                alarmType1="13";\r
+                break;\r
+            case ALARM_SEDENTARY:\r
+//                alarmType1="14";\r
+                break;\r
+            case ALARM_TEMP_HIGH:\r
+//                alarmType1="17";\r
+                break;\r
+            case ALARM_TEMP_LOW:\r
+//                alarmType1="18";\r
+                break;\r
+            case ALARM_POWER_OFF:\r
+                fzdDevStatus&=0x00800000;\r
+                break;\r
+\r
+            case ALARM_ESCAPE:\r
+                updateFZDDevStatusEscape(true);\r
+                break;\r
+            case ALARM_NONE:\r
+            default:\r
+//                alarmType1="00000000";\r
+                break;\r
+        }\r
+\r
+    }\r
   public String preCdmaInfo;\r
   \r
   public String preCellInfo;\r
@@ -428,7 +592,10 @@ public class Runtime {
 \r
   public void setBattery(String paramString) { this.battery = paramString; }\r
   \r
-  public void setBatteryLow(boolean paramBoolean) { this.batteryLow = paramBoolean; }\r
+  public void setBatteryLow(boolean paramBoolean) {\r
+      this.batteryLow = paramBoolean;\r
+      updateFZDDevStatusLowbat(batteryLow); //设置batterylow Alarm\r
+  }\r
   \r
   public void setBatterychanging(boolean paramBoolean) { this.batterychanging = paramBoolean; }\r
   \r
@@ -682,118 +849,6 @@ public class Runtime {
         return sb.toString();\r
     }\r
 \r
-    public String fzdAlarmStatus="00000000";\r
-\r
-\r
-    /***\r
-     * 终端状态    00000000 ( 16 进\r
-     * 制)  用二进制字符串表示为\r
-     * 0000 0000 0000 0010 0000 0000 0000 0000 含义如下:\r
-     * 左边高 16bit 表示报警,右边低 16bit 表示状态. Bit 位(0 开始)    含义(1 有效)\r
-     * 0低电状态\r
-     * 1出围栏状态(目前没用到)\r
-     * 2进围栏状态(目前没用到)\r
-     * 3手环戴上取下状态\r
-     * 4手表运行静止状态\r
-     * 16SOS 报警\r
-     * 17低电报警\r
-     * 18出围栏报警(目前没用到)\r
-     * 19进围栏报警(目前没用到)\r
-     * 20手环拆除报警\r
-     * 21跌倒报警\r
-     * 22震动报警\r
-     * 23断电报警\r
-     * 24心率骤降报警\r
-     * 25车辆启动\r
-     *                 比如 00200010,即表示00000000001000000000000000010000\r
-     * 这个项目需要支持防拆 20、00000000000100000000000000000000   0x 00100000 1048576\r
-     * 低电 17、00000000000000100000000000000000    0x 00020000 131072\r
-     * 离线 23、00000000100000000000000000000000    0x 00800000 8388608\r
-     * 逃逸报警 18\  00000000000001000000000000000000   0x 00040000  262144\r
-     * 分别是第四位为 1,第 21 位为 1,对应 21 位是跌倒报警\r
-     * @param runtime\r
-     * @return\r
-     */\r
-    public String getFZDDevStatus(Runtime runtime){\r
-        String alarmType1="00000000";\r
-        switch (runtime.g_alarm){\r
-            case ALARM_SOS:\r
-            //    alarmType1="01";\r
-                break;\r
-            case ALARM_LOWBATTERY:\r
-                alarmType1="00020000";\r
-                break;\r
-            case ALARM_ANTIOFF:\r
-//                alarmType1="00100000";\r
-                break;\r
-            case ALARM_WEARED:\r
-//                alarmType1="04";\r
-                break;\r
-            case ALARM_CUTOFF:\r
-                alarmType1="00100000";\r
-                break;\r
-            case ALARM_FALL:\r
-//                alarmType1="06";\r
-                break;\r
-\r
-            case ALARM_ABNORMAL_HEART_RATE:\r
-//                alarmType1="07";\r
-                break;\r
-\r
-            case ALARM_HEART_RATE_HIGH:\r
-//                alarmType1="08";\r
-                break;\r
-\r
-            case ALARM_HEART_RATE_LOW:\r
-//                alarmType1="09";\r
-                break;\r
-\r
-            case ALARM_BPH_HIGH:\r
-//                alarmType1="10";\r
-                break;\r
-\r
-            case ALARM_BPH_LOW:\r
-//                alarmType1="11";\r
-                break;\r
-\r
-            case ALARM_BPL_HIGH:\r
-//                alarmType1="12";\r
-                break;\r
-\r
-            case ALARM_BPL_LOW:\r
-//                alarmType1="13";\r
-                break;\r
-\r
-            case ALARM_SEDENTARY:\r
-//                alarmType1="14";\r
-                break;\r
-\r
-            case ALARM_ILLEGAL_CUTOFF:\r
-//                alarmType1="15";\r
-                break;\r
-\r
-            case ALARM_LOCK_WATCH:\r
-//                alarmType1="16";\r
-                break;\r
-\r
-            case ALARM_TEMP_HIGH:\r
-//                alarmType1="17";\r
-                break;\r
-\r
-            case ALARM_TEMP_LOW:\r
-//                alarmType1="18";\r
-                break;\r
-            case ALARM_POWER_OFF:\r
-                alarmType1="00800000";\r
-                break;\r
-            case ALARM_NONE:\r
-            default:\r
-//                alarmType1="00000000";\r
-                break;\r
-        }\r
-        fzdAlarmStatus=alarmType1;\r
-      return fzdAlarmStatus;\r
-    }\r
   public String getGPSHeading(){\r
     int headingi=(int)gpsp.getLocation().heading;\r
     int headingl=(int) ((gpsp.getLocation().heading - headingi)*100);\r
index 2024d91..ddaeeee 100644 (file)
@@ -7,6 +7,7 @@ import android.content.IntentFilter;
 import android.os.Handler;\r
 \r
 //import com.eiot.watch_lib.LauncherCtrl;\r
+import com.enqualcomm.support.Config;\r
 import com.enqualcomm.support.CoreService;\r
 import com.enqualcomm.support.LocationClient;\r
 import com.ic.protocols.protocolAPIHelper;\r
@@ -125,8 +126,19 @@ public class KeepAlive extends AbstractConnectionService {
                 @Override\r
                 public void run() {\r
                   connection.send(protocolAPIHelper.getBindingMSG(mRuntime));\r
+\r
+                  if (Config.protocol_no==Config.PROTOCOL_FZD){\r
+                    new Handler().postDelayed(new Runnable() {\r
+                      @Override\r
+                      public void run() {\r
+                        connection.send(protocolAPIHelper.getSyncTimeMSG(mRuntime));\r
+                      }\r
+                    },1000);\r
+                  }\r
                 }\r
               },1000);\r
+\r
+\r
             } else {\r
               connection.send(protocolAPIHelper.getLoginMSG(mRuntime));\r
             }\r
@@ -151,10 +163,10 @@ public class KeepAlive extends AbstractConnectionService {
 //      }\r
       scheduled.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);\r
       scheduled.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);\r
-      scheduled.setRemoveOnCancelPolicy(true);\r
+//      scheduled.setRemoveOnCancelPolicy(true);\r
       ICLogger.i("Wait for thread pool getContinueExistingPeriodicTasksAfterShutdownPolicy " +scheduled.getContinueExistingPeriodicTasksAfterShutdownPolicy()+\r
-              "\ngetExecuteExistingDelayedTasksAfterShutdownPolicy "+scheduled.getExecuteExistingDelayedTasksAfterShutdownPolicy()+\r
-              "\ngetRemoveOnCancelPolicy "+scheduled.getRemoveOnCancelPolicy());\r
+              "\ngetExecuteExistingDelayedTasksAfterShutdownPolicy "+scheduled.getExecuteExistingDelayedTasksAfterShutdownPolicy());//+\r
+//              "\ngetRemoveOnCancelPolicy "+scheduled.getRemoveOnCancelPolicy());\r
 //      while(!scheduled.isTerminated())\r
 //      {\r
 //        StringBuilder sb=new StringBuilder();\r
@@ -301,12 +313,21 @@ public class KeepAlive extends AbstractConnectionService {
     //发送心跳包\r
     connection.send(protocolAPIHelper.getHeartbeatMSG(paramRuntime));\r
         //发送完心跳后,开始检查服务器响应\r
-    new Handler().postDelayed(new Runnable() {\r
-      @Override\r
-      public void run() {\r
-        connection.send(protocolAPIHelper.getBindingMSG(mRuntime));\r
-      }\r
-    },1000);\r
+//    new Handler().postDelayed(new Runnable() {\r
+//      @Override\r
+//      public void run() {\r
+//        connection.send(protocolAPIHelper.getBindingMSG(mRuntime));\r
+//      }\r
+//    },1000);\r
+//\r
+//    if (Config.protocol_no==Config.PROTOCOL_FZD){\r
+//      new Handler().postDelayed(new Runnable() {\r
+//        @Override\r
+//        public void run() {\r
+//          connection.send(protocolAPIHelper.getSyncTimeMSG(mRuntime));\r
+//        }\r
+//      },2000);\r
+//    }\r
     startResponseCheckTimer();\r
 \r
 \r
@@ -355,8 +376,17 @@ public class KeepAlive extends AbstractConnectionService {
             @Override\r
             public void run() {\r
               connection.send(protocolAPIHelper.getBindingMSG(mRuntime));\r
+              if (Config.protocol_no==Config.PROTOCOL_FZD){\r
+                new Handler().postDelayed(new Runnable() {\r
+                  @Override\r
+                  public void run() {\r
+                    connection.send(protocolAPIHelper.getSyncTimeMSG(mRuntime));\r
+                  }\r
+                },1000);\r
+              }\r
             }\r
           },1000);\r
+\r
           startResponseCheckTimer();\r
         }\r
       },3500);\r
@@ -374,14 +404,15 @@ public class KeepAlive extends AbstractConnectionService {
     public void onReceive(Context param1Context, Intent param1Intent) {\r
       boolean bool = param1Intent.getBooleanExtra("reboot", false);\r
       ICLogger.i("Shutdown Received! reboot="+bool);\r
-      if (KeepAlive.this.mRuntime.getBatteryLow() && !KeepAlive.this.mRuntime.getBatterychanging() && !bool && !KeepAlive.this.mRuntime.isShutdown()/*不是服务器让关闭的*/){\r
-\r
-          if (KeepAlive.this.mRuntime.getBatteryLow()){\r
-          KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);\r
+      if (KeepAlive.this.mRuntime.getBatteryLow() && !KeepAlive.this.mRuntime.getBatterychanging() && !bool && !KeepAlive.this.mRuntime.isShutdown()){\r
+        /*电量低,没有充电,且不是服务器让关闭的*/\r
+//          if (KeepAlive.this.mRuntime.getBatteryLow()){\r
+//          KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);\r
+          KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_POWER_OFF);\r
           KeepAlive.this.connection.send(protocolAPIHelper.getWarningMSG(KeepAlive.this.mRuntime));\r
 \r
           ICLogger.i("Shutdown Received! send AP10 !");\r
-        }\r
+//        }\r
 \r
       }\r
 \r
index adf5d76..9c9e0d0 100644 (file)
@@ -107,7 +107,6 @@ public class protocolAPIHelper {
         }\r
         return ret;\r
     }\r
-\r
     public static StringMessage getBindingMSG(Runtime runtime){\r
         if (is_protocol_not_Initialled()) return null;\r
         StringMessage ret=null;\r
@@ -131,6 +130,29 @@ public class protocolAPIHelper {
         }\r
         return ret;\r
     }\r
+    public static StringMessage getSyncTimeMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return null;\r
+        StringMessage ret=null;\r
+        switch(Config.protocol_no)\r
+        {\r
+            case Config.PROTOCOL_JIAI:\r
+                ret=null;\r
+                break;\r
+            case Config.PROTOCOL_BEEHOME:\r
+                ret=null;\r
+                break;\r
+            case Config.PROTOCOL_IC:\r
+                ret=null;\r
+                break;\r
+            case Config.PROTOCOL_FZD:\r
+                ret=protocol_fzd.LGZONE(runtime);\r
+                break;\r
+            case Config.PROTOCOL_MQTT:\r
+                ret=null;\r
+                break;\r
+        }\r
+        return ret;\r
+    }\r
 \r
     public static StringMessage getTemperatureMSG(double temp_adusted,double body_temp,Runtime runtime){\r
         if (is_protocol_not_Initialled()) return null;\r
@@ -186,7 +208,7 @@ public class protocolAPIHelper {
                 ret=protocol_ic.AP10(runtime);\r
                 break;\r
             case Config.PROTOCOL_FZD:\r
-                ret=null;\r
+                ret=protocol_fzd.AL(runtime);\r
                 break;\r
             case Config.PROTOCOL_MQTT:\r
                 ret=protocol_mqtt.AL(runtime);\r
index 936901d..1f5eff1 100644 (file)
@@ -28,6 +28,7 @@ import com.enqualcomm.support.utils.regexUtil;
 \r
 import java.io.File;\r
 import java.util.ArrayList;\r
+import java.util.Date;\r
 import java.util.HashMap;\r
 \r
 import chestnut.utils.PhoneUtils;\r
@@ -58,7 +59,7 @@ public class protocol_fzd {
         UD,//位置上传\r
         UD2,//盲点位置上传\r
         AL,//报警数据上传\r
-        Time,//获取服务器时间\r
+        LGZONE,//获取服务器时区时间\r
         WT,//获取天气\r
         img,//上传图片\r
         VOICE,//上传语音\r
@@ -107,7 +108,7 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.UD, "UD");\r
         cmdMap.put(CMD_TYPE.UD2, "UD2");\r
         cmdMap.put(CMD_TYPE.AL, "AL");\r
-        cmdMap.put(CMD_TYPE.Time, "Time");\r
+        cmdMap.put(CMD_TYPE.LGZONE, "LGZONE");\r
         cmdMap.put(CMD_TYPE.WT, "WT");\r
         cmdMap.put(CMD_TYPE.img, "img");\r
         cmdMap.put(CMD_TYPE.VOICE, "VOICE");\r
@@ -370,6 +371,52 @@ public class protocol_fzd {
 \r
     }\r
 \r
+\r
+    public static StringMessage LGZONE(Runtime runtime) {\r
+       return genFZDCMD(cmdMap.get(CMD_TYPE.LGZONE));\r
+    }\r
+    public void handleLGZONE(Runtime runtime, String data){\r
+\r
+        /***\r
+         *  平台回复:[XT*YYYYYYYYYYYYYYY*LEN*LGZONE,时区,时间,日期]\r
+         *  实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]\r
+         */\r
+        String[] list=data.split(CMDSPLIT);\r
+        if (list.length==4){\r
+            String timeZone=list[1].trim();\r
+            String date=list[3].trim();\r
+            String time=list[2].trim();\r
+            Date datetime= TimeUtil.parseDatetiime(date,time);\r
+\r
+            int timezone;\r
+            try\r
+            {\r
+                timezone=Integer.parseInt(timeZone.replace("+","").trim());\r
+            }catch (Exception e){\r
+                ICLogger.e("timezone",e);\r
+                timezone=8;\r
+            }\r
+\r
+            if (datetime!=null){\r
+                ICLogger.i("==="+timezone+" "+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setTimeZone(timezone);\r
+\r
+\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+            }\r
+//            Set Datetime 20200505112734\r
+//            Set TimeZone 8\r
+\r
+        }else{\r
+            ICLogger.i("LGZONE Format Error!");\r
+        }\r
+\r
+\r
+    }\r
+\r
+\r
     /*LBS+GPS混合定位*/\r
     public static StringMessage UD(Runtime runtime) {\r
         /***\r
@@ -470,8 +517,21 @@ public class protocol_fzd {
          * 实例:[IC*334588000000156*0002*AL]\r
          * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.\r
          */\r
-        return null;\r
 \r
+        StringBuilder sb=new StringBuilder();\r
+        String cmd=cmdMap.get(CMD_TYPE.AL);\r
+        sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)\r
+                .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)\r
+                .append(runtime.getFZDGPSData()).append(CMDSPLIT)\r
+                .append(String.format("%03d",abs(runtime.getSignalStrength()))).append(CMDSPLIT)\r
+                .append(runtime.getBattery()).append(CMDSPLIT)\r
+                .append(runtime.getTotalStepCount()).append(CMDSPLIT)\r
+                .append(runtime.getRolltimes()).append(CMDSPLIT)\r
+                .append(runtime.getFZDDevStatus(runtime)).append(CMDSPLIT)\r
+                .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)\r
+                .append(runtime.getFZDWifiData());\r
+\r
+        return genFZDCMD(cmd,sb.toString());\r
     }\r
 \r
     public static StringMessage UPLOAD(){\r
@@ -783,6 +843,10 @@ public class protocol_fzd {
                 ICLogger.i("服务器收到上传的心率heart");\r
                 mConnection.DeliverCMDMessageToSystem("heart",cmd);//通知下面线程状态变化\r
                 break;\r
+            case LGZONE:\r
+                ICLogger.i("收到服务器时间 LGZONE "+data);\r
+                handleLGZONE(mRuntime,data);\r
+                break;\r
 //            case BP84:\r
 //                handleBP84(cmd,mConnection);\r
 //                ICLogger.i("收到服务器白名单命令");\r
index 31a9d40..74e63f6 100644 (file)
@@ -29,6 +29,7 @@ import com.enqualcomm.support.utils.WakeLockUtil;
 \r
 import java.io.File;\r
 import java.util.ArrayList;\r
+import java.util.Date;\r
 import java.util.HashMap;\r
 \r
 import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;\r
@@ -397,18 +398,18 @@ public class protocol_ic {
             log("handleBP00", "Set Datetime " + msg[1]);\r
             log("handleBP00", "Set TimeZone " + msg[2]);\r
 \r
-//            Date datetime= TimeUtil.parseDatetiime(msg[1]);\r
-//            int timezone=Integer.parseInt(msg[2]);\r
-//            if (datetime!=null){\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//                TimeUtil.setTimeZone(timezone);\r
-//\r
-//\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//\r
-//            }\r
+            Date datetime= TimeUtil.parseDatetiime(msg[1]);\r
+            int timezone=Integer.parseInt(msg[2]);\r
+            if (datetime!=null){\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setTimeZone(timezone);\r
+\r
+\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+\r
+            }\r
 //            Set Datetime 20200505112734\r
 //            Set TimeZone 8\r
 \r
@@ -2257,10 +2258,11 @@ public class protocol_ic {
 \r
     public boolean handleCmd(CMD_TYPE type, String cmd) {\r
 \r
-        //普通非二进制命令用此函数处理\r
+           //普通非二进制命令用此函数处理\r
         boolean ret=true;\r
         ICLogger.i("handleCmd "+type.name() + " strLen="+cmd.length());\r
         if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd);\r
+        cmd=cmd.replace(" ","");\r
         switch (type){\r
             case BP00: //登录包\r
                 handleBP00(mRuntime,cmd);\r
index 2914c90..c2e55c9 100644 (file)
@@ -332,18 +332,18 @@ public class protocol_jiai {
             log("handleBP00", "Set Datetime " + msg[1]);\r
             log("handleBP00", "Set TimeZone " + msg[2]);\r
 \r
-//            Date datetime= TimeUtil.parseDatetiime(msg[1]);\r
-//            int timezone=Integer.parseInt(msg[2]);\r
-//            if (datetime!=null){\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//                TimeUtil.setTimeZone(timezone);\r
-//\r
-//\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
-//                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
-//\r
-//            }\r
+            Date datetime= TimeUtil.parseDatetiime(msg[1]);\r
+            int timezone=Integer.parseInt(msg[2]);\r
+            if (datetime!=null){\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setTimeZone(timezone);\r
+\r
+\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+                TimeUtil.setSysDateTime(runtime.getContextProxy().context,datetime,timezone);\r
+                ICLogger.i("==="+TimeUtil.getDefaultTimeZone());\r
+\r
+            }\r
 //            Set Datetime 20200505112734\r
 //            Set TimeZone 8\r
 \r
index a2a4817..13498fa 100644 (file)
@@ -1,2 +1,2 @@
-#Sat Sep 12 16:48:19 CST 2020\r
-VERSION_CODE=612\r
+#Mon Sep 14 23:17:08 CST 2020\r
+VERSION_CODE=615\r