From d9e9374cb71ab5859c8f66c9f1accacd0a4d97d1 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 19 Jul 2016 10:30:19 +0200 Subject: [PATCH] =?UTF-8?q?Client=20Virtuel=20:=20Impl=C3=A9mentation=20de?= =?UTF-8?q?=20la=20carte=20programmable=20(Board)=20+=20des=20puces=20(Chi?= =?UTF-8?q?p)=20+=20des=20interfaces=20(LedInterface,=20RelayInterface)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/client/lib-min.js | 12 ++- test/client/lib.js | 216 +++++++++++++++++++++++++++++++++-------- 2 files changed, 185 insertions(+), 43 deletions(-) diff --git a/test/client/lib-min.js b/test/client/lib-min.js index f020d9f..23a5120 100644 --- a/test/client/lib-min.js +++ b/test/client/lib-min.js @@ -1,6 +1,8 @@ -var Chip; -(function(){Chip=function(){this.pins=[];this.pin={};for(var a=0;ab||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(){Board=function(a){if(!(parseInt(a)!=a||1>a)){this.maxPin=a;this.pins=[];this.listener=[];for(a=0;athis.maxPin)&&this.pins[a]instanceof Pin){if("boolean"==typeof b)b=b?255:0;else if(b!=parseInt(b)||0>b||255=a)){if("boolean"==typeof b)b=b?255:0;else if(b!=parseInt(b)||0>b||255= 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 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 Interface contenant la carte + * @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 Indice de la pin + * @value Valeur à attribuer + * + * @return nomRetour 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; @@ -14,42 +135,59 @@ var Chip; /* 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 + * @chip Type de communication + * @pins Numéros des pins de la carte * * @return Chip Retourne une instance de 'Chip' * */ - Chip = function(){ - /* On initialise les attributs */ - this.pins = []; - this.pin = {}; + Chip = function(type, pins){ + /* [0] Vérification des paramètres + =========================================================*/ + /* (1) @type de carte */ + if( typeof type != 'string' ) return; - /* 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; - } - } + type = type.toLowerCase(); + if( ['spi', 'i2c', 'serial'].indexOf(type) == -1 ) return; + + /* (2) @pins un tableau d'entiers */ + 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 = { - 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) + type: this.type, // Type de communication ('spi', 'i2c', ou 'serial') + 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 * - * @pin Numéro de la pin + * @pinOrder Indice de la pin (0, 1, 2, ...) * @value 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 =========================================================*/ - /* (1) On vérifie que @pin est un entier et qu'elle existe */ - if( parseInt(pin) != pin || !this.pin.hasOwnProperty(pin) ) return; + /* (1) On vérifie que @pinOrder est un entier et qu'il est un indice de @this.pins */ + 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 */ if( typeof value == 'boolean' ) @@ -64,7 +202,7 @@ var Chip; /* [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){ 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 * - * @pin Numéro de la pin à lire + * @pinOrder Indice de la pin à lire * * @return value Valeur entière dans 0-255 * */ - Chip.prototype.getPin = function(pin){ + Chip.prototype.getPin = function(pinOrder){ /* [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; + if( parseInt(pinOrder) != pinOrder || this.pins.length <= pinOrder ) return false; /* [1] On retourne la valeur =========================================================*/ - return this.pin[pin]; + return this.values[pinOrder].get(); }; @@ -108,7 +246,7 @@ var Chip; var values = []; for( var i = 0 ; i < this.pins.length ; i++ ) - values.push( this.getPin( this.pins[i] ) ); + values[i] = this.getPin( i ); return values; }; @@ -118,6 +256,8 @@ var Chip; + + var LedInterface; (function(){ @@ -151,8 +291,8 @@ var LedInterface; /* 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]+')'; + LedInterface.prototype.update = function(){ + 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' * */ - RelayInterface.prototype.apply = function(){ + RelayInterface.prototype.update = function(){ if( this.chip.pin[0] ) this.container.addClass('active'); else