UNPKG

interactive-gpio-node

Version:

120 lines (119 loc) 4.05 kB
"use strict"; 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;