WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La géolocalisation de réseaux capteurs (algorithme DVHOP )

( Télécharger le fichier original )
par Mohammed et Hichem MEKIDICHE et RAIS
Université Abou Bakr Belkaid à  Tlemcen Algérie - Master 2 en informatique, option: réseaux 0000
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Annexe1

Code source de notre application :

//Développeurs Rais Hichem & Mekidiche Mohamed

//cet algorithme traite 3 ancres (les ancres sont 0 et 1 et 2) et n noeuds tq n>=1

//lancer le shell et taper les cammandes suivantes

// cd /opt/tinyos-1.x/apps/dvhop3_n pour accéder au
répertoire qui contient notre application

//make pc pour compiler l'application

//export DBG=usr1 pour afficher notre message
//export PATH="$TOSROOT/tools/java/net/tinyos/sim:$PATH"

//TinyViz -run build/pc/main.exe 8 pour lancer la
simulation avec 8 noeuds

//cliquer sur le menu "Layout" puis "file load" et sélectionner un fichier qui prend l'extention ".mps" (c'est une topologie déja créée)

//pour un capteur qui envoie des messages seulement aux capteurs qui ont dans sa zone de couverture: cliquer sur le menu plugins et sélectionner "radio Model" puis décocher "out edges" puis cliquer sur "update"

//cocher debug messages dans le menu plugins pour visualiser les messages

includes DvhopMsg;//appler le fichier DvhopMsg.h qui contient la structure de notre message

module DVhopM {

provide interface StdControl;//interface fournie

//interface utilisée

uses {

interface Timer;

interface Leds;

interface SendMsg as envoiMsg;

interface ReceiveMsg as RecoieMsg;

}

}

implémentation

{

float premier_hop_arriver;

DVhopMsg * pemission;//pointeur sur le message emis

DVhopMsg * poi;//pointeur sur le message reçu

TOS_Msg msg;//message emis

int hop[3][2];//tableau utilisé par chaque ancre pour

stoquer les hop d'autres ancres

bool ancre_recu[3][2];//tableau des boolean chaque ancre

reçoit les hop d'autre ancres

DVhopMsg * p;//pointeur sur le message emis aprés la

réception d'un message

bool noeud_reçu_avant[3];//par exemple si un noeud reçoit un

message d'ancre 1 neud_reçu_avant[1] devient true(avant de

calculer le hopsize)

bool affiche1,v,vv,vvv,r;//variable utilser pour afficher un

message une seule fois

float tab[3][2];//tableau pour stoquer les x et les y des

ancres

float hopsize[3];//tableau pour stoquer les hopsizes

int hop_noeud[3];//tableau utiliser par les noeuds pour

stoquer les hop des ancres

float L1L2,L0L2,L0L1;//les distances entre les ancres

int i,j,k;

bool neud_recu_apres[3];//par exemple si une noeud recoi un

message d'ancre 1 neud_recu_apres[1] devient true(apres de

calculer le hopsize)

command result_t StdControl.init() {

// initialisation des noeuds

pemission =( DVhopMsg* ) msg.data;// pointer sur le

message emis qui est de type TOS_Msg sur le champs data

switch(TOS_LOCAL_ADDRESS) {

case 0 : //si l'adreese du capteur=0 (TOS_LOCAL_ADDRESS=0)

pemission->id_ancre = 0; pemission->hop =0;

pemission->x = 81.75;

pemission->y = 41;

pemission->id_node=TOS_LOCAL_ADDRESS; pemission->hopsize= 0; break;

case 1 : //si l'adreese du capteur=1

(TOS_LOCAL_ADDRESS=1)

pemission->id_ancre = 1; pemission->hop =0;

pemission->x = 16.54; pemission->y = 33.01;

pemission->id_node=TOS_LOCAL_ADDRESS; pemission->hopsize= 0;

break;

case 2 : //si l'adreese du capteur=2 (TOS_LOCAL_ADDRESS=2)

pemission->id_ancre =2;

pemission->hop =0;

pemission->x = 47.76;

pemission->y = 66.02;

pemission->id_node=TOS_LOCAL_ADDRESS;

pemission->hopsize= 0;

break;

default: pemission->id_node=TOS_LOCAL_ADDRESS;

pemission->id_ancre =100;// les autres noeuds prends la valeur 100 par exemple

pemission->hopsize= 0;

call Leds.init(); return SUCCESS;

}

}

command result_t StdControl.start() {

v=TRUE;vv=TRUE;vvv=TRUE;

//stocker les x et les y des ancres dans un tabeau tab[0][0]=81.75;

tab[0][1]=41;

tab[1][0]=16.54; tab[1][1]= 33.01;

tab[2][0]=47.76; tab[2][1]=66.02;

//le calcule des distances entres les ancres

L0L1= sqrt(pow((tab[0][0]-tab[1][0]),2)+ pow((tab[0][1]-tab[1][1]),2));

L0L2= sqrt(pow((tab[0][0]-tab[2][0]),2)+ pow((tab[0][1]-tab[2][1]),2));

L1L2= sqrt(pow((tab[1][0]-tab[2][0]),2)+ pow((tab[0][1]-tab[2][1]),2));

if(TOS_LOCAL_ADDRESS==0){

dbg(DBG_USR1, "La distance entre les ancres 0 et 1= %f\n",L0L1);

dbg(DBG_USR1, "La distance entre les ancres 0 et 2= %f\n",L0L2);

dbg(DBG_USR1, "La distance entre les ancres 1 et 2= %f\n",L1L2);

}

for(i=0;i<=2;i++) for(j=0;j<2;j++) ancre_recu[i][j]=FALSE;

for(i=0;i<=2;i++){ neud_recu_avant[i]=TRUE; neud_recu_apres[i]=FALSE;

}

affiche1=TRUE;

k=0;r=FALSE;

premier_hop_arriver=0;

call Timer.start(TIMER_REPEAT, 2000);// envoyer un

message apres chaque 2 secondes

return SUCCESS;

}

command result_t StdControl.stop() { call Timer.stop();

return SUCCESS;

}

event result_t envoiMsg.sendDone(TOS_MsgPtr sent, result_t success) {

call Leds.redOff();

return SUCCESS;

}

event result_t Timer.fired() {

atomic {

if( k<15){

k=k+1;

//dbg(DBG_USR1, "bien envoyer\n");

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

{

call Leds.yellowToggle(); }else {call Leds.redToggle(); dbg(DBG_USR1, "echec\n");

}

}

}

return SUCCESS;

}

event TOS_MsgPtr RecoieMsg.receive(TOS_MsgPtr m) {

// reception d'un message

call Leds.greenToggle();

atomic {

poi = (DVhopMsg*) m->data;// pointeur sur le message reçu

p =( DVhopMsg* ) msg.data;// pointeur sur le message emis

switch(TOS LOCAL ADDRESS) {

_

_

case 0 :

atomic{

if( (ancre_recu[0][0]==FALSE) && (poi->id_ancre==1) ){//si

l'ancre 0 reçoit un message d'ancre 1

ancre_recu[0][0]=TRUE;

hop[0][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 00=%d reçu a partir de%d

id_node=%d\n", hop[0][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[0][1]==FALSE)

&&(poi>id_ancre==2)){ //si l'ancre 0 reçoit un message
d'ancre 2

ancre_recu[0][1]=TRUE;

hop[0][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 01=%d recue a partir de%d idnode=%d\n", hop[0][1],poi->id_ancre,poi->id_node); }

if( (ancre_recu[0][0]==TRUE) &&(ancre_recu[0][1]==TRUE)&& (v==TRUE)){//si l'ancre 0 reçoit un message d'ancre 1 et 2 alors on calcule le hopsize

v=FALSE;

hopsize[0]=((L0L1+L0L2)/(hop[0][0]+hop[0][1]));

dbg(DBG_USR1, "le hopsize de L0=%f\n",hopsize[0]);

//envoyer un broadcast avec les info suivants

p->hopsize= hopsize[0];

//p->hop=0;

p->id_ancre=0;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

call Leds.redOn();

}

}

break;

case 1 :

atomic{

if( (ancre_recu[1][0]==FALSE) && (poi->id_ancre==0) ){

ancre_recu[1][0]=TRUE;

hop[1][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 10=%d recue a partir de %d

idnode=%d\n", hop[1][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[1][1]==FALSE) &&(poi->id_ancre==2)){ ancre_recu[1][1]=TRUE; hop[1][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 11=%d recue a partir de%d idode=%d\n", hop[1][1],poi->id_ancre,poi->id_node);

}

if( (ancre_recu[1][0]==TRUE) &&(ancre_recu[1][1]==TRUE)&& (vv==TRUE)){

vv=FALSE;

hopsize[1]=((L0L1+L1L2)/(hop[1][0]+hop[1][1])); dbg(DBG_USR1, "le hopsize de L1=%f\n",hopsize[1]); p->hopsize= hopsize[1];

//p->hop=0;

p->id_ancre=1;

for(i=0;i<8;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

}

break;

case 2 :

atomic{

if( (ancre_recu[2][0]==FALSE) && (poi->id_ancre==0) ){

ancre_recu[2][0]=TRUE;

hop[2][0]=poi->hop+1;

dbg(DBG_USR1, "le hop 20=%d recue a partir de%d idnode=%d\n",

hop[2][0],poi->id_ancre,poi->id_node);

}

else if( (ancre_recu[2][1]==FALSE) &&(poi->id_ancre==1)){ ancre_recu[2][1]=TRUE;

hop[2][1]=poi->hop+1;

dbg(DBG_USR1, "le hop 21=%d recue a partir de %d idnode=%d\n", hop[2][1],poi->id_ancre,poi->id_node); }

if( (ancre_recu[2][0]==TRUE) &&(ancre_recu[2][1]==TRUE)&& (vvv==TRUE)){

vvv=FALSE;

hopsize[2]=((L0L2+L1L2)/(hop[2][0]+hop[2][1])); dbg(DBG_USR1, "le hopsize de L2=%f\n",hopsize[2]); p->hopsize= hopsize[2];

// p->hop=0;

p->id_ancre=2;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn(); }

}

break;

default :

atomic{

if( poi->hopsize!=0 ){// si le hopsize est calculer

if((r==FALSE) && (poi->id_ancre<3) ){

r=TRUE;

premier_hop_arriver=poi->hopsize;

dbg(DBG_USR1, "le premier hopsize reçu = %f a partir de

noeud %d elle a id_ancre= %d\n",premier_hop_arriver,poi-

>id_node,poi->id_ancre);

}

if( (neud_recu_avant[0]==TRUE) && (poi->id_ancre==0) ){// si le message reçue a id_ancre=0 neud_recu_avant[0]=FALSE; hop_noeud[0]=poi->hop+1;

//dbg(DBG_USR1, "le hopsize reçu=%f a partir de %d et idnode=%d\n",poi->hopsize,poi->id_ancre,poi->id_node);

dbg(DBG_USR1, "le hop 30=%d recue a partir de %d et

idnode=%d\n", hop_noeud[0],poi->id_ancre,poi->id_node);

hopsize[0]=poi->hopsize;

p->hopsize= poi->hopsize;

p->id_ancre=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<8;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

else if( (neud_recu_avant[1]==TRUE) &&(poi->id_ancre==1)){ neud_recu_avant[1]=FALSE;

hop_noeud[1]=poi->hop+1;

dbg(DBG_USR1, "le hop 31=%d reçue a partir de %d et

idnode=%d\n", hop_noeud[1],poi->id_ancre,poi->id_node);

p->hopsize= poi->hopsize;

hopsize[1]=poi->hopsize;

p->id_ancre=1;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=hop_noeud[1];

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg),

&msg)== SUCCESS)

call Leds.redOn();

}

else if( (neud_recu_avant[2]==TRUE) &&(poi->id_ancre==2)){

neud_recu_avant[2]=FALSE;

hop_noeud[2]=poi->hop+1;

//dbg(DBG_USR1, "le hopsize reçu=%f a partir de %d et

idnode=%d\n",poi->hopsize,poi->id_ancre,poi->id_node);

dbg(DBG_USR1, "le hop 32=%d recue a partir de %d et

idnode=%d\n", hop_noeud[2],poi->id_ancre,poi->id_node);

hopsize[2]=poi->hopsize; p->hopsize= poi->hopsize; p->id_ancre=2; p->hop=hop_noeud[2]; p->id_node=TOS_LOCAL_ADDRESS;

for(i=0;i<12;i++)

if (call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg)== SUCCESS)

call Leds.redOn();

}

if(affiche1==TRUE && neud_recu_avant[0]==FALSE && neud_recu_avant[1]==FALSE && neud_recu_avant[2]==FALSE ){//si on a reçoit les hop de tous les ancres

affiche1=FALSE;//variable pour afficher le min une seule fois dbg(DBG_USR1, "la distance entre %d et ancre 0 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[0]); dbg(DBG_USR1, "la distance entre %d et ancre 1 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[1]); dbg(DBG_USR1, "la distance entre %d et ancre 2 =%f\n",TOS_LOCAL_ADDRESS,premier_hop_arriver*hop_noeud[2]); }

}

else if (poi->hopsize==0) {//le hopesize n'est pas encore

calculer

if(poi->id_ancre<3) {

if((poi->id_ancre==0)&&(neud_recu_apres[0]==FALSE)){

neud_recu_apres[0]=TRUE;

p->hopsize=0;

p->id_ancre=poi->id_ancre;

p->hop=poi->hop+1;

p->id_node=TOS_LOCAL_ADDRESS;

for(i=0;i<12;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg);

}

else if((poi>id_ancre==1)&&(neud_recu_apres[1]==FALSE)){

neud_recu_apres[1]=TRUE;

p->id_ancre=poi->id_ancre;

p->hopsize=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<8;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg); }

else if((poi>id_ancre==2)&&(neud_recu_apres[2]==FALSE)){ neud_recu_apres[2]=TRUE;

p->id_ancre=poi->id_ancre;

p->hopsize=0;

p->id_node=TOS_LOCAL_ADDRESS;

p->hop=poi->hop+1;

for(i=0;i<12;i++)

call envoiMsg.send(TOS_BCAST_ADDR, sizeof( DVhopMsg), &msg);

}

}

}

}

break;

}

}

return m;

}

}

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Un démenti, si pauvre qu'il soit, rassure les sots et déroute les incrédules"   Talleyrand