const bleno = require('bleno') const config = require('../config.json') const localEvent = require('../localEvent') var tmp = [] var idx = 0 var failFlag = false const notifyDesciptor = new bleno.Descriptor({ uuid: '8888', value: 0 }) class DataCharacteristic extends bleno.Characteristic { constructor () { super({ uuid: config.ble.uuid.characteristic, properties: ['write', 'writeWithoutResponse', 'notify'], descriptors: [ notifyDesciptor ] }) this._notifyFunc = null } onWriteRequest (data, offset, withoutResponse, callback) { console.log(`offset :: ${offset} , withoutRes :: ${withoutResponse}`) console.log(`get data`, data) if (data.length === 1 && data[0] === 0x00) { tmp = [] idx = 0 failFlag = false } else if (data.length === 1 && data[0] === 0xff) { console.log(Buffer.from(tmp).toString()) if (!failFlag) { localEvent.emit('print', Buffer.from(tmp).toString()) } } else if (!failFlag) { let pidx = ((data[0] & 0xff) << 8) + (data[1] & 0xff) if (idx !== pidx) { // insert fail method failFlag = true this.sendNotidy('fail') } idx++ tmp = [...tmp, ...data.slice(2, data.length)] } if (!withoutResponse) { console.log('send response') callback(this.RESULT_SUCCESS) } } sendNotidy (str) { if (!this._notifyFunc) return this._notifyFunc(Buffer.from(str)) } onSubscribe (maxValueSize, cb) { console.log(maxValueSize) this._notifyFunc = cb } onUnsubscribe () { this._notifyFunc = null } } module.exports = DataCharacteristic