node-buzzers
Version:
Forked version of 'buzz-buzzers', updated and upgraded to support multiple USB dongles
118 lines • 3.48 kB
JavaScript
;
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