var responseData = {code : '', status:'测量中...', data:{}} var save_point = 0 // 数据包 var packetArr = [] // function appendPacket(dataStr){ // var dataArr = packetArr // // 拆分成数组 // while (i < dataStr.length) { // dataArr.push(dataStr.substr(i, 2)) // i += 2 // if (dataArr[0] == '55' && dataArr.length >= 8 && dataArr[2] == '03') { // } // } // if (dataStr.substr(0,2) == '55'){ // packetStr = dataStr // save_point = packetStr.length // if (save_point > 8) { // save_point = 0 // return true // } // return false // } // packetStr = packetStr + dataStr // return false // } function bioland_analysisPacket_bloodPressure(dataStr, callBack){ // 第6位才能区分包类别 低于6位肯定不是正确数据 if (dataStr.length > 6) { var dataArr = [] var i = 0 // 拆分成数组 while (i < dataStr.length) { dataArr.push(dataStr.substr(i, 2)) i += 2 } // 固定码不对 证明不是正确数据 if (dataArr[0] != '55') { responseData = {} return } // 信息包 过程 结果 错误 结束 switch (dataArr[2]) { case '00': deviceInfo(dataArr) break case '02': measuring[dataArr] break case '03': // console.log('结果包', dataArr) measurementComplete(dataArr) break case 'ee': errorData(dataArr) console.log('错误包') break case '05': transmitComplete(dataArr) console.log('结束包') break } callBack(responseData) } } function deviceInfo(dataArr) { if(dataArr.length < 10) return responseData.code = '0' responseData.status = '成功获取到设备信息' if(dataArr[5] != '01'){ responseData.code = 'e' responseData.status = '设备不匹配,请连接指定血压计' } } function errorData(dataArr) { hexToDecimal(dataArr) responseData.code = 'e' responseData.status = '测量出错' responseData.data.errorCode = dataArr[3] } // 获取到测量结果 function measurementComplete(dataArr) { responseData.code = '3' responseData.status = '测量完成' // 收缩压 数据的高字节加低字节 // console.log('结果包', dataArr) responseData.systolic = parseInt(dataArr[10] + dataArr[9], 16) // 舒张压 responseData.diastolic = parseInt(dataArr[11], 16) responseData.pulse = parseInt(dataArr[12], 16) } // 测量中 function measuring(dataArr) { responseData.code = '2' responseData.status = '测量中...' // 压力值 // responseData.data.pressure = dataArr[5] + dataArr[6] // responseData.data.heartbeat = dataArr[3] } // 传输完成 function transmitComplete(dataArr) { responseData.code = '5' responseData.status = '测量完成' } function responseDataChange(){ callBack(responseData) } // 把包类别之后的16进制数据转换为10进制数据 function hexToDecimal(dataArr) { dataArr.map(function (item,index) { if(index > 2){ item = parseInt(item, 16) } return item }) } function clearData(){ } module.exports = { bioland_analysisPacket_bloodPressure: bioland_analysisPacket_bloodPressure }