From: snickersun Date: Sat, 4 Jul 2020 14:20:03 +0000 (+0800) Subject: release 436 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=c1cb3f169b12392fdaceaf3e604470f616fa5cd8;p=protocol_srv.git release 436 给Protocol 1 beehome添加协议 BPX1心率血压血氧修正, BPS4设置提醒时间段(久坐提醒),APHP 心率血压血氧上报 修复温度检测函数调用错误 --- diff --git a/app/release/ICSer_V434_2007041154_release.apk b/app/release/ICSer_V436_2007041837_release.apk similarity index 79% rename from app/release/ICSer_V434_2007041154_release.apk rename to app/release/ICSer_V436_2007041837_release.apk index bb6cd678..498090ca 100644 Binary files a/app/release/ICSer_V434_2007041154_release.apk and b/app/release/ICSer_V436_2007041837_release.apk differ diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 5c73f0be..a5326756 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -114,6 +114,13 @@ public class Config { final static String KeyTempTestCycle="TempTestCycle"; + + final static String KeyPPGadust="KeyPPGAdjust"; + final static String KeyBPHadust="KeyBPHAdjust"; + final static String KeyBPLadust="KeyBPLAdjust"; + final static String KeySPo2adust="KeySPo2Adjust"; + + public static String DefaultHost(){ if (protocol_no==PROTOCOL_BEEHOME) return BeehomeHost; @@ -467,5 +474,42 @@ public class Config { protocol_no=ret; return ret; } + + + public static void setPPGAdjust(Context context,int adjust){ + SharPreferenceUtil.setPrefInt(context,KeyPPGadust,adjust); + } + + + public static int getPPGAdjust(Context context){ + return SharPreferenceUtil.getPrefInt(context,KeyPPGadust, 0); + } + + public static void setBPHAdjust(Context context,int adjust){ + SharPreferenceUtil.setPrefInt(context,KeyBPHadust,adjust); + } + + + public static int getBPHAdjust(Context context){ + return SharPreferenceUtil.getPrefInt(context,KeyBPHadust, 0); + } + + + + public static int getBPLAdjust(Context context){ + return SharPreferenceUtil.getPrefInt(context,KeyBPLadust, 0); + } + + public static void setBPLAdjust(Context context,int adjust){ + SharPreferenceUtil.setPrefInt(context,KeyBPLadust,adjust); + } + + public static void setSPo2Adjust(Context context,int adjust){ + SharPreferenceUtil.setPrefInt(context,KeySPo2adust,adjust); + } + + public static int getSPo2Adjust(Context context){ + return SharPreferenceUtil.getPrefInt(context,KeySPo2adust, 0); + } } diff --git a/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java b/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java index 0c08da39..dea43c1f 100644 --- a/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java +++ b/app/src/main/java/com/enqualcomm/support/bean/heartRateStatus.java @@ -8,11 +8,16 @@ public class heartRateStatus { private String lastTestTime; private int lastBPH; private int lastBPL; - private int BPH_ref; - private int BPL_ref; - private int Age; - private int Sex; + private int lastSpo2=0; + private int BPH_ref=0; + private int BPL_ref=0; + private int Age=0; + private int Sex=0; + private int sp02_adjust=0; + private int ppg_adjust=0; + private int bph_adjust=0; + private int bpl_adjust=0; public void setXY_Ref(int refBPH,int refBPL,int refSex,int refAge){ BPH_ref=refBPH; @@ -21,6 +26,13 @@ public class heartRateStatus { Sex=refSex; } + public void setAdjust(int _ppg_adjust,int _bph_adjust,int _bpl_adjust ,int _sp02_adjust){ + ppg_adjust=_ppg_adjust; + bph_adjust=_bph_adjust; + bpl_adjust=_bpl_adjust; + sp02_adjust=_sp02_adjust; + } + private HEARTRATE_WORKINGSTAT currentStat; public enum HEARTRATE_WORKINGSTAT { @@ -46,8 +58,10 @@ public class heartRateStatus { currentStat = stat; } public int getPPG(){ - - return lastHeartrate; + int ppg=lastHeartrate; + if(ppg_adjust!=0) + ppg+=ppg_adjust; + return ppg; } public int getBPH() { @@ -58,6 +72,10 @@ public class heartRateStatus { if (lastBPH < BPH_ref - 20) BPH = BPH_ref - 20; } + + if (bph_adjust!=0){ + BPH+=bph_adjust; + } return BPH; } public int getBPL() { @@ -68,9 +86,22 @@ public class heartRateStatus { if (lastBPL < BPL_ref - 20) BPL = BPL_ref - 20; } + + if (bpl_adjust!=0){ + BPL+=bpl_adjust; + } return BPL; } + + public int getSpo2(){ + int sp02=lastSpo2; + if (sp02_adjust!=0) + sp02+=sp02_adjust; + return sp02; + } + + public String getTestTime(){ return lastTestTime; } @@ -84,4 +115,11 @@ public class heartRateStatus { lastBPH=bph; lastBPL=bpl; } + + public void setLastHeartrate(int value,int bph,int bpl,int sp02){ + lastHeartrate=value; + lastBPH=bph; + lastBPL=bpl; + lastSpo2=sp02; + } } 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 b76e91b1..402830b5 100644 --- a/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java +++ b/app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java @@ -64,7 +64,11 @@ public class HeartRateManager extends AbstractInvokeHandlerService { sendBroadcastPPGResult(); //因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送 if (connection.isServerConnected()) { + + connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA)); + + ICLogger.i("Send PPG " + PPGDATA); } else { ICLogger.i("Skip PPG " + PPGDATA); @@ -133,6 +137,7 @@ public class HeartRateManager extends AbstractInvokeHandlerService { int PPG; int BPH; int BPL; + int SPo2; boolean isWared ; boolean isPPGTesting ; static boolean isTimerStarted; @@ -147,9 +152,10 @@ public class HeartRateManager extends AbstractInvokeHandlerService { PPG= ICJniUtils.getPPG();//调用底层函数保证状态更新。 BPH=ICJniUtils.getHighBloodPressure(); BPL=ICJniUtils.getLowBloodPressure(); + SPo2=ICJniUtils.getSPO2(); isWared = (ICJniUtils.isWeared()==1); isPPGTesting = (ICJniUtils.isPPGStarted()==1 ); - ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL); + ICLogger.i("PPG TESTING="+isPPGTesting+", isWared="+isWared+", PPG="+PPG+", BPH="+BPH+", BPL="+BPL+", SPo2="+SPo2); if (isPPGTesting){ if (isWared ) { if (PPG > 0) { @@ -313,7 +319,8 @@ public static void triggerPPGtest(){ return true; } - String PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(ppg,bph,bpl); + + String PPGDATA = protocolAPIHelper.getPPG_ECG_MSG(Integer.valueOf(ppg),Integer.valueOf(bph),Integer.valueOf(bpl)); if (((NettyConnection)connection).isServerConnected()) { connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA)); ICLogger.i("Send PPG " + PPGDATA); diff --git a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java index 94052f4b..bbc704d1 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java @@ -225,6 +225,8 @@ public class DeviceInfoUtil { public static String getDeviceInfo(Runtime runtime){ SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context); + double wrist_temp; + wrist_temp=TemperatureUtil.get_temp_value_adjusted(); return new StringBuilder() .append(TimeUtil.getLocalTime2()).append(" ").append(DeviceInfoUtil.getSWVersionDisplayName()).append("\n") .append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context)) @@ -234,7 +236,7 @@ public class DeviceInfoUtil { .append(runtime.IMEI()) .append("\n Srv [").append(runtime.getHost()).append(":").append(runtime.getPort()).append("]").append(KeepAlive.isConnected).append(" , HBcycle ").append(runtime.getHeartBeatCycle()) .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected()) - .append(",Temp ").append(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted())).append(",TA ").append(String.format("%1$.2f",TemperatureUtil.getTempAdjustValue())) + .append(",Temp ").append(String.format("%1$.2f",wrist_temp)).append(",Body ").append(String.format("%1$.2f",TemperatureUtil.getBodyTemp(wrist_temp,26.0f))) .append(" \n Bat ").append(runtime.getBattery()).append(",").append(runtime.getBatteryVotage()) .append(" charged ").append(runtime.isPowerConnected()) .append(" StepCount ").append(runtime.getTotalStepCount()) @@ -255,6 +257,7 @@ public class DeviceInfoUtil { public static String getShortDeviceInfo(Runtime runtime){ SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context); + double wrist_temp=TemperatureUtil.get_temp_value_adjusted(); return new StringBuilder("Firmware ") .append(DeviceInfoUtil.getSWVersionDisplayName()).append("\nProtocol ") .append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context)) @@ -275,8 +278,8 @@ public class DeviceInfoUtil { .append(",P").append(runtime.getHRS().getPPG()) .append(",H").append(runtime.getHRS().getBPH()) .append(",L").append(runtime.getHRS().getBPL()) - .append(",T").append(String.format("%1$.2f",TemperatureUtil.get_temp_value_adjusted())) - .append(",TA").append(String.format("%1$.2f",TemperatureUtil.getTempAdjustValue())) + .append(",T").append(String.format("%1$.2f",wrist_temp)) + .append(",TA").append(String.format("%1$.2f",TemperatureUtil.getBodyTemp(wrist_temp,26.0f))) .append(",").append(runtime.getHRS().getTestTime()).append("]") .toString(); } diff --git a/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java index 8be20968..6ab19f5d 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TemperatureUtil.java @@ -13,7 +13,7 @@ public class TemperatureUtil { private static double body_temp_value=0.0f; public static double get_temp_value_origin() { - temp_value_orig= ICJniUtils.getTemperature(); + temp_value_orig= ICJniUtils.getTemperatureOrigin(); ICLogger.i("测量体温 原始值 "+temp_value_orig); return temp_value_orig; } diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 545edb46..5bbef4af 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -146,12 +146,12 @@ public class protocolAPIHelper { ret=protocol_jiai.APHT(runtime); break; case 1: - ret=protocol_beehome.APHT(runtime); + ret=protocol_beehome.APHP(runtime); break; } return ret; } - public static String getPPG_ECG_MSG(String ppg,String bph,String bpl){ + public static String getPPG_ECG_MSG(int ppg,int bph,int bpl){ String ret=""; switch(Config.protocol_no) @@ -165,4 +165,20 @@ public class protocolAPIHelper { } return ret; } + + public static String getPPG_ECG_MSG(int ppg,int bph,int bpl,int spo2){ + + String ret=""; + switch(Config.protocol_no) + { + case 0: + ret=protocol_jiai.APHT(ppg,bph,bpl); + break; + case 1: + ret=protocol_beehome.APHP(ppg,bph,bpl,spo2); + break; + } + return ret; + } + } diff --git a/app/src/main/java/com/ic/protocols/protocol_beehome.java b/app/src/main/java/com/ic/protocols/protocol_beehome.java index b9c932a3..ec49e1b3 100644 --- a/app/src/main/java/com/ic/protocols/protocol_beehome.java +++ b/app/src/main/java/com/ic/protocols/protocol_beehome.java @@ -110,6 +110,12 @@ public class protocol_beehome { BPTE,//体温间隔设置 APTP, BPTP,//体温上行 + APX1, + BPX1,//心率血压血氧修正 + APS4, + BPS4,//提醒设置(时间段) + APHP,//上报心率血压血氧 + BPHP, UNKNOWN_CMD, } @@ -185,6 +191,13 @@ public class protocol_beehome { cmdMap.put(CMD_TYPE.BPTE, "BPTE"); cmdMap.put(CMD_TYPE.APTP, "APTP"); cmdMap.put(CMD_TYPE.BPTP, "BPTP"); + cmdMap.put(CMD_TYPE.APX1, "APX1"); + cmdMap.put(CMD_TYPE.BPX1, "BPX1"); + cmdMap.put(CMD_TYPE.APS4, "APS4"); + cmdMap.put(CMD_TYPE.BPS4, "BPS4"); + cmdMap.put(CMD_TYPE.APHP, "APHP"); + cmdMap.put(CMD_TYPE.BPHP, "BPHP"); + } @@ -1149,7 +1162,7 @@ public class protocol_beehome { .append(CMDSPLIT).append(ds.getHRS().getBPL()) .append(CMDEND).toString(); } - public static String APHT(String ppg,String bph,String bpl){ + public static String APHT(int ppg,int bph,int bpl){ //IWAPHT,60,130,85# //说明: //IW:标识符 @@ -1626,6 +1639,192 @@ public class protocol_beehome { } + + public static String APX1(String id){ + //设备响应: IWAPX1, 080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APX1)) + .append(CMDSPLIT).append(id) + .append(CMDEND).toString(); + } + + /** + * + * @param cmd + * @param connection + * @param runtime + */ + public void handleBPX1(String cmd,Connection connection,Runtime runtime){ + //IWBPX1,353456789012345,080835,2,1,-3,0# + //说明: +// IW:标识符 +// BPX1 : 命令字符 +// 353456789012345:IMEI号,设备唯一ID +// 080835 :指令流水号 +// 2: 心率修正值 +// 1:高压修正值 +// -3:低压修正值 +// 0:血氧修正值 + String[] list=cmd.split(CMDSPLIT); + if (list.length==7){ + String index=list[2]; + String imei=list[1]; + String strXL=list[3]; + String strBPH=list[4]; + String strBPL=list[5]; + String strSpO2=list[6]; + + connection.send(genStringMessage("APJZ",APX1(index))); + + int ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust; + ppg_adjust=Integer.valueOf(strXL); + bph_adjust=Integer.valueOf(strBPH); + bpl_adjust=Integer.valueOf(strBPL); + spo2_adjust=Integer.valueOf(strSpO2); + + runtime.getHRS().setAdjust(ppg_adjust,bph_adjust,bpl_adjust,spo2_adjust); + Config.setPPGAdjust(mRuntime.getContextProxy().context,ppg_adjust); + Config.setBPHAdjust(mRuntime.getContextProxy().context,bph_adjust); + Config.setBPLAdjust(mRuntime.getContextProxy().context,bpl_adjust); + Config.setSPo2Adjust(mRuntime.getContextProxy().context,spo2_adjust); + + + ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", BPH "+strBPH+", BPL "+strBPL+", PPG "+ strXL +", Sp02 "+ strSpO2); + }else{ + ICLogger.i("BPX1 format error!"); + } + } + + + + public static String APS4(String id){ + //设备响应: IWAPS4,080835# + //080835:指令流水号 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APS4)) + .append(CMDSPLIT).append(id) + .append(CMDEND).toString(); + } + + /** + * 主要为久坐设置提醒时长。 + * @param cmd + * @param connection + * @param runtime + */ + public void handleBPS4(String cmd,Connection connection,Runtime runtime){ + //IWBPS4,353456789012345,080835,1|1234567|0900|1100|180, 2|1234567|0900|1100|180, 1|1234567|0900|1100|180# + //说明: +// IW:标识符 +// BPS4: 命令字符 +// 353456789012345:设备IMEI或者ID +// 080835 :指令流水号 +// 1|1234567|0900|1100|180:类型(1久坐,2喝水)|重复周期|开始时间|结束时间|时间间隔(单位秒) +// 重复周期、开始结束时间格式 参考BP85闹钟设置, +//#:结尾标识符 + String[] list=cmd.split(CMDSPLIT); + if (list.length>=4){ + + String index=list[2]; + String imei=list[1]; + connection.send(genStringMessage("APS4",APS4(index))); + + String setting1; + switch(list.length){ + case 10: + setting1=list[9]; + ICLogger.i("set 7th alarm "+setting1); + case 9: + setting1=list[8]; + ICLogger.i("set 6th alarm "+setting1); + case 8: + setting1=list[7]; + ICLogger.i("set 5th alarm "+setting1); + case 7: + setting1=list[6]; + ICLogger.i("set 4th alarm "+setting1); + case 6: + setting1=list[5]; + ICLogger.i("set 3rd alarm "+setting1); + case 5: + setting1=list[4]; + ICLogger.i("set 2nt alarm "+setting1); + case 4: + setting1=list[3]; + ICLogger.i("set 1st alarm "+setting1); + break; + } + + ICLogger.i("Handle BPX1 IMEI "+imei+",index "+index+", get "+(list.length-3) +" settings"); + }else{ + ICLogger.i("BPX1 format error!"); + } + } + + public static String APHP(Runtime ds){ + //IWAPHP,60,130,85,95,90, , , , , , , , # + //IW:标识符 + //APHT : 命令字符 + //60 : 表示心率 + //130: 血压高压 [收缩压] + //85 : 血压低压 [舒张压] + //95:血氧 + //90:血糖 +// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) + .append(CMDSPLIT).append(ds.getHRS().getPPG()) + .append(CMDSPLIT).append(ds.getHRS().getBPH()) + .append(CMDSPLIT).append(ds.getHRS().getBPL()) + .append(CMDSPLIT).append(ds.getHRS().getSpo2()) + .append(CMDSPLIT).append(0) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDEND).toString(); + } + public static String APHP(int ppg,int bph, int bpl, int spo2){ + //IWAPHP,60,130,85,95,90, , , , , , , , # + //IW:标识符 + //APHT : 命令字符 + //60 : 表示心率 + //130: 血压高压 [收缩压] + //85 : 血压低压 [舒张压] + //95:血氧 + //90:血糖 +// 本消息适用所有终端,其中需要每项指标不一定全部有值,如果无值,则留空 + return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APHP)) + .append(CMDSPLIT).append(ppg) + .append(CMDSPLIT).append(bph) + .append(CMDSPLIT).append(bpl) + .append(CMDSPLIT).append(spo2) + .append(CMDSPLIT).append(0) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDSPLIT) + .append(CMDEND).toString(); + } + + /** + * + * @param cmd + * @param connection + * @param runtime + */ + public void handleBPHP(){ + + ICLogger.i("服务器收到APHP 心率血压血氧 !"); + + } + public boolean handleCmd(CMD_TYPE type, String cmd) { //普通非二进制命令用此函数处理 @@ -1786,6 +1985,18 @@ public class protocol_beehome { handleBPTP(); mConnection.DeliverCMDMessageToSystem("APTP",cmd);//通知下面线程状态变化 break; + + case BPX1://设置 心率血压血氧修正值 + handleBPX1(cmd,mConnection,mRuntime); + ICLogger.i("收到服务器设置 心率血压血氧修正值BPX1"); + mConnection.DeliverCMDMessageToSystem("APX1",cmd);//通知下面线程状态变化 + break; + + case BPS4: //提醒设置(时间段) 主要为久坐设置提醒时长。 + handleBPS4(cmd,mConnection,mRuntime); + ICLogger.i("收到 提醒设置(时间段)"); + mConnection.DeliverCMDMessageToSystem("APS4",cmd);//通知下面线程状态变化 + break; } return ret; diff --git a/app/src/main/java/com/ic/protocols/protocol_jiai.java b/app/src/main/java/com/ic/protocols/protocol_jiai.java index e3a20104..9cabfb96 100644 --- a/app/src/main/java/com/ic/protocols/protocol_jiai.java +++ b/app/src/main/java/com/ic/protocols/protocol_jiai.java @@ -1076,7 +1076,7 @@ public class protocol_jiai { .append(CMDSPLIT).append(ds.getHRS().getBPL()) .append(CMDEND).toString(); } - public static String APHT(String ppg,String bph,String bpl){ + public static String APHT(int ppg,int bph,int bpl){ //IWAPHT,60,130,85# //说明: //IW:标识符 diff --git a/app/version_code.properties b/app/version_code.properties index 278fbdca..f10bb818 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Sat Jul 04 11:54:24 CST 2020 -VERSION_CODE=434 +#Sat Jul 04 18:37:53 CST 2020 +VERSION_CODE=436