From: snickersun Date: Thu, 6 Aug 2020 01:45:52 +0000 (+0800) Subject: release V477 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=af3ae6aeb29fd8dbfbbbbde29a6f66bf5623e1f8;p=protocol_srv.git release V477 添加IC66的心率检测功能。 --- diff --git a/app/libs/frameworks-full-debug.jar b/app/libs/frameworks-full-debug.jar index 898dad3d..8b3dde79 100644 Binary files a/app/libs/frameworks-full-debug.jar and b/app/libs/frameworks-full-debug.jar differ diff --git a/app/release/ICSer_V476_2008060319_release.apk b/app/release/ICSer_V477_2008060943_release.apk similarity index 79% rename from app/release/ICSer_V476_2008060319_release.apk rename to app/release/ICSer_V477_2008060943_release.apk index 26497247..57e7ca61 100644 Binary files a/app/release/ICSer_V476_2008060319_release.apk and b/app/release/ICSer_V477_2008060943_release.apk differ diff --git a/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java b/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java index fd0b17b9..b1977ee6 100644 --- a/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java +++ b/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java @@ -4,6 +4,10 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -28,6 +32,7 @@ import java.util.Random; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import static android.content.Context.SENSOR_SERVICE; import static com.enqualcomm.support.Constants.ACTION_BROADCAST_PPG; import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START; import static com.enqualcomm.support.Constants.MSG_WHAT_PPG; @@ -36,7 +41,7 @@ import static com.enqualcomm.support.Constants.key_bpl; import static com.enqualcomm.support.Constants.key_ppg; import static com.enqualcomm.support.Constants.key_spo2; -public class HeartRateManager extends AbstractInvokeHandlerService { +public class HeartRateManager extends AbstractInvokeHandlerService implements SensorEventListener { private int mNetworkType; private SimSignalUtil mSignalUtil; @@ -53,6 +58,9 @@ public class HeartRateManager extends AbstractInvokeHandlerService { connection=_connection; currentStat= heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_CLOSED; isTimerStarted=false; + mSensorManager = (SensorManager) runtime.getContextProxy().context.getSystemService(SENSOR_SERVICE); + mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE); + mHandler=new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message message) { @@ -142,7 +150,8 @@ public class HeartRateManager extends AbstractInvokeHandlerService { public void unRegReceiver(){ runtime.getContextProxy().context.unregisterReceiver(PPGStartReceiver); } - + private SensorManager mSensorManager; + private Sensor mHeartRate; int PPG; int BPH; int BPL; @@ -158,12 +167,18 @@ public class HeartRateManager extends AbstractInvokeHandlerService { public void doPPGtest(){ - PPG= ICJniUtils.getPPG();//调用底层函数保证状态更新。 - BPH=ICJniUtils.getHighBloodPressure(); - BPL=ICJniUtils.getLowBloodPressure(); - SPo2=ICJniUtils.getSPO2(); - isWared = (ICJniUtils.isWeared()==1); - isPPGTesting = (ICJniUtils.isPPGStarted()==1 ); + + int hrsType=ICJniUtils.isPPGavailable(); + if (hrsType>0 && hrsType != ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) { + PPG = ICJniUtils.getPPG();//调用底层函数保证状态更新。 + BPH = ICJniUtils.getHighBloodPressure(); + BPL = ICJniUtils.getLowBloodPressure(); + SPo2 = ICJniUtils.getSPO2(); + isWared = (ICJniUtils.isWeared() == 1); + isPPGTesting = (ICJniUtils.isPPGStarted() == 1); + }else{ + isPPGTesting=true; + } ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL+", SPo2="+SPo2); if (isPPGTesting){ if (isWared ) { @@ -230,31 +245,47 @@ public class HeartRateManager extends AbstractInvokeHandlerService { mWakeLock=null; } public void startPPG(){ - if (ICJniUtils.isPPGavailable()>0 && isTimerStarted==false) { - currentStat=heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_OPEN; - delayCount=4;//检测成功后4秒发送数据 - notWaredCount=5; //初始化没有佩戴的检测次数5,连续5秒没有佩戴则取消检测 - testCount=MAX_TESTTIMES;//测试MAX_TESTTIMES后没有结果也要强制退出 - isTimerStarted=true; - ICJniUtils.enablePPG(); + + int hrsType=ICJniUtils.isPPGavailable(); + if ( hrsType > 0 && (isTimerStarted == false) ) { + currentStat = heartRateStatus.HEARTRATE_WORKINGSTAT.HEARTRATE_OPEN; + delayCount = 4;//检测成功后4秒发送数据 + notWaredCount = 5; //初始化没有佩戴的检测次数5,连续5秒没有佩戴则取消检测 + testCount = MAX_TESTTIMES;//测试MAX_TESTTIMES后没有结果也要强制退出 + isTimerStarted = true; getPPGWakeLock(); + if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) { - timerPPG = new ScheduledThreadPoolExecutor(10); - timerPPG.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - doPPGtest(); - } - }, 0, 1000, TimeUnit.MILLISECONDS); //1 秒更新一次数据 + boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_UI); + ICLogger.i( "Heart Rate PPG_EGC_TYPE_IC66 opened ret :: " + ret); + } else { + + ICJniUtils.enablePPG(); + timerPPG = new ScheduledThreadPoolExecutor(10); + timerPPG.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + doPPGtest(); + } + }, 0, 1000, TimeUnit.MILLISECONDS); //1 秒更新一次数据 + + } } } public void stopPPG(){ if( isTimerStarted ) { - timerPPG.shutdownNow(); - timerPPG.purge(); + + int hrsType=ICJniUtils.isPPGavailable(); + if (hrsType == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()) { + mSensorManager.unregisterListener(this); + ICLogger.i( "Heart Rate PPG_EGC_TYPE_IC66 closed"); + }else { + timerPPG.shutdownNow(); + timerPPG.purge(); + } isTimerStarted=false; } ICJniUtils.disablePPG(); @@ -363,5 +394,31 @@ public static void triggerPPGtest(){ return true; } + + @Override + public void onSensorChanged(SensorEvent sensorEvent) { + float values[]=sensorEvent.values; + int length = values.length; + ICLogger.i( "onSensorChanged() is called "+length + +" PPG = "+values[0] + +", BPH = "+values[1] + +", BPL = "+values[2] + +", spo2 = "+values[3] + +" , Weared = "+values[4] + ); + PPG = (int)values[0];//调用底层函数保证状态更新。 + BPH = (int)values[1]; + BPL = (int)values[2]; + SPo2 = (int)values[3]; + isWared = ((int)values[4] == 2); + isPPGTesting = true;// (ICJniUtils.isPPGStarted() == 1); + doPPGtest(); + /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/ + } + + @Override + public void onAccuracyChanged(Sensor sensor, int i) { + ICLogger.i("onAccuracyChanged() is called "+sensor.getName()+" accuracy="+i); + } } diff --git a/app/version_code.properties b/app/version_code.properties index f7f253b8..bb13cba4 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Thu Aug 06 03:19:06 CST 2020 -VERSION_CODE=476 +#Thu Aug 06 09:43:31 CST 2020 +VERSION_CODE=477