interactive-gpio-node
Version:
120 lines (119 loc) • 4.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Bouton = void 0;
const rxjs_1 = require("rxjs");
class Bouton {
boutonsConfig;
setLed;
mode;
boutonProd = null;
boutonDev = null;
ledSub = {};
ledControl = {};
freezeFlag = {};
constructor(bouton, boutonsConfig, setLed = false, mode = "dev") {
this.boutonsConfig = boutonsConfig;
this.setLed = setLed;
this.mode = mode;
// Assigner les objets BoutonInterface en fonction du mode
if (bouton.length > 0 && (mode === "prod" || mode === "debug")) {
this.boutonProd = bouton[0];
}
if (bouton.length === 1 && (mode === "dev" || mode === "debug")) {
this.boutonDev = bouton[0];
}
if (bouton.length > 1 && (mode === "dev" || mode === "debug")) {
this.boutonDev = bouton[1];
}
// Configurer les LED si setLed est vrai
if (setLed) {
this.setLED(boutonsConfig);
}
}
/**
* Récupère l'objet contenant les observables des événements de pression des boutons.
* Renvoie un objet vide si le mode n'est pas "prod", "dev" ou "debug".
*/
get keys() {
if (this.boutonProd && (this.mode === "prod")) {
return this.boutonProd.keys;
}
if (this.boutonDev && (this.mode === "dev")) {
return this.boutonDev.keys;
}
if (this.boutonDev?.keys && this.boutonProd?.keys && (this.mode === "debug")) {
const keys = {};
Object.keys(this.boutonProd.keys).forEach((key) => {
if (this.boutonProd?.keys && this.boutonDev?.keys) {
keys[key] = (0, rxjs_1.merge)(this.boutonProd.keys[key], this.boutonDev.keys[key]);
}
});
return keys;
}
return {};
}
// Récupère les broches des boutons
get pin() {
if (this.boutonProd && (this.mode === "prod" || this.mode === "debug")) {
return this.boutonProd.pin;
}
if (this.boutonDev && (this.mode === "dev" || this.mode === "debug")) {
return this.boutonDev.pin;
}
return {};
}
// Récupère les contrôles des LED
get led() {
return this.ledControl;
}
// Récupère l'observable d'un bouton en fonction de son label
keysLabel(label) {
return this.keys[this.pin[label]];
}
// Configure les contrôles des LED
setLED(boutonsConfig) {
return Promise.all(boutonsConfig.map((bouton) => {
if (bouton.pinLED) {
import('../output/gpio_Controle_Analogique.js')
.then(({ Gpio_Controle_Analogique }) => {
this.ledControl[bouton.label] = new Gpio_Controle_Analogique(bouton.pinLED);
}).catch((error) => {
// Gère les erreurs d'importation
console.error(`Erreur lors de l'importation du module Gpio_Controle_Analogique : ${error}`);
});
}
}));
}
// Met en pause la LED associée à un label donné
freeze(label) {
if (!this.freezeFlag[label]) {
this.freezeFlag[label] = true;
this.led[label].turnOff();
}
}
// Réactive la LED associée à un label donné
unFreeze(label) {
if (this.freezeFlag[label]) {
this.freezeFlag[label] = false;
this.led[label].turnOn();
}
this.led[label].turnOn();
}
// Met en pause toutes les LED
freezeAll() {
Object.keys(this.ledControl).forEach((label) => {
this.freeze(label);
});
}
// Réactive toutes les LED
unFreezeAll() {
Object.keys(this.ledControl).forEach((label) => {
this.unFreeze(label);
});
}
// Vérifie si une LED associée à un label est en pause
isFreeze(label) {
return this.freezeFlag[label];
}
}
exports.Bouton = Bouton;