123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- const common = require('../common.js');
- const FMBMS = require('./FMBMS.js');
- const readServiceID = '0000FEE7-0000-1000-8000-00805F9B34FB';
- const readID = '000036F6-0000-1000-8000-00805F9B34FB';
- const writeServiceID = '0000FEE7-0000-1000-8000-00805F9B34FB';
- const writeID = '000036F5-0000-1000-8000-00805F9B34FB';
- const MTU = 115;
- const app = getApp();
- let subIndex = -1
- function acceptDevice(device) {
- return device.btid ? true : false;
- }
- function isSingleBt() {
- console.log('是单蓝牙');
- return true;
- }
- function haveBms() {
- console.log('是单蓝牙并且带bms');
- return true;
- }
- function isDevice(device, data) {
-
- const advertisData = new Uint8Array(data.advertisData);
- console.log(advertisData,'判断返回第几个字段是正常模式还是升级模式');
-
-
- const mac = device.btid
- .split('')
- .map((p, i) => parseInt(p + device.btid[i + 1], 16))
- .filter((p, i) => i % 2 == 0);
-
-
-
- if (data.name === "ZX2202220000000") {
- return true
- }
- return false;
- }
- function alterConnect(device, deviceId) {
-
-
-
-
-
- const data = [0x1F, 0x0F, 0x5A, 0x58, 0x32, 0x32, 0x30, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x67, 0xAC, 0x53, 0xE7, 0x08, 0x00
- ]
- const crc_data = crc8Ieee8023(data)
- console.log(crc_data, 111);
- return [
- [0x22, 0x22, 0x01, 0x1F, 0x0F, 0x5A, 0x58, 0x32, 0x32, 0x30, 0x32, 0x32, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x30, 0x30, 0x08, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x67, 0xAC, 0x53, 0xE7, 0x08, 0x00,
- crc_data, 0xAA, 0xAA
- ]
- ]
-
- }
- function crc8Ieee8023(data) {
- let crc = 0x00;
- const polynomial = 0x07;
-
- for (let byte of data) {
- crc ^= byte;
-
- for (let i = 0; i < 8; i++) {
- if (crc & 0x80) {
- crc = (crc << 1) ^ polynomial;
- } else {
- crc <<= 1;
- }
- }
-
- crc &= 0xFF;
- }
-
- return '0x' + crc.toString(16).toUpperCase().padStart(2, '0');
- }
- function readData(device, value, data) {
-
- var value = new Uint8Array(value);
- console.log(value, 'value**************************');
- switch (value[0]) {
- case 0:
-
- switchFactory(device)
- break;
- }
-
-
-
-
-
- return data;
- }
- function parseOTAData(){
-
-
- }
- function sendCommand(cmd, data = []) {
- const startCmd = [0x02, 0x02]
- const endCmd = [0xAA, 0xAA]
- data = startCmd.concat(cmd).concat(endCmd)
- console.log(data,'打印是否切换正常模式');
- return data
- }
- function stateUpdate(device, deviceId) {
- return [sendCommand(0x04), sendCommand(0x02, FMBMS
- .BMSRead())];
- }
- function turnOn(device, deviceId) {
- return [sendCommand(0x02, FMBMS.BMSTurnOn())];
- }
- function turnOff(device, deviceId) {
- return [sendCommand(0x02, FMBMS.BMSTurnOff())];
- }
- function switchFactory(device, deviceId) {
-
-
-
- return [[0x22,0x22,0x54,0x01,0x01,0x12,0xAA,0xAA]]
-
- }
- async function otaUpgrade(device, deviceId) {
-
-
- const subPackage = await readBinBinarayToCommand()
-
- return dataRecursion(subPackage)
-
-
-
-
-
-
-
-
-
-
- }
- function dataRecursion(subPackage){
- subIndex += 1
- let endPackage = 0x00
- if(subPackage.groupedArray.length - 1 == subIndex){
- endPackage = 0x01
- }
- let startArray = [0x22,0x22,0x30,0x30,0x00,0x58,0x00]
- startArray = startArray.concat(decimalToHexBytes(subPackage.size,4))
- console.log(222222)
- startArray = startArray.concat(decimalToHexBytes(subIndex + 1,2))
- startArray.push(endPackage)
- startArray = startArray.concat(subPackage.groupedArray[subIndex])
- startArray.push(0xCB)
- console.log(subPackage.groupedArray[subIndex])
- startArray = startArray.concat([0xAA,0xAA])
-
- console.log(startArray)
- return startArray
- }
- async function readBinBinarayToCommand() {
- let res = await uni.request({
- url: 'https://opt.bms16.com/ota.BIN',
- method: 'GET',
- responseType: 'arraybuffer',
- });
-
- return arrayBufferToHexWithPrefix(res[1].data)
- }
- function arrayBufferToHexWithPrefix(buffer,groupSize = 80) {
- const uint8Array = new Uint8Array(buffer);
- const groupedArray = [];
- const size = uint8Array.length
-
- for (let i = 0; i < size; i += groupSize) {
- const group = Array.from(uint8Array.slice(i, i + groupSize))
-
- groupedArray.push(group);
- }
-
- return {
- size,
- groupedArray
- };
- }
- function decimalToHexBytes(decimal,bytes){
- const maxValue = Math.pow(2, 8 * bytes) - 1;
-
- const byteArray = new Array(bytes);
-
- for (let i = 0; i < bytes; i++) {
-
- byteArray[bytes - 1 - i] = decimal & 0xff;
-
- decimal >>>= 8;
- }
- return byteArray;
- }
- module.exports = {
- readServiceID: readServiceID,
- readID: readID,
- writeServiceID: writeServiceID,
- writeID: writeID,
- MTU: MTU,
- acceptDevice: acceptDevice,
- isDevice: isDevice,
- alterConnect: alterConnect,
- readData: readData,
- stateUpdate: stateUpdate,
- turnOn: turnOn,
- turnOff: turnOff,
- isSingleBt: isSingleBt,
- haveBms: haveBms,
- switchFactory: switchFactory,
- otaUpgrade
- };
|