Browse Source

Merge branch 'master' of http://git.ius.plus/Project-Vital/VitalDevicesSDK

Melon 1 year ago
parent
commit
5e15e3f9e1

BIN
app/libs/analysis-release.jar


+ 6 - 0
app/src/main/java/vinno/sportinspect/config/Constant.java

@@ -40,6 +40,12 @@ public class Constant {
     public static final String YUWELL_TEP_SERVER_UUID = "00001809-0000-1000-8000-00805f9b34fb";
     public static final String YUWELL_TEP_SERVER_UUID = "00001809-0000-1000-8000-00805f9b34fb";
     public static final String YUWELL_TEP_CHARACTERISTICS_UUID = "00002a1c-0000-1000-8000-00805f9b34fb";
     public static final String YUWELL_TEP_CHARACTERISTICS_UUID = "00002a1c-0000-1000-8000-00805f9b34fb";
 
 
+    //鱼跃 血压计
+    public static final String YUWELL_YE620C_SERVER_UUID = "00001810-0000-1000-8000-00805f9b34fb"; //serverid
+    public static final String YUWELL_YE620C_CHARACTERISTICS_WRITE_UUID = "00002A35-0000-1000-8000-00805f9b34fb"; // 血压写入
+    public static final String YUWELL_YE620C_CHARACTERISTICS_WRITE_ICP_UUID = "00002A36-0000-1000-8000-00805f9b34fb"; // 血压中间袖带压icp写入
+    public static final String YUWELL_YE620C_CHARACTERISTICS_READ_UUID = "00002A35-0000-1000-8000-00805f9b34fb"; //通知
+
     //恩普生尿液分析仪
     //恩普生尿液分析仪
     public static final String EMP_SERVER_UUID = "0000ffe0-0000-1000-8000-00805f9b34fb";
     public static final String EMP_SERVER_UUID = "0000ffe0-0000-1000-8000-00805f9b34fb";
     public static final String EMP_CHARACTERISTICS_UUID = "0000ffe1-0000-1000-8000-00805f9b34fb";
     public static final String EMP_CHARACTERISTICS_UUID = "0000ffe1-0000-1000-8000-00805f9b34fb";

+ 3 - 1
app/src/main/java/vinno/sportinspect/config/DevicesConstant.java

@@ -10,6 +10,7 @@ public class DevicesConstant {
     //所有设备列表
     //所有设备列表
     public static final LinkedList<Device>  deviceMaps = new LinkedList<Device>() {
     public static final LinkedList<Device>  deviceMaps = new LinkedList<Device>() {
         {
         {
+
             add(new Device(1, EnumDeviceTypes.HEART.typeName(), "xm3000-heart", "心电", "心电", "", "", "", true, "心电测量", "heart", true, EnumDevicesType.indurated.value())); //自带
             add(new Device(1, EnumDeviceTypes.HEART.typeName(), "xm3000-heart", "心电", "心电", "", "", "", true, "心电测量", "heart", true, EnumDevicesType.indurated.value())); //自带
             add(new Device(2, EnumDeviceTypes.SPO2.typeName(), "xm3000-spo2", "血氧", "血氧", "", "", "", true, "血氧测量", "icon_spo2", false, EnumDevicesType.indurated.value())); //自带
             add(new Device(2, EnumDeviceTypes.SPO2.typeName(), "xm3000-spo2", "血氧", "血氧", "", "", "", true, "血氧测量", "icon_spo2", false, EnumDevicesType.indurated.value())); //自带
             add(new Device(2, EnumDeviceTypes.SPO2.typeName(), "AOJ-70B", "血氧", "血氧(奥极)", "00:00:00:00:00:00", "AOJ-70B", "Spo2ByAOJ70B", true, "血氧测量", "icon_spo2", true, EnumDevicesType.BLE.value()));
             add(new Device(2, EnumDeviceTypes.SPO2.typeName(), "AOJ-70B", "血氧", "血氧(奥极)", "00:00:00:00:00:00", "AOJ-70B", "Spo2ByAOJ70B", true, "血氧测量", "icon_spo2", true, EnumDevicesType.BLE.value()));
@@ -17,6 +18,7 @@ public class DevicesConstant {
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "AOJ-30B", "血压", "血压(奥极)", "00:00:00:00:00:00", "AOJ-30B", "NibpByAOJ30B", true, "血压测量", "xueyaceliang", true, EnumDevicesType.BLE.value()));
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "AOJ-30B", "血压", "血压(奥极)", "00:00:00:00:00:00", "AOJ-30B", "NibpByAOJ30B", true, "血压测量", "xueyaceliang", true, EnumDevicesType.BLE.value()));
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "BP750X_pressure", "血压", "血压(威宝龙)", "00:00:00:00:00:00", "750X-", "NibpByBP750X", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "BP750X_pressure", "血压", "血压(威宝龙)", "00:00:00:00:00:00", "750X-", "NibpByBP750X", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "BP700B", "血压", "血压(威宝龙)", "00:00:00:00:00:00", "700B-00150307", "NibpByBP750X", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
             add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "BP700B", "血压", "血压(威宝龙)", "00:00:00:00:00:00", "700B-00150307", "NibpByBP750X", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
+            add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "YE620C", "血压", "血压(鱼跃)", "00:00:00:00:00:00", "YE620C", "NibpByYE620C", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
             //700B-00150307
             //700B-00150307
             add(new Device(4, EnumDeviceTypes.TEMP.typeName(), "DT-8836", "体温计", "体温计(家测宝)", "00:00:00:00:00:00", "IR Thermo", "TempByDT", true, "额温枪", "temp", false, EnumDevicesType.BLE.value()));
             add(new Device(4, EnumDeviceTypes.TEMP.typeName(), "DT-8836", "体温计", "体温计(家测宝)", "00:00:00:00:00:00", "IR Thermo", "TempByDT", true, "额温枪", "temp", false, EnumDevicesType.BLE.value()));
             add(new Device(4, EnumDeviceTypes.TEMP.typeName(), "YHW-6", "体温计", "体温计(鱼跃)", "00:00:00:00:00:00", "Yuwell", "TempByYuwell", true, "额温枪", "temp", true, EnumDevicesType.BLE.value()));
             add(new Device(4, EnumDeviceTypes.TEMP.typeName(), "YHW-6", "体温计", "体温计(鱼跃)", "00:00:00:00:00:00", "Yuwell", "TempByYuwell", true, "额温枪", "temp", true, EnumDevicesType.BLE.value()));
@@ -41,7 +43,7 @@ public class DevicesConstant {
             add(new Device(11, EnumDeviceTypes.TWELVEHEART.typeName(), "pe1204", "十二导心电", "十二导心电(华清心仪)", "", "", "UrineBC401BTDialog", true, "十二导心电", "heart", false, EnumDevicesType.jump.value())); //跳转到其他app
             add(new Device(11, EnumDeviceTypes.TWELVEHEART.typeName(), "pe1204", "十二导心电", "十二导心电(华清心仪)", "", "", "UrineBC401BTDialog", true, "十二导心电", "heart", false, EnumDevicesType.jump.value())); //跳转到其他app
             add(new Device(11, EnumDeviceTypes.ONEHEART.typeName(), "BP750X-heart", "单导心电", "单导心电(威宝龙)", "00:00:00:00:00:00", "750X-", "HeartByBP750X", true, "单导心电", "heart", false, EnumDevicesType.BLE.value()));
             add(new Device(11, EnumDeviceTypes.ONEHEART.typeName(), "BP750X-heart", "单导心电", "单导心电(威宝龙)", "00:00:00:00:00:00", "750X-", "HeartByBP750X", true, "单导心电", "heart", false, EnumDevicesType.BLE.value()));
             add(new Device(12, EnumDeviceTypes.BLOODFAT.typeName(), "xuezhi", "血脂", "血脂(三诺)", "00:00:00:00:00:00", "", "UrineBC401BTDialog", true, "血脂", "bloodfat", false, EnumDevicesType.BLE.value()));
             add(new Device(12, EnumDeviceTypes.BLOODFAT.typeName(), "xuezhi", "血脂", "血脂(三诺)", "00:00:00:00:00:00", "", "UrineBC401BTDialog", true, "血脂", "bloodfat", false, EnumDevicesType.BLE.value()));
-            add(new Device(13, EnumDeviceTypes.ICREADER.typeName(), "iDR211-L2", "人证阅读器", "人证阅读器(精伦)", "00:00:00:00:00:00", "iDR242", "ICReaderByIDR211", true, "人证阅读器", "bloodfat", false, EnumDevicesType.BLE.value()));
+            add(new Device(13, EnumDeviceTypes.ICREADER.typeName(), "iDR211-L2", "人证阅读器", "人证阅读器(精伦)", "00:00:00:00:00:00", "iDR2", "ICReaderByIDR211", true, "人证阅读器", "bloodfat", false, EnumDevicesType.BLE.value()));
         }
         }
     };
     };
     public static void main(String[] args) {
     public static void main(String[] args) {

+ 190 - 0
app/src/main/java/vinno/sportinspect/devices/NibpByYE620C.java

@@ -0,0 +1,190 @@
+package vinno.sportinspect.devices;
+
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattService;
+import android.util.Log;
+import android.view.View;
+import android.widget.Toast;
+
+import androidx.annotation.Keep;
+
+import com.clj.fastble.BleManager;
+import com.clj.fastble.callback.BleGattCallback;
+import com.clj.fastble.callback.BleIndicateCallback;
+import com.clj.fastble.callback.BleNotifyCallback;
+import com.clj.fastble.callback.BleWriteCallback;
+import com.clj.fastble.data.BleDevice;
+import com.clj.fastble.exception.BleException;
+
+import org.json.JSONObject;
+
+import java.util.Date;
+import java.util.UUID;
+
+import vinno.sportinspect.bean.NibpEntity;
+import vinno.sportinspect.config.Constant;
+import vinno.sportinspect.config.StatusConstant;
+import vinno.sportinspect.utils.LogUtil;
+import vinno.sportinspect.utils.vian.BTUtils;
+import vinno.sportinspect.utils.vian.DataList;
+import vinno.sportinspect.utils.vian.GlobalCache;
+import vinno.sportinspect.utils.vian.RecordList;
+import vinno.sportinspect.utils.vian.VianConstant;
+
+import com.yuwell.analysis.BPMAnalyst;
+import com.yuwell.analysis.data.bpm.BPMData;
+import com.yuwell.analysis.data.gls.CholesterolData;
+import com.yuwell.analysis.data.gls.GlucoseData;
+import com.yuwell.analysis.data.gls.HemoglobinData;
+import com.yuwell.analysis.data.gls.UrineData;
+
+
+/**
+ * @name: NibpByYE620C
+ * @author: baka
+ * @time: 2023/12/12 13:22
+ * @version: 1.0
+ * @description: 鱼跃血压计
+ */
+@Keep
+public class NibpByYE620C extends BaseDevices {
+    private boolean newMeasure = true;
+    private RecordList rec_n = new RecordList();
+    private BPMAnalyst bpmAnalyst;
+    private BluetoothGattService mBpmService;
+    private BluetoothGattCharacteristic mMeasurement;
+    private BluetoothGattCharacteristic mICPMeasurement;
+    private BluetoothGattService otaService;
+    private BluetoothGattCharacteristic otaCharacteristic;
+    @Override
+    public void BLE_CONNECT(JSONObject params) {
+        super.BLE_CONNECT(params);
+        connect(mac, (bleDevice, isFirst) -> {
+            if (isFirst == 0) connect(bleDevice);
+        });
+    }
+
+    @Override
+    public void parseData(byte[] data) {
+        bpmAnalyst.setBMPCallbacks(new BPMAnalyst.BMPCallback() {
+            @Override
+            public void onMeasureStart() {
+
+            }
+
+            @Override
+            public void onIntermediateCuffPressureRead(BluetoothDevice bluetoothDevice, BPMData bpmData) {
+                // sbp此时为中间袖带压力
+                LogUtil.d("ICP:" + bpmData.sbp);
+                NibpEntity entity = new NibpEntity();
+                entity.PRESSURE = bpmData.sbp;
+                entity.PULSE_STATUS = bpmData.sbp > 0 ? 1 : 0;
+                entity.PULSE = 0;
+                entity.SSY = 0;
+                entity.SZY = 0;
+                callBack(StatusConstant.BLE_ACTION_CMD_RUNTIME_DATA, entity);
+            }
+
+            @Override
+            public void onBloodPressureMeasurementRead(BluetoothDevice bluetoothDevice, BPMData bpmData) {
+                LogUtil.d( "血压测量值:" + bpmData.dbp + " " + bpmData.sbp);
+                NibpEntity entity = new NibpEntity();
+                entity.PULSE_STATUS = 0;
+                entity.PRESSURE = 0;
+                entity.PULSE = bpmData.pulseRate;
+                entity.SSY = (bpmData.sbp & 0x00FF);
+                entity.SZY = (bpmData.dbp & 0x00FF);
+                callBack(StatusConstant.BLE_ACTION_CMD_MEASURE_DATA, entity);
+            }
+        });
+    }
+
+    private void connect(final BleDevice bleDevice) {
+        BleManager.getInstance().connect(bleDevice, new BleGattCallback() {
+
+            @Override
+            public void onStartConnect() {
+                LogUtil.d("开始连接");
+            }
+
+            @Override
+            public void onConnectFail(BleDevice bleDevice, BleException exception) {
+                LogUtil.d("连接失败");
+            }
+
+            @Override
+            public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
+                // 连接血压计
+                mBpmService = gatt.getService(UUID.fromString(Constant.YUWELL_YE620C_SERVER_UUID));
+                if (mBpmService != null) {
+                    mMeasurement = mBpmService.getCharacteristic(UUID.fromString(Constant.YUWELL_YE620C_CHARACTERISTICS_WRITE_UUID));
+                    mICPMeasurement = mBpmService.getCharacteristic(UUID.fromString(Constant.YUWELL_YE620C_CHARACTERISTICS_WRITE_ICP_UUID));
+                }
+                notifyBPM(bleDevice);
+
+            }
+
+            @Override
+            public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
+                if (isActiveDisConnected) {
+                } else {
+                }
+
+            }
+        });
+    }
+    private void notifyBPM(final BleDevice bleDevice) {
+        BleManager.getInstance().notify(bleDevice, mBpmService.getUuid().toString(), mICPMeasurement.getUuid().toString(),
+                new BleNotifyCallback() {
+                    @Override
+                    public void onNotifySuccess() {
+                        LogUtil.d("=============血压通知开启成功");
+                        indicateICP(bleDevice);
+                    }
+
+                    @Override
+                    public void onNotifyFailure(BleException exception) {
+                        LogUtil.d("=============onNotifyFailure" + exception.getDescription() + "==" + exception.toString());
+                        BleManager.getInstance().stopNotify(bleDeviceConnection, Constant.YUWELL_YE620C_SERVER_UUID, Constant.YUWELL_YE620C_CHARACTERISTICS_READ_UUID);
+                        disConnectDevice();
+                        callBack(StatusConstant.BLE_REGISTER_NOTIFY_FAIL);
+                    }
+
+                    @Override
+                    public void onCharacteristicChanged(byte[] data) {
+                        bpmAnalyst = BPMAnalyst.getInstance();
+                        bpmAnalyst.onICPnotifyValueChanged(bleDevice.getDevice(), data);
+                        parseData(data);
+                    }
+                });
+    }
+
+    private void indicateICP(final BleDevice bleDevice) {
+        BleManager.getInstance().indicate(bleDevice, mBpmService.getUuid().toString(), mMeasurement.getUuid().toString(),
+                new BleIndicateCallback() {
+                    @Override
+                    public void onIndicateSuccess() {
+                        LogUtil.d("=============ICP通知开启成功");
+                    }
+
+                    @Override
+                    public void onIndicateFailure(BleException exception) {
+                        LogUtil.d("=============ICP通知开启失败"+ exception.toString());
+                        BleManager.getInstance().stopNotify(bleDeviceConnection, Constant.VIAN_BP700X_SERVER_UUID, Constant.VIAN_BP700X_CHARACTERISTICS_READ_UUID);
+                        disConnectDevice();
+                        callBack(StatusConstant.BLE_REGISTER_NOTIFY_FAIL);
+
+                    }
+
+                    @Override
+                    public void onCharacteristicChanged(byte[] data) {
+                        LogUtil.d("=============onCharacteristicChanged changed");
+                        bpmAnalyst.onBpmNotifyValueChanged(bleDevice.getDevice(), data);
+                    }
+                });
+    }
+
+}