From cd41bd50a41723237622bd291c0e5b4c87c0ca97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Nessj=C3=B8en?= Date: Sat, 31 Aug 2019 13:51:00 +0200 Subject: [PATCH] Minor: Made companion more resilent from USB problems on Raspbey pi 3, as discussed in #313 --- lib/usb/elgato.js | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/usb/elgato.js b/lib/usb/elgato.js index d4b896997d..6cbb4a70cb 100644 --- a/lib/usb/elgato.js +++ b/lib/usb/elgato.js @@ -147,21 +147,29 @@ elgato.prototype.quit = function () { } }; -elgato.prototype.draw = function(key, buffer) { +elgato.prototype.draw = function(key, buffer, attempts) { var self = this; - try { - key = self.mapButton(key); + // null/undefined => 0 + attempts = ~~attempts; - if (key >= 0 && !isNaN(key)) { - buffer = self.handleBuffer(buffer); - self.streamDeck.fillImage(key, buffer); - } - } catch (e) { - self.system.emit('elgatodm_remove_device', self.devicepath); + if(!attempts){ + buffer = self.handleBuffer(buffer); } + attempts++; - return true; + try { + self.streamDeck.fillImage(self.reverseButton(key), buffer); + return true; + } catch (e) { + if(attempts > 2) { + self.log('Error drawing:', e); + self.system.emit('elgatodm_remove_device', self.devicepath); + return false; + } + setTimeout(self.draw.bind(self), 20, key, buffer, attempts) + // alternatively a setImmediate() or nextTick() + } } elgato.prototype.isPressed = function(key) {