final static String KeySMSPassword="SMSPWD";\r
final static String DefaultSMSPassword="non";\r
\r
+ final static String KeyTempTestCycle="TempTestCycle";\r
\r
public static String DefaultHost(){\r
if (protocol_no==PROTOCOL_BEEHOME)\r
SharPreferenceUtil.setPrefString(context,KeyLogFtpPWD,PWD);\r
}\r
\r
-\r
- public static double getTempAdjustValue(){\r
-\r
- String tmpstr=FileUtil.readFileLine(new File("/productinfo/temp_adjust_37.txt"));\r
-\r
- double tmp=0.0f;\r
-\r
- if (tmpstr==null || tmpstr.isEmpty())\r
- {\r
- tmpstr="0.0";\r
- }\r
- tmp=Double.valueOf(tmpstr);\r
-\r
- ICLogger.i("get Temperature Adjust Value from /productinfo/temp_adjust_37.txt , value="+tmpstr);\r
- return tmp;\r
-\r
- }\r
-\r
-\r
public static void setAlarmCycle(Context context, int cycle){\r
SharPreferenceUtil.setPrefInt(context,KeyAlarmCycle,cycle);\r
}\r
noSMSNotifyDialog=true;\r
noVoiceNotifyDialog=true;\r
}\r
+ String c41_branch_name=Util.getSystemProperties("persist.sys.c41.branch");\r
+\r
+ if ((c41_branch_name.equals("H88")) ){\r
+ noPushTxtNotifyDialog=true;\r
+ noSMSNotifyDialog=false;\r
+ noVoiceNotifyDialog=false;\r
+ }\r
+\r
+ }\r
+\r
+ public static void loadTemperatureSettings(Runtime runtime){\r
+ runtime.temp_test_Cycle = SharPreferenceUtil.getPrefInt(runtime.getContextProxy().context, KeyTempTestCycle, 30);\r
+ }\r
\r
+ public static void setTemperatureTestCycle(Runtime runtime,int cycle_minutes) {\r
+ SharPreferenceUtil.setPrefInt(runtime.getContextProxy().context,KeyLocationCycle,cycle_minutes);\r
+ loadTemperatureSettings(runtime);\r
}\r
- public static boolean isUsingCustomServer=false;\r
+ public static boolean isUsingCustomServer=false;\r
\r
public static void setCustomServer(Context context,boolean isusingCutomerServer,String serverip,int serverport) {\r
\r
import android.os.SystemClock;\r
import android.widget.Toast;\r
\r
+import com.enqualcomm.support.service.AntiMonitorService;\r
import com.enqualcomm.support.utils.DeviceInfoUtil;\r
import com.enqualcomm.support.utils.LedUtil;\r
import com.enqualcomm.support.utils.StorageUtils;\r
+import com.enqualcomm.support.utils.TemperatureUtil;\r
import com.enqualcomm.support.utils.VibrateUtil;\r
import com.ic.jni.ICJniUtils;\r
import com.enqualcomm.support.adapter.LBSHelper;\r
setHeartRateDetectAlarm(runtime.getPpgTestCycle());\r
HeartRateManager.triggerPPGtest();\r
\r
- runtime.setAlarmType(false,runtime.getBatteryLow(),true,false);\r
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_SOS);\r
//trigger AP10 报警定位\r
// CoreService.this.locationClient.triggerSOSLocationProcess();\r
connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(runtime)));\r
\r
private boolean isBinded = false;\r
\r
-\r
+ private AntiMonitorService antiservice;\r
LocationClient locationClient;\r
\r
private Deliver mDeliver;\r
ICLogger.i("getInvokeHandlerServiceChain");\r
SendChatMessage sendChatMessage = new SendChatMessage();\r
HeartRateManager heartRateManager= new HeartRateManager(this.runtime,this.connection);\r
+ antiservice = new AntiMonitorService();\r
SilentManager silentManager = SilentManager.getInstance();// new SilentManager();\r
sendChatMessage.setNext(heartRateManager);\r
heartRateManager.setNext(silentManager);\r
+ silentManager.setNext(antiservice);\r
return sendChatMessage;\r
}\r
\r
\r
\r
//初始化温度测试相关参数\r
- runtime.temperature_adjustValue=Config.getTempAdjustValue();\r
-\r
+ runtime.temperature_adjustValue= TemperatureUtil.getTempAdjustValue();\r
+ Config.loadTemperatureSettings(runtime);\r
\r
this.connectionServiceChain.processAttach(this.connection, this.runtime);\r
this.invokeHandlerServiceChain.processAttach(this.connection, this.runtime);\r
needLocateInAfterHeartBeat=true;\r
setLocationAlarm(runtime.getLocationInstance().getWorkingMod());\r
\r
+ //设置温度测量间隔时间\r
+ setTempAlarm();\r
\r
//设置来电模式\r
SimSignalUtil.SetRingMode(this, AudioManager.RINGER_MODE_NORMAL,true);\r
\r
if (connection.isServerConnected() && runtime.isServerProtocolConnected()) {\r
//测试温度并上报\r
-\r
+ String temperatureMsg=protocolAPIHelper.getTemperatureMSG(TemperatureUtil.get_temp_value_adjusted());\r
+ Deliver.sendLocationMSG(temperatureMsg);\r
}\r
setTempAlarm();\r
if (Config.LOG_TOFILE)\r
StringBuilder sb=new StringBuilder();\r
int cycle=runtime.temp_test_Cycle;\r
\r
- //心跳指令默认设置为3分钟\r
AlarmHelper.setRealTimeAlarm(runtime.getContextProxy().context,cycle, TEMP_ALARM);\r
sb.append(" setHeartAlarm "+TEMP_ALARM+", cycle "+cycle);\r
// locationClient.triggerLocationProcess();\r
// connection.send(API.H05(runtime, "1"));\r
ICLogger.i("sendBatteryNotification Low Battery ");\r
\r
- runtime.setAlarmType(false,runtime.getBatteryLow(),false,false);\r
- //trigger AP10 报警低电\r
- connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(runtime)));\r
+ if (runtime.getBatteryLow()) {\r
+ runtime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);\r
+ //trigger AP10 报警低电\r
+ connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(runtime)));\r
+ }\r
\r
this.batteryLowNotification = true;\r
}\r
return alarmType;\r
}\r
\r
+ public enum AlarmType{\r
+ ALARM_SOS,\r
+ ALARM_LOWBATTERY,\r
+ ALARM_ANTIOFF,\r
+ ALARM_WEARED,\r
+ ALARM_FALL,\r
+ ALARM_NONE,\r
+ };\r
// 00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05/06:跌倒报警))\r
- public void setAlarmType(boolean fall,boolean lowbattery,boolean sos,boolean antioff){\r
+ public void setAlarmType(AlarmType alarm){\r
// if ( !fall && !lowbattery && !sos && antioff)\r
- alarmType= "00";\r
- if (sos){\r
- alarmType= "01";\r
- }else if(lowbattery){\r
- alarmType= "02";\r
- }else if(antioff){\r
- alarmType= "03";\r
- }else if(fall){\r
- alarmType= "05";\r
- }\r
+\r
+ switch (alarm){\r
+ case ALARM_SOS:\r
+ alarmType="01";\r
+ break;\r
+ case ALARM_LOWBATTERY:\r
+ alarmType="02";\r
+ break;\r
+ case ALARM_ANTIOFF:\r
+ alarmType="03";\r
+ break;\r
+ case ALARM_WEARED:\r
+ alarmType="04";\r
+ break;\r
+ case ALARM_FALL:\r
+ alarmType="05";\r
+ break;\r
+ case ALARM_NONE:\r
+ default:\r
+ alarmType="00";\r
+ break;\r
+ }\r
+\r
}\r
\r
public String preCdmaInfo;\r
--- /dev/null
+package com.enqualcomm.support.service;\r
+\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.hardware.Sensor;\r
+import android.hardware.SensorEvent;\r
+import android.hardware.SensorEventListener;\r
+import android.hardware.SensorManager;\r
+import android.os.Message;\r
+import android.os.PowerManager;\r
+import android.util.Log;\r
+\r
+import com.enqualcomm.support.bean.Runtime;\r
+import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;\r
+import com.enqualcomm.support.utils.Connection;\r
+import com.enqualcomm.support.utils.ICLogger;\r
+import com.enqualcomm.support.utils.WakeLockUtil;\r
+import com.ic.protocols.protocolAPIHelper;\r
+\r
+import static java.lang.Thread.*;\r
+\r
+\r
+public class AntiMonitorService extends AbstractInvokeHandlerService {\r
+\r
+\r
+ Context mContext;\r
+\r
+ Runtime mRuntime;\r
+\r
+ Connection mConnection;\r
+\r
+ private SensorManager mSensorManager;\r
+\r
+ /**\r
+ * 启动传感器。\r
+ */\r
+ private void startSensor() {\r
+ mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);\r
+ Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);\r
+\r
+ if (mSensorManager == null || mSensor == null) {\r
+ ICLogger.i("Proximity 设备不支持1");\r
+ return;\r
+ //throw new UnsupportedOperationException("设备不支持");\r
+ }\r
+\r
+ boolean isRegister = mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_NORMAL);\r
+ if (!isRegister) {\r
+ ICLogger.i("Proximity 设备不支持2");\r
+ //throw new UnsupportedOperationException("设备不支持");\r
+ return ;\r
+ }\r
+ }\r
+\r
+ private String ACTION_ANTI_OFF = "com.ic.ACTION_STRIP";\r
+ private String KEY_ANTI_EVENT="eventID"; //integer eventID =1 脱落, eventID =0 佩戴\r
+\r
+ private void send_anti_event_broadcast(int antioff){\r
+\r
+ Intent intent=new Intent();\r
+ intent.setAction(ACTION_ANTI_OFF);\r
+ intent.putExtra(KEY_ANTI_EVENT,antioff);\r
+ mContext.sendBroadcast(intent);\r
+\r
+ }\r
+\r
+\r
+ private void screen_on(){\r
+ PowerManager mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);\r
+ PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");\r
+ mWakeLock.acquire(1*1000);//亮屏5秒\r
+ }\r
+ private SensorEventListener mSensorEventListener = new SensorEventListener() {\r
+\r
+ @Override\r
+ public void onSensorChanged(SensorEvent sensorEvent) {\r
+ float proximity=sensorEvent.values[0];\r
+ ICLogger.i("近距离 "+String.valueOf(proximity));\r
+ if (proximity==0){\r
+ //佩戴\r
+ screen_on();\r
+ mRuntime.setAlarmType(Runtime.AlarmType.ALARM_WEARED);\r
+ String msg=protocolAPIHelper.getWarningMSG(mRuntime);\r
+ Deliver.sendLocationMSG(msg); //消息很重要,所以利用带buffer的对列来发送!\r
+ try {\r
+ sleep(1000);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ send_anti_event_broadcast(0);\r
+ }else{\r
+ //脱腕\r
+ screen_on();\r
+ mRuntime.setAlarmType(Runtime.AlarmType.ALARM_ANTIOFF);\r
+ String msg=protocolAPIHelper.getWarningMSG(mRuntime);\r
+ Deliver.sendLocationMSG(msg); //消息很重要,所以利用带buffer的对列来发送!\r
+ try {\r
+ sleep(1000);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ send_anti_event_broadcast(1);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onAccuracyChanged(Sensor sensor, int i) {\r
+\r
+ }\r
+ };\r
+\r
+\r
+ @Override\r
+ public boolean onUserRequest(Intent paramIntent, Connection paramConnection, Runtime paramRuntime) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean onUserRequest(Message paramMessage, Connection paramConnection, Runtime paramRuntime) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public void onAlarmClock(Connection paramConnection, Runtime paramRuntime) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onAttach(Connection paramConnection, Runtime paramRuntime) {\r
+ mRuntime=paramRuntime;\r
+ mContext=mRuntime.getContextProxy().context;\r
+ mConnection=paramConnection;\r
+ startSensor();\r
+ }\r
+\r
+ @Override\r
+ public void onDetach(Connection paramConnection, Runtime paramRuntime) {\r
+ mSensorManager.unregisterListener(mSensorEventListener);\r
+ }\r
+}\r
ICLogger.i("Shutdown Received! reboot="+bool);\r
if (KeepAlive.this.mRuntime.getBatteryLow() && !KeepAlive.this.mRuntime.getBatterychanging() && !bool && !KeepAlive.this.mRuntime.isShutdown()/*不是服务器让关闭的*/){\r
\r
- KeepAlive.this.mRuntime.setAlarmType(false,KeepAlive.this.mRuntime.getBatteryLow(),false,false);\r
- KeepAlive.this.connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(KeepAlive.this.mRuntime)));\r
+ if (KeepAlive.this.mRuntime.getBatteryLow()){\r
+ KeepAlive.this.mRuntime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);\r
+ KeepAlive.this.connection.send(protocolAPIHelper.genStringMessage("AP10", protocolAPIHelper.getWarningMSG(KeepAlive.this.mRuntime)));\r
\r
ICLogger.i("Shutdown Received! send AP10 !");\r
+ }\r
\r
}\r
\r
mRuntime.setBatteryLow(true);\r
\r
if (Config.LOG_TOFILE) ICLogger.logToFile("Battery","BatteryLow !");\r
- mRuntime.setAlarmType(false,mRuntime.getBatteryLow(),false,false);\r
+ mRuntime.setAlarmType(Runtime.AlarmType.ALARM_LOWBATTERY);\r
//trigger AP10 报警定位\r
connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.getWarningMSG(mRuntime)));\r
}\r
.append(" [").append(runtime.getSignalStrength()).append(",").append(runtime.getSignalInfo()).append("] ")\r
.append(runtime.IMEI())\r
.append("\n Srv [").append(runtime.getHost()).append(":").append(runtime.getPort()).append("]").append(KeepAlive.isConnected).append(" , HBcycle ").append(runtime.getHeartBeatCycle())\r
- .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected()).append(",Temp ").append(ICJniUtils.getTemperature()-runtime.temperature_adjustValue)\r
+ .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected())\r
+ .append(",Temp ").append(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted())).append(",TA ").append(String.format("%1$.2f",runtime.temperature_adjustValue))\r
.append(" \n Bat ").append(runtime.getBattery()).append(",").append(runtime.getBatteryVotage())\r
.append(" charged ").append(runtime.isPowerConnected())\r
.append(" StepCount ").append(runtime.getTotalStepCount())\r
.append(",P").append(runtime.getHRS().getPPG())\r
.append(",H").append(runtime.getHRS().getBPH())\r
.append(",L").append(runtime.getHRS().getBPL())\r
- .append(",T").append(ICJniUtils.getTemperature()-runtime.temperature_adjustValue)\r
+ .append(",T").append(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted()))\r
+ .append(",TA").append(String.format("%1$.2f",runtime.temperature_adjustValue))\r
.append(",").append(runtime.getHRS().getTestTime()).append("]")\r
.toString();\r
}\r
--- /dev/null
+package com.enqualcomm.support.utils;\r
+\r
+import com.ic.jni.ICJniUtils;\r
+import com.sina.util.dnscache.log.FileUtil;\r
+\r
+import java.io.File;\r
+\r
+public class TemperatureUtil {\r
+\r
+\r
+ private static double temp_value_orig =0.0f;\r
+ private static double temp_adjust_value=0.0f;\r
+ public static double get_temp_value_origin()\r
+ {\r
+\r
+ temp_value_orig= ICJniUtils.getTemperature();\r
+ return temp_value_orig;\r
+ }\r
+ public static double get_temp_value_adjusted()\r
+ {\r
+ get_temp_value_origin();\r
+ return (temp_value_orig-temp_adjust_value);\r
+ }\r
+\r
+ public static double getTempAdjustValue(){\r
+\r
+ String tmpstr= FileUtil.readFileLine(new File("/productinfo/temp_adjust_37.txt"));\r
+\r
+ double tmp=0.0f;\r
+\r
+ if (tmpstr==null || tmpstr.isEmpty())\r
+ {\r
+ tmpstr="0.0";\r
+ }\r
+ tmp=Double.valueOf(tmpstr);\r
+\r
+ temp_adjust_value=tmp;\r
+ ICLogger.i("get Temperature Adjust Value from /productinfo/temp_adjust_37.txt , value="+tmpstr);\r
+ return tmp;\r
+\r
+ }\r
+}\r
\r
\r
public static native double getTemperature();\r
-}\r
+\r
+ }\r
return sm;\r
}\r
\r
+ public static String getTemperatureMSG(double temp_adusted){\r
+ String ret="";\r
+ switch(Config.protocol_no)\r
+ {\r
+ case 0:\r
+ ret="";\r
+ break;\r
+ case 1:\r
+ ret=protocol_beehome.APTP(temp_adusted);\r
+ break;\r
+ }\r
+ return ret;\r
+ }\r
public static String getWarningMSG(Runtime runtime){\r
String ret="";\r
switch(Config.protocol_no)\r
* HOME|74-DE-2B-44-88-8C|97&HOME1|74-DE-2B-44-88-8C|97&HOME2|74-DE-2B-44-88-8C|97&HOME3|74-DE-2B-44-88-8C|97#\r
*/\r
return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP10)).append(TimeUtil.getShortDate())\r
- .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength())))\r
+ .append(ds.getGPSData()).append(TimeUtil.getShortTime()).append(ds.getGPSHeading())\r
+ .append(String.format("%03d",abs(ds.getSignalStrength())))\r
.append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0")\r
.append(ds.getProtection()).append(ds.getWorkModeStr()).append(CMDSPLIT)\r
.append(ds.getLBSData()).append(CMDSPLIT)\r
.append(CMDEND).toString();\r
}\r
\r
- public void handleBPTE(String cmd,Connection connection){\r
+ public void handleBPTE(String cmd,Connection connection,Runtime runtime){\r
\r
//示例:\r
//IWBPTE,353456789012345,080835,60#\r
int freq=Integer.valueOf(freqstr);\r
connection.send(genStringMessage("APTE",APTE(index,freq)));\r
ICLogger.i("收到服务器指令:测量体温 "+freq+"分钟一次。");\r
+ Config.setTemperatureTestCycle(runtime,freq);\r
+ CoreService.getInstance().setTempAlarm();\r
}else{\r
ICLogger.i("BP89 format error!");\r
}\r
break;\r
\r
case BPTE: //设置测试体温\r
- handleBPTE(cmd,mConnection);\r
+ handleBPTE(cmd,mConnection,mRuntime);\r
break;\r
\r
case BPTP:\r
--- /dev/null
+/* DO NOT EDIT THIS FILE - it is machine generated */\r
+#include <jni.h>\r
+/* Header for class com_ic_jni_ICJniUtils */\r
+\r
+#ifndef _Included_com_ic_jni_ICJniUtils\r
+#define _Included_com_ic_jni_ICJniUtils\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: resetStepCount\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_resetStepCount\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getStepCount\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getStepCount\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: enablePedometer\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enablePedometer\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: disablePedometer\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_disablePedometer\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: isPedometerEnabled\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPedometerEnabled\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: saveStepCount\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_saveStepCount\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: recoverStepCount\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_recoverStepCount\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: isPPGavailable\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPPGavailable\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: enablePPG\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enablePPG\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: disablePPG\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_disablePPG\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getPPG\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getPPG\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: isPPGStarted\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isPPGStarted\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: isWeared\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_isWeared\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getHighBloodPressure\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getHighBloodPressure\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getLowBloodPressure\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getLowBloodPressure\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getSPO2\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_getSPO2\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: getTemperature\r
+ * Signature: ()D\r
+ */\r
+JNIEXPORT jdouble JNICALL Java_com_ic_jni_ICJniUtils_getTemperature\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: enable_ps\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_enable_1ps\r
+ (JNIEnv *, jclass);\r
+\r
+/*\r
+ * Class: com_ic_jni_ICJniUtils\r
+ * Method: get_ps_data\r
+ * Signature: ()I\r
+ */\r
+JNIEXPORT jint JNICALL Java_com_ic_jni_ICJniUtils_get_1ps_1data\r
+ (JNIEnv *, jclass);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+#endif\r
-#Wed Jun 24 22:37:19 CST 2020\r
-VERSION_CODE=425\r
+#Sat Jun 27 17:08:46 CST 2020\r
+VERSION_CODE=429\r