tsp-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tsp-devel] Black board dynamique


From: Erk
Subject: Re: [Tsp-devel] Black board dynamique
Date: Thu, 8 Jun 2006 17:12:46 +0200

2006/6/8, dufy <address@hidden>:
Bonjour les amis du TSP (Train Sans Péage)

 J'aimerais tester un petit provider TSP qui passe par le blackboard (Jusque
la facile !)
 Mais j'ai la contrainte suivante : Mon Provider peut connaitre la liste des
symboles possibles, mais il ne devra les mettre à jour QUE si elles sont
demandées.
 (Il y plein de symboles potentiels, et leur lecture passe par un canal très
limité, un port série ....).

 Comment puis-je faire docteur, pour avoir par le BB une info mise à jour
par le générique TSP_BB_Provider qu'un client vient de lui demander le
symbole "toto" ?

 Merci d'avance, mais il n'y pas d'urgence pour me répondre. C'est juste de
la curiosité.

 Y++

Si j'ai tout bien compris ca va etre assez facile vu que...

C'est [presque] deja ce qui se passe :))

1) Recopie des symboles demandes par un provider

Le BB provider n'est pas tellement differents des autres
a savoir qu'il ne recopie le datapool que les variables
demandees grace a la fonction magique

   /*
    * Refresh the [reverse list of consumed symbols]
    * Must be call at each step in case of new samples wanted
    */
   TSP_datapool_get_reverse_list
(this->datapool,&nb_consumed_symbols, &ptr_consumed_index);


ajoutee par un certain Y. D. bien connu de nos services.

Ensuite c'est trivial, puisqu'on boucle sur la liste des symboles DEMANDES:

/* PUSH des valeurs directement dans le datapool */
   for(i = 0 ; i <  nb_consumed_symbols ; ++i) {
     /* retrieve the pgi of the consumed symbol */
     pgi = ptr_consumed_index[i];
     item.time                  = glu_time;
     item.provider_global_index = pgi;
     /* we return a double value even if
      * the blackboard type is different
      * since TSP only knows double ... till now */
     *((double*)item.raw_value) =
bb_double_of(value_by_pgi[pgi],bbdatadesc_by_pgi[pgi]->type);
     TSP_datapool_push_next_item(this->datapool, &item);
   }
   TSP_datapool_push_commit(this->datapool, glu_time, GLU_GET_NEW_ITEM);


Cette fonction est tres bien sauf que la liste des symboles demandes
est plutot la liste des symboles demandes "au moins une fois un jour"...
c'est a dire que cette liste ne decroit jamais et cumule les symboles


a noter que juste avant le bb_provider aura mis a jour son image locale
de Blackbaord (shadow_bb)


/*
* Update shadow BB data zone
*/
bb_shadow_update_data(shadow_bb,the_bb);


Donc a noter que dans ce cas "nominal"
il y 2 espace memoire separes:

the_bb qui est la SHM qui est le Blackboard utilise par l'appli
shadow_bb qui est image locale du blakboard pour que le bb_provider
puisse distribuer tranquillement une copie "coherente" du vrai BB.


 Comment puis-je faire docteur, pour avoir par le BB une info mise à jour
par le générique TSP_BB_Provider qu'un client vient de lui demander le
symbole "toto" ?

Donc si ton probleme est de faire remonter a l'appli la liste des symboles
demandes, et bien je vois 2 solutions:

1) rajouter (dans la meme SHM) pour chaque donnees publiee dans le BB
   des "meta-informations" que tu viendrais mettre a jour dans
   la boucle du BB_provider dans ton cas un tableau d'entier indiquant
   si oui ou non la variable est "demandee".

2) utiliser la message queue du Blackboard pour envoyer un message
  bb_provider ---> appli utilisant le BB
  qui contiennent la liste des symboles blackboard demandes
  en les specifiants par leur bbidx (index dans le tableau BB_DATADESC)

La 2ieme solution est probablemen t plus efficace car ton appli pourra
n'iterer que sur la liste des symboles demandes.

Quoiqu'il en soit si tu dois faire ca je ne suis pas sur que le Blackboard
soit ton meilleur ami.

En fait ton besoin me semble proche d'un besoin assez recurrent
qui est les symboles calcules...

Ca demande plus d'explications donc je ferais un mail plus long une
autre fois...
--
Erk




reply via email to

[Prev in Thread] Current Thread [Next in Thread]