From 4a8804647145becf0b866b7d7abd467ef14c9c4f Mon Sep 17 00:00:00 2001 From: Florian Haubold Date: Tue, 24 Jul 2018 09:53:49 +0200 Subject: [PATCH 1/2] Added delay between sending packets --- src/secure-dfu.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/secure-dfu.ts b/src/secure-dfu.ts index dd010cd..b4fbf8d 100644 --- a/src/secure-dfu.ts +++ b/src/secure-dfu.ts @@ -148,8 +148,11 @@ export class SecureDfu extends EventDispatcher { * Characteristic constructor * @param bluetooth A bluetooth instance * @param crc32 A CRC32 function + * @param delay Milliseconds of delay between packets */ - constructor(private crc32: (data: Array | Uint8Array, seed?: number) => number, private bluetooth?: Bluetooth) { + constructor(private crc32: (data: Array | Uint8Array, seed?: number) => number, + private bluetooth?: Bluetooth, + private delay: number = 0) { super(); if (!this.bluetooth && window && window.navigator && window.navigator.bluetooth) { @@ -361,6 +364,7 @@ export class SecureDfu extends EventDispatcher { const packet = data.slice(start, end); return this.packetChar.writeValue(packet) + .then(this.delayPromise(this.delay)) .then(() => { this.progress(offset + end); @@ -379,6 +383,16 @@ export class SecureDfu extends EventDispatcher { return crc === this.crc32(new Uint8Array(buffer)); } + private delayPromise(delay: number) { + return data => { + return new Promise((resolve, _) => { + setTimeout(() => { + resolve(data); + }, delay); + }); + }; + } + /** * Scans for a device to update * @param buttonLess Scans for all devices and will automatically call `setDfuMode` From dea6be166844bfe626ffcaddf847d158f9eb86ca Mon Sep 17 00:00:00 2001 From: Florian Haubold Date: Tue, 24 Jul 2018 14:13:51 +0200 Subject: [PATCH 2/2] Simplified delay function --- src/secure-dfu.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/secure-dfu.ts b/src/secure-dfu.ts index b4fbf8d..c444877 100644 --- a/src/secure-dfu.ts +++ b/src/secure-dfu.ts @@ -364,7 +364,7 @@ export class SecureDfu extends EventDispatcher { const packet = data.slice(start, end); return this.packetChar.writeValue(packet) - .then(this.delayPromise(this.delay)) + .then(() => this.delayPromise(this.delay)) .then(() => { this.progress(offset + end); @@ -384,13 +384,9 @@ export class SecureDfu extends EventDispatcher { } private delayPromise(delay: number) { - return data => { - return new Promise((resolve, _) => { - setTimeout(() => { - resolve(data); - }, delay); - }); - }; + return new Promise(resolve => { + setTimeout(resolve, delay); + }); } /**