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) {