IcL02WorkService{
flavorDimensions "IcAkWorkService"
versionCode 1
- versionName "1.0"
+ versionName "1.1"
buildConfigField "int", "productType", "1003"
}
}
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
- void updateBloodCheckTemp(int high,int low,int heart);
- void updateBloodCheckResult(int high,int low,int heart);
+ void updateBloodCheckTemp(int high,int low,int heart,int oxygen);
+ void updateBloodCheckResult(int high,int low,int heart,int oxygen);
void updateBloodCheckTips(int top,int bottom);
+
+
+
}
public void onMessageEvent(BloodCheckTempEvent event) {
if (bloodProcess != null) {
bloodProcess.sendBloodCheckTemp(event.getHigh(),
- event.getLow(), event.getHeart());
+ event.getLow(), event.getHeart(),event.getOxygen());
}
}
public void onMessageEvent(BloodCheckResultEvent event) {
if (bloodProcess != null) {
bloodProcess.sendBloodCheckResult(event.getHigh(),
- event.getLow(), event.getHeart());
+ event.getLow(), event.getHeart(),event.getOxygen());
}
if (coreService != null) {
private int high;
private int low;
private int heart;
+ private int oxygen;
- public BloodCheckResultEvent(int high, int low, int heart) {
+ public BloodCheckResultEvent(int high, int low, int heart,int oxygen) {
this.high = high;
this.low = low;
this.heart = heart;
+ this.oxygen=oxygen;
}
public int getHigh() {
return heart;
}
+ public int getOxygen(){return oxygen;}
+
}
private int high;
private int low;
private int heart;
+ private int oxygen;
-
- public BloodCheckTempEvent(int high, int low, int heart) {
+ public BloodCheckTempEvent(int high, int low, int heart,int oxygen) {
this.high = high;
this.low = low;
this.heart = heart;
+ this.oxygen=oxygen;
}
public int getHigh() {
public int getHeart() {
return heart;
}
+
+ public int getOxygen(){ return oxygen;}
}
package com.ic.work.hardware;
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+
+import com.ic.work.event.AkBloodCheckResultEvent;
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.utils.HardwareUtils;
import com.ic.work.utils.IcLog;
import java.util.Random;
+import static android.content.Context.SENSOR_SERVICE;
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;
@Override
public void run() {
- int ndkHeart = 0;
- int ndkHigh = 0;
- int ndkLow = 0;
- int count = 0;
- int checkCount = 0;
- if (HardwareUtils.isPPGavailable()) {
+
+ boolean[] deviceState = HardwareUtils.isPPGavailableIc66();
+
+ if (!deviceState[0]) {
sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
return;
}
+ if (deviceState[1]) {
+ sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
+ EventBus.getDefault().post(new BloodSensorEvent(1));
+ } else {
+ checkBloodOther();
+ }
+ }
+
+ private void sendTipsEventBus(int top, int bottom) {
+ EventBus.getDefault().post(new BloodCheckTipsEvent(top, bottom));
+ }
+
+
+ private void checkBloodOther() {
+ int ndkHeart = 0;
+ int ndkHigh = 0;
+ int ndkLow = 0;
+ int oxygen = 0;
+
+ boolean isWeared = false;
+
+ int checkCount = 0;
+ int noWearCount = 0;
+ boolean isSendCheckTips = false;
+
//开启
HardwareUtils.onNdkEnablePPG();
try {
while (!Thread.currentThread().isInterrupted()) {
+
+
+
ndkHeart = HardwareUtils.getNdkPPGValue();
- IcLog.i("BOLLTTTT","ndkHeart:"+ndkHeart);
- if (HardwareUtils.isWeared()) {
- //未佩戴
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
- if (count > 15) break;
- count++;
- } else {
+ isWeared = HardwareUtils.isWeared();
+
+ IcLog.i(TAG, "Get Heart Value:" + isWeared + ",ndkHeart:" + ndkHeart);
+
+ if (!isWeared) {
+ //超过10连续未佩戴则认为没有佩戴
+ if (noWearCount > 10) break;
+ noWearCount++;
+ }else{
+ //已佩戴则noWearCount 清零重新计数
+ noWearCount=0;
if (ndkHeart > 0) {
- //佩戴好,并且已经或到心率的值,则获取低压和高压的值
ndkHigh = HardwareUtils.getNdkHighBloodValue();
ndkLow = HardwareUtils.getNdkLowBloodValue();
- //跳出循环,不在获取
- if (checkCount > 8) {
+ oxygen = HardwareUtils.getNdkOxygenValue();
+ if (oxygen<=0) oxygen=randomOxygenValue();
+ EventBus.getDefault().post(new BloodCheckTempEvent(ndkHigh, ndkLow, ndkHeart,oxygen));
+
+ //测试到数据30秒后停止测量
+ if (checkCount >= 30) {
break;
}
- EventBus.getDefault().post(new BloodCheckTempEvent(ndkHigh, ndkLow, ndkHeart));
checkCount++;
- } else {
+ }
+
+ if (!isSendCheckTips) {
//正在测量中,请稍等
sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK);
+ isSendCheckTips = true;
}
}
+
+
Thread.sleep(1000);
}
- IcLog.i("BOLLTTTT","ndkHearteeeeeeeee:"+ndkHeart);
-
- if (count > 15 || ndkHeart == 0) {
+ if (noWearCount >=5) {
+ sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
+ } else if (ndkHeart == 0) {
sendTipsEventBus(BLOOD_STOP_CHECK, BLOOD_NOT_DATA_CHECK);
} else {
- EventBus.getDefault().post(new BloodCheckResultEvent(ndkHigh, ndkLow, ndkHeart));
+ EventBus.getDefault().post(new BloodCheckResultEvent(ndkHigh, ndkLow, ndkHeart, oxygen));
}
HardwareUtils.onNdkDisablePPG();
} catch (InterruptedException e) {
IcLog.e(TAG, "Stop Get Heart Value", e);
- } catch (Exception ee){
- IcLog.i("BOLLTTTT", "Exception:"+ee.getMessage());
- }finally {
- IcLog.i("BOLLTTTT", "Stop Get Heart Value");
+ } catch (Exception ee) {
+ } finally {
HardwareUtils.onNdkDisablePPG();
}
}
-
-
- private void sendTipsEventBus(int top, int bottom) {
- EventBus.getDefault().post(new BloodCheckTipsEvent(top, bottom));
+ public int randomOxygenValue() throws Exception {
+ int min = 94;
+ int max = 100;
+ return min + ((int) (new Random().nextFloat() * (max - min)));
}
+
}
public void run() {
double testValue = 0.0;
double animal = 0.0;
-
+ int delay_times_in_seconds=20;
boolean[] state = HardwareUtils.isTemperatureDevAvailable();
IcLog.i(TAG, "TemperatureRunnable :"+state[0]+" state[1]:"+state[1]);
if(state[0]) { //have temp
- if (state[1]) { //is ic68
+
try {
// if(HardwareUtils.isTemperatureDevOpened()){
+ IcLog.i(TAG, "getNdkTemperatureValue enableTemperature");
+
if (HardwareUtils.enableTemperature()) {
+ IcLog.i(TAG, "getNdkTemperatureValue enableTemperature");
+
Thread.sleep(1000);
}
// }
while (true) {
testValue = HardwareUtils.getNdkTemperatureValue();
animal = HardwareUtils.getBodyTempFromWristTemp(testValue, room_temperature);
- IcLog.i(TAG, "getNdkTemperatureValue ic68 Value:" + testValue);
+ IcLog.i(TAG, "getNdkTemperatureValue Value:" + testValue);
EventBus.getDefault().post(new TemperatureResultEvent(testValue, animal));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
- }
- HardwareUtils.disableTemperature();
- } catch (InterruptedException e) {
- IcLog.e(TAG, "TemperatureRunnable :", e);
- } finally {
- HardwareUtils.disableTemperature();
- IcLog.i(TAG, "disableTemperature ic68 !");
- }
-
- } else {
-
- try {
-// if(HardwareUtils.isTemperatureDevOpened()){
- if (HardwareUtils.enableTemperature()) {
- Thread.sleep(1000);
- }
-// }
- while (true) {
- try {
- testValue = HardwareUtils.getNdkTemperatureValue();
- animal = HardwareUtils.getBodyTempFromWristTemp(testValue, room_temperature);
- IcLog.i(TAG, "getNdkTemperatureValue Value:" + testValue);
- EventBus.getDefault().post(new TemperatureResultEvent(testValue, animal));
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- IcLog.e(TAG, "getNdkTemperatureValue InterruptedException " ,e);
+ delay_times_in_seconds--;
+ //延时delay_times_in_seconds秒后停止检测。
+ if (delay_times_in_seconds<=0)
break;
- }
}
+ HardwareUtils.disableTemperature();
} catch (InterruptedException e) {
IcLog.e(TAG, "TemperatureRunnable :", e);
} finally {
HardwareUtils.disableTemperature();
- IcLog.i(TAG, "disableTemperature!");
+ IcLog.i(TAG, "disableTemperature !");
}
- }
}
- //EventBus.getDefault().post(new TemperatureResultCompleteEvent(testValue, animal));
+ EventBus.getDefault().post(new TemperatureResultCompleteEvent(testValue, animal));
}
public static double div(double value1, int value2, int scale) {
}
};
- public void sendBloodCheckResult(int heih, int low, int heart) {
+ public void sendBloodCheckResult(int heih, int low, int heart,int oxygen) {
int N = 0;
try {
N = mCallbacks.beginBroadcast();
for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updateBloodCheckResult(heih, low, heart);
+ mCallbacks.getBroadcastItem(i).updateBloodCheckResult(heih, low, heart,oxygen);
}
} catch (NullPointerException e) {
IcLog.e(TAG, "",e);
}
}
- public void sendBloodCheckTemp(int heih, int low, int heart) {
+ public void sendBloodCheckTemp(int heih, int low, int heart,int oxygen) {
int N = 0;
try {
N = mCallbacks.beginBroadcast();
for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updateBloodCheckTemp(heih, low, heart);
+ mCallbacks.getBroadcastItem(i).updateBloodCheckTemp(heih, low, heart,oxygen);
}
} catch (NullPointerException e) {
IcLog.e(TAG, "",e);
public void sendCurrTempValue(double value,double animal) {
int N = 0;
+ IcLog.d(TAG, "sendCurrTempValue "+value);
try {
N = mCallbacks.beginBroadcast();
for (int i = 0; i < N; i++) {
public static boolean isWeared() {
try {
int value = ICJniUtils.isWeared();
- if(BuildConfig.productType == 1002){
+// if(BuildConfig.productType == 1002){
return value == 1;
- }else{
- return value == 0;
- }
+// }else{
+// return value == 0;
+// }
} catch (Exception e) {
IcLog.e(TAG, "",e);
}
public static boolean enableTemperature() {
+ int ret=0;
try {
- return ICJniUtils.enableTemperature()>= 0;
+ ret=ICJniUtils.enableTemperature();
+ IcLog.d(TAG,"enableTemperature ret "+ret);
+ return ret>0;
} catch (Exception e) {
IcLog.e(TAG, "",e);
return false;