\r
final static String KeyTempTestCycle="TempTestCycle";\r
\r
+\r
+ final static String KeyPPGadust="KeyPPGAdjust";\r
+ final static String KeyBPHadust="KeyBPHAdjust";\r
+ final static String KeyBPLadust="KeyBPLAdjust";\r
+ final static String KeySPo2adust="KeySPo2Adjust";\r
+\r
+\r
public static String DefaultHost(){\r
if (protocol_no==PROTOCOL_BEEHOME)\r
return BeehomeHost;\r
protocol_no=ret;\r
return ret;\r
}\r
+\r
+\r
+ public static void setPPGAdjust(Context context,int adjust){\r
+ SharPreferenceUtil.setPrefInt(context,KeyPPGadust,adjust);\r
+ }\r
+\r
+\r
+ public static int getPPGAdjust(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KeyPPGadust, 0);\r
+ }\r
+\r
+ public static void setBPHAdjust(Context context,int adjust){\r
+ SharPreferenceUtil.setPrefInt(context,KeyBPHadust,adjust);\r
+ }\r
+\r
+\r
+ public static int getBPHAdjust(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KeyBPHadust, 0);\r
+ }\r
+\r
+\r
+\r
+ public static int getBPLAdjust(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KeyBPLadust, 0);\r
+ }\r
+\r
+ public static void setBPLAdjust(Context context,int adjust){\r
+ SharPreferenceUtil.setPrefInt(context,KeyBPLadust,adjust);\r
+ }\r
+\r
+ public static void setSPo2Adjust(Context context,int adjust){\r
+ SharPreferenceUtil.setPrefInt(context,KeySPo2adust,adjust);\r
+ }\r
+\r
+ public static int getSPo2Adjust(Context context){\r
+ return SharPreferenceUtil.getPrefInt(context,KeySPo2adust, 0);\r
+ }\r
}\r
\r
private String lastTestTime;\r
private int lastBPH;\r
private int lastBPL;\r
- private int BPH_ref;\r
- private int BPL_ref;\r
- private int Age;\r
- private int Sex;\r
+ private int lastSpo2=0;\r
\r
+ private int BPH_ref=0;\r
+ private int BPL_ref=0;\r
+ private int Age=0;\r
+ private int Sex=0;\r
+ private int sp02_adjust=0;\r
+ private int ppg_adjust=0;\r
+ private int bph_adjust=0;\r
+ private int bpl_adjust=0;\r
\r
public void setXY_Ref(int refBPH,int refBPL,int refSex,int refAge){\r
BPH_ref=refBPH;\r
Sex=refSex;\r
}\r
\r
+ public void setAdjust(int _ppg_adjust,int _bph_adjust,int _bpl_adjust ,int _sp02_adjust){\r
+ ppg_adjust=_ppg_adjust;\r
+ bph_adjust=_bph_adjust;\r
+ bpl_adjust=_bpl_adjust;\r
+ sp02_adjust=_sp02_adjust;\r
+ }\r
+\r
\r
private HEARTRATE_WORKINGSTAT currentStat;\r
public enum HEARTRATE_WORKINGSTAT {\r
currentStat = stat;\r
}\r
public int getPPG(){\r
-\r
- return lastHeartrate;\r
+ int ppg=lastHeartrate;\r
+ if(ppg_adjust!=0)\r
+ ppg+=ppg_adjust;\r
+ return ppg;\r
}\r
\r
public int getBPH() {\r
if (lastBPH < BPH_ref - 20)\r
BPH = BPH_ref - 20;\r
}\r
+\r
+ if (bph_adjust!=0){\r
+ BPH+=bph_adjust;\r
+ }\r
return BPH;\r
}\r
public int getBPL() {\r
if (lastBPL < BPL_ref - 20)\r
BPL = BPL_ref - 20;\r
}\r
+\r
+ if (bpl_adjust!=0){\r
+ BPL+=bpl_adjust;\r
+ }\r
return BPL;\r
}\r
\r
+\r
+ public int getSpo2(){\r
+ int sp02=lastSpo2;\r
+ if (sp02_adjust!=0)\r
+ sp02+=sp02_adjust;\r
+ return sp02;\r
+ }\r
+\r
+\r
public String getTestTime(){\r
return lastTestTime;\r
}\r
lastBPH=bph;\r
lastBPL=bpl;\r
}\r
+\r
+ public void setLastHeartrate(int value,int bph,int bpl,int sp02){\r
+ lastHeartrate=value;\r
+ lastBPH=bph;\r
+ lastBPL=bpl;\r
+ lastSpo2=sp02;\r
+ }\r
}\r
sendBroadcastPPGResult();\r
//因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送\r
if (connection.isServerConnected()) {\r
+\r
+\r
connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA));\r
+\r
+\r
ICLogger.i("Send PPG " + PPGDATA);\r
} else {\r
ICLogger.i("Skip PPG " + PPGDATA);\r
int PPG;\r
int BPH;\r
int BPL;\r
+ int SPo2;\r
boolean isWared ;\r
boolean isPPGTesting ;\r
static boolean isTimerStarted;\r
PPG= ICJniUtils.getPPG();//调用底层函数保证状态更新。\r
BPH=ICJniUtils.getHighBloodPressure();\r
BPL=ICJniUtils.getLowBloodPressure();\r
+ SPo2=ICJniUtils.getSPO2();\r
isWared = (ICJniUtils.isWeared()==1);\r
isPPGTesting = (ICJniUtils.isPPGStarted()==1 );\r
- ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL);\r
+ ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL+", SPo2="+SPo2);\r
if (isPPGTesting){\r
if (isWared ) {\r
if (PPG > 0) {\r
return true;\r
}\r
\r
- String PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(ppg,bph,bpl);\r
+\r
+ String PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(Integer.valueOf(ppg),Integer.valueOf(bph),Integer.valueOf(bpl));\r
if (((NettyConnection)connection).isServerConnected()) {\r
connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA));\r
ICLogger.i("Send PPG " + PPGDATA);\r
public static String getDeviceInfo(Runtime runtime){\r
\r
SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context);\r
+ double wrist_temp;\r
+ wrist_temp=TemperatureUtil.get_temp_value_adjusted();\r
return new StringBuilder()\r
.append(TimeUtil.getLocalTime2()).append(" ").append(DeviceInfoUtil.getSWVersionDisplayName()).append("\n")\r
.append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\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())\r
- .append(",Temp ").append(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted())).append(",TA ").append(String.format("%1$.2f",TemperatureUtil.getTempAdjustValue()))\r
+ .append(",Temp ").append(String.format("%1$.2f",wrist_temp)).append(",Body ").append(String.format("%1$.2f",TemperatureUtil.getBodyTemp(wrist_temp,26.0f)))\r
.append(" \n Bat ").append(runtime.getBattery()).append(",").append(runtime.getBatteryVotage())\r
.append(" charged ").append(runtime.isPowerConnected())\r
.append(" StepCount ").append(runtime.getTotalStepCount())\r
public static String getShortDeviceInfo(Runtime runtime){\r
\r
SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context);\r
+ double wrist_temp=TemperatureUtil.get_temp_value_adjusted();\r
return new StringBuilder("Firmware ")\r
.append(DeviceInfoUtil.getSWVersionDisplayName()).append("\nProtocol ")\r
.append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\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(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted()))\r
- .append(",TA").append(String.format("%1$.2f",TemperatureUtil.getTempAdjustValue()))\r
+ .append(",T").append(String.format("%1$.2f",wrist_temp))\r
+ .append(",TA").append(String.format("%1$.2f",TemperatureUtil.getBodyTemp(wrist_temp,26.0f)))\r
.append(",").append(runtime.getHRS().getTestTime()).append("]")\r
.toString();\r
}\r
private static double body_temp_value=0.0f;\r
public static double get_temp_value_origin()\r
{\r
- temp_value_orig= ICJniUtils.getTemperature();\r
+ temp_value_orig= ICJniUtils.getTemperatureOrigin();\r
ICLogger.i("测量体温 原始值 "+temp_value_orig);\r
return temp_value_orig;\r
}\r
ret=protocol_jiai.APHT(runtime);\r
break;\r
case 1:\r
- ret=protocol_beehome.APHT(runtime);\r
+ ret=protocol_beehome.APHP(runtime);\r
break;\r
}\r
return ret;\r
}\r
- public static String getPPG_ECG_MSG(String ppg,String bph,String bpl){\r
+ public static String getPPG_ECG_MSG(int ppg,int bph,int bpl){\r
\r
String ret="";\r
switch(Config.protocol_no)\r
}\r
return ret;\r
}\r
+\r
+ public static String getPPG_ECG_MSG(int ppg,int bph,int bpl,int spo2){\r
+\r
+ String ret="";\r
+ switch(Config.protocol_no)\r
+ {\r
+ case 0:\r
+ ret=protocol_jiai.APHT(ppg,bph,bpl);\r
+ break;\r
+ case 1:\r
+ ret=protocol_beehome.APHP(ppg,bph,bpl,spo2);\r
+ break;\r
+ }\r
+ return ret;\r
+ }\r
+\r
}\r
BPTE,//体温间隔设置\r
APTP,\r
BPTP,//体温上行\r
+ APX1,\r
+ BPX1,//心率血压血氧修正\r
+ APS4,\r
+ BPS4,//提醒设置(时间段)\r
+ APHP,//上报心率血压血氧\r
+ BPHP,\r
UNKNOWN_CMD,\r
}\r
\r
cmdMap.put(CMD_TYPE.BPTE, "BPTE");\r
cmdMap.put(CMD_TYPE.APTP, "APTP");\r
cmdMap.put(CMD_TYPE.BPTP, "BPTP");\r
+ cmdMap.put(CMD_TYPE.APX1, "APX1");\r
+ cmdMap.put(CMD_TYPE.BPX1, "BPX1");\r
+ cmdMap.put(CMD_TYPE.APS4, "APS4");\r
+ cmdMap.put(CMD_TYPE.BPS4, "BPS4");\r
+ cmdMap.put(CMD_TYPE.APHP, "APHP");\r
+ cmdMap.put(CMD_TYPE.BPHP, "BPHP");\r
+\r
}\r
\r
\r
.append(CMDSPLIT).append(ds.getHRS().getBPL())\r
.append(CMDEND).toString();\r
}\r
- public static String APHT(String ppg,String bph,String bpl){\r
+ public static String APHT(int ppg,int bph,int bpl){\r
//IWAPHT,60,130,85#\r
//说明:\r
//IW:标识符\r
\r
}\r
\r
+\r
+ public static String APX1(String id){\r
+ //设备响应: IWAPX1, 080835#\r
+ //080835:指令流水号\r
+ return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1))\r
+ .append(CMDSPLIT).append(id)\r
+ .append(CMDEND).toString();\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @param cmd\r
+ * @param connection\r
+ * @param runtime\r
+ */\r
+ public void handleBPX1(String cmd,Connection connection,Runtime runtime){\r
+ //IWBPX1,353456789012345,080835,2,1,-3,0#\r
+ //说明:\r
+// IW:标识符\r
+// BPX1 : 命令字符\r
+// 353456789012345:IMEI号,设备唯一ID\r
+// 080835 :指令流水号\r
+// 2: 心率修正值\r
+// 1:高压修正值\r
+// -3:低压修正值\r
+// 0:血氧修正值\r
+ String[] list=cmd.split(CMDSPLIT);\r
+ if (list.length==7){\r
+ String index=list[2];\r
+ String imei=list[1];\r
+ String strXL=list[3];\r
+ String strBPH=list[4];\r
+ String strBPL=list[5];\r
+ String strSpO2=list[6];\r
+\r
+ connection.send(genStringMessage("APJZ",APX1(index)));\r
+\r
+ int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust;\r
+ ppg_adjust=Integer.valueOf(strXL);\r
+ bph_adjust=Integer.valueOf(strBPH);\r
+ bpl_adjust=Integer.valueOf(strBPL);\r
+ spo2_adjust=Integer.valueOf(strSpO2);\r
+\r
+ runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust);\r
+ Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust);\r
+ Config.setBPHAdjust(mRuntime.getContextProxy().context,bph_adjust);\r
+ Config.setBPLAdjust(mRuntime.getContextProxy().context,bpl_adjust);\r
+ Config.setSPo2Adjust(mRuntime.getContextProxy().context,spo2_adjust);\r
+\r
+\r
+ ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", PPG "+ strXL +", Sp02 "+ strSpO2);\r
+ }else{\r
+ ICLogger.i("BPX1 format error!");\r
+ }\r
+ }\r
+\r
+\r
+\r
+ public static String APS4(String id){\r
+ //设备响应: IWAPS4,080835#\r
+ //080835:指令流水号\r
+ return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4))\r
+ .append(CMDSPLIT).append(id)\r
+ .append(CMDEND).toString();\r
+ }\r
+\r
+ /**\r
+ * 主要为久坐设置提醒时长。\r
+ * @param cmd\r
+ * @param connection\r
+ * @param runtime\r
+ */\r
+ public void handleBPS4(String cmd,Connection connection,Runtime runtime){\r
+ //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180#\r
+ //说明:\r
+// IW:标识符\r
+// BPS4: 命令字符\r
+// 353456789012345:设备IMEI或者ID\r
+// 080835 :指令流水号\r
+// 1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒)\r
+// 重复周期、开始结束时间格式 参考BP85闹钟设置,\r
+//#:结尾标识符\r
+ String[] list=cmd.split(CMDSPLIT);\r
+ if (list.length>=4){\r
+\r
+ String index=list[2];\r
+ String imei=list[1];\r
+ connection.send(genStringMessage("APS4",APS4(index)));\r
+\r
+ String setting1;\r
+ switch(list.length){\r
+ case 10:\r
+ setting1=list[9];\r
+ ICLogger.i("set 7th alarm "+setting1);\r
+ case 9:\r
+ setting1=list[8];\r
+ ICLogger.i("set 6th alarm "+setting1);\r
+ case 8:\r
+ setting1=list[7];\r
+ ICLogger.i("set 5th alarm "+setting1);\r
+ case 7:\r
+ setting1=list[6];\r
+ ICLogger.i("set 4th alarm "+setting1);\r
+ case 6:\r
+ setting1=list[5];\r
+ ICLogger.i("set 3rd alarm "+setting1);\r
+ case 5:\r
+ setting1=list[4];\r
+ ICLogger.i("set 2nt alarm "+setting1);\r
+ case 4:\r
+ setting1=list[3];\r
+ ICLogger.i("set 1st alarm "+setting1);\r
+ break;\r
+ }\r
+\r
+ ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings");\r
+ }else{\r
+ ICLogger.i("BPX1 format error!");\r
+ }\r
+ }\r
+\r
+ public static String APHP(Runtime ds){\r
+ //IWAPHP,60,130,85,95,90, , , , , , , , #\r
+ //IW:标识符\r
+ //APHT : 命令字符\r
+ //60 : 表示心率\r
+ //130: 血压高压 [收缩压]\r
+ //85 : 血压低压 [舒张压]\r
+ //95:血氧\r
+ //90:血糖\r
+// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空\r
+ return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
+ .append(CMDSPLIT).append(ds.getHRS().getPPG())\r
+ .append(CMDSPLIT).append(ds.getHRS().getBPH())\r
+ .append(CMDSPLIT).append(ds.getHRS().getBPL())\r
+ .append(CMDSPLIT).append(ds.getHRS().getSpo2())\r
+ .append(CMDSPLIT).append(0)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDEND).toString();\r
+ }\r
+ public static String APHP(int ppg,int bph, int bpl, int spo2){\r
+ //IWAPHP,60,130,85,95,90, , , , , , , , #\r
+ //IW:标识符\r
+ //APHT : 命令字符\r
+ //60 : 表示心率\r
+ //130: 血压高压 [收缩压]\r
+ //85 : 血压低压 [舒张压]\r
+ //95:血氧\r
+ //90:血糖\r
+// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空\r
+ return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP))\r
+ .append(CMDSPLIT).append(ppg)\r
+ .append(CMDSPLIT).append(bph)\r
+ .append(CMDSPLIT).append(bpl)\r
+ .append(CMDSPLIT).append(spo2)\r
+ .append(CMDSPLIT).append(0)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDSPLIT)\r
+ .append(CMDEND).toString();\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @param cmd\r
+ * @param connection\r
+ * @param runtime\r
+ */\r
+ public void handleBPHP(){\r
+\r
+ ICLogger.i("服务器收到APHP 心率血压血氧 !");\r
+\r
+ }\r
+\r
public boolean handleCmd(CMD_TYPE type, String cmd) {\r
\r
//普通非二进制命令用此函数处理\r
handleBPTP();\r
mConnection.DeliverCMDMessageToSystem("APTP",cmd);//通知下面线程状态变化\r
break;\r
+\r
+ case BPX1://设置 心率血压血氧修正值\r
+ handleBPX1(cmd,mConnection,mRuntime);\r
+ ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1");\r
+ mConnection.DeliverCMDMessageToSystem("APX1",cmd);//通知下面线程状态变化\r
+ break;\r
+\r
+ case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。\r
+ handleBPS4(cmd,mConnection,mRuntime);\r
+ ICLogger.i("收到 提醒设置(时间段)");\r
+ mConnection.DeliverCMDMessageToSystem("APS4",cmd);//通知下面线程状态变化\r
+ break;\r
}\r
\r
return ret;\r
.append(CMDSPLIT).append(ds.getHRS().getBPL())\r
.append(CMDEND).toString();\r
}\r
- public static String APHT(String ppg,String bph,String bpl){\r
+ public static String APHT(int ppg,int bph,int bpl){\r
//IWAPHT,60,130,85#\r
//说明:\r
//IW:标识符\r
-#Sat Jul 04 11:54:24 CST 2020\r
-VERSION_CODE=434\r
+#Sat Jul 04 18:37:53 CST 2020\r
+VERSION_CODE=436\r