////////////////////////////////////////////////////////////////////////// // _ ____ _ _ // ___| | __ _ ___ ___ / ___| |__ (_)_ __ // / __| |/ _` / __/ __| | | | '_ \| | '_ \ // | (__| | (_| \__ \__ \ | |___| | | | | |_) | // \___|_|\__,_|___/___/ \____|_| |_|_| .__/ // |_| ////////////////////////////////////////////////////////////////////////// var Chip; (function(){ /* CLASSE 'Chip' Correspond à un périphérique processeur * * @Pin1 Numéro de la première PIN * @Pin2 Numéro de la seconde PIN * @Pin... Numéro de la ... PIN * * @return Chip Retourne une instance de 'Chip' * */ Chip = function(){ /* On initialise les attributs */ this.pins = []; this.pin = {}; /* On vérifie qu'on a que des nombres entiers */ for( var i = 0 ; i < arguments.length ; i++ ) if( parseInt(arguments[i]) == arguments[i] ){ this.pins.push( parseInt(arguments[i]) ); this.pin[ parseInt(arguments[i]) ] = 0; } } Chip.prototype = { pin: this.pin, // Liste des numéros des Pin's et leurs valeur pins: this.pins // Liste des numéros des Pin's (ordonnée) }; /* ATTRIBUE UNE VALEUR A UNE PIN DONNEE * * @pin Numéro de la pin * @value Valeur dans 0-255 (ou booléen) à attribuer * */ Chip.prototype.setPin = function(pin, value){ /* [0] Vérification des paramètres =========================================================*/ /* (1) On vérifie que @pin est un entier et qu'elle existe */ if( parseInt(pin) != pin || !this.pin.hasOwnProperty(pin) ) return; /* (2) On vérifie que @value est un booléen, si oui : true=>255, false=>0 */ if( typeof value == 'boolean' ) value = value ? 255 : 0; /* (3) On vérifie que @value est dans 0-255 */ else if( value != parseInt(value) || value < 0 || value > 255 ) return; // On met @value en entier value = parseInt(value); /* [1] On attribue la valeur =========================================================*/ this.pin[pin] = value; }; /* ATTRIBUE LES VALEUR DES PIN * * @values Valeurs * */ Chip.prototype.setPins = function(values){ for( var i = 0 ; i < this.pins.length ; i++ ) this.setPin( this.pin[this.pins[i]], values[i] ); }; /* RECUPERE LA VALEUR D'UNE PIN DONNEE * * @pin Numéro de la pin à lire * * @return value Valeur entière dans 0-255 * */ Chip.prototype.getPin = function(pin){ /* [0] Vérification des paramètres =========================================================*/ /* (1) On vérifie que @pin est un entier et qu'elle existe */ if( parseInt(pin) != pin || !this.pin.hasOwnProperty(pin) ) return; /* [1] On retourne la valeur =========================================================*/ return this.pin[pin]; }; /* RECUPERE LES VALEUR DES PIN * * @return values Valeurs * */ Chip.prototype.getPins = function(){ var values = []; for( var i = 0 ; i < this.pins.length ; i++ ) values.push( this.getPin( this.pins[i] ) ); return values; }; })(); var LedInterface; (function(){ /* CONSTRUCTEUR D'INTERFACE DE LED * * @chip Puce associée à la LED * @container Conteneur de couleur * */ LedInterface = function(chip, container){ /* [0] Vérification des paramètres =========================================================*/ if( !(chip instanceof Chip) || !(container instanceof Element) ) return; /* [1] On enregistre les valeurs =========================================================*/ this.chip = chip; this.container = container; }; LedInterface.prototype = { chip: this.chip, // Puce associée à la LED container: this.container // Conteneur de couleur }; /* APPLIQUE LA COULEUR EN FONCTION DES VALEURS DE LA 'CHIP' * */ LedInterface.prototype.apply = function(){ this.container.style.background = 'rgb('+this.chip.pin[0]+','+this.chip.pin[1]+','+this.chip.pin[2]+')'; }; })(); var RelayInterface; (function(){ /* CONSTRUCTEUR D'INTERFACE DU RELAI * * @chip Puce associée au relai * @container Conteneur du relai * */ RelayInterface = function(chip, container){ /* [0] Vérification des paramètres =========================================================*/ if( !(chip instanceof Chip) || !(container instanceof Element) ) return; /* [1] On enregistre les valeurs =========================================================*/ this.chip = chip; this.container = container; }; RelayInterface.prototype = { chip: this.chip, // Puce associée au relai container: this.container // Conteneur du relai }; /* APPLIQUE L'ACTIVATION EN FONCTION DES VALEURS DE LA 'CHIP' * */ RelayInterface.prototype.apply = function(){ if( this.chip.pin[0] ) this.container.addClass('active'); else this.container.remClass('active'); }; })(); var previous; var action; (function(){ /* RETOURNE SI UN ETAT EST CORRECT * * @previous Condition d'état * @state Liste des états du système * * @return state Retourne si OUI ou NON l'état répond à la condition * */ previous = function(previous, state){ previous = previous.toLowerCase(); for( var i = 0 ; i < previous.length ; i++ ) if( previous[i] == 'x' ) continue; else if( previous[i] != state[i] ) return false; return true; }; /* MODIFIE LES ETATS EN FONCTION D'UNE ACTION * * @action Action sur les états * @state Liste des états du système * */ action = function(action, state){ action = action.toLowerCase(); for( var i = 0 ; i < action.length ; i++ ) if( action[i] == 'x' ) continue; else if( !isNaN(action[i]) ) state[i] = parseInt(action[i]); }; })();