update aidl files.
authorkfl_614 <kfl_614@163.com>
Thu, 31 Dec 2020 09:26:29 +0000 (17:26 +0800)
committerkfl_614 <kfl_614@163.com>
Thu, 31 Dec 2020 09:26:29 +0000 (17:26 +0800)
app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl
app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl
app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl
app/src/main/aidl/com/ic/work/ITempSensorService.aidl
app/src/main/java/com/ic/work/SensorDataService.java
app/src/main/java/com/ic/work/domain/Temperature.java
app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java
app/src/main/java/com/ic/work/hardware/TemperatureHelper.java

index 5df84e6..12554f5 100644 (file)
@@ -5,10 +5,12 @@ package com.ic.work;
 import com.ic.work.domain.HeartRate;
 
 interface IHeartRateSensorCallback {
-   //获取到了数据
+     //获取到了数据,最终数据
      void onHeartRateGet(in HeartRate heartRate);
+     //数据更新中
+     void onHeartRateUpdate(in HeartRate heartRate);
      //正在获取数据
-     void onGetData();
+     void onGettingData();
      //等待中
      void onWaiting();
 }
\ No newline at end of file
index bc1f7f9..10af642 100644 (file)
@@ -5,9 +5,9 @@ import com.ic.work.IHeartRateSensorCallback;
 
 interface IHeartRateSensorService {
    //注册接口
-    void registerCallback(in IHeartRateSensorCallback callback);
+    void registerCallback(in IHeartRateSensorCallback callback,in String callbackTag);
     //取消接口注册
     void unRegisterCallback(in IHeartRateSensorCallback callback);
     //获取心率相关数据0表示Alarm,1表示客户端用户发出的,3表示服务端发出的单次获取指令
-    void getHeartRateInfo(int from);
+    oneway void getHeartRateInfo(int from,in String callbackTag);
 }
\ No newline at end of file
index 411f521..9364360 100644 (file)
@@ -4,10 +4,12 @@ package com.ic.work;
 import com.ic.work.domain.Temperature;
 
 interface ITempSensorCallback {
-    //获取到了温度数据
+    //获取到了温度数据,最终数据
     void onTemperatureGet(in Temperature temperature);
+    //温度数据更新中
+    void onTemperatureUpdating(in Temperature temperature);
    //正在获取数据
-   void onGetData();
+   void onGettingData();
    //等待中
    void onWaiting();
 }
\ No newline at end of file
index f71b99c..3d1847e 100644 (file)
@@ -4,9 +4,10 @@ import com.ic.work.ITempSensorCallback;
 
 interface ITempSensorService {
     //注册接口
-    void registerCallback(in ITempSensorCallback callback);
+    void registerCallback(in ITempSensorCallback callback,in String callbackTag);
     //取消接口注册
     void unRegisterCallback(in ITempSensorCallback callback);
     //获取体温:0表示Alarm,1表示客户端用户发出的,3表示服务端发出的单次获取指令
-    void getTemperatureInfo(int from);
+    //callbackTag,可以使用报名+类名的字符串组合
+    oneway void getTemperatureInfo(int from,in String callbackTag);
 }
\ No newline at end of file
index df915da..f8dc3ff 100644 (file)
@@ -1,7 +1,6 @@
 package com.ic.work;
 
 import android.app.Service;
-import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
 import android.os.RemoteCallbackList;
@@ -13,11 +12,7 @@ import androidx.annotation.Nullable;
 import com.ic.work.domain.HeartRate;
 import com.ic.work.domain.Temperature;
 import com.ic.work.event.AkBloodCheckResultEvent;
-import com.ic.work.event.BloodCheckResultEvent;
-import com.ic.work.event.BloodCheckTempEvent;
 import com.ic.work.event.BloodSensorEvent;
-import com.ic.work.event.TemperatureResultCompleteEvent;
-import com.ic.work.event.TemperatureResultEvent;
 import com.ic.work.event.TestTaskEvent;
 import com.ic.work.hardware.BloodInfoHelper;
 import com.ic.work.hardware.BloodSensorManager;
@@ -32,14 +27,26 @@ import org.greenrobot.eventbus.ThreadMode;
 
 import java.util.concurrent.LinkedBlockingDeque;
 
-import static com.ic.work.utils.ICWorkConstants.Jx.*;
-import static com.ic.work.utils.ICWorkConstants.ServiceType.*;
+import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_AEE_HEART_RATE;
+import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_AEE_TEMPERATURE;
+import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_GET_HEART_RATE;
+import static com.ic.work.utils.ICWorkConstants.Jx.ACTION_GET_TEMPERATURE;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_BLOOD_OXYGEN;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_BLOOD_PRESS_H;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_BLOOD_PRESS_L;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_RATE;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_TEMPERATURE;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_HEART_TEMPERATURE_TYPE;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_MODE;
+import static com.ic.work.utils.ICWorkConstants.Jx.JX_KEY_RESULT;
+import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_BLOOD;
+import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_IC_TEMP;
 
 /**
  * 传感器数据服务,要获取传感器数据的,来绑定这个服务吧。
  * 比如说这个心率,这个温度,以后还有其他的传感器,可以往这里添加。
  */
-public class SensorDataService extends Service {
+public class SensorDataService extends Service implements TemperatureHelper.TemperatureChangeListener, BloodInfoHelper.HeartRateInfoChangeListener {
 
     public static final String ACTION_TEMP_RESULT = "com.ic.action.temp_result";
     public static final String KEY_TEMP_BODY = "body";  // double 体温
@@ -56,6 +63,9 @@ public class SensorDataService extends Service {
     private TestTaskEvent currentTask;
     private BloodSensorManager bloodSensorManager;
 
+    private final Object mLock = new Object();
+
+
     @Nullable
     @Override
     public IBinder onBind(Intent intent) {
@@ -84,7 +94,8 @@ public class SensorDataService extends Service {
         EventBus.getDefault().register(this);
         //创建一个Handler用来计算超时,如果超过这个时间,还没有执行完
         //那么就取出下一个任务
-        //TODO:
+        TemperatureHelper.getInstance().setTemperatureChangeListener(this);
+        BloodInfoHelper.getInstance().setHeartRateInfoChangeListener(this);
     }
 
     /**
@@ -115,42 +126,16 @@ public class SensorDataService extends Service {
         }
     }
 
-
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    public void onMessageEvent(TemperatureResultCompleteEvent event) {
-        IcLog.d(TAG, "lastWristTemp == > " + event.value);
-        IcLog.d(TAG, "bodyTemp == > " + event.animal);
-        IcLog.d(TAG, "envTemp == > " + event.tempOut);
-        IcLog.d(TAG, "on temperature test end...");
-        handleTemperature(event.value, event.animal, event.tempOut);
-        sendTempBroadcast(event.value, event.animal, event.tempOut);
-        //判断是否要执行新的任务
-        checkContinue();
-    }
-
-    /**
-     * 温度消息更新的事件
-     *
-     * @param event
-     */
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    public void onMessageEvent(TemperatureResultEvent event) {
-        //处理温度
-        handleTemperature(event.value, event.animal, event.tempOut);
-    }
-
-    private void handleTemperature(double value, double animal, double tempOut) {
-        Temperature temperature = new Temperature(value, animal, tempOut);
+    private void handleTemperature(double wristTemp, double bodyTemp, double envTemp) {
+        Temperature temperature = new Temperature(bodyTemp, wristTemp, envTemp);
         //分发出去
         dispatchTemperatureResult(temperature);
         //处理温度测量数据给掌育的
         if (jxTempMode != -1) {
-            sendTemperatureBroadcast2Jx(true, value, animal);
+            sendTemperatureBroadcast2Jx(true, wristTemp, bodyTemp);
             jxTempMode = -1;
         }
-
-        sendTempBroadcast(value, animal, tempOut);
-
+        sendTempBroadcast(wristTemp, bodyTemp, envTemp);
     }
 
     /**
@@ -159,29 +144,32 @@ public class SensorDataService extends Service {
      * @param temperature
      */
     private void dispatchTemperatureResult(Temperature temperature) {
-        int i = temperatureCallbacks.beginBroadcast();
-        while (i < 0) {
-            i--;
-            try {
-                temperatureCallbacks.getBroadcastItem(i).onTemperatureGet(temperature);
-            } catch (RemoteException e) {
-                e.printStackTrace();
+        synchronized (mLock) {
+            int i = temperatureCallbacks.beginBroadcast();
+            IcLog.d(TAG, "temperature callback size == > " + i + " temperature is " + temperature);
+            while (i > 0) {
+                i--;
+                try {
+                    temperatureCallbacks.getBroadcastItem(i).onTemperatureGet(temperature);
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
             }
+            temperatureCallbacks.finishBroadcast();
         }
-        temperatureCallbacks.finishBroadcast();
     }
 
     /**
      * 获取温度相关的信息
      */
     private void getTemperatureInfo() {
-        IcLog.d(TAG, "getTemperatureInfo...");
+        IcLog.d(TAG, "getTemperatureInfo..." + Thread.currentThread().getName());
         TemperatureHelper.getInstance().getTemperature();
     }
 
     //获取心率,这里要完成整个过程
     private void getHeartInfo() {
-        IcLog.d(TAG, "getHeartInfo...");
+        IcLog.d(TAG, "getHeartInfo..." + Thread.currentThread().getName());
         BloodInfoHelper.getInstance().getBloodInfo();
     }
 
@@ -190,29 +178,32 @@ public class SensorDataService extends Service {
         super.onDestroy();
         mTaskList.clear();
         EventBus.getDefault().unregister(this);
+        TemperatureHelper.getInstance().setTemperatureChangeListener(null);
+        BloodInfoHelper.getInstance().setHeartRateInfoChangeListener(null);
     }
 
 
     private final RemoteCallbackList<IHeartRateSensorCallback> heartRateCallbacks
             = new RemoteCallbackList<>();
 
-    private final IHeartRateSensorService.Stub heartRateSensorService = new IHeartRateSensorService.Stub() {
-        @Override
-        public void registerCallback(IHeartRateSensorCallback callback) {
-            heartRateCallbacks.register(callback);
-        }
+    private final IHeartRateSensorService.Stub heartRateSensorService =
+            new IHeartRateSensorService.Stub() {
+                @Override
+                public void registerCallback(IHeartRateSensorCallback callback, String tag) {
+                    heartRateCallbacks.register(callback, tag);
+                }
 
-        @Override
-        public void unRegisterCallback(IHeartRateSensorCallback callback) {
-            heartRateCallbacks.unregister(callback);
-        }
+                @Override
+                public void unRegisterCallback(IHeartRateSensorCallback callback) {
+                    heartRateCallbacks.unregister(callback);
+                }
 
-        @Override
-        public void getHeartRateInfo(int from) {
-            IcLog.d(TAG, "getHeartRateInfo..." + from);
-            createTask(from, TestTaskEvent.SensorType.HEART_RATE);
-        }
-    };
+                @Override
+                public void getHeartRateInfo(int from, String tag) {
+                    IcLog.d(TAG, "getHeartRateInfo..." + from);
+                    createTask(from, TestTaskEvent.SensorType.HEART_RATE, tag);
+                }
+            };
 
     private TestTaskEvent.From getFromByValue(int value) {
         for (TestTaskEvent.From item : TestTaskEvent.From.values()) {
@@ -230,8 +221,8 @@ public class SensorDataService extends Service {
 
     private final ITempSensorService.Stub tempSensorService = new ITempSensorService.Stub() {
         @Override
-        public void registerCallback(ITempSensorCallback callback) {
-            temperatureCallbacks.register(callback);
+        public void registerCallback(ITempSensorCallback callback, String tag) {
+            temperatureCallbacks.register(callback, tag);
         }
 
         @Override
@@ -240,14 +231,14 @@ public class SensorDataService extends Service {
         }
 
         @Override
-        public void getTemperatureInfo(int from) {
+        public void getTemperatureInfo(int from, String tag) {
             IcLog.d(TAG, "getTemperatureInfo..." + from);
             TestTaskEvent.SensorType censorType = TestTaskEvent.SensorType.TEMPERATURE;
-            createTask(from, censorType);
+            createTask(from, censorType, tag);
         }
     };
 
-    private void createTask(int from, TestTaskEvent.SensorType censorType) {
+    private void createTask(int from, TestTaskEvent.SensorType censorType, String tag) {
         TestTaskEvent.From fromByValue = getFromByValue(from);
         if (fromByValue == null) {
             IcLog.d(TAG, "from is not invalid..." + from);
@@ -260,10 +251,23 @@ public class SensorDataService extends Service {
         );
         IcLog.d(TAG, "create new task == > " + taskEvent);
         //判断队列里是否有同样的任务,如果有的话不用发了,
-        if (mTaskList.contains(taskEvent) || taskEvent.equals(currentTask)) {
+        if (mTaskList.contains(taskEvent)) {
             IcLog.d(TAG, "task contains..." + fromByValue);
+            //通知正在等待执行
+            if (tag != null) {
+                dispatchWaiting(censorType, tag);
+            }
             return;
         }
+
+        if (taskEvent.equals(currentTask)) {
+            //通知正在执行
+            if (tag != null) {
+                dispatchTaskRunning(censorType, tag);
+            }
+            return;
+        }
+
         IcLog.d(TAG, "is running =-== > " + isRunning +
                 "  queue size == > " + mTaskList.size());
         //判断是否繁忙
@@ -274,13 +278,106 @@ public class SensorDataService extends Service {
             EventBus.getDefault().post(taskEvent);
         } else {
             IcLog.d(TAG, "new task waiting..." + taskEvent);
-            //需要等待,要放到队列里头
+            //要放到队列里头,提示调用者正在等待执行
+            if (tag != null) {
+                dispatchWaiting(censorType, tag);
+            }
             mTaskList.add(taskEvent);
         }
     }
 
+    private void dispatchWaiting(TestTaskEvent.SensorType censorType, String tag) {
+        if (censorType == TestTaskEvent.SensorType.TEMPERATURE) {
+            //温度的
+            synchronized (mLock) {
+                try {
+                    int i = temperatureCallbacks.beginBroadcast();
+                    while (i > 0) {
+                        i--;
+                        String callbackTag = (String) temperatureCallbacks.getBroadcastCookie(i);
+                        if (callbackTag != null && callbackTag.equals(tag)) {
+                            temperatureCallbacks.getBroadcastItem(i).onWaiting();
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    temperatureCallbacks.finishBroadcast();
+                }
+            }
+        } else if (censorType == TestTaskEvent.SensorType.HEART_RATE) {
+            //心率的
+            synchronized (mLock) {
+                try {
+                    int i = heartRateCallbacks.beginBroadcast();
+                    while (i > 0) {
+                        i--;
+                        String callbackTag = (String) heartRateCallbacks.getBroadcastCookie(i);
+                        if (callbackTag != null && callbackTag.equals(tag)) {
+                            heartRateCallbacks.getBroadcastItem(i).onWaiting();
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    heartRateCallbacks.finishBroadcast();
+                }
+            }
+        }
+    }
+
+    /**
+     * 通知对应的回调,任务正在运行
+     *
+     * @param censorType
+     * @param tag
+     */
+    private void dispatchTaskRunning(TestTaskEvent.SensorType censorType, String tag) {
+        if (censorType == TestTaskEvent.SensorType.TEMPERATURE) {
+            //温度的
+            synchronized (mLock) {
+                try {
+                    int i = temperatureCallbacks.beginBroadcast();
+                    while (i > 0) {
+                        i--;
+                        String callbackTag = (String) temperatureCallbacks.getBroadcastCookie(i);
+                        if (callbackTag != null && callbackTag.equals(tag)) {
+                            temperatureCallbacks.getBroadcastItem(i).onGettingData();
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    temperatureCallbacks.finishBroadcast();
+                }
+            }
+        } else if (censorType == TestTaskEvent.SensorType.HEART_RATE) {
+            //心率的
+            synchronized (mLock) {
+                try {
+                    int i = heartRateCallbacks.beginBroadcast();
+                    while (i > 0) {
+                        i--;
+                        String callbackTag = (String) heartRateCallbacks.getBroadcastCookie(i);
+                        if (callbackTag != null && callbackTag.equals(tag)) {
+                            heartRateCallbacks.getBroadcastItem(i).onGettingData();
+                            break;
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    heartRateCallbacks.finishBroadcast();
+                }
+            }
+        }
+    }
 
-    @Subscribe(threadMode = ThreadMode.MAIN)
+
+    @Subscribe(threadMode = ThreadMode.ASYNC)
     public void onMessageEvent(BloodSensorEvent event) {
         switch (event.type) {
             case 1:
@@ -295,9 +392,9 @@ public class SensorDataService extends Service {
         }
     }
 
-    @Subscribe(threadMode = ThreadMode.MAIN)
+    @Subscribe(threadMode = ThreadMode.ASYNC)
     public void onMessageEvent(AkBloodCheckResultEvent event) {
-        int[] deviation = getPPG_ECG_adjustValue(this);
+        int[] deviation = getPPG_ECG_adjustValue();
         event.heart = event.heart + deviation[0];
         event.high = event.high + deviation[1];
         event.low = event.low + deviation[2];
@@ -346,45 +443,31 @@ public class SensorDataService extends Service {
         if (ACTION_GET_HEART_RATE.equals(action)) {
             jxHeartRateMode = intent.getIntExtra(JX_KEY_MODE, -1);
             //创建测试心率的任务
-            createTask(jxHeartRateMode, TestTaskEvent.SensorType.HEART_RATE);
+            createTask(jxHeartRateMode, TestTaskEvent.SensorType.HEART_RATE, null);
         } else if (ACTION_GET_TEMPERATURE.equals(action)) {
             jxTempMode = intent.getIntExtra(JX_KEY_MODE, -1);
             //创建测试温度的任务
-            createTask(jxTempMode, TestTaskEvent.SensorType.TEMPERATURE);
+            createTask(jxTempMode, TestTaskEvent.SensorType.TEMPERATURE, null);
         }
         return super.onStartCommand(intent, flags, startId);
     }
 
-    /**
-     * 这个是最终结果
-     *
-     * @param event
-     */
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    public void onMessageEvent(BloodCheckResultEvent event) {
-        //处理心率测量数据给掌育的
-        //发广播给掌育,如果不为-1,说明有掌育的份
-        IcLog.d(TAG, "jxHeartRateMode..." + jxHeartRateMode);
-        if (jxHeartRateMode != -1) {
-            sendHeartRateBroadcast2Jx(true, event.getHigh(),
-                    event.getLow(), event.getHeart(), event.getOxygen());
-        }
-        //reset data.
-        handleBloodResult(event.getHigh(), event.getLow(), event.getHeart(), event.getOxygen());
-        IcLog.d(TAG, "on blood test end...");
-        checkContinue();
-    }
-
 
-    /**
-     * 这个是更新结果
-     *
-     * @param event
-     */
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    public void onMessageEvent(BloodCheckTempEvent event) {
-        handleBloodResult(event.getHigh(),
-                event.getLow(), event.getHeart(), event.getOxygen());
+    private void dispatchHeartRateUpdate(int high, int low, int heart, int oxygen) {
+        //更新一下数据
+        HeartRate heartRate = new HeartRate(high, low, heart, oxygen);
+        synchronized (mLock) {
+            int i = heartRateCallbacks.beginBroadcast();
+            try {
+                while (i > 0) {
+                    i--;
+                    heartRateCallbacks.getBroadcastItem(i).onHeartRateUpdate(heartRate);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            heartRateCallbacks.finishBroadcast();
+        }
     }
 
     /**
@@ -393,16 +476,19 @@ public class SensorDataService extends Service {
      * @param heartRate
      */
     private void dispatchHeartRateResult(HeartRate heartRate) {
-        int i = heartRateCallbacks.beginBroadcast();
-        while (i < 0) {
-            i--;
-            try {
-                heartRateCallbacks.getBroadcastItem(i).onHeartRateGet(heartRate);
-            } catch (RemoteException e) {
-                e.printStackTrace();
+        synchronized (mLock) {
+            int i = heartRateCallbacks.beginBroadcast();
+            IcLog.d(TAG, "heart rate callback size == > " + i);
+            while (i > 0) {
+                i--;
+                try {
+                    heartRateCallbacks.getBroadcastItem(i).onHeartRateGet(heartRate);
+                } catch (RemoteException e) {
+                    e.printStackTrace();
+                }
             }
+            heartRateCallbacks.finishBroadcast();
         }
-        heartRateCallbacks.finishBroadcast();
     }
 
     private void sendHeartBroadcast(int count, int spo2) {
@@ -415,7 +501,7 @@ public class SensorDataService extends Service {
     }
 
 
-    public int[] getPPG_ECG_adjustValue(Context context) {
+    public int[] getPPG_ECG_adjustValue() {
         String value = IcSystemProperty.getSystemProperties("persist.sys.PpgEcgAdjust", "0,0,0,0");
         IcLog.i(TAG, "getPPG_ECG_adjustValue:" + value);
         String[] result = value.split(",");
@@ -457,6 +543,24 @@ public class SensorDataService extends Service {
         sendBroadcast(intent);
     }
 
+    private void dispatchTemperatureUpdate(Temperature temperature) {
+        synchronized (mLock) {
+            int i = temperatureCallbacks.beginBroadcast();
+            IcLog.d(TAG, "dispatch temperature update == > " + temperature);
+            try {
+                while (i > 1) {
+                    i--;
+                    temperatureCallbacks.getBroadcastItem(i).onTemperatureUpdating(temperature);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            if (i > 0) {
+                temperatureCallbacks.finishBroadcast();
+            }
+        }
+    }
+
 
     /**
      * 发送体温数据给掌育
@@ -467,25 +571,70 @@ public class SensorDataService extends Service {
      */
     private void sendTemperatureBroadcast2Jx(boolean isSuccess, double value, double animal) {
         IcLog.d(TAG, "sendTemperatureBroadcast2Jx -- >  " +
-                isSuccess + " value == >  " + value
-                + "animal == > " + animal);
+                isSuccess + " wrist == >  " + value
+                + "body == > " + animal);
         Intent intent = new Intent();
         intent.setAction(ACTION_AEE_TEMPERATURE);
         intent.putExtra(JX_KEY_RESULT, isSuccess ? "1" : "0");
         intent.putExtra(JX_KEY_MODE, jxTempMode);
-        intent.putExtra(JX_KEY_HEART_TEMPERATURE, value);
+        intent.putExtra(JX_KEY_HEART_TEMPERATURE, animal);
         //类型0:手腕模式 1:额头模式
         intent.putExtra(JX_KEY_HEART_TEMPERATURE_TYPE, "1");
         sendBroadcast(intent);
     }
 
-    private void sendTempBroadcast(double value, double animal, double tempOut) {
+    private void sendTempBroadcast(double wristTemp, double bodyTemp, double envTemp) {
         Intent pedIntent = new Intent();
         pedIntent.setAction(ACTION_TEMP_RESULT);
-        pedIntent.putExtra(KEY_TEMP_WRIST, value);
-        pedIntent.putExtra(KEY_TEMP_BODY, animal);
-        pedIntent.putExtra(KEY_TEMP_OUT, tempOut);
+        pedIntent.putExtra(KEY_TEMP_WRIST, wristTemp);
+        pedIntent.putExtra(KEY_TEMP_BODY, bodyTemp);
+        pedIntent.putExtra(KEY_TEMP_OUT, envTemp);
         sendBroadcast(pedIntent);
         IcLog.d(TAG, " sendTempBroadcast...");
     }
+
+    @Override
+    public void onTemperatureUpdate(double wristTemp, double bodyTemp, double envTemp) {
+        Temperature temperature = new Temperature(bodyTemp, wristTemp, envTemp);
+        //处理温度
+        dispatchTemperatureUpdate(temperature);
+    }
+
+    @Override
+    public void onTemperatureResult(double wristTemp, double bodyTemp, double envTemp) {
+        IcLog.d(TAG, "lastWristTemp == > " + wristTemp);
+        IcLog.d(TAG, "bodyTemp == > " + bodyTemp);
+        IcLog.d(TAG, "envTemp == > " + envTemp);
+        IcLog.d(TAG, "on temperature test end...");
+        handleTemperature(wristTemp, bodyTemp, envTemp);
+        //判断是否要执行新的任务
+        checkContinue();
+    }
+
+    @Override
+    public void onHeartRateUpdate(int high, int low, int heart, int oxygen) {
+        //更新
+        dispatchHeartRateUpdate(high, low, heart, oxygen);
+    }
+
+    @Override
+    public void onHeartRateResult(int high, int low, int heart, int oxygen) {
+        //处理心率测量数据给掌育的
+        //发广播给掌育,如果不为-1,说明有掌育的份
+        IcLog.d(TAG, "jxHeartRateMode..." + jxHeartRateMode);
+        if (jxHeartRateMode != -1) {
+            sendHeartRateBroadcast2Jx(true, high,
+                    low, heart, oxygen);
+        }
+        //reset data.
+        handleBloodResult(high, low, heart, oxygen);
+        IcLog.d(TAG, "on blood test end...");
+        //checkContinue();
+        // 心率有一个方去结束
+    }
+
+    @Override
+    public void onHeartRateTestFinished() {
+        checkContinue();
+    }
 }
index 8917853..4740324 100644 (file)
@@ -19,9 +19,9 @@ public class Temperature implements Parcelable {
     }
 
     protected Temperature(Parcel in) {
-        bodyTemp = in.readFloat();
-        wristTemp = in.readFloat();
-        envTemp = in.readFloat();
+        bodyTemp = in.readDouble();
+        wristTemp = in.readDouble();
+        envTemp = in.readDouble();
     }
 
     public static final Creator<Temperature> CREATOR = new Creator<Temperature>() {
@@ -40,7 +40,7 @@ public class Temperature implements Parcelable {
         return bodyTemp;
     }
 
-    public void setBodyTemp(float bodyTemp) {
+    public void setBodyTemp(double bodyTemp) {
         this.bodyTemp = bodyTemp;
     }
 
@@ -48,7 +48,7 @@ public class Temperature implements Parcelable {
         return wristTemp;
     }
 
-    public void setWristTemp(float wristTemp) {
+    public void setWristTemp(double wristTemp) {
         this.wristTemp = wristTemp;
     }
 
@@ -56,7 +56,7 @@ public class Temperature implements Parcelable {
         return envTemp;
     }
 
-    public void setEnvTemp(float envTemp) {
+    public void setEnvTemp(double envTemp) {
         this.envTemp = envTemp;
     }
 
@@ -71,4 +71,13 @@ public class Temperature implements Parcelable {
         dest.writeDouble(wristTemp);
         dest.writeDouble(envTemp);
     }
+
+    @Override
+    public String toString() {
+        return "Temperature{" +
+                "bodyTemp=" + bodyTemp +
+                ", wristTemp=" + wristTemp +
+                ", envTemp=" + envTemp +
+                '}';
+    }
 }
index 70157b8..c5d071d 100644 (file)
@@ -1,10 +1,7 @@
 package com.ic.work.hardware;
 
-import com.ic.work.event.BloodCheckResultEvent;
-import com.ic.work.event.BloodCheckTempEvent;
 import com.ic.work.event.BloodCheckTipsEvent;
 import com.ic.work.event.BloodSensorEvent;
-import com.ic.work.event.TaskFinishedEvent;
 import com.ic.work.utils.HardwareUtils;
 import com.ic.work.utils.IcLog;
 
@@ -13,13 +10,10 @@ import org.greenrobot.eventbus.EventBus;
 import java.util.Random;
 
 import static com.ic.aidl.blood.BloodState.BLOOD_ING_CHECK;
-import static com.ic.aidl.blood.BloodState.BLOOD_NOT_DATA_CHECK;
 import static com.ic.aidl.blood.BloodState.BLOOD_NOT_DEVICE;
-import static com.ic.aidl.blood.BloodState.BLOOD_NOT_WEAR;
 import static com.ic.aidl.blood.BloodState.BLOOD_NULL_TIPS;
 import static com.ic.aidl.blood.BloodState.BLOOD_PLEASE_QUIET;
 import static com.ic.aidl.blood.BloodState.BLOOD_START_CHECK;
-import static com.ic.aidl.blood.BloodState.BLOOD_STOP_CHECK;
 
 /**
  * 此工具类获取血氧,血压,心率等信息,结果通过:
@@ -27,6 +21,8 @@ import static com.ic.aidl.blood.BloodState.BLOOD_STOP_CHECK;
 public class BloodInfoHelper {
 
 
+    private HeartRateInfoChangeListener mListener = null;
+
     private BloodInfoHelper() {
 
     }
@@ -51,18 +47,19 @@ public class BloodInfoHelper {
         boolean[] deviceState = HardwareUtils.isPPGavailableIc66();
 
         if (!deviceState[0]) {
+            //TODO:这个后面再处理,得给我机器再去处理,没有文档,没有数据
             sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
             return;
         }
 
         if (deviceState[1]) {
+            //TODO:这个是走官方API的,也得有机器再进行修改代码
             sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
             EventBus.getDefault().post(new BloodSensorEvent(1));
         } else {
+            //这个走JNI获取数据的,完成了
             checkBloodOther();
         }
-        //add by TrillGates notify task finished.
-        EventBus.getDefault().post(new TaskFinishedEvent());
     }
 
     private void sendTipsEventBus(int top, int bottom) {
@@ -76,7 +73,7 @@ public class BloodInfoHelper {
         int ndkLow = 0;
         int oxygen = 0;
 
-        boolean isWeared = false;
+        boolean isWeared;
 
         int checkCount = 0;
         int noWearCount = 0;
@@ -106,8 +103,9 @@ public class BloodInfoHelper {
                         ndkLow = HardwareUtils.getNdkLowBloodValue();
                         oxygen = HardwareUtils.getNdkOxygenValue();
                         if (oxygen <= 0) oxygen = randomOxygenValue();
-                        EventBus.getDefault().post(new BloodCheckTempEvent(ndkHigh, ndkLow, ndkHeart, oxygen));
-
+                        if (mListener != null) {
+                            mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
+                        }
                         //测试到数据30秒后停止测量
                         if (checkCount >= 30) {
                             break;
@@ -124,11 +122,16 @@ public class BloodInfoHelper {
                 Thread.sleep(1000);
             }
             if (noWearCount >= 5) {
-                sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
+                //sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
             } else if (ndkHeart == 0) {
-                sendTipsEventBus(BLOOD_STOP_CHECK, BLOOD_NOT_DATA_CHECK);
+                //sendTipsEventBus(BLOOD_STOP_CHECK, BLOOD_NOT_DATA_CHECK);
             } else {
-                EventBus.getDefault().post(new BloodCheckResultEvent(ndkHigh, ndkLow, ndkHeart, oxygen));
+                if (mListener != null) {
+                    mListener.onHeartRateResult(ndkHigh, ndkLow, ndkHeart, oxygen);
+                }
+            }
+            if (mListener != null) {
+                mListener.onHeartRateTestFinished();
             }
             HardwareUtils.onNdkDisablePPG();
         } catch (InterruptedException e) {
@@ -148,4 +151,22 @@ public class BloodInfoHelper {
     }
 
 
+    public void setHeartRateInfoChangeListener(HeartRateInfoChangeListener listener) {
+        this.mListener = listener;
+    }
+
+
+    public interface HeartRateInfoChangeListener {
+
+        void onHeartRateUpdate(int high, int low, int heart, int oxygen);
+
+        void onHeartRateResult(int high, int low, int heart, int oxygen);
+
+        //某些情况下得结束,比如说获取到数据为0
+        //没有佩戴之类的,总之,走不到结果那里,如果不结束的话,状态会错乱
+        void onHeartRateTestFinished();
+
+    }
+
+
 }
index 4961079..1d09748 100644 (file)
@@ -1,20 +1,17 @@
 package com.ic.work.hardware;
 
 import com.ic.work.domain.TemperatureItem;
-import com.ic.work.event.TemperatureResultCompleteEvent;
-import com.ic.work.event.TemperatureResultEvent;
 import com.ic.work.utils.HardwareUtils;
 import com.ic.work.utils.IcLog;
 import com.ic.work.utils.TemperatureUtil;
 
-import org.greenrobot.eventbus.EventBus;
-
 /**
  * 获取温度的工具类
  */
 public class TemperatureHelper {
 
     private static final String TAG = "TemperatureHelper";
+    private TemperatureChangeListener mListener = null;
 
     private TemperatureHelper() {
 
@@ -65,10 +62,13 @@ public class TemperatureHelper {
                             lastBodyTemp = TemperatureUtil.getBodyTemp(lastWristTemp, 26.0f);
                         }
                         //前10秒不更新内容,后10秒再更新数据
-                        if (delayTimesInSeconds > 10) {
+                        if (delayTimesInSeconds > 10 && mListener != null) {
+                            IcLog.d(TAG, "update temperature info..thread name is ." + Thread.currentThread().getName());
                             //获取
-                            EventBus.getDefault().post(new TemperatureResultEvent(lastWristTemp,
-                                    lastBodyTemp, lastTempOut));
+                            IcLog.d(TAG, "lastWristTemp == > " + lastWristTemp);
+                            IcLog.d(TAG, "lastBodyTemp == > " + lastBodyTemp);
+                            IcLog.d(TAG, "lastTempOut == > " + lastTempOut);
+                            mListener.onTemperatureUpdate(lastWristTemp, lastBodyTemp, lastTempOut);
                         }
                     }
                     //}
@@ -91,7 +91,18 @@ public class TemperatureHelper {
                 HardwareUtils.enablePedometer();
             }
         }
+        if (mListener != null) {
+            mListener.onTemperatureResult(lastWristTemp, lastBodyTemp, lastTempOut);
+        }
+    }
+
+    public void setTemperatureChangeListener(TemperatureChangeListener listener) {
+        this.mListener = listener;
+    }
+
+    public interface TemperatureChangeListener {
+        void onTemperatureUpdate(double wristTemp, double bodyTemp, double envTemp);
 
-        EventBus.getDefault().post(new TemperatureResultCompleteEvent(lastWristTemp, lastBodyTemp, lastTempOut));
+        void onTemperatureResult(double wristTemp, double bodyTemp, double envTemp);
     }
 }