252 lines
5.9 KiB
JavaScript
252 lines
5.9 KiB
JavaScript
//////////////////////////////////////////////////////////////////////////
|
|
// _ ____ _ _
|
|
// ___| | __ _ ___ ___ / ___| |__ (_)_ __
|
|
// / __| |/ _` / __/ __| | | | '_ \| | '_ \
|
|
// | (__| | (_| \__ \__ \ | |___| | | | | |_) |
|
|
// \___|_|\__,_|___/___/ \____|_| |_|_| .__/
|
|
// |_|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
var Chip;
|
|
|
|
(function(){
|
|
|
|
/* CLASSE 'Chip' Correspond à un périphérique processeur
|
|
*
|
|
* @Pin1<int> Numéro de la première PIN
|
|
* @Pin2<int> Numéro de la seconde PIN
|
|
* @Pin...<int> Numéro de la ... PIN
|
|
*
|
|
* @return Chip<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<int> Numéro de la pin
|
|
* @value<int/Boolean> 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<Array> 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<int> Numéro de la pin à lire
|
|
*
|
|
* @return value<int> 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<Array> 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<Chip> Puce associée à la LED
|
|
* @container<Element> 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<Chip> Puce associée au relai
|
|
* @container<Element> 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<String> Condition d'état
|
|
* @state<Array> Liste des états du système
|
|
*
|
|
* @return state<Boolean> 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<String> Action sur les états
|
|
* @state<Array> 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]);
|
|
};
|
|
|
|
})();
|