|
|
|
@ -80,8 +80,8 @@ Page({
|
|
|
|
|
console.log("advertisData: ",hexStr)
|
|
|
|
|
// 连接指定设备
|
|
|
|
|
// if(device.deviceId=="03:02:02:07:65:98"){
|
|
|
|
|
// if(device.deviceId=="03:02:02:07:5F:AF"){
|
|
|
|
|
if(device.deviceId=="03:02:02:07:64:B4"){
|
|
|
|
|
if(device.deviceId=="03:02:02:07:5F:AF"){
|
|
|
|
|
// if(device.deviceId=="03:02:02:07:5E:BE"){
|
|
|
|
|
this.connectToDevice(device.deviceId);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
@ -172,7 +172,7 @@ Page({
|
|
|
|
|
const dataView = new DataView(res.value);
|
|
|
|
|
// 获取第一个字节
|
|
|
|
|
let cmdType = dataView.getUint8(0);
|
|
|
|
|
console.log("cmdType",cmdType);
|
|
|
|
|
// console.log("cmdType",cmdType);
|
|
|
|
|
switch (cmdType) {
|
|
|
|
|
case 0x01:
|
|
|
|
|
console.log("同步时间成功");
|
|
|
|
@ -216,17 +216,23 @@ Page({
|
|
|
|
|
break;
|
|
|
|
|
case 0x52:
|
|
|
|
|
let stepDetailList = ParseDataPacket.parseStepDetailList(dataView,0);
|
|
|
|
|
console.log("步数详情数据:",stepDetailList);
|
|
|
|
|
if(dataView.byteLength % 25 == 2){
|
|
|
|
|
console.log("收到步数结束符号,最后一条指令【结束】",dataView.byteLength)
|
|
|
|
|
}
|
|
|
|
|
// console.log("步数详情数据:",stepDetailList);
|
|
|
|
|
// 调用后台接口 todo ....
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新缓存
|
|
|
|
|
HealthDataCache.updateStepData(stepDetailList[0].startTime);
|
|
|
|
|
break;
|
|
|
|
|
case 0x55:
|
|
|
|
|
let heartRateList = ParseDataPacket.parseDataList(dataView,0);
|
|
|
|
|
let respList = this.getRespiratoryList(heartRateList);
|
|
|
|
|
console.log("心率数据:",heartRateList);
|
|
|
|
|
if(dataView.byteLength % 10 == 2){
|
|
|
|
|
console.log("收到心率结束符号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",dataView.byteLength)
|
|
|
|
|
// 需要调用下一个指令(血氧)
|
|
|
|
|
this.sendHealthCommand(0x66)
|
|
|
|
|
}
|
|
|
|
|
// console.log("心率数据:",heartRateList);
|
|
|
|
|
// console.log("呼吸率数据:",respList);
|
|
|
|
|
// 调用后台接口 todo ....
|
|
|
|
|
|
|
|
|
@ -236,7 +242,12 @@ Page({
|
|
|
|
|
break;
|
|
|
|
|
case 0x56:
|
|
|
|
|
let parseBloodList = ParseDataPacket.parseBloodPressureList(dataView,0);
|
|
|
|
|
console.log("血压数据:",parseBloodList);
|
|
|
|
|
if(dataView.byteLength % 15 == 2){
|
|
|
|
|
console.log("收到血压结束符号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",dataView.byteLength)
|
|
|
|
|
// 需要调用下一个指令(体温)
|
|
|
|
|
this.sendHealthCommand(0x65)
|
|
|
|
|
}
|
|
|
|
|
// console.log("血压数据:",parseBloodList);
|
|
|
|
|
// 调用后台接口 todo ....
|
|
|
|
|
|
|
|
|
|
// 更新缓存
|
|
|
|
@ -248,7 +259,12 @@ Page({
|
|
|
|
|
break;
|
|
|
|
|
case 0x66:
|
|
|
|
|
let bloodOxygenList = ParseDataPacket.parseDataList(dataView,0);
|
|
|
|
|
console.log("血氧数据:",bloodOxygenList);
|
|
|
|
|
if(dataView.byteLength % 10 == 2){
|
|
|
|
|
console.log("收到血氧结束符号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",dataView.byteLength)
|
|
|
|
|
// 需要调用下一个指令(血压)
|
|
|
|
|
this.sendHealthCommand(0x56)
|
|
|
|
|
}
|
|
|
|
|
// console.log("血氧数据:",bloodOxygenList);
|
|
|
|
|
// 调用后台接口 todo ....
|
|
|
|
|
|
|
|
|
|
// 更新缓存
|
|
|
|
@ -256,9 +272,14 @@ Page({
|
|
|
|
|
break;
|
|
|
|
|
case 0x65:
|
|
|
|
|
let tempList = ParseDataPacket.parseTempList(dataView,0);
|
|
|
|
|
if(dataView.byteLength % 11 == 2){
|
|
|
|
|
console.log("收到体温结束符号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",dataView.byteLength)
|
|
|
|
|
// 需要调用下一个指令(体温)
|
|
|
|
|
this.sendHealthCommand(0x53)
|
|
|
|
|
}
|
|
|
|
|
// 目前返回的包括环境温度,后续固件改成只采集佩戴情况下的体温,暂时过滤掉 oneValue 小于 35.0 的数据
|
|
|
|
|
const filteredData = tempList.filter(item => item.oneValue >= 35.0);
|
|
|
|
|
console.log("体温数据:",tempList);
|
|
|
|
|
// console.log("体温数据:",tempList);
|
|
|
|
|
|
|
|
|
|
if(filteredData.length > 0){
|
|
|
|
|
// todo 调用后端接口
|
|
|
|
@ -271,8 +292,25 @@ Page({
|
|
|
|
|
let id = dataView.getUint8(1);
|
|
|
|
|
// 睡眠数据结束符
|
|
|
|
|
if(dataView.byteLength == 2 && id == 0xff){
|
|
|
|
|
console.log("收到睡眠结束符号>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",dataView.byteLength)
|
|
|
|
|
// 需要调用下一个指令(体温)
|
|
|
|
|
// this.sendHealthCommand(0x52)
|
|
|
|
|
|
|
|
|
|
let list = this.data.sleepList;
|
|
|
|
|
if(list.length > 0){
|
|
|
|
|
let arr = CommonUtil.assembleSleepData(list);
|
|
|
|
|
arr.forEach(item =>{
|
|
|
|
|
// 排序算法
|
|
|
|
|
item.sleepList.sort((a, b) => {
|
|
|
|
|
// 先比较 yyyyMMdd
|
|
|
|
|
if (a.yyyyMMdd !== b.yyyyMMdd) {
|
|
|
|
|
return a.yyyyMMdd.localeCompare(b.yyyyMMdd);
|
|
|
|
|
}
|
|
|
|
|
// 再比较 minute
|
|
|
|
|
return a.minute - b.minute;
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
console.log("接口需要的睡眠数据:",arr);
|
|
|
|
|
|
|
|
|
|
// // 更新缓存
|
|
|
|
@ -282,6 +320,7 @@ Page({
|
|
|
|
|
this.setData({
|
|
|
|
|
sleepList: []
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
let sleepList = ParseDataPacket.parseSleepList(dataView,0);
|
|
|
|
|
// 排序,minute 越大排前面
|
|
|
|
@ -299,7 +338,7 @@ Page({
|
|
|
|
|
this.setData({
|
|
|
|
|
sleepList: updatedSleepList
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.log("data数据:",this.data.sleepList)
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
@ -322,8 +361,10 @@ Page({
|
|
|
|
|
|
|
|
|
|
getPower(){
|
|
|
|
|
// 获取电量
|
|
|
|
|
const batteryPacket = DataPacket.generateBatteryCheckPacket();
|
|
|
|
|
SendCommandUtil.sendPackage(this.data.deviceId,batteryPacket);
|
|
|
|
|
// const batteryPacket = DataPacket.generateBatteryCheckPacket();
|
|
|
|
|
// SendCommandUtil.sendPackage(this.data.deviceId,batteryPacket);
|
|
|
|
|
|
|
|
|
|
this.sendHealthCommand(0x53)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getStep(){
|
|
|
|
@ -332,60 +373,70 @@ Page({
|
|
|
|
|
SendCommandUtil.sendPackage(this.data.deviceId,stepPacket);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
sendHealthCommand(){
|
|
|
|
|
// 指令依次是:心率,血氧、血压、体温、睡眠、步数
|
|
|
|
|
// 0x55,0x66,0x56,0x65,0x53,0x52
|
|
|
|
|
const commands = [0x55];
|
|
|
|
|
// 递归发送命令并加上 5 秒延迟
|
|
|
|
|
function sendNextCommand(index = 0) {
|
|
|
|
|
if (index >= commands.length) return; // 所有命令发送完毕,结束
|
|
|
|
|
const cmd = commands[index];
|
|
|
|
|
const packet = DataPacket.generateReadDataPacket(cmd);
|
|
|
|
|
console.log("hexStr", this.uint8ArrayToHex(packet));
|
|
|
|
|
|
|
|
|
|
// 发送命令包
|
|
|
|
|
SendCommandUtil.sendPackage(this.data.deviceId, packet);
|
|
|
|
|
|
|
|
|
|
// 每发送完一个命令后,等待 3 秒继续发送下一个
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
sendNextCommand.call(this, index + 1);
|
|
|
|
|
}, 3500); // 延迟 3.5 秒
|
|
|
|
|
sendHealthCommand(cmd){
|
|
|
|
|
// 如果不传则默认发送心率
|
|
|
|
|
if(cmd == null){
|
|
|
|
|
cmd = 0x55;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 开始发送第一个命令,并保持 `this` 上下文
|
|
|
|
|
sendNextCommand.call(this,0);
|
|
|
|
|
|
|
|
|
|
let packet = DataPacket.generateReadDataPacket(cmd);
|
|
|
|
|
console.log("发送指令到设备端>>>:", this.uint8ArrayToHex(packet));
|
|
|
|
|
SendCommandUtil.sendPackage(this.data.deviceId, packet);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// sendHealthCommand2(){
|
|
|
|
|
// // 指令依次是:心率,血氧、血压、体温、睡眠、步数
|
|
|
|
|
// // 0x55,0x66,0x56,0x65,0x53,0x52
|
|
|
|
|
// const commands = [0x55];
|
|
|
|
|
// // 递归发送命令并加上 5 秒延迟
|
|
|
|
|
// function sendNextCommand(index = 0) {
|
|
|
|
|
// if (index >= commands.length) return; // 所有命令发送完毕,结束
|
|
|
|
|
// const cmd = commands[index];
|
|
|
|
|
// const packet = DataPacket.generateReadDataPacket(cmd);
|
|
|
|
|
// console.log("hexStr", this.uint8ArrayToHex(packet));
|
|
|
|
|
|
|
|
|
|
// // 发送命令包
|
|
|
|
|
// SendCommandUtil.sendPackage(this.data.deviceId, packet);
|
|
|
|
|
|
|
|
|
|
// // 每发送完一个命令后,等待 3 秒继续发送下一个
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// sendNextCommand.call(this, index + 1);
|
|
|
|
|
// }, 3500); // 延迟 3.5 秒
|
|
|
|
|
// }
|
|
|
|
|
// // 开始发送第一个命令,并保持 `this` 上下文
|
|
|
|
|
// sendNextCommand.call(this,0);
|
|
|
|
|
// },
|
|
|
|
|
|
|
|
|
|
// 获取健康数据
|
|
|
|
|
getHealthData(){
|
|
|
|
|
|
|
|
|
|
// 睡眠数据
|
|
|
|
|
// const sleepPacket = DataPacket.generateReadSleepDataPacket();
|
|
|
|
|
// SendCommandUtil.sendPackage(this.data.deviceId,sleepPacket);
|
|
|
|
|
const sleepPacket = DataPacket.generateReadSleepDataPacket(0x53);
|
|
|
|
|
SendCommandUtil.sendPackage(this.data.deviceId,sleepPacket);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取当前时间
|
|
|
|
|
let currentTime = Math.floor(new Date().getTime() / 1000);
|
|
|
|
|
// 如果是第一次调用,则不判断时间,如果是第二次调用,要判断本次调用与上次是否间隔18秒(因手表机制问题,不能频繁发送指令给手表端)
|
|
|
|
|
console.log(this.data.initTime,this.data.initIndex)
|
|
|
|
|
if(this.data.initIndex === 0){
|
|
|
|
|
this.sendHealthCommand();
|
|
|
|
|
this.setData({
|
|
|
|
|
initIndex: this.data.initIndex + 1,
|
|
|
|
|
initTime: currentTime
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
// 初始时间
|
|
|
|
|
let initTime = this.data.initTime
|
|
|
|
|
let timeDifference = currentTime - initTime;
|
|
|
|
|
if(this.data.initIndex > 0 && timeDifference > 18){
|
|
|
|
|
console.log(timeDifference,this.data.initIndex)
|
|
|
|
|
this.setData({
|
|
|
|
|
initIndex: this.data.initIndex + 1,
|
|
|
|
|
initTime: currentTime
|
|
|
|
|
})
|
|
|
|
|
this.sendHealthCommand();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// let currentTime = Math.floor(new Date().getTime() / 1000);
|
|
|
|
|
// // 如果是第一次调用,则不判断时间,如果是第二次调用,要判断本次调用与上次是否间隔18秒(因手表机制问题,不能频繁发送指令给手表端)
|
|
|
|
|
// console.log(this.data.initTime,this.data.initIndex)
|
|
|
|
|
// if(this.data.initIndex === 0){
|
|
|
|
|
// this.sendHealthCommand();
|
|
|
|
|
// this.setData({
|
|
|
|
|
// initIndex: this.data.initIndex + 1,
|
|
|
|
|
// initTime: currentTime
|
|
|
|
|
// })
|
|
|
|
|
// } else {
|
|
|
|
|
// // 初始时间
|
|
|
|
|
// let initTime = this.data.initTime
|
|
|
|
|
// let timeDifference = currentTime - initTime;
|
|
|
|
|
// if(this.data.initIndex > 0 && timeDifference > 18){
|
|
|
|
|
// console.log(timeDifference,this.data.initIndex)
|
|
|
|
|
// this.setData({
|
|
|
|
|
// initIndex: this.data.initIndex + 1,
|
|
|
|
|
// initTime: currentTime
|
|
|
|
|
// })
|
|
|
|
|
// this.sendHealthCommand();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|