113 lines
3.0 KiB
JavaScript
113 lines
3.0 KiB
JavaScript
// bluetoothService.js
|
||
const COMMAND = {
|
||
START_FREE_JUMP_ROPE: 0x03,
|
||
PAUSE: 0x04,
|
||
RESUME: 0x05,
|
||
STOP: 0x06,
|
||
GET_COUNT: 'Get CT',
|
||
START_COUNT: 'Start Count',
|
||
STOP_COUNT: 'Stop Count',
|
||
CLEAN_COUNT: 'Clean Count',
|
||
GET_BATTERY: 'Get Batt'
|
||
};
|
||
|
||
const DEVICE_TYPE = {
|
||
YD_O1: 'YD-O1',
|
||
YD_Jump: 'YD_Jump'
|
||
};
|
||
|
||
function startFreeJumpRope(deviceId, serviceId, type) {
|
||
const characteristic = wx.getStorageSync('writeCharacteristic');
|
||
if (!characteristic) {
|
||
console.error('没有可写的特征值');
|
||
return;
|
||
}
|
||
const commandData = new ArrayBuffer(4);
|
||
const dataView = new DataView(commandData);
|
||
dataView.setUint8(0, COMMAND.START_FREE_JUMP_ROPE);
|
||
dataView.setUint8(1, type);
|
||
dataView.setUint8(2, 0x00);
|
||
dataView.setUint8(3, 0x00);
|
||
|
||
wx.writeBLECharacteristicValue({
|
||
deviceId: deviceId,
|
||
serviceId: serviceId,
|
||
characteristicId: characteristic,
|
||
value: commandData,
|
||
success: () => {
|
||
console.log("自由跳绳已启动!");
|
||
},
|
||
fail: (error) => {
|
||
console.error("启动自由跳绳失败", error);
|
||
}
|
||
});
|
||
}
|
||
|
||
function sendCommandJump(deviceId, serviceId, codeStr) {
|
||
const characteristic = wx.getStorageSync('writeCharacteristic');
|
||
if (!characteristic) {
|
||
console.error('没有可写的特征值');
|
||
return;
|
||
}
|
||
const startCommand = `$${codeStr}!`;
|
||
const commandData = stringToArrayBuffer(startCommand);
|
||
wx.writeBLECharacteristicValue({
|
||
deviceId: deviceId,
|
||
serviceId: serviceId,
|
||
characteristicId: characteristic,
|
||
value: commandData,
|
||
success: () => {
|
||
console.log(codeStr, "命令发送成功");
|
||
},
|
||
fail: (error) => {
|
||
console.error(codeStr, "命令发送失败", error);
|
||
}
|
||
});
|
||
}
|
||
|
||
function stringToArrayBuffer(str) {
|
||
const buffer = new ArrayBuffer(str.length);
|
||
const view = new Uint8Array(buffer);
|
||
for (let i = 0; i < str.length; i++) {
|
||
view[i] = str.charCodeAt(i) & 0xFF;
|
||
}
|
||
return buffer;
|
||
}
|
||
|
||
// 获取设备电量,根据设备型号发送不同协议的命令
|
||
function getBattery(deviceId, serviceId, deviceName) {
|
||
const characteristic = wx.getStorageSync('writeCharacteristic');
|
||
if (!characteristic) {
|
||
console.error('没有可写的特征值');
|
||
return;
|
||
}
|
||
|
||
if (deviceName === DEVICE_TYPE.YD_O1) {
|
||
// YD-O1:二进制协议获取电量
|
||
const commandData = new ArrayBuffer(4);
|
||
const dataView = new DataView(commandData);
|
||
dataView.setUint8(0, 0x07); // 获取电量命令字节
|
||
dataView.setUint8(1, 0x00);
|
||
dataView.setUint8(2, 0x00);
|
||
dataView.setUint8(3, 0x00);
|
||
wx.writeBLECharacteristicValue({
|
||
deviceId,
|
||
serviceId,
|
||
characteristicId: characteristic,
|
||
value: commandData,
|
||
success: () => console.log('YD-O1 获取电量命令已发送'),
|
||
fail: err => console.error('YD-O1 获取电量命令失败', err)
|
||
});
|
||
} else {
|
||
// YD_Jump / YD-Jump:字符串协议获取电量
|
||
sendCommandJump(deviceId, serviceId, COMMAND.GET_BATTERY);
|
||
}
|
||
}
|
||
|
||
module.exports = {
|
||
COMMAND,
|
||
DEVICE_TYPE,
|
||
startFreeJumpRope,
|
||
sendCommandJump,
|
||
getBattery
|
||
}; |