UNPKG

node-buzzers

Version:

Forked version of 'buzz-buzzers', updated and upgraded to support multiple USB dongles

118 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function Buzzer(device) { // Array of states // `false` means the button is not pressed // and `true` when a button is pressed let previousStates = [ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, ]; const changeListeners = new Set(); const errorListeners = new Set(); const pressListeners = new Set(); const releaseListeners = new Set(); const indexToBuzzerEventData = (index) => { const buttons = 5; const controllerIndex = Math.floor(index / buttons); return { controller: (controllerIndex + 1), button: (index - controllerIndex * buttons), }; }; const triggerEvent = (eventType, payload) => { switch (eventType) { case "change": changeListeners.forEach((listener) => listener(payload)); break; case "error": errorListeners.forEach((listener) => listener(payload)); break; case "press": pressListeners.forEach((listener) => listener(payload)); break; case "release": releaseListeners.forEach((listener) => listener(payload)); } }; // Turn off all leds by default try { device.setLeds([false, false, false, false]); } catch (err) { // older versions don't have an led } device.onChange((states) => { states.forEach((state, index) => { const previousState = previousStates[index]; if (state !== previousState) { const eventType = state ? "press" : "release"; triggerEvent(eventType, indexToBuzzerEventData(index)); } }); triggerEvent("change", states); previousStates = states; }); device.onError(function (err) { triggerEvent("error", err); }); return { setLeds(led1, led2, led3, led4) { try { device.setLeds([led1, led2, led3, led4]); } catch (err) { const message = "Could not set led status. Older versions of the buzz buzzers do not support this."; triggerEvent("error", message); } }, onChange(cb) { changeListeners.add(cb); }, onError(cb) { errorListeners.add(cb); }, onPress(cb) { pressListeners.add(cb); }, onRelease(cb) { releaseListeners.add(cb); }, removeEventListener(type, callback) { switch (type) { case "change": changeListeners.delete(callback); break; case "error": errorListeners.delete(callback); break; case "press": pressListeners.delete(callback); break; case "release": releaseListeners.delete(callback); break; } }, }; } exports.default = Buzzer; //# sourceMappingURL=buzzer.js.map