|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|