Client Virtuel : Implémentation de la carte programmable (Board) + des puces (Chip) + des interfaces (LedInterface, RelayInterface)
This commit is contained in:
parent
f1678ccdf6
commit
d9e9374cb7
|
@ -1,6 +1,8 @@
|
||||||
var Chip;
|
var Pin;(function(){Pin=function(a){parseInt(a)==a&&0<=a&&255>=a?this.value=parseInt(a):this.value=0};Pin.prototype={value:this.value};Pin.prototype.set=function(a){parseInt(a)==a&&0<=a&&255>=a&&(this.value=parseInt(a))};Pin.prototype.get=function(){return this.value}})();var Board;
|
||||||
(function(){Chip=function(){this.pins=[];this.pin={};for(var a=0;a<arguments.length;a++)parseInt(arguments[a])==arguments[a]&&(this.pins.push(parseInt(arguments[a])),this.pin[parseInt(arguments[a])]=0)};Chip.prototype={pin:this.pin,pins:this.pins};Chip.prototype.setPin=function(a,b){if(parseInt(a)==a&&this.pin.hasOwnProperty(a)){if("boolean"==typeof b)b=b?255:0;else if(b!=parseInt(b)||0>b||255<b)return;b=parseInt(b);this.pin[a]=b}};Chip.prototype.setPins=function(a){for(var b=0;b<this.pins.length;b++)this.setPin(this.pin[this.pins[b]],a[b])};
|
(function(){Board=function(a){if(!(parseInt(a)!=a||1>a)){this.maxPin=a;this.pins=[];this.listener=[];for(a=0;a<this.maxPin;a++)this.pins[a]=!1;this.listener[a]=null}};Board.prototype={maxPin:this.maxPin,pins:this.pins,listener:this.listener};Board.prototype.plug=function(a,b){if(!(b instanceof Chip))return!1;for(var c=0;c<b.pins.length;c++)if(this.pins[c]instanceof Pin)return!1;for(c=0;c<b.pins.length;c++)this.pins[c]=b.values[c],this.listener[c]=a};Board.prototype.set=function(a,b){if(!(parseInt(a)!=
|
||||||
Chip.prototype.getPin=function(a){if(parseInt(a)==a&&this.pin.hasOwnProperty(a))return this.pin[a]};Chip.prototype.getPins=function(){for(var a=[],b=0;b<this.pins.length;b++)a.push(this.getPin(this.pins[b]));return a}})();var LedInterface;
|
a||a>this.maxPin)&&this.pins[a]instanceof Pin){if("boolean"==typeof b)b=b?255:0;else if(b!=parseInt(b)||0>b||255<b)return;b=parseInt(b);this.pins[a].set(b);this.listener[a].update()}}})();var Chip;
|
||||||
(function(){LedInterface=function(a,b){a instanceof Chip&&b instanceof Element&&(this.chip=a,this.container=b)};LedInterface.prototype={chip:this.chip,container:this.container};LedInterface.prototype.apply=function(){this.container.style.background="rgb("+this.chip.pin[0]+","+this.chip.pin[1]+","+this.chip.pin[2]+")"}})();var RelayInterface;
|
(function(){Chip=function(a,b){if("string"==typeof a&&(a=a.toLowerCase(),-1!=["spi","i2c","serial"].indexOf(a)&&b instanceof Array)){for(var c=0;c<b.length;c++)if(parseInt(b[c])!=b[c])return;this.type=a;this.pins=b;this.values=[];for(c=0;c<this.pins.length;c++)this.values[c]=new Pin(0)}};Chip.prototype={type:this.type,pins:this.pins,values:this.values};Chip.prototype.setPin=function(a,b){if(!(parseInt(a)!=a||this.pins.length>=a)){if("boolean"==typeof b)b=b?255:0;else if(b!=parseInt(b)||0>b||255<b)return;
|
||||||
(function(){RelayInterface=function(a,b){a instanceof Chip&&b instanceof Element&&(this.chip=a,this.container=b)};RelayInterface.prototype={chip:this.chip,container:this.container};RelayInterface.prototype.apply=function(){this.chip.pin[0]?this.container.addClass("active"):this.container.remClass("active")}})();var previous,action;
|
b=parseInt(b);this.values[a].set(b)}};Chip.prototype.setPins=function(a){for(var b=0;b<this.pins.length;b++)this.setPin(b,a[b])};Chip.prototype.getPin=function(a){return parseInt(a)!=a||this.pins.length<=a?!1:this.values[a].get()};Chip.prototype.getPins=function(){for(var a=[],b=0;b<this.pins.length;b++)a[b]=this.getPin(b);return a}})();var LedInterface;
|
||||||
|
(function(){LedInterface=function(a,b){a instanceof Chip&&b instanceof Element&&(this.chip=a,this.container=b)};LedInterface.prototype={chip:this.chip,container:this.container};LedInterface.prototype.update=function(){this.container.style.backgroundColor="rgb("+this.chip.getPin(0)+","+this.chip.getPin(1)+","+this.chip.getPin(2)+")"}})();var RelayInterface;
|
||||||
|
(function(){RelayInterface=function(a,b){a instanceof Chip&&b instanceof Element&&(this.chip=a,this.container=b)};RelayInterface.prototype={chip:this.chip,container:this.container};RelayInterface.prototype.update=function(){this.chip.pin[0]?this.container.addClass("active"):this.container.remClass("active")}})();var previous,action;
|
||||||
(function(){previous=function(a,b){a=a.toLowerCase();for(var c=0;c<a.length;c++)if("x"!=a[c]&&a[c]!=b[c])return!1;return!0};action=function(a,b){a=a.toLowerCase();for(var c=0;c<a.length;c++)"x"!=a[c]&&(b[c]=parseInt(a[c]))}})();
|
(function(){previous=function(a,b){a=a.toLowerCase();for(var c=0;c<a.length;c++)if("x"!=a[c]&&a[c]!=b[c])return!1;return!0};action=function(a,b){a=a.toLowerCase();for(var c=0;c<a.length;c++)"x"!=a[c]&&(b[c]=parseInt(a[c]))}})();
|
||||||
|
|
|
@ -1,11 +1,132 @@
|
||||||
//////////////////////////////////////////////////////////////////////////
|
var Pin;
|
||||||
// _ ____ _ _
|
|
||||||
// ___| | __ _ ___ ___ / ___| |__ (_)_ __
|
(function(){
|
||||||
// / __| |/ _` / __/ __| | | | '_ \| | '_ \
|
|
||||||
// | (__| | (_| \__ \__ \ | |___| | | | | |_) |
|
// Constructeur de Pin
|
||||||
// \___|_|\__,_|___/___/ \____|_| |_|_| .__/
|
Pin = function(value){
|
||||||
// |_|
|
if( parseInt(value) == value && value >= 0 && value <= 255 )
|
||||||
//////////////////////////////////////////////////////////////////////////
|
this.value = parseInt(value);
|
||||||
|
else
|
||||||
|
this.value = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Pin.prototype = { value: this.value };
|
||||||
|
|
||||||
|
Pin.prototype.set = function(value){
|
||||||
|
if( parseInt(value) == value && value >= 0 && value <= 255 )
|
||||||
|
this.value = parseInt(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
Pin.prototype.get = function(){
|
||||||
|
return this.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var Board;
|
||||||
|
|
||||||
|
(function(){
|
||||||
|
|
||||||
|
|
||||||
|
/* CONSTRUCTEUR DE CARTE
|
||||||
|
*
|
||||||
|
* @maxPin<int> Nombre de pin de la board
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Board = function(maxPin){
|
||||||
|
if( parseInt(maxPin) != maxPin || maxPin < 1 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.maxPin = maxPin;
|
||||||
|
this.pins = [];
|
||||||
|
this.listener = [];
|
||||||
|
|
||||||
|
for( var i = 0 ; i < this.maxPin ; i++ )
|
||||||
|
this.pins[i] = false;
|
||||||
|
this.listener[i] = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
Board.prototype = {
|
||||||
|
maxPin: this.maxPin, // Nombre de Pins de la Board
|
||||||
|
pins: this.pins, // Liste des valeurs des pins (FALSE->libre, Pin()->prise)
|
||||||
|
listener: this.listener // Contient la classe d'amorcage pour chaque pin
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* BRANCHE UNE PUCE SUR LA Board
|
||||||
|
*
|
||||||
|
* @listener<Object> Interface contenant la carte
|
||||||
|
* @chip<Chip> Carte à brancher
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Board.prototype.plug = function(listener, chip){
|
||||||
|
/* [0] Vérification des paramètres
|
||||||
|
=========================================================*/
|
||||||
|
if( !(chip instanceof Chip) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* [1] Vérification des Pins
|
||||||
|
=========================================================*/
|
||||||
|
for( var i = 0 ; i < chip.pins.length ; i++ )
|
||||||
|
if( this.pins[i] instanceof Pin ) // si pin déja prise
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* [2] Branchement + on lie l'interface
|
||||||
|
=========================================================*/
|
||||||
|
for( var i = 0 ; i < chip.pins.length ; i++ ){
|
||||||
|
this.pins[i] = chip.values[i];
|
||||||
|
this.listener[i] = listener;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* MODIFICATION D'UNE VALEUR DE PIN
|
||||||
|
*
|
||||||
|
* @pinOrder<int> Indice de la pin
|
||||||
|
* @value<int> Valeur à attribuer
|
||||||
|
*
|
||||||
|
* @return nomRetour<typeRetour> Description du retour
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Board.prototype.set = function(pinOrder, value){
|
||||||
|
/* [0] Vérification des paramètres
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On vérifie que @pinOrder est un entier et qu'il est branché */
|
||||||
|
if( parseInt(pinOrder) != pinOrder || pinOrder > this.maxPin ) return;
|
||||||
|
|
||||||
|
/* (2) On vérifie que la pin de @pinOrder est branchée */
|
||||||
|
if( !(this.pins[pinOrder] instanceof Pin) ) return;
|
||||||
|
|
||||||
|
/* (3) On vérifie que @value est un booléen, si oui : true=>255, false=>0 */
|
||||||
|
if( typeof value == 'boolean' )
|
||||||
|
value = value ? 255 : 0;
|
||||||
|
|
||||||
|
/* (4) 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.pins[pinOrder].set(value);
|
||||||
|
|
||||||
|
/* [2] On lance le listener
|
||||||
|
=========================================================*/
|
||||||
|
this.listener[pinOrder].update();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var Chip;
|
var Chip;
|
||||||
|
@ -14,42 +135,59 @@ var Chip;
|
||||||
|
|
||||||
/* CLASSE 'Chip' Correspond à un périphérique processeur
|
/* CLASSE 'Chip' Correspond à un périphérique processeur
|
||||||
*
|
*
|
||||||
* @Pin1<int> Numéro de la première PIN
|
* @chip<String> Type de communication
|
||||||
* @Pin2<int> Numéro de la seconde PIN
|
* @pins<Array> Numéros des pins de la carte
|
||||||
* @Pin...<int> Numéro de la ... PIN
|
|
||||||
*
|
*
|
||||||
* @return Chip<Chip> Retourne une instance de 'Chip'
|
* @return Chip<Chip> Retourne une instance de 'Chip'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Chip = function(){
|
Chip = function(type, pins){
|
||||||
/* On initialise les attributs */
|
/* [0] Vérification des paramètres
|
||||||
this.pins = [];
|
=========================================================*/
|
||||||
this.pin = {};
|
/* (1) @type de carte */
|
||||||
|
if( typeof type != 'string' ) return;
|
||||||
|
|
||||||
/* On vérifie qu'on a que des nombres entiers */
|
type = type.toLowerCase();
|
||||||
for( var i = 0 ; i < arguments.length ; i++ )
|
if( ['spi', 'i2c', 'serial'].indexOf(type) == -1 ) return;
|
||||||
if( parseInt(arguments[i]) == arguments[i] ){
|
|
||||||
this.pins.push( parseInt(arguments[i]) );
|
/* (2) @pins un tableau d'entiers */
|
||||||
this.pin[ parseInt(arguments[i]) ] = 0;
|
if( !(pins instanceof Array) ) return;
|
||||||
}
|
|
||||||
}
|
for( var i = 0 ; i < pins.length ; i++ )
|
||||||
|
if( parseInt(pins[i]) != pins[i] ) return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] On récupère les valeurs
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On enregistre le type */
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
/* (2) On enregistre la liste des pins et leurs valeurs */
|
||||||
|
this.pins = pins;
|
||||||
|
this.values = [];
|
||||||
|
|
||||||
|
for( var i = 0 ; i < this.pins.length ; i++ )
|
||||||
|
this.values[i] = new Pin(0);
|
||||||
|
};
|
||||||
|
|
||||||
Chip.prototype = {
|
Chip.prototype = {
|
||||||
pin: this.pin, // Liste des numéros des Pin's et leurs valeur
|
type: this.type, // Type de communication ('spi', 'i2c', ou 'serial')
|
||||||
pins: this.pins // Liste des numéros des Pin's (ordonnée)
|
pins: this.pins, // Liste des numéros des Pin's (ordonnée)
|
||||||
|
values: this.values // Liste des valeurs des pins (ordonnée) (objets Pin() )
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ATTRIBUE UNE VALEUR A UNE PIN DONNEE
|
/* ATTRIBUE UNE VALEUR A UNE PIN DONNEE
|
||||||
*
|
*
|
||||||
* @pin<int> Numéro de la pin
|
* @pinOrder<int> Indice de la pin (0, 1, 2, ...)
|
||||||
* @value<int/Boolean> Valeur dans 0-255 (ou booléen) à attribuer
|
* @value<int/Boolean> Valeur dans 0-255 (ou booléen) à attribuer
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Chip.prototype.setPin = function(pin, value){
|
Chip.prototype.setPin = function(pinOrder, value){
|
||||||
/* [0] Vérification des paramètres
|
/* [0] Vérification des paramètres
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On vérifie que @pin est un entier et qu'elle existe */
|
/* (1) On vérifie que @pinOrder est un entier et qu'il est un indice de @this.pins */
|
||||||
if( parseInt(pin) != pin || !this.pin.hasOwnProperty(pin) ) return;
|
if( parseInt(pinOrder) != pinOrder || this.pins.length >= pinOrder ) return;
|
||||||
|
|
||||||
/* (2) On vérifie que @value est un booléen, si oui : true=>255, false=>0 */
|
/* (2) On vérifie que @value est un booléen, si oui : true=>255, false=>0 */
|
||||||
if( typeof value == 'boolean' )
|
if( typeof value == 'boolean' )
|
||||||
|
@ -64,7 +202,7 @@ var Chip;
|
||||||
|
|
||||||
/* [1] On attribue la valeur
|
/* [1] On attribue la valeur
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
this.pin[pin] = value;
|
this.values[pinOrder].set(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,27 +213,27 @@ var Chip;
|
||||||
*/
|
*/
|
||||||
Chip.prototype.setPins = function(values){
|
Chip.prototype.setPins = function(values){
|
||||||
for( var i = 0 ; i < this.pins.length ; i++ )
|
for( var i = 0 ; i < this.pins.length ; i++ )
|
||||||
this.setPin( this.pin[this.pins[i]], values[i] );
|
this.setPin( i, values[i] );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* RECUPERE LA VALEUR D'UNE PIN DONNEE
|
/* RECUPERE LA VALEUR D'UNE PIN DONNEE
|
||||||
*
|
*
|
||||||
* @pin<int> Numéro de la pin à lire
|
* @pinOrder<int> Indice de la pin à lire
|
||||||
*
|
*
|
||||||
* @return value<int> Valeur entière dans 0-255
|
* @return value<int> Valeur entière dans 0-255
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Chip.prototype.getPin = function(pin){
|
Chip.prototype.getPin = function(pinOrder){
|
||||||
/* [0] Vérification des paramètres
|
/* [0] Vérification des paramètres
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On vérifie que @pin est un entier et qu'elle existe */
|
/* (1) On vérifie que @pin est un entier et qu'elle existe */
|
||||||
if( parseInt(pin) != pin || !this.pin.hasOwnProperty(pin) ) return;
|
if( parseInt(pinOrder) != pinOrder || this.pins.length <= pinOrder ) return false;
|
||||||
|
|
||||||
|
|
||||||
/* [1] On retourne la valeur
|
/* [1] On retourne la valeur
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return this.pin[pin];
|
return this.values[pinOrder].get();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,7 +246,7 @@ var Chip;
|
||||||
var values = [];
|
var values = [];
|
||||||
|
|
||||||
for( var i = 0 ; i < this.pins.length ; i++ )
|
for( var i = 0 ; i < this.pins.length ; i++ )
|
||||||
values.push( this.getPin( this.pins[i] ) );
|
values[i] = this.getPin( i );
|
||||||
|
|
||||||
return values;
|
return values;
|
||||||
};
|
};
|
||||||
|
@ -118,6 +256,8 @@ var Chip;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var LedInterface;
|
var LedInterface;
|
||||||
|
|
||||||
(function(){
|
(function(){
|
||||||
|
@ -151,8 +291,8 @@ var LedInterface;
|
||||||
/* APPLIQUE LA COULEUR EN FONCTION DES VALEURS DE LA 'CHIP'
|
/* APPLIQUE LA COULEUR EN FONCTION DES VALEURS DE LA 'CHIP'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
LedInterface.prototype.apply = function(){
|
LedInterface.prototype.update = function(){
|
||||||
this.container.style.background = 'rgb('+this.chip.pin[0]+','+this.chip.pin[1]+','+this.chip.pin[2]+')';
|
this.container.style.backgroundColor = 'rgb('+this.chip.getPin(0)+','+this.chip.getPin(1)+','+this.chip.getPin(2)+')';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,7 +336,7 @@ var RelayInterface;
|
||||||
/* APPLIQUE L'ACTIVATION EN FONCTION DES VALEURS DE LA 'CHIP'
|
/* APPLIQUE L'ACTIVATION EN FONCTION DES VALEURS DE LA 'CHIP'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
RelayInterface.prototype.apply = function(){
|
RelayInterface.prototype.update = function(){
|
||||||
if( this.chip.pin[0] )
|
if( this.chip.pin[0] )
|
||||||
this.container.addClass('active');
|
this.container.addClass('active');
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue