SMMP/test/client/lib.js

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]);
};
})();