From c2cfcd5f902e92ff820da802b2b7cce87e643daa Mon Sep 17 00:00:00 2001 From: blak-kong <546598185@qq.com> Date: Sat, 3 Feb 2024 09:54:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/bluetoot/InstrumentTypeEnum.js | 18 ++-- src/components/bluetoot/connection/index.tsx | 96 +++++++++++-------- src/pages/index/index.tsx | 19 ++-- src/store/features/deviceInfo.js | 23 ++++- 4 files changed, 99 insertions(+), 57 deletions(-) diff --git a/src/components/bluetoot/InstrumentTypeEnum.js b/src/components/bluetoot/InstrumentTypeEnum.js index 48bd86a..eef976a 100644 --- a/src/components/bluetoot/InstrumentTypeEnum.js +++ b/src/components/bluetoot/InstrumentTypeEnum.js @@ -1,10 +1,16 @@ const InstrumentTypeEnum = { //仪器类型 - FR200: 1, - MATRIX: 2, - WL200: 3, - FR380: 4, - FR390: 5, - M01: 6, + // FR200: 1, + // MATRIX: 2, + // WL200: 3, + // FR380: 4, + // FR390: 5, + // M01: 6, + FR200: "FR200", + MATRIX: "MATRIX", + WL200: "WL200", + FR380: "FR380", + FR390: "FR390", + M01: "M01", }; export default InstrumentTypeEnum; diff --git a/src/components/bluetoot/connection/index.tsx b/src/components/bluetoot/connection/index.tsx index 4b1eb5d..585a909 100644 --- a/src/components/bluetoot/connection/index.tsx +++ b/src/components/bluetoot/connection/index.tsx @@ -8,7 +8,10 @@ import DeviceConnectPopup from "../device-connection-popup/device-connection-pop /*** redux ***/ import { connect } from "react-redux"; -import { setBluetoothInfo } from "../../../store/features/deviceInfo"; +import { + setBluetoothInfo, + setDeviceId, +} from "../../../store/features/deviceInfo"; /*** redux end ***/ import { @@ -305,11 +308,22 @@ class ConnectionBluetoot extends Component { ).indexOf(`${type}`) !== -1 ) { console.info("连接的设备信息", item.devices[i], type); + let params = { + deviceId: item.devices[i].deviceId, + servicesuuid: item.devices[i].serviceId, + characteristicsuuid0: item.devices[i].characteristics[0].uuid, + characteristicsuuid1: item.devices[i].characteristics[1].uuid, + characteristicId: "", + }; + this.props.setBluetoothInfo(params); - clearInterval(searchBluetootTimers); - Taro.stopBluetoothDevicesDiscovery(); //停止搜索蓝牙 - // app.globalData.deviceInfo.deviceId = item.devices[i].deviceId; - this.createBLEConnection(); + setTimeout(() => { + console.log("this.props.bluetoothInfo", this.props.bluetoothInfo); + clearInterval(searchBluetootTimers); + Taro.stopBluetoothDevicesDiscovery(); //停止搜索蓝牙 + // app.globalData.deviceInfo.deviceId = item.devices[i].deviceId; + this.createBLEConnection(); + }, 10); break; } } @@ -327,13 +341,10 @@ class ConnectionBluetoot extends Component { /*********开始主动连接*******/ createBLEConnection(this.props.bluetoothInfo.deviceId) .then((res) => { + console.log("createBLEConnection", res); let { errno, errMsg } = res; if (errno == 0) { - if ( - deviceInfo.type == InstrumentTypeEnum.FR200 || - deviceInfo.type == InstrumentTypeEnum.FR380 || - deviceInfo.type == InstrumentTypeEnum.FR390 - ) { + if (this.props.yiqiInfo.model === "WL200") { this.setState({ connectionStatus: true, }); @@ -358,14 +369,19 @@ class ConnectionBluetoot extends Component { /** 6.获取蓝牙特征值 */ getBLEDeviceServices() { + console.log("========6.获取蓝牙特征值========"); getBLEDeviceServices(this.props.bluetoothInfo.deviceId) .then((res) => { + console.log("特征值", res); let bluetoothInfo = this.props.bluetoothInfo; bluetoothInfo.servicesuuid = res.servicesuuid; bluetoothInfo.characteristicsuuid1 = res.characteristicsuuid1; bluetoothInfo.characteristicsuuid0 = res.characteristicsuuid0; this.props.setBluetoothInfo(bluetoothInfo); - this.notifyBLECharacteristicValueChange(); + + setTimeout(() => { + this.notifyBLECharacteristicValueChange(); + }, 10); }) .catch((err) => { let { errno, errMsg } = err; @@ -376,8 +392,10 @@ class ConnectionBluetoot extends Component { /** 7.通知BLE特征值更改 */ notifyBLECharacteristicValueChange() { + console.log("7.通知BLE特征值更改"); const { yiqiInfo: deviceInfo } = this.props; const bluetoothInfo = this.props.bluetoothInfo; + console.log("bluetoothInfo", bluetoothInfo); notifyBLECharacteristicValueChange({ deviceId: bluetoothInfo.deviceId, servicesuuid: bluetoothInfo.servicesuuid, @@ -391,24 +409,22 @@ class ConnectionBluetoot extends Component { console.info("onBLECharacteristicValueChange value => ", value); let str = ab2hex(value.value); //转为16进制字符串 let connectionStatus = [ - InstrumentTypeEnum.FR200, - InstrumentTypeEnum.WL200, - InstrumentTypeEnum.FR380, - InstrumentTypeEnum.FR390, - InstrumentTypeEnum.M01, - ].includes(Number(deviceInfo.type)); - const isFRDevice = [ - InstrumentTypeEnum.FR200, - InstrumentTypeEnum.FR380, - InstrumentTypeEnum.FR390, - ].includes(Number(deviceInfo.type)); + "FR200", + "WL200", + "FR380", + "FR390", + "M01", + ].includes(deviceInfo.model); + const isFRDevice = ["FR200", "FR380", "FR390"].includes( + deviceInfo.model + ); if (isFRDevice) { this.setState({ connectionStatus, }); log.info( commandMap.reciviedBLECommand, - `仪器类型: ${deviceInfo.type}`, + `仪器模式: ${deviceInfo.model}`, value ); filterBleData(str).forEach((item) => { @@ -454,8 +470,8 @@ class ConnectionBluetoot extends Component { `connection_guide, ${deviceInfo.type}:${versionInfo.version}` ); if ( - deviceInfo.type == InstrumentTypeEnum.FR380 || - deviceInfo.type == InstrumentTypeEnum.FR390 + deviceInfo.model == "FR380" || + deviceInfo.model == "FR390" ) { console.log("跳转护理页"); // this.triggerEvent("offlineChange", this.state); @@ -510,7 +526,7 @@ class ConnectionBluetoot extends Component { } else { let jsonStatus: any = null; let querySubDeviceArrayBuffer; - if (deviceInfo.type == InstrumentTypeEnum.WL200) { + if (deviceInfo.model == "WL200") { // querySubDeviceArrayBuffer = deviceToolKitInstanceWL200.toBleCommand(bleCommandSamples.querySubDevice); // jsonStatus = deviceToolKitInstanceWL200.toJsonStatus(value.value); jsonStatus = deviceToolKitInstanceM01.toJsonStatus(value.value); @@ -518,7 +534,7 @@ class ConnectionBluetoot extends Component { deviceToolKitInstanceM01.toBleCommand( bleCommandSamples.querySubDevice as any ); // todo - } else if (deviceInfo.type == InstrumentTypeEnum.M01) { + } else if (deviceInfo.model == "M01") { jsonStatus = deviceToolKitInstanceM01.toJsonStatus(value.value); querySubDeviceArrayBuffer = deviceToolKitInstanceM01.toBleCommand( @@ -527,7 +543,7 @@ class ConnectionBluetoot extends Component { } log.info( commandMap.reciviedBLECommand, - `仪器类型: ${deviceInfo.type}`, + `仪器模式: ${deviceInfo.model}`, jsonStatus ); if (jsonStatus?.commandType === "BleMatch") { @@ -633,22 +649,19 @@ class ConnectionBluetoot extends Component { * type4 FR380 */ console.log("发送配对码"); - if (deviceInfo.type == InstrumentTypeEnum.FR200) { + if (deviceInfo.model == "FR200") { if (sendPairingTimer) clearInterval(sendPairingTimer); sendPairingTimer = setInterval(() => { this.sendPairingSignal(); }, 1000); - } else if ( - deviceInfo.type == InstrumentTypeEnum.WL200 || - deviceInfo.type == InstrumentTypeEnum.M01 - ) { + } else if (deviceInfo.model == "WL200" || deviceInfo.model == "M01") { if (sendPairingTimer) clearInterval(sendPairingTimer); sendPairingTimer = setInterval(() => { this.sendPairingSignal(); }, 1000); } else if ( - deviceInfo.type == InstrumentTypeEnum.FR380 || - deviceInfo.type == InstrumentTypeEnum.FR390 + deviceInfo.model == "FR380" || + deviceInfo.model == "FR390" ) { if (sendPairingTimer) clearInterval(sendPairingTimer); sendPairingTimer = setInterval(() => { @@ -682,11 +695,7 @@ class ConnectionBluetoot extends Component { // 8.发送指令:获取仪器版本号 sendGetVersion() { const { yiqiInfo: deviceInfo } = this.props; - const isFRDevice = [ - InstrumentTypeEnum.FR200, - InstrumentTypeEnum.FR380, - InstrumentTypeEnum.FR390, - ].includes(Number(deviceInfo.type)); + const isFRDevice = ["FR200", "FR380", "FR390"].includes(deviceInfo.model); log.info(commandMap.sendVersionCommand, `仪器:${deviceInfo.type}`); if (isFRDevice) { writeBLECharacteristicValue({ @@ -768,7 +777,7 @@ class ConnectionBluetoot extends Component { const { yiqiInfo: deviceInfo } = this.props; log.info(commandMap.sendMatchCode, `仪器:${deviceInfo.type}发送匹配码`); let matchArrayBuffer: any = null; - switch (deviceInfo.type) { + switch (deviceInfo.model) { case InstrumentTypeEnum.FR200: matchArrayBuffer = deviceToolKitInstanceFR200.toBleCommand( bleCommandSamples.match as any @@ -1078,7 +1087,7 @@ class ConnectionBluetoot extends Component { infoQueryType: "offlineClockSummary", }; const value = - deviceInfo.type == InstrumentTypeEnum.WL200 + deviceInfo.model == InstrumentTypeEnum.WL200 ? deviceToolKitInstanceWL200.toBleCommand(versionCommand as any) : deviceToolKitInstanceM01.toBleCommand(versionCommand as any); sendCommand({ value }).then(); @@ -1135,5 +1144,8 @@ const mapDispatchToProps = (dispatch) => ({ setBluetoothInfo(data) { dispatch(setBluetoothInfo(data)); }, + setDeviceId(data) { + dispatch(setDeviceId(data)); + }, }); export default connect(mapStateToProps, mapDispatchToProps)(ConnectionBluetoot); diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index d9dcbab..5f2a897 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -573,22 +573,21 @@ class Index extends Component { goNursing = (item) => { console.log("goNursing", item); setStorageSync("instrument_detail", JSON.stringify(item)); + // setStorageSync("connectInstrument", JSON.stringify(item)); - // this.setState({ instrument_detail: item }); - // this.setState({ connectInstrument: item }); - // setTimeout(() => this.bindBlockLeft()); + this.setState({ connectInstrument: item }); + setTimeout(() => this.bindBlockLeft()); // isConnectShow - setTimeout(() => { - go("/pages/instrumentClickinUpload/index?id=" + item.id); - }, 10); + // setTimeout(() => { + // go("/pages/instrumentClickinUpload/index?id=" + item.id); + // }, 10); // go("/pages/instrument/intro?id=" + item.id); }; /* 扫码进入逻辑 */ /** 蓝牙逻辑 */ bindBlockLeft() { - console.log("this.state.userinfo", this.state.userinfo); if (!this.state.userinfo.mobile) { //未注册授权 this.alertRegister(); @@ -596,6 +595,9 @@ class Index extends Component { } if (this.state.connectInstrument.type === 1) { //非IOT + setTimeout(() => { + go("/pages/instrumentClickinUpload/index"); + }, 10); } else { Taro.getSystemInfo({ success: (res) => { @@ -716,6 +718,7 @@ class Index extends Component { //连接完成时数据的回调 offlineChange = async (e) => { + console.log("offlineChange", e); const that = this; log.info( commandMap.versionInfoHome, @@ -1131,6 +1134,8 @@ class Index extends Component { yiqiInfo={connectInstrument} close={this.connectionClose} confirm={this.connectionConfirm} + offlineChange={this.offlineChange} + pairingChange={this.pairingChange} /> )} {/* */} diff --git a/src/store/features/deviceInfo.js b/src/store/features/deviceInfo.js index a87398a..e84d158 100644 --- a/src/store/features/deviceInfo.js +++ b/src/store/features/deviceInfo.js @@ -18,10 +18,29 @@ const deviceInfoReducer = createSlice({ state = JSON.parse(JSON.stringify(payload)); }, setBluetoothInfo(state, { payload }) { - state.bluetoothInfo = JSON.parse(JSON.stringify(payload)); + console.log("setBluetoothInfo payload", payload); + // state.bluetoothInfo = JSON.parse(JSON.stringify(payload)); + // console.log("state.bluetoothInfo", state.bluetoothInfo); + state.bluetoothInfo.deviceId = payload.deviceId; + if (payload.servicesuuid) { + state.bluetoothInfo.servicesuuid = payload.servicesuuid; + } + if (payload.characteristicsuuid0) { + state.bluetoothInfo.characteristicsuuid0 = payload.characteristicsuuid0; + } + if (payload.characteristicsuuid1) { + state.bluetoothInfo.characteristicsuuid1 = payload.characteristicsuuid1; + } + if (payload.characteristicId) { + state.bluetoothInfo.characteristicId = payload.characteristicId; + } + }, + setDeviceId(state, { payload }) { + console.log("setDeviceId payload", payload); + state.bluetoothInfo.deviceId = payload.deviceId; }, }, }); -export const { setBluetoothInfo } = deviceInfoReducer.actions; +export const { setBluetoothInfo, setDeviceId } = deviceInfoReducer.actions; export default deviceInfoReducer.reducer;