|
@@ -0,0 +1,187 @@
|
|
|
+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());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCharacteristicChanged(byte[] data) {
|
|
|
+ LogUtil.d("=============onCharacteristicChanged changed");
|
|
|
+ bpmAnalyst.onBpmNotifyValueChanged(bleDevice.getDevice(), data);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+}
|