From: kfl_614 Date: Thu, 31 Dec 2020 09:26:29 +0000 (+0800) Subject: update aidl files. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=10ca8c17aa7888ecbffb4c4c4abf0bfd7690b4f0;p=icworkservice.git update aidl files. --- diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl index 5df84e6..12554f5 100644 --- a/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorCallback.aidl @@ -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 diff --git a/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl index bc1f7f9..10af642 100644 --- a/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl +++ b/app/src/main/aidl/com/ic/work/IHeartRateSensorService.aidl @@ -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 diff --git a/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl b/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl index 411f521..9364360 100644 --- a/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl +++ b/app/src/main/aidl/com/ic/work/ITempSensorCallback.aidl @@ -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 diff --git a/app/src/main/aidl/com/ic/work/ITempSensorService.aidl b/app/src/main/aidl/com/ic/work/ITempSensorService.aidl index f71b99c..3d1847e 100644 --- a/app/src/main/aidl/com/ic/work/ITempSensorService.aidl +++ b/app/src/main/aidl/com/ic/work/ITempSensorService.aidl @@ -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 diff --git a/app/src/main/java/com/ic/work/SensorDataService.java b/app/src/main/java/com/ic/work/SensorDataService.java index df915da..f8dc3ff 100644 --- a/app/src/main/java/com/ic/work/SensorDataService.java +++ b/app/src/main/java/com/ic/work/SensorDataService.java @@ -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 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(); + } } diff --git a/app/src/main/java/com/ic/work/domain/Temperature.java b/app/src/main/java/com/ic/work/domain/Temperature.java index 8917853..4740324 100644 --- a/app/src/main/java/com/ic/work/domain/Temperature.java +++ b/app/src/main/java/com/ic/work/domain/Temperature.java @@ -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 CREATOR = new Creator() { @@ -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 + + '}'; + } } diff --git a/app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java b/app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java index 70157b8..c5d071d 100644 --- a/app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java +++ b/app/src/main/java/com/ic/work/hardware/BloodInfoHelper.java @@ -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(); + + } + + } diff --git a/app/src/main/java/com/ic/work/hardware/TemperatureHelper.java b/app/src/main/java/com/ic/work/hardware/TemperatureHelper.java index 4961079..1d09748 100644 --- a/app/src/main/java/com/ic/work/hardware/TemperatureHelper.java +++ b/app/src/main/java/com/ic/work/hardware/TemperatureHelper.java @@ -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); } }