-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V57_202104151129_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V57_202104151129_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.1","enabled":true,"outputFile":"IcL02WorkService_V60_202212202120_release.apk","fullName":"IcL02WorkServiceRelease","baseName":"IcL02WorkService-release"},"path":"IcL02WorkService_V60_202212202120_release.apk","properties":{}}]
\ No newline at end of file
productFlavors {
- IcA9WorkService {
- flavorDimensions "IcA9WorkService"
- versionCode 1
- versionName "5.0"
- buildConfigField "int", "productType", "1002"
-
- }
-
- IcAkWorkService {
- flavorDimensions "IcAkWorkService"
- versionCode 1
- versionName "1.0"
- buildConfigField "int", "productType", "1001"
- }
-
IcL02WorkService {
- flavorDimensions "IcAkWorkService"
+ flavorDimensions "IcWorkService"
versionCode 1
versionName "1.1"
buildConfigField "int", "productType", "1003"
+++ /dev/null
-package com.ic.aidl.ak;
-
-public class BloodState {
-
- public static final int BLOOD_NULL_TIPS = -1;
- public static final int BLOOD_NOT_DEVICE = 1001;
-
- public static final int BLOOD_PLEASE_QUIET = 1002;
- public static final int BLOOD_START_CHECK= 1003;
-
- public static final int BLOOD_NOT_WEAR=1004;
- public static final int BLOOD_ING_CHECK=1005;
-
- public static final int BLOOD_STOP_CHECK=1006;
- public static final int BLOOD_NOT_DATA_CHECK=1007;
-}
+++ /dev/null
-// ITempAidlInterface.aidl
-package com.ic.aidl.ak;
-
-// Declare any non-default types here with import statements
-
-interface IAkAidlInterface {
- /**
- * Demonstrates some basic types that you can use as parameters
- * and return values in AIDL.
- */
- void updateBloodCheckResult(int high,int low,int heart,int oxygen);
- void updateBloodCheckTips(int top,int bottom);
- void updatePedCount(int count);
- void updateCurrTempValue(double value,double animal);
- void updateResultTempValue(double value,double animal);
-}
+++ /dev/null
-// ITempRemoteService.aidl
-package com.ic.aidl.ak;
-
-// Declare any non-default types here with import statements
-
-import com.ic.aidl.ak.IAkAidlInterface;
-
-interface IAkRemoteService {
- /**
- * Demonstrates some basic types that you can use as parameters
- * and return values in AIDL.
- */
- void registerCallback(IAkAidlInterface cb);
- void unregisterCallback(IAkAidlInterface cb);
-
- void startCheckBlood();
- void stopCheckBlood();
- void queryPedCount();
-
- void onStartQueryTemp();
- void onStopQueryTemp();
-}
import android.os.RemoteException;
import android.util.Log;
-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.BloodSensorEvent;
import com.ic.work.event.TestTaskEvent;
import com.ic.work.hardware.BloodInfoHelper;
-import com.ic.work.hardware.BloodSensorManager;
import com.ic.work.hardware.TemperatureHelper;
import com.ic.work.utils.ICLogger;
import com.ic.work.utils.ICWorkConstants;
private boolean isRunning = false;
//当前执行的任务
private TestTaskEvent currentTask;
- private BloodSensorManager bloodSensorManager;
private final Object mLock = new Object();
private PowerManager powerManager;
- private PowerManager.WakeLock wakeLock;
+ private PowerManager.WakeLock wakeLock=null;
+
- @Nullable
@Override
public IBinder onBind(Intent intent) {
//兼容旧的
* 根据不同的传感器类型走不同的任务。
* 如果任务超时了,则自动结束任务,执行下一个任务。
*/
- @Subscribe(threadMode = ThreadMode.BACKGROUND)
- public void handleTestEvent(TestTaskEvent testTaskEvent) {
+ @Subscribe(threadMode = ThreadMode.BACKGROUND)
+ public void handleTestEvent(TestTaskEvent testTaskEvent) {
//保持CPU运行
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "ic:sensorDataService");
wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/);
}
- @Subscribe(threadMode = ThreadMode.ASYNC)
- public void onMessageEvent(BloodSensorEvent event) {
- switch (event.type) {
- case 1:
- if (bloodSensorManager == null) {
- bloodSensorManager = new BloodSensorManager();
- }
- bloodSensorManager.createSensorManager(this);
- break;
- case 2:
- bloodSensorManager.unregisterSensorListener();
- break;
- }
- }
- @Subscribe(threadMode = ThreadMode.ASYNC)
- public void onMessageEvent(AkBloodCheckResultEvent event) {
- int[] deviation = getPPG_ECG_adjustValue();
- event.heart = event.heart + deviation[0];
- event.high = event.high + deviation[1];
- event.low = event.low + deviation[2];
- event.oxygen = event.oxygen + deviation[3];
- handleBloodResult(event.high, event.low,
- event.heart, event.oxygen);
- IcLog.d(TAG, "on ak blood test end...");
- checkContinue();
- }
+
private void checkContinue() {
+ if(wakeLock!=null && wakeLock.isHeld())
wakeLock.release();
isRunning = false;
currentTask = null;
import com.ic.work.event.ThreadPoolEvent;
import com.ic.work.event.WeatherAgainEvent;
import com.ic.work.event.WeatherResultEvent;
-import com.ic.work.hardware.A9BloodRunnable;
-import com.ic.work.hardware.AkBloodRunnable;
import com.ic.work.hardware.BeforeDawnRunnable;
-import com.ic.work.hardware.BloodSensorManager;
import com.ic.work.hardware.MessengerCoreService;
import com.ic.work.hardware.PedRecordRunnable;
import com.ic.work.hardware.PedRunnable;
-import com.ic.work.process.AkProcess;
import com.ic.work.process.BloodProcess;
import com.ic.work.process.PedProcess;
import com.ic.work.process.TempProcess;
import static com.ic.work.utils.ICWorkConstants.EventType.STEP_RECORD;
import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
-import static com.ic.work.utils.ICWorkConstants.EventType.TEST_A9_BLOOD;
-import static com.ic.work.utils.ICWorkConstants.EventType.TEST_AK_BLOOD;
import static com.ic.work.utils.ICWorkConstants.EventType.TEST_STEP;
import static com.ic.work.utils.ICWorkConstants.EventType.WEATHER;
import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_HARD_WARE;
-import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_IC_AK;
import static com.ic.work.utils.ICWorkConstants.ServiceType.ACTION_WEATHER;
public class WorkService extends Service {
private TempProcess tempProcess;
private WeatherProcess weatherProcess;
- private AkProcess akProcess;
private WeatherHelper mWeatherHelper;
private LocalDateTime mFinishTime;
- private BloodSensorManager bloodSensorManager;
-
-
@Override
public IBinder onBind(Intent intent) {
if (intent != null) {
case ACTION_HARD_WARE:
//计步
return pedProcess.getPedBinder();
- case ACTION_IC_AK:
- //计步
- return akProcess.getAkBinder();
default:
return null;
}
bloodProcess = new BloodProcess();
pedProcess = new PedProcess();
tempProcess = new TempProcess();
- akProcess = new AkProcess();
mWeatherHelper = new WeatherHelper(mApp.getWeatherRepository(), this);
event.getBottomTips());
}
- if (akProcess != null) {
- akProcess.sendBloodCheckTips(event.getTopTips(), event.getBottomTips());
- }
}
pedProcess.sendPedCount(event.getPedCount());
}
- if (akProcess != null) {
- akProcess.sendPedCount(event.getPedCount());
- }
//发送一次广播给launcher
sendPedCountBroadcast(event.getPedCount());
}
case WEATHER:
ThreadPoolManager.getInstance().execute(new WeatherDBRun(mApp.getWeatherRepository()));
break;
- case TEST_A9_BLOOD:
- ThreadPoolManager.getInstance().execute(new A9BloodRunnable());
- break;
- case TEST_AK_BLOOD:
- ThreadPoolManager.getInstance().execute(new AkBloodRunnable());
- break;
+
}
}
+++ /dev/null
-package com.ic.work.event;
-
-public class AkBloodCheckResultEvent {
- public int high;
- public int low;
- public int heart;
- public int oxygen;
-
- public AkBloodCheckResultEvent(int high, int low, int heart, int oxygen) {
- this.high = high;
- this.low = low;
- this.heart = heart;
- this.oxygen = oxygen;
- }
-}
+++ /dev/null
-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.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;
-
-import org.greenrobot.eventbus.EventBus;
-
-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;
-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;
-
-public class A9BloodRunnable implements Runnable {
-
- private static final String TAG = "BloodRunnable";
-
- @Override
- public void run() {
-
-
- boolean[] deviceState = HardwareUtils.isPPGavailableIc66();
-
- if (!deviceState[0]) {
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
- //add by TrillGates notify task finished.
- EventBus.getDefault().post(new TaskFinishedEvent());
- return;
- }
-
- if (deviceState[1]) {
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
- EventBus.getDefault().post(new BloodSensorEvent(1));
- } else {
- checkBloodOther();
- }
-
- //add by TrillGates notify task finished.
- EventBus.getDefault().post(new TaskFinishedEvent());
- }
-
- 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;
- boolean isSendCheckTips = false;
-
- //开启
- HardwareUtils.onNdkEnablePPG();
-
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
-
- try {
- while (!Thread.currentThread().isInterrupted()) {
-
- if (checkCount >= 25) {
- break;
- }
-
- ndkHeart = HardwareUtils.getNdkPPGValue();
- isWeared = HardwareUtils.isWeared();
-
- IcLog.i(TAG, "Get Heart Value:" + isWeared + ",ndkHeart:" + ndkHeart);
-
- if (!isWeared) {
- break;
- }
-
- if (ndkHeart > 0) {
- ndkHigh = HardwareUtils.getNdkHighBloodValue();
- ndkLow = HardwareUtils.getNdkLowBloodValue();
- oxygen = HardwareUtils.getNdkOxygenValue();
- if (oxygen<=0) oxygen=randomOxygenValue();
- break;
- }
-
- if (!isSendCheckTips) {
- //正在测量中,请稍等
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK);
- isSendCheckTips = true;
- }
-
- checkCount++;
-
- Thread.sleep(1000);
- }
-
- if (!isWeared) {
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
- } else if (ndkHeart == 0) {
- sendTipsEventBus(BLOOD_STOP_CHECK, BLOOD_NOT_DATA_CHECK);
- } else {
- EventBus.getDefault().post(new AkBloodCheckResultEvent(ndkHigh, ndkLow, ndkHeart, oxygen));
- }
-
- HardwareUtils.onNdkDisablePPG();
-
- } catch (InterruptedException e) {
- IcLog.e(TAG, "Stop Get Heart Value", e);
- } catch (Exception ee) {
- } finally {
- HardwareUtils.onNdkDisablePPG();
- }
- }
-
- public int randomOxygenValue() throws Exception {
- int min = 95;
- int max = 100;
- return min + ((int) (new Random().nextFloat() * (max - min)));
- }
-
-}
+++ /dev/null
-package com.ic.work.hardware;
-
-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.TaskFinishedEvent;
-import com.ic.work.utils.HardwareUtils;
-import com.ic.work.utils.IcLog;
-
-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;
-
-public class AkBloodRunnable implements Runnable {
-
- private static final String TAG = "BloodRunnable";
-
- @Override
- public void run() {
- int ndkHeart = 0;
- int ndkHigh = 0;
- int ndkLow = 0;
- int count = 0;
- boolean isSendCheckTips = false;
-
- if (HardwareUtils.isPPGavailable()) {
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
- return;
- }
-
- //开启
- HardwareUtils.onNdkEnablePPG();
-
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK);
-
- try {
- while (!Thread.currentThread().isInterrupted()) {
- ndkHeart = HardwareUtils.getNdkPPGValue();
- if (HardwareUtils.isWeared()) {
- //未佩戴
- if (count > 15) break;
- count++;
- } else {
- if (ndkHeart > 0) {
- //佩戴好,并且已经或到心率的值,则获取低压和高压的值
- ndkHigh = HardwareUtils.getNdkHighBloodValue();
- ndkLow = HardwareUtils.getNdkLowBloodValue();
- //跳出循环,不在获取
- break;
- } else {
- if (!isSendCheckTips) {
- //正在测量中,请稍等
- //sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK);
- isSendCheckTips = true;
- }
- }
- }
- Thread.sleep(1000);
- }
- //add by TrillGates notify task finished.
- EventBus.getDefault().post(new TaskFinishedEvent());
- if (count >= 10) {
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
- } else if (ndkHeart == 0) {
- sendTipsEventBus(BLOOD_STOP_CHECK, BLOOD_NOT_DATA_CHECK);
- } else {
- EventBus.getDefault().post(new AkBloodCheckResultEvent(ndkHigh, ndkLow, ndkHeart, randomOxygenValue()));
- }
-
- HardwareUtils.onNdkDisablePPG();
-
- } catch (InterruptedException e) {
- IcLog.e(TAG, "Stop Get Heart Value", e);
- } catch (Exception ee) {
- } finally {
- HardwareUtils.onNdkDisablePPG();
- }
- }
-
- public int randomOxygenValue() throws Exception {
- int min = 95;
- int max = 100;
- return min + ((int) (new Random().nextFloat() * (max - min)));
- }
-
-
- private void sendTipsEventBus(int top, int bottom) {
- EventBus.getDefault().post(new BloodCheckTipsEvent(top, bottom));
- }
-}
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
-import android.os.Handler;
-import android.os.HandlerThread;
import android.util.Log;
import com.ic.work.WorkServiceApp;
-import com.ic.work.utils.HardwareUtils;
import com.ic.work.utils.ICLogger;
import com.ic.work.utils.IcLog;
private HeartRateInfoChangeListener mListener = null;
- private final Handler ppgLooper;
private long checkBloodStartTime;
private SensorManager mSensorManager;
+ private Sensor mHeartRate;
+ public static int SYSTEM_TEST = SensorManager.SENSOR_DELAY_UI; // 66
+ public static int SYSTEM_TEST_CTR = SensorManager.SENSOR_DELAY_GAME; //20
+ public static int PPG_TEST = SensorManager.SENSOR_DELAY_NORMAL; //200
+ public static int SPO2_TEST = SensorManager.SENSOR_DELAY_FASTEST ; //1
private BloodInfoHelper() {
- //这个Looper专门用来查询数据的
- HandlerThread handlerThread = new HandlerThread("ic:heart-rate-looper");
- handlerThread.start();
- ppgLooper = new Handler(handlerThread.getLooper());
+ mSensorManager = (SensorManager) WorkServiceApp.sContext.getSystemService(SENSOR_SERVICE);
+ mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
}
private static BloodInfoHelper sInstance = null;
public void getBloodInfo() {
ICLogger.d("getBloodInfo...");
- boolean[] deviceState = HardwareUtils.isPPGavailableGH301();
-
- if (!deviceState[0]) {
- IcLog.d(TAG, "deviceState[0] == > false");
- //TODO:这个后面再处理,得给我机器再去处理,没有文档,没有数据
- //sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
- if (mListener != null) {
- mListener.onHeartRateResult(0, 0, 0, 0);
- mListener.onHeartRateTestFinished();
- }
- return;
- }
-
- ICLogger.d("deviceState[1]..." + deviceState[1]);
- if (deviceState[1]) {
- mSensorManager = (SensorManager) WorkServiceApp.sContext.getSystemService(SENSOR_SERVICE);
- Sensor mHeartRate = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
- boolean ret = mSensorManager.registerListener(this, mHeartRate, SensorManager.SENSOR_DELAY_FASTEST);
- Log.d(TAG, "ret == > " + ret);
+ boolean ret = mSensorManager.registerListener(this, mHeartRate, PPG_TEST);
+ Log.d(TAG, "ret == > " + ret);
+ if(ret) {
//TODO:这个是走官方API的,也得有机器再进行修改代码
//sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
// EventBus.getDefault().post(new BloodSensorEvent(1));
+ //这部分代码要做超时处理{
+ getPPGStartTime = System.currentTimeMillis();
+ checkBloodStartTime = System.currentTimeMillis();
+ IcLog.d(TAG, "start time == > " + checkBloodStartTime);
+ ndkHeart = 0;
+ ndkHigh = 0;
+ ndkLow = 0;
+ oxygen = 0;
+ checkCount = 0;
+ noWearCount = 0;
+ invalidateTime = 0;
} else {
//这个走JNI获取数据的,完成了
- checkBloodOther();
+ ICLogger.e("No Blood sensor ");
}
}
+
private int ndkHeart = 0;
private int ndkHigh = 0;
private int ndkLow = 0;
private int oxygen = 0;
private int checkCount = 0;
private int noWearCount = 0;
-
private boolean isWear;
private int invalidateTime = 0;
+ private long getPPGStartTime = 0;
- private void checkBloodOther() {
- checkBloodStartTime = System.currentTimeMillis();
- IcLog.d(TAG, "start time == > " + checkBloodStartTime);
- ndkHeart = 0;
- ndkHigh = 0;
- ndkLow = 0;
- oxygen = 0;
- checkCount = 0;
- noWearCount = 0;
- invalidateTime = 0;
- //开启
- HardwareUtils.onNdkEnablePPG();
- //推迟1秒去测试数据
- //测试数据是一个循环,有三种情况
- //- 没有穿戴,如果超过20秒没有穿戴,那么就结束此次测试
- //- 数据测试结果为0,如果连续20个数据为0,那么就结束此次测试
- //- 有数据以后,连续测上10次,就可以返回结果了
- ppgLooper.postDelayed(this::checkWear, 1000);
- }
- private void checkWear() {
- IcLog.d(TAG, "checkWear...");
- //测试数据是一个循环,有三种情况
- //- 没有穿戴,如果超过20秒没有穿戴,那么就结束此次测试
- //- 20秒内有穿戴,则开始测试
- ppgLooper.post(new Runnable() {
- @Override
- public void run() {
- ndkHeart = HardwareUtils.getNdkPPGValue();
- isWear = HardwareUtils.isWeared();
- IcLog.d(TAG, "isWear == > " + isWear);
- if (!isWear) {
- //延时1秒进行检查
- noWearCount++;
- IcLog.d(TAG, "noWearCount == > " + noWearCount);
- if (noWearCount <= 20) {
- ppgLooper.postDelayed(this, 1000);
- } else {
- handleResult();
- }
- } else {
- noWearCount = 0;
- //开始去检测了
- doTest();
- }
- }
- });
- }
-
- //- 数据测试结果为0,如果连续20个数据为0,那么就结束此次测试
- //- 有数据以后,连续测上10次,就可以返回结果了
- private void doTest() {
- ppgLooper.post(new Runnable() {
- @Override
- public void run() {
- //这部分代码要做超时处理{
- long getPPGStartTime = System.currentTimeMillis();
- ndkHeart = HardwareUtils.getNdkPPGValue();
- if (ndkHeart > 0) {
- ndkHigh = HardwareUtils.getNdkHighBloodValue();
- ndkLow = HardwareUtils.getNdkLowBloodValue();
- oxygen = HardwareUtils.getNdkOxygenValue();
- if (oxygen <= 0) oxygen = randomOxygenValue();
- if (mListener != null) {
- IcLog.d(TAG, "ndkHigh == > " + ndkHigh + "ndkLow == > " + ndkLow + "oxygen == > " + oxygen);
- mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
- }
- checkCount++;
- IcLog.d(TAG, "checkCount == > " + checkCount);
- if (checkCount <= 10) {
- //继续测试
- ppgLooper.postDelayed(this, 1000);
- } else {
- handleResult();
- }
- IcLog.d(TAG, "use time == > " + (System.currentTimeMillis() - getPPGStartTime));
- } else {
- //如果为0的话,记录下来
- invalidateTime++;
- IcLog.d(TAG, "invalidateTime == > " + invalidateTime);
- if (invalidateTime <= 30) {
- ppgLooper.postDelayed(this, 1000);
- } else {
- handleResult();
- }
- }
- }
- });
- }
private void handleResult() {
if (mListener != null) {
}
try {
IcLog.d(TAG, "disable ppg..");
- HardwareUtils.onNdkDisablePPG();
+ mSensorManager.unregisterListener(this);
} catch (Exception e) {
IcLog.e(TAG, "Stop Get Heart Value", e);
}
} else {
Log.d(TAG, "on sensor change == > PPG= " + values[0]);
}
+ ndkHeart = (int) values[0];
+ isWear = (int)values[4] > 1;
+ IcLog.d(TAG, "isWear == > " + isWear);
+ if (!isWear) {
+ //延时1秒进行检查
+ noWearCount++;
+ IcLog.d(TAG, "noWearCount == > " + noWearCount);
+ if (noWearCount > 20) {
+ handleResult();
+ }
+ } else {
+ noWearCount = 0;
+ //开始去检测了
+ }
+
+ if (ndkHeart > 0) {
+ ndkHigh = (int)values[1];
+ ndkLow = (int)values[2];
+ oxygen = (int)values[3];
+ if (oxygen <= 0) oxygen = randomOxygenValue();
+ if (mListener != null) {
+ IcLog.d(TAG, "ndkHigh == > " + ndkHigh + "ndkLow == > " + ndkLow + "oxygen == > " + oxygen);
+ mListener.onHeartRateUpdate(ndkHigh, ndkLow, ndkHeart, oxygen);
+ }
+ checkCount++;
+ IcLog.d(TAG, "checkCount == > " + checkCount);
+ if (checkCount <= 10) {
+ //继续测试
+ } else {
+ handleResult();
+ }
+ IcLog.d(TAG, "use time == > " + (System.currentTimeMillis() - getPPGStartTime));
+ } else {
+ //如果为0的话,记录下来
+ invalidateTime++;
+ IcLog.d(TAG, "invalidateTime == > " + invalidateTime);
+ if (invalidateTime <= 30) {
+ } else {
+ handleResult();
+ }
+ }
}
@Override
+++ /dev/null
-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;
-
-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;
-
-public class BloodRunnable implements Runnable {
-
- private static final String TAG = "BloodRunnable";
-
- @Override
- public void run() {
-
- boolean[] deviceState = HardwareUtils.isPPGavailableIc66();
-
- if (!deviceState[0]) {
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_DEVICE);
- //add by TrillGates notify task finished.
- EventBus.getDefault().post(new TaskFinishedEvent());
- return;
- }
-
- if (deviceState[1]) {
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
- EventBus.getDefault().post(new BloodSensorEvent(1));
- } else {
- checkBloodOther();
- }
- //add by TrillGates notify task finished.
- EventBus.getDefault().post(new TaskFinishedEvent());
- }
-
- 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();
-
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_START_CHECK);
-
- try {
- while (!Thread.currentThread().isInterrupted()) {
- ndkHeart = HardwareUtils.getNdkPPGValue();
- 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();
- oxygen = HardwareUtils.getNdkOxygenValue();
- if (oxygen <= 0) oxygen = randomOxygenValue();
- EventBus.getDefault().post(new BloodCheckTempEvent(ndkHigh, ndkLow, ndkHeart, oxygen));
-
- //测试到数据30秒后停止测量
- if (checkCount >= 30) {
- break;
- }
- checkCount++;
- }
-
- if (!isSendCheckTips) {
- //正在测量中,请稍等
- sendTipsEventBus(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK);
- isSendCheckTips = true;
- }
- }
-
-
- Thread.sleep(1000);
- }
-
- 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, oxygen));
- }
-
- HardwareUtils.onNdkDisablePPG();
-
- } catch (InterruptedException e) {
- IcLog.e(TAG, "Stop Get Heart Value", e);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- IcLog.d(TAG, "disable ppg..");
- HardwareUtils.onNdkDisablePPG();
- }
- }
-
- public int randomOxygenValue() throws Exception {
- int min = 95;
- int max = 100;
- return min + ((int) (new Random().nextFloat() * (max - min)));
- }
-
-}
+++ /dev/null
-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.BloodCheckTipsEvent;
-import com.ic.work.event.BloodSensorEvent;
-import com.ic.work.utils.IcLog;
-
-import org.greenrobot.eventbus.EventBus;
-
-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_WEAR;
-import static com.ic.aidl.blood.BloodState.BLOOD_NULL_TIPS;
-import static com.ic.aidl.blood.BloodState.BLOOD_PLEASE_QUIET;
-
-public class BloodSensorManager {
-
- private static final String TAG ="BloodSensorManager";
-
- private SensorManager sensorManager;
-
- public void createSensorManager(Context context){
- if(sensorManager == null){
- sensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
- }
- Sensor mHeartRate = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
- sensorManager.registerListener(sensorEventListener, mHeartRate, SensorManager.SENSOR_DELAY_UI);
-
- EventBus.getDefault().post(new BloodCheckTipsEvent(BLOOD_PLEASE_QUIET, BLOOD_ING_CHECK));
- }
-
- public void unregisterSensorListener(){
- sensorManager.unregisterListener(sensorEventListener);
- }
-
- private final SensorEventListener sensorEventListener = new SensorEventListener() {
-
- @Override
- public void onSensorChanged(SensorEvent sensorEvent) {
- float values[] = sensorEvent.values;
- /*[0]---心率;[1]---血压高压;[2]---血压低压;[3]---血氧;[4]---佩戴检测(1--脱手,2--上手);*/
- IcLog.i(TAG, "Weared= " + values[4] +
- " ,BPH= " + values[1] +
- " ,BPL= " + values[2] +
- " ,PPG= " + values[0] +
- ", spo2= " + values[3]);
-
- if (values[4] == 2 && values[0] > 0) {
- //结果检测出来后停止检测
- EventBus.getDefault().post(new AkBloodCheckResultEvent(
- (int) values[1],
- (int) values[2],
- (int) values[0],
- (int) values[3]));
-
- EventBus.getDefault().post(new BloodSensorEvent(2));
- }else if(values[4] == 1){
- sendTipsEventBus(BLOOD_NULL_TIPS, BLOOD_NOT_WEAR);
- EventBus.getDefault().post(new BloodSensorEvent(2));
- }
- }
-
- @Override
- public void onAccuracyChanged(Sensor sensor, int i) {
- }
- };
-
- private void sendTipsEventBus(int top, int bottom) {
- EventBus.getDefault().post(new BloodCheckTipsEvent(top, bottom));
- }
-}
package com.ic.work.hardware;
import android.content.Context;
+import android.hardware.SensorManager;
+import com.ic.jni.ICJniUtils;
import com.ic.work.db.PedInjection;
import com.ic.work.event.PedCountEvent;
import com.ic.work.event.TaskFinishedEvent;
-import com.ic.work.utils.HardwareUtils;
import com.ic.work.utils.IcLog;
import org.greenrobot.eventbus.EventBus;
private static final String TAG = "PedRunnable";
+ public static int CLEAR_STEPCOUNT = SensorManager.SENSOR_DELAY_UI;// 66
+ public static int STEPCOUNT = SensorManager.SENSOR_DELAY_NORMAL;//200
+
public PedRunnable(Context context, PedInjection pedDB) {
super(context, pedDB);
}
@Override
public void run() {
- int ped = HardwareUtils.getNdkStepCountValue();
+ int ped = ICJniUtils.getStepCount();
IcLog.i(TAG, "Get Ped Count" + ped);
//发送给主线程。主线更新数据UI
EventBus.getDefault().post(new PedCountEvent(ped));
package com.ic.work.hardware;
-import android.os.SystemClock;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.util.Log;
-import com.ic.jni.ICJniUtils;
-import com.ic.work.domain.TemperatureItem;
-import com.ic.work.utils.HardwareUtils;
+import com.ic.work.WorkServiceApp;
import com.ic.work.utils.ICLogger;
import com.ic.work.utils.IcLog;
import com.ic.work.utils.TemperatureUtil;
+import static android.content.Context.SENSOR_SERVICE;
+
/**
* 获取温度的工具类
*/
-public class TemperatureHelper {
+public class TemperatureHelper implements SensorEventListener {
private static final String TAG = "TemperatureHelper";
private TemperatureChangeListener mListener = null;
private double lastTempOut = 0.0;
private double lastBodyTemp = 0.0;
private double lastWristTemp = 0.0;
- private int delayTimesInSeconds = 20;
-
+ private final int DefaultDelayTimesInSeconds = 5;
+ private int delayTimesInSeconds = DefaultDelayTimesInSeconds;
+ private SensorManager mSensorManager ;
+ private Sensor mSensorTemp;
+ private long getTempStartTime=0;
public void getTemperature() {
- long start = System.currentTimeMillis();
+
+ getTempStartTime = System.currentTimeMillis();
lastTempOut = 0.0;
lastBodyTemp = 0.0;
lastWristTemp = 0.0;
- delayTimesInSeconds = 20;
- int typeOrder = HardwareUtils.isTemperatureDevAvailable();
- IcLog.i(TAG, "TemperatureRunnable type order:" + typeOrder);
- if (typeOrder > ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal()) { //have temp
- try {
- IcLog.i(TAG, "getNdkTemperatureValue enableTemperature");
- HardwareUtils.disablePedometer();
- if (HardwareUtils.enableTemperature()) {
- IcLog.i(TAG, "getNdkTemperatureValue enableTemperature");
- SystemClock.sleep(1000);
- }
- do {
- IcLog.d(TAG, "do temperature....");
- SystemClock.sleep(1000);
- long getStartTime = System.currentTimeMillis();
- TemperatureItem temperatureItem = null;
- if (typeOrder == ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_IC68.ordinal()) {
- //IC68走这个
- IcLog.d(TAG, "type is == > IC68");
- temperatureItem = TemperatureUtil.doTempTest();
- if (temperatureItem != null) {
- lastWristTemp = Double.parseDouble(temperatureItem.getBodyTemp());
- lastTempOut = Double.parseDouble(temperatureItem.getEvnTemp());
- }
- } else if (typeOrder == ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_EM7068.ordinal()) {
- IcLog.d(TAG, "type is == > 7068");
- lastWristTemp = HardwareUtils.getNdkTemperatureValue();
- lastTempOut = HardwareUtils.getNdkTemperatureOutValue();
- }
- if (lastTempOut > 60 || lastTempOut < 1) {
- lastTempOut = 0.0f;
- }
- if (lastTempOut > 0.0f) {
- lastBodyTemp = TemperatureUtil.getBodyTemp(lastWristTemp, lastTempOut);
- } else {
- lastBodyTemp = TemperatureUtil.getBodyTemp(lastWristTemp, 26.0f);
- }
- IcLog.d(TAG, "testing..." + lastWristTemp + " " + lastBodyTemp + " " + lastTempOut);
- //前10秒不更新内容,后10秒再更新数据
- if (delayTimesInSeconds <= 10 && mListener != null) {
- IcLog.d(TAG, "update temperature info..thread name is ." + Thread.currentThread().getName());
- //获取
- IcLog.d(TAG, "lastWristTemp == > " + lastWristTemp);
- IcLog.d(TAG, "lastBodyTemp == > " + lastBodyTemp);
- IcLog.d(TAG, "lastTempOut == > " + lastTempOut);
- mListener.onTemperatureUpdate(lastWristTemp, lastBodyTemp, lastTempOut);
+ delayTimesInSeconds = DefaultDelayTimesInSeconds;
+ IcLog.i(TAG, "getTemperature ..." );
+ mSensorManager = (SensorManager) WorkServiceApp.sContext.getSystemService(SENSOR_SERVICE);
+ mSensorTemp = mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE);
+ boolean ret = mSensorManager.registerListener(this, mSensorTemp, SensorManager.SENSOR_DELAY_NORMAL);
+ Log.d(TAG, "ret == > " + ret);
+
+ }
+
+ public void setTemperatureChangeListener(TemperatureChangeListener listener) {
+ this.mListener = listener;
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent sensorEvent) {
+ float values[] = sensorEvent.values;
+ int length = values.length;
+ if(sensorEvent.sensor.getType() == Sensor.TYPE_TEMPERATURE) {
+ IcLog.d(TAG, "type is == >" + sensorEvent.sensor.getName());
+ lastWristTemp = values[0] / 100.0f;
+ lastTempOut = values[1] / 100.0f;
+ Log.d(TAG, "on sensor change == > lastWristTemp= " + lastWristTemp + " lastTempOut=" + lastTempOut);
+
+/*
+
+ TemperatureItem temperatureItem = null;
+ temperatureItem = TemperatureUtil.doTempTest();
+ if (temperatureItem != null) {
+ lastWristTemp = Double.parseDouble(temperatureItem.getBodyTemp());
+ lastTempOut = Double.parseDouble(temperatureItem.getEvnTemp());
}
- ICLogger.d("get temperature data use time == > " + (System.currentTimeMillis() - getStartTime));
-
- delayTimesInSeconds--;
- IcLog.d(TAG, "delayTimesInSeconds " + delayTimesInSeconds);
- //延时delay_times_in_seconds秒后停止检测。
- } while (delayTimesInSeconds > 0);
- } catch (Exception e) {
- IcLog.e(TAG, "TemperatureRunnable :", e);
- } finally {
- HardwareUtils.disableTemperature();
- IcLog.i(TAG, "disableTemperature !");
- //如果不关掉其他的计步的服务,读取数据会不准。
- HardwareUtils.enablePedometer();
+
+ */
+
+ if (lastTempOut > 60 || lastTempOut < 1) {
+ lastTempOut = 0.0f;
}
+ if (lastTempOut > 0.0f) {
+ lastBodyTemp = TemperatureUtil.getBodyTemp(lastWristTemp, lastTempOut);
+ } else {
+ lastBodyTemp = TemperatureUtil.getBodyTemp(lastWristTemp, 26.0f);
+ }
+ IcLog.d(TAG, "testing..." + lastWristTemp + " " + lastBodyTemp + " " + lastTempOut);
+ //前10秒不更新内容,后10秒再更新数据
+ if (delayTimesInSeconds <= 10 && mListener != null) {
+ IcLog.d(TAG, "update temperature info..thread name is ." + Thread.currentThread().getName());
+ //获取
+ IcLog.d(TAG, "lastWristTemp == > " + lastWristTemp);
+ IcLog.d(TAG, "lastBodyTemp == > " + lastBodyTemp);
+ IcLog.d(TAG, "lastTempOut == > " + lastTempOut);
+ mListener.onTemperatureUpdate(lastWristTemp, lastBodyTemp, lastTempOut);
+ }
+ ICLogger.d("get temperature data use time == > " + (System.currentTimeMillis() - getTempStartTime));
+
+ delayTimesInSeconds--;
+ IcLog.d(TAG, "delayTimesInSeconds " + delayTimesInSeconds);
+ if (delayTimesInSeconds <= 0) {
+ if (mListener != null) {
+ ICLogger.d("result == >lastWristTemp " + lastWristTemp + " lastBodyTemp" + lastBodyTemp + " lastTempOut" + lastTempOut);
+ mSensorManager.unregisterListener(this);
+ mListener.onTemperatureResult(lastWristTemp, lastBodyTemp, lastTempOut);
+ }
+ }
}
- if (mListener != null) {
- ICLogger.d("result == >lastWristTemp " + lastWristTemp + " lastBodyTemp" + lastBodyTemp + " lastTempOut" + lastTempOut);
- mListener.onTemperatureResult(lastWristTemp, lastBodyTemp, lastTempOut);
- }
- IcLog.d(TAG, "temp use time == > " + (System.currentTimeMillis() - start));
}
- public void setTemperatureChangeListener(TemperatureChangeListener listener) {
- this.mListener = listener;
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int i) {
+
}
public interface TemperatureChangeListener {
void onTemperatureUpdate(double wristTemp, double bodyTemp, double envTemp);
void onTemperatureResult(double wristTemp, double bodyTemp, double envTemp);
+
}
}
+++ /dev/null
-package com.ic.work.hardware;
-
-
-import com.ic.work.domain.TemperatureItem;
-import com.ic.work.event.TaskFinishedEvent;
-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 TemperatureRunnable implements Runnable {
- private static final String TAG = "TemperatureRunnable";
-
- @Override
- public void run() {
-
- }
-}
+++ /dev/null
-package com.ic.work.process;
-
-import android.os.IBinder;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-
-import com.ic.aidl.ak.IAkAidlInterface;
-import com.ic.aidl.ak.IAkRemoteService;
-import com.ic.work.event.ThreadPoolEvent;
-import com.ic.work.utils.IcLog;
-import com.ic.work.utils.IcSystemProperty;
-
-import org.greenrobot.eventbus.EventBus;
-
-import static com.ic.work.utils.ICWorkConstants.EventType.STOP_ALL_TASK;
-import static com.ic.work.utils.ICWorkConstants.EventType.TEST_A9_BLOOD;
-import static com.ic.work.utils.ICWorkConstants.EventType.TEST_AK_BLOOD;
-import static com.ic.work.utils.ICWorkConstants.EventType.TEST_TEMPERATURE;
-
-
-public class AkProcess {
- private static final String TAG = "BloodProcess";
-
- private RemoteCallbackList<IAkAidlInterface> mCallbacks = new RemoteCallbackList<>();
-
- public IBinder getAkBinder() {
- return akBinder;
- }
-
- private IAkRemoteService.Stub akBinder = new IAkRemoteService.Stub() {
- @Override
- public void registerCallback(IAkAidlInterface cb) throws RemoteException {
- if (cb != null) {
- mCallbacks.register(cb);
- }
- }
-
- @Override
- public void unregisterCallback(IAkAidlInterface cb) throws RemoteException {
- if (cb != null) {
- mCallbacks.unregister(cb);
- }
- }
-
- @Override
- public void startCheckBlood() throws RemoteException {
-
- String CUSTOM_NAME = IcSystemProperty.getSystemProperties("persist.sys.customname", "");
-
- if (CUSTOM_NAME.equals("AK")) {
- //ak
- EventBus.getDefault().post(new ThreadPoolEvent(TEST_AK_BLOOD));
- } else {
- //a9
- EventBus.getDefault().post(new ThreadPoolEvent(TEST_A9_BLOOD));
- }
- }
-
- @Override
- public void stopCheckBlood() throws RemoteException {
- EventBus.getDefault().post(new ThreadPoolEvent(STOP_ALL_TASK));
- }
-
- @Override
- public void queryPedCount() throws RemoteException {
- EventBus.getDefault().post(new ThreadPoolEvent(1));
- }
-
- @Override
- public void onStartQueryTemp() throws RemoteException {
- EventBus.getDefault().post(new ThreadPoolEvent(TEST_TEMPERATURE));
- }
-
- @Override
- public void onStopQueryTemp() throws RemoteException {
- EventBus.getDefault().post(new ThreadPoolEvent(STOP_ALL_TASK));
- }
- };
-
- 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, oxygen);
- }
- } catch (NullPointerException e) {
- IcLog.e(TAG, "", e);
- } catch (RemoteException er) {
- IcLog.e(TAG, "", er);
- } finally {
- try {
- if (N > 0) {
- mCallbacks.finishBroadcast();
- }
- } catch (IllegalArgumentException ll) {
- IcLog.e(TAG, "", ll);
- }
- }
- }
-
- public void sendBloodCheckTips(int top, int bottom) {
- int N = 0;
- try {
- N = mCallbacks.beginBroadcast();
- for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updateBloodCheckTips(top, bottom);
- }
- } catch (NullPointerException e) {
- IcLog.e(TAG, "", e);
- } catch (RemoteException er) {
- IcLog.e(TAG, "", er);
- } finally {
- try {
- if (N > 0) {
- mCallbacks.finishBroadcast();
- }
- } catch (IllegalArgumentException ll) {
- IcLog.e(TAG, "", ll);
- }
- }
- }
-
- public void sendPedCount(int count) {
- int N = 0;
- try {
- N = mCallbacks.beginBroadcast();
- for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updatePedCount(count);
- }
- } catch (NullPointerException e) {
- IcLog.e(TAG, "", e);
- } catch (RemoteException er) {
- IcLog.e(TAG, "", er);
- } finally {
- try {
- if (N > 0) {
- mCallbacks.finishBroadcast();
- }
- } catch (IllegalArgumentException ll) {
- IcLog.e(TAG, "", ll);
- }
- }
- }
-
- public void sendCurrTempValue(double value, double animal) {
- int N = 0;
- try {
- N = mCallbacks.beginBroadcast();
- for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updateCurrTempValue(value, animal);
- }
- } catch (NullPointerException e) {
- IcLog.e(TAG, "", e);
- } catch (RemoteException er) {
- IcLog.e(TAG, "", er);
- } finally {
- try {
- if (N > 0) {
- mCallbacks.finishBroadcast();
- }
- } catch (IllegalArgumentException ll) {
- IcLog.e(TAG, "", ll);
- }
- }
- }
-
- public void sendResultTempValue(double value, double animal) {
- int N = 0;
- try {
- N = mCallbacks.beginBroadcast();
- for (int i = 0; i < N; i++) {
- mCallbacks.getBroadcastItem(i).updateResultTempValue(value, animal);
- }
- } catch (NullPointerException e) {
- IcLog.e(TAG, "", e);
- } catch (RemoteException er) {
- IcLog.e(TAG, "", er);
- } finally {
- try {
- if (N > 0) {
- mCallbacks.finishBroadcast();
- }
- } catch (IllegalArgumentException ll) {
- IcLog.e(TAG, "", ll);
- }
- }
- }
-
-}
+++ /dev/null
-package com.ic.work.utils;
-
-import com.ic.jni.ICJniUtils;
-
-public class HardwareUtils {
-
- private static final String TAG = "HardwareUtils";
-
- public static boolean[] isPPGavailableIc66() {
- try {
- int value = ICJniUtils.isPPGavailable();
- return new boolean[]{
- value > ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_NONE.ordinal(),
- value == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_IC66.ordinal()
- };
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return new boolean[]{false, false};
- }
- }
-
- public static boolean[] isPPGavailableGH301() {
- try {
- int value = ICJniUtils.isPPGavailable();
- return new boolean[]{
- value > ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_NONE.ordinal(),
- value == ICJniUtils.PPG_EGC_SensorType.PPG_EGC_TYPE_GH301.ordinal()
- };
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return new boolean[]{false, false};
- }
- }
-
- public static boolean isPPGavailable() {
- try {
- int value = ICJniUtils.isPPGavailable();
- return value == 0;
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return true;
- }
- }
-
- public static void onNdkEnablePPG() {
- try {
- ICJniUtils.enablePPG();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- }
- }
-
- public static void onNdkDisablePPG() {
- try {
- ICJniUtils.disablePPG();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- }
- }
-
- public static boolean isWeared() {
- try {
- int value = ICJniUtils.isWeared();
- return value == 1;
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return true;
- }
- }
-
- public static int getNdkPPGValue() {
- try {
- return ICJniUtils.getPPG();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int getNdkHighBloodValue() {
- try {
- return ICJniUtils.getHighBloodPressure();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int getNdkLowBloodValue() {
- try {
- return ICJniUtils.getLowBloodPressure();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int getNdkOxygenValue() {
- try {
- return ICJniUtils.getSPO2();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int getNdkStepCountValue() {
- try {
- return ICJniUtils.getStepCount();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int resetNdkStepCountValue() {
- try {
- return ICJniUtils.resetStepCount();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int enablePedometer() {
- try {
- return ICJniUtils.enablePedometer();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int disablePedometer() {
- try {
- return ICJniUtils.disablePedometer();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static int isTemperatureDevAvailable() {
- try {
- return ICJniUtils.isTemperatureDevAvailable();
- } catch (Exception e) {
- e.printStackTrace();
- return ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal();
- }
- }
-
- public static double getNdkTemperatureValue() {
- try {
- return ICJniUtils.getTemperature();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static double getNdkTemperatureOutValue() {
- try {
- double temperatureOrigin = ICJniUtils.getTemperatureOrigin();
- IcLog.d(TAG, "getNdkTemperatureOutValue... " + temperatureOrigin);
- return temperatureOrigin;
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static double getBodyTempFromWristTemp(double wrist_temp, double ref_temp) {
- try {
- return ICJniUtils.getBodyTempFromWristTemp(wrist_temp, ref_temp);
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return 0;
- }
- }
-
- public static boolean isTemperatureDevOpened() {
- try {
- return ICJniUtils.isTemperatureDevOpened() == 0;
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return false;
- }
- }
-
- public static boolean enableTemperature() {
- int ret = 0;
- try {
- ret = ICJniUtils.enableTemperature();
- IcLog.d(TAG, "enableTemperature ret " + ret);
- return ret > 0;
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- return false;
- }
- }
-
- public static void disableTemperature() {
- try {
- ICJniUtils.disableTemperature();
- } catch (Exception e) {
- IcLog.e(TAG, "", e);
- }
- }
-
-
-}
int TEST_TEMPERATURE = 6;
//血氧
int TEST_BLOOD = 3;
- //A9的心率
- int TEST_A9_BLOOD = 7;
- //AK的心率
- int TEST_AK_BLOOD = 8;
+
//删除所有的任务
int STOP_ALL_TASK = 4;
}
private static double tempOut_value = 0.0f;
public static double get_tempOut_value_origin() {
- tempOut_value = ICJniUtils.getTemperatureOrigin();
+ tempOut_value = 0.0;//ICJniUtils.getTemperatureOrigin();
Log.i(TAG, "测量环境温度 原始值 " + tempOut_value);
return tempOut_value;
}
public static double get_temp_value_adjusted() {
- temp_value_orig = ICJniUtils.getTemperature();
+ temp_value_orig = 0.0;//ICJniUtils.getTemperature();
Log.i(TAG, "测量体温 原始值 " + temp_value_orig);
return temp_value_orig;
}
* 这里获取到CPU温度,主板温度,体温,外温的数据,然后写到log里,后面转成数据表,再转成函数表达式。
*/
public static TemperatureItem doTempTest() {
- if (ICJniUtils.isTemperatureDevAvailable() > ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal()) {
+ // if (ICJniUtils.isTemperatureDevAvailable() > ICJniUtils.TempSensorType.TEMPSENSOR_TYPE_NONE.ordinal()) {
double bodyTemp/*体温*/ = 0.0f;
double cpuTemp/*cpu温度*/ = 0.0f;
} catch (Exception e) {
e.printStackTrace();
}
- }
+ //}
return null;
}
}
#Thu Jul 16 16:46:05 CST 2020
-VERSION_CODE=57
+VERSION_CODE=60