Browse Source

1、新增辰浩血压计

guanxinyi 1 year ago
parent
commit
d10449a8e5

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

@@ -104,4 +104,11 @@ public class Constant {
     public static final String VIAN_BP700X_CHARACTERISTICS_WRITE_UUID = "00002a37-0000-1000-8000-00805f9b34fb"; //写入
     public static final String VIAN_BP700X_CHARACTERISTICS_READ_UUID = "00002a36-0000-1000-8000-00805f9b34fb"; //通知
 
+    // 辰浩 血压CH-S69L
+    public static final String FSRKB_BT_SERVER_UUID = "0000FFF0-0000-1000-8000-00805F9B34FB"; //serverid
+    public static final String FSRKB_BT_CHARACTERISTICS_WRITE_UUID = "0000FFF6-0000-1000-8000-00805F9B34FB"; //写入
+    public static final String FSRKB_BT_CHARACTERISTICS_READ_UUID = "0000FFF6-0000-1000-8000-00805F9B34FB"; //通知
+
+
+
 }

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

@@ -19,6 +19,7 @@ public class DevicesConstant {
             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(), "YE620C", "血压", "血压(鱼跃)", "00:00:00:00:00:00", "YE620C", "NibpByYE620C", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BLE.value()));
+            add(new Device(3, EnumDeviceTypes.NIBP.typeName(), "CH-S69L", "血压", "血压(辰浩)", "00:00:00:00:00:00", "FSRKB_BT-001", "NibpByFSRKB", true, "血压测量", "xueyaceliang", false, EnumDevicesType.BT.value()));
             //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(), "YHW-6", "体温计", "体温计(鱼跃)", "00:00:00:00:00:00", "Yuwell", "TempByYuwell", true, "额温枪", "temp", true, EnumDevicesType.BLE.value()));

+ 125 - 0
app/src/main/java/vinno/sportinspect/devices/NibpByFSRKB.java

@@ -0,0 +1,125 @@
+package vinno.sportinspect.devices;
+
+import com.clj.fastble.BleManager;
+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.Arrays;
+
+import vinno.sportinspect.bean.NibpEntity;
+import vinno.sportinspect.config.Constant;
+import vinno.sportinspect.config.StatusConstant;
+import vinno.sportinspect.utils.log.LogUtil;
+
+public class NibpByFSRKB extends BaseDevices{
+    private boolean newMeasure = true;
+    @Override
+    public void BLUETOOTH_CONNECT(JSONObject params) {
+        super.BLUETOOTH_CONNECT(params);
+        connect(mac, (bleDevice, isFirst) -> {
+            if (isFirst == 0) notifyDataChange(bleDevice);
+        });
+    }
+
+    private void notifyDataChange(BleDevice bleDevice) {
+        BleManager.getInstance().notify(bleDevice, Constant.FSRKB_BT_SERVER_UUID, Constant.FSRKB_BT_CHARACTERISTICS_WRITE_UUID, new BleNotifyCallback() {
+            @Override
+            public void onNotifySuccess() {
+                LogUtil.d("=============onNotifySuccess");
+
+                standby();
+            }
+
+            @Override
+            public void onNotifyFailure(BleException exception) {
+                LogUtil.d("=============onNotifyFailure" + exception.getDescription() + "==" + exception.toString());
+                BleManager.getInstance().stopNotify(bleDeviceConnection, Constant.FSRKB_BT_SERVER_UUID, Constant.FSRKB_BT_CHARACTERISTICS_WRITE_UUID);
+                disConnectDevice();
+                callBack(StatusConstant.BLE_REGISTER_NOTIFY_FAIL);
+            }
+
+            @Override
+            public void onCharacteristicChanged(byte[] data) {
+                parseData(data);
+            }
+        });
+    }
+    /**
+     * 回到就绪状态
+     */
+    private void standby() {
+        final byte[] data = new byte[1];
+//        data[0] = VianConstant.BT_STANDBY;
+        sendCommandData(data);
+    }
+
+    /**
+     * 发送命令数据
+     *
+     * @param data
+     */
+    private void sendCommandData(byte[] data) {
+        // 数据下发服务,属性为无应答写入,当手机需要发送数据给外设的时候,直接通过这个服务发送数据即可。
+        BleManager.getInstance().write(bleDeviceConnection, Constant.FSRKB_BT_SERVER_UUID, Constant.FSRKB_BT_CHARACTERISTICS_WRITE_UUID, data, new BleWriteCallback() {
+            @Override
+            public void onWriteSuccess(int current, int total, byte[] justWrite) {
+                LogUtil.d("=============write success");
+            }
+
+            @Override
+            public void onWriteFailure(BleException exception) {
+                LogUtil.d("=============write fail");
+            }
+        });
+    }
+    @Override
+    public void parseData(byte[] data) {
+        int[] value = new int[data.length];
+        for (int i = 0; i < data.length; i++) {
+            value[i] = data[i];
+        }
+        /// 血压实时测量获取的数据
+        if(value.length == 8) {
+            onRealtimeMeasure(value);
+        }
+        /// 血压结果获取
+        if(value.length == 16) {
+            onResult(value);
+        }
+    }
+
+    private void onRealtimeMeasure(int[] value) {
+        // sbp此时为中间袖带压力
+        LogUtil.d("ICP:" + int8ToUint8((byte) value[5]));
+        NibpEntity entity = new NibpEntity();
+        entity.PRESSURE = int8ToUint8((byte) value[5]);
+        entity.PULSE_STATUS = int8ToUint8((byte) value[5]) > 0 ? 1 : 0;
+        entity.PULSE = 0;
+        entity.SSY = 0;
+        entity.SZY = 0;
+        callBack(StatusConstant.BLE_ACTION_CMD_RUNTIME_DATA, entity);
+    }
+    private void onResult(int[] value) {
+        /// TODO 后面需要统一血压 错误处理
+        if (value[5] == 0 && value[6] == 0 && value[7] == 0) {
+            return;
+        }
+        LogUtil.d( "血压测量值:" + int8ToUint8((byte) value[5]) + " " + int8ToUint8((byte) value[5]));
+        NibpEntity entity = new NibpEntity();
+        entity.PULSE_STATUS = 0;
+        entity.PRESSURE = 0;
+        entity.PULSE = (int8ToUint8((byte) value[6]) & 0x00FF);;
+        entity.SSY = (int8ToUint8((byte) value[4]) & 0x00FF);
+        entity.SZY = (int8ToUint8((byte) value[5]) & 0x00FF);
+        callBack(StatusConstant.BLE_ACTION_CMD_MEASURE_DATA, entity);
+    }
+
+    public static int int8ToUint8(byte int8Value) {
+        return int8Value & 0xFF;
+    }
+
+}

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

@@ -23,7 +23,6 @@ import vinno.sportinspect.bean.NibpEntity;
 import vinno.sportinspect.config.Constant;
 import vinno.sportinspect.config.StatusConstant;
 import vinno.sportinspect.utils.log.LogUtil;
-import vinno.sportinspect.utils.vian.RecordList;
 
 import com.yuwell.analysis.BPMAnalyst;
 import com.yuwell.analysis.data.bpm.BPMData;
@@ -42,8 +41,6 @@ import com.yuwell.analysis.data.gls.UrineData;
  */
 @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;