[Tinyos-contrib-commits] CVS: tinyos-1.x/contrib/wustl/apps/AgillaAgents/GroupComm/mobile-chat Proxy-orig.ma, NONE, 1.1 Proxy_future.ma, NONE, 1.1 out_join_group_tuple.ma, NONE, 1.1 Leader.ma, 1.1, 1.2 Member.ma, 1.3, 1.4 Proxy.ma, 1.4, 1.5

Chien-Liang Fok chien-liang at users.sourceforge.net
Mon Nov 20 16:27:00 PST 2006


Update of /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/AgillaAgents/GroupComm/mobile-chat
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv10488

Modified Files:
	Leader.ma Member.ma Proxy.ma 
Added Files:
	Proxy-orig.ma Proxy_future.ma out_join_group_tuple.ma 
Log Message:
Still debugging...

--- NEW FILE: Proxy-orig.ma ---
// heap[0] = current member agent location
// heap[1] = previous member agent location

pushc 25
putled
pushc 8
sleep
pushc 25
putled    //blink red LED for 1s

randnbr
copy
setvar  0  // current member
setvar  1 

// register reaction:  Receive message from PDA, send message to member agent
// <'ocm', screen name, chat msg> (ocm - out chat msg)
    pusht string
    pusht string
    pushn ocm
    pushc 3
    pushcl SND_MSG
    regrxn

// register reaction:  Receive message from member agent, send message to PDA
// <"icm", screen name, chat msg> (icm - in chat msg)
    pusht string
    pusht string
    pushn icm
    pushc 3
    pushcl  RCV_MSG
    regrxn
   
WAIT          wait


// reaction fired:  Receive message from PDA, send message to member agent
// From PDA:  <"ocm", screen name, chat msg>
// To Member:  <"ocm", screen name, chat msg> (ocm - out chat msg)
// # Future Optimization:  <'ocm', member agentID, chat msg> for multiple member agents on the same node
SND_MSG         remove                 
                randnbr
                rjumpc GOT_NBR  //   Stack:  neighbour loc
                pushc 8
                putled      
                pushc 31
                putled    // light all 3 LED if no neighbor found
                clear
                pushn nma // tell PDA that it is not in range of network
                pushc 1
                pushloc force_uart_x force_uart_y
                rout
                rjump WAIT 
GOT_NBR   getvar  0 //   Stack:  (member loc, neighbor loc, <3, "ocm", screen name, chat msg>)
    ceq
    rjumpc  GOT_MEM   //   Stack:  (<3, "ocm", screen name, chat msg>)
    randnbr
    rout      // place outgoing tuple in member's new location.  it will find it when it arrives...
    randnbr   
    pushn mov
    pushc 2   
    getvar  0
    rout        // fetch the member:  <"mov", new location>
    getvar  0   // heap[1] = old loc
    setvar  1
    randnbr     // heap[0] = curr loc
    setvar  0
    endrxn
  GOT_MEM getvar  0 // member agent is on neighbor node, 
          rout          // send tuple to member agent
          pushc 26        // toggle green
          putled              
          endrxn


// reaction fired:  Receive message from member agent, send message to PDA
// From Member:  <"icm", chat msg> (icm - in chat msg)
RCV_MSG   remove      
    pushloc force_uart_x force_uart_y
    rout      // send tuple to base station   
    pushc 25    
    putled      // toggle red LED
    endrxn

--- NEW FILE: Proxy_future.ma ---
// heap[0] = current member agent location
// heap[1] = previous member agent location

pushc 8
sleep

// register reaction:  Receive message from PDA, send message to member agent
// <'ocm', chat msg> (ocm - out chat msg)
    pusht string
    pushn ocm
    pushc 2
    pushcl SND_MSG
    regrxn

// register reaction:  Receive message from member agent, send message to PDA
// <"icm", chat msg> (icm - in chat msg)
    pusht string
    pushn icm
    pushc 2
    pushcl  RCV_MSG
    regrxn
    
// register reaction:  Receive MOVE message from PDA, tell member agent to follow
// <"pmv", new location> (pmv - PDA move)
    pusht location
    pushn pmv
    pushc 2
    pushcl MOVE
    regrxn


WAIT    wait

    

// reaction fired:  Receive message from PDA, send message to member agent
// From PDA:  <"ocm", chat msg>
// To Member:  <"ocm", chat msg> (ocm - out chat msg)
// # Future Optimization:  <'ocm', member agentID, chat msg> for multiple member agents on the same node
SND_MSG   remove    

    randnbr   // find the neighor node
    pushcl FND_MEM
    jumpc   // if success, forward msg to member agent  
    pop
    pop
    pop
    pushn ncn // if fail, send error message to PDA (ncn - no connection)
    pushc 1
    pushloc force_uart_x force_uart_y
    rout
    pushc 8   // blink 3 LED's twice
    putled
    pushc 31
    putled
    pushc 31
    putled
    pushc 31
    putled
    endrxn
  FND_MEM getvar 0  //   Stack:  (rnd neighbor loc, current member loc)
    ceq   // compare random neighbor location with the stored member location
    pushcl SAME_MEM_LOC
    jumpc     // if the neighbor loc is same as stored, proceed
    getvar 1  // if fails
    out
    // tell member agent to follow    
    getvar 0  
    setvar 1    // heap[1] = previous member agent location
    randnbr     
    pushc 0
    setvars     // heap[0] = current member agent location
    pushc 8     // Blink 3 LED's twice
    putled
    pushc 31
    putled
    pushc 31
    putled
    pushc 31
    putled
    endrxn            
    SAME_MEM_LOC  getvar 0    // heap[0] = curr member 
        rout      // send to current member 
        pushc 26
        putled      // toggle green LED when message sent to member
        endrxn

// reaction fired:  Receive message from member agent, send message to PDA
// From Member:  <"icm", chat msg> (icm - in chat msg)
RCV_MSG   remove      
    pushloc force_uart_x force_uart_y
    rout      // send tuple to base station   
    pushc 25    
    putled      // toggle red LED
    endrxn

// reaction fired:  Receive MOVE message from PDA, tell member agent to follow
// From PDA:  <"pmv", new location> (pmv - PDA move)
// To Member:  <"pmv", new location>
MOVE    remove      // remove the tuple
    pop     // pop off number of fields
    pop     // pop off "pmv", 
          //   Stack:  (new location)  
    getvar 0
    setvar 1    // heap[1] = previous member agent location
    pushc 0
    setvars     // heap[0] = current member agent location
    
    // tell member agent at the old location

    pushc 28
    putled      // toggle yellow LED
    endrxn
--- NEW FILE: out_join_group_tuple.ma ---
        pushc 25
        putled
        pushc 8
        sleep
        pushc 25
        putled
        loc
        aid
        pushn jng
        pushc 3
        out
        halt

Index: Leader.ma
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/AgillaAgents/GroupComm/mobile-chat/Leader.ma,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Leader.ma	15 Nov 2006 01:11:32 -0000	1.1
--- Leader.ma	21 Nov 2006 00:26:58 -0000	1.2
***************
*** 12,143 ****
  //       Tuple format: <"jng", location>
  //-------------------------------------------------------------------------------------------------
! 		pushc 0			// store the group member information on the heap
! 		setvar 0		// heap[0] = initial number of members (0)				
! 
  
  // register a reaction sensitive to join messages
! 		pusht location
! 		pusht agentid
! 		pushn jng
! 		pushc 3
! 		pushcl RXN_GROUP_JOIN
! 		regrxn
! 	
! // register a reaction sensitive to member broadcast messages		
! 		pusht string
! 		pusht string
! 		pusht agentid
! 		pushn mbm
! 		pushc 4			// template = <"mbm", agentID, string, string>
! 		pushc RXN_GROUP_SEND
! 		regrxn			// register a reaction for member broadcast messages
! 		
  // register a reaction sensitive to member update messages
! 		pusht location
! 		pusht agentid
! 		pushn upd
! 		pushc 3
! 		pushcl RXN_UPDATE_LOC
! 		regrxn
! WAIT		wait
  
  // The group send reaction sensitive to <"mbm", string, string>
  // Assumes heap[0] = number of agents and heap[1...n] are the agent's addresses
! RXN_GROUP_SEND	remove
! 		pop
! 		pop
! 		pop
! 		esetvar 19		// heap[19] = name
! 		esetvar 18		// heap[18] = message
! 		pushc 28
! 		putled			// toggle yellow
! 		pushc 0
! 		esetvar 17
! RGS_LOOP	egetvar 17
! 		inc
! 		copy			// Stack:  cntr, cntr
! 		
! 		esetvar	17		// heap[17] = cntr
! 		
! 		getvar 0		// Stack:  # of members, cntr
! 		cgt			// check whether the counter is > number of members
! 		pushcl DONE
! 		jumpc	
! 				
! 		egetvar 18		// message				
! 		egetvar 19		// member's name
  
! 		egetvar 17		
! 		pushc 2
! 		mul					
! 		dec			// 2*idx - 1
! 		getvars			// each member's agent ID
  
! 		//copy
! 		//pushn rcv
! 		//pushc 2
! 		//pushloc uart_x uart_y
! 		//rout	
  
! 		pushn lbm
! 		pushc 4			// tuple = <"lbm", member ID, name, message>
! 		
! 		egetvar 17
! 		pushc 2
! 		mul			// 2*idx		
! 		getvars			// get the member's address	
! 		//pushloc uart_x uart_y
! 		//copy
! 		//pushn rcv
! 		//pushc 2
! 		//pushloc uart_x uart_y
! 		//rout	
! 	
! 		rout
! 		pushc RGS_LOOP
! 		jumps			// go back to STG_LOOP		
! DONE		pushc 25
! 		putled			// toggle red
! 		//pop			// pop the counter	
! 		endrxn			// end the reaction
  
  // The group join reaction sensitive to <"jng", location>
  // Assumes heap[0] = number of agents and heap[1...n] are the agent's addresses
! RXN_GROUP_JOIN	remove
! 		pop			// pop number of fields
! 		pop			// pop the string "jng"
! 		getvar 0
! 		inc
! 		copy
! 		setvar 0		// heap[0]++
! 		pushc 2
! 		mul
! 		dec
! 		setvars			// heap[index*2-1] = agent id
! 		getvar 0
! 		pushc 2
! 		mul
! 		setvars			// heap[index*2] = location
! 		pushc 28
! 		putled			// toggle yellow when member joins group
! 		
! 		//getvar  0
! 		//pushc	2
! 		//mul
! 		//getvars
! 		//pushn mem		// tell BS that a member has joined
! 		//pushc 2
! 		//pushloc uart_x uart_y
! 		//rout
! 		
! 		endrxn
! 		
! RXN_UPDATE_LOC  remove
! 		pushc 25
! 		putled			// toggle red LED when member moves
! 		pop			// pop number of fields
! 		pop			// pop the string "upd"
! 		findMatch		// find the index of the agent id on the heap
! 		inc			// the location is in the next index position
! 		setvars			// save the new location
! 		endrxn
\ No newline at end of file
--- 12,144 ----
  //       Tuple format: <"jng", location>
  //-------------------------------------------------------------------------------------------------
!                       pushc 0     // store the group member information on the heap
!                       setvar 0    // heap[0] = initial number of members (0)        
  
  // register a reaction sensitive to join messages
!                       pusht location
!                       pusht agentid
!                       pushn jng
!                       pushc 3
!                       pushcl RXN_GROUP_JOIN
!                       regrxn
! 
! // register a reaction sensitive to member broadcast messages   
!                       pusht string
!                       pusht string
!                       pusht agentid
!                       pushn mbm
!                       pushc 4     // template = <"mbm", agentID, string, string>
!                       pushc RXN_GROUP_SEND
!                       regrxn      // register a reaction for member broadcast messages
!     
  // register a reaction sensitive to member update messages
!     pusht value
!     pusht agentid
!     pushn upd
!     pushc 3
!     pushcl RXN_UPDATE_LOC
!     regrxn
! 
! WAIT                  wait
  
  // The group send reaction sensitive to <"mbm", string, string>
  // Assumes heap[0] = number of agents and heap[1...n] are the agent's addresses
! RXN_GROUP_SEND        pushc 25
!                       putled
!                       remove
!                       pop
!                       pop
!                       pop
!                       esetvar 19    // heap[19] = name
!                       esetvar 18    // heap[18] = message
!                       pushc 0
!                       esetvar 17
! RGS_LOOP              egetvar 17
!                       inc
!                       copy      // Stack:  cntr, cntr
  
!                       esetvar 17    // heap[17] = cntr
  
!                       getvar 0    // Stack:  # of members, cntr
!                       cgt     // check whether the counter is > number of members
!                       pushcl DONE
!                       jumpc 
  
!                       egetvar 18    // message        
!                       egetvar 19    // member's name
! 
!                       egetvar 17    
!                       pushc 2
!                       mul         
!                       dec     // 2*idx - 1
!                       getvars     // each member's agent ID
! 
!                       //copy
!                       //pushn rcv
!                       //pushc 2
!                       //pushloc uart_x uart_y
!                       //rout  
  
+                       pushn lbm
+                       pushc 4     // tuple = <"lbm", member ID, name, message>
+ 
+                       egetvar 17
+                       pushc 2
+                       mul     // 2*idx    
+                       getvars     // get the member's address 
+                       //pushloc uart_x uart_y
+                       //copy
+                       //pushn rcv
+                       //pushc 2
+                       //pushloc uart_x uart_y
+                       //rout  
+ 
+                       rout
+                       pushc RGS_LOOP
+                       jumps     // go back to STG_LOOP    
+ DONE                  endrxn      // end the reaction
+ 
+ 
+                       
  // The group join reaction sensitive to <"jng", location>
  // Assumes heap[0] = number of agents and heap[1...n] are the agent's addresses
! RXN_GROUP_JOIN        remove
!                       //pushc 25
!                       //putled   
!                       pop     // pop number of fields
!                       pop     // pop the string "jng"
!                       getvar 0
!                       inc
!                       setvar 0    // heap[0]++
!                       getvar 0
!                       pushc 2
!                       mul
!                       dec
!                       setvars     // heap[index*2-1] = agent id
!                       getvar 0
!                       pushc 2
!                       mul
!                       setvars     // heap[index*2] = member location
!                       endrxn                  
!     
! RXN_UPDATE_LOC  pushc 4
!     putled        // only set blue on if leader receives member update location
!     remove
!     pop     // pop number of fields
!     pop     // pop the string "upd", Stack:  agentID, location
!         
!     findMatch
!     inc     // the location is in the next index position Stack:  heap[idx] = location, new location
! 
!     copy
!     getvars   // get the members old location
!     pushn mlc
!     pushc 2
!     pushloc uart_x uart_y
!     rout
! 
!     setvars     // save the new location
!     clear
!     pushc WAIT
!     endrxn
!     
\ No newline at end of file

Index: Member.ma
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/AgillaAgents/GroupComm/mobile-chat/Member.ma,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Member.ma	15 Nov 2006 14:43:12 -0000	1.3
--- Member.ma	21 Nov 2006 00:26:58 -0000	1.4
***************
*** 3,107 ****
  // heap[0] = PDA+Proxy location
  // heap[1] = leader location
-   
-   pushc 26
-   putled
-   pushc 16
-   sleep
-   pushc 26
-   putled         // Blink green LED
  
! BEGIN randnbr     // look for a node in the network
!   rjumpc FND_NODE
!   pushc 16
!   sleep
!   rjump BEGIN
! FND_NODE  smove   // migrate to the node  
  
!   pushc 26
!   putled
!   pushc 8
!   sleep
!   pushc 26
!   putled         // Blink green LED
  
  // Query Base station, Discover the leader location
!     loc
!     pushn abc // group name = "abc", HARD CODED
!     pushn req
!     pushc 3   
!     pushloc uart_x uart_y
!     rout    // Send To BaseStation:  <"req", "abc", member loc>
  
!     pushc 8   // sleep for 1 second to allow BS to generate reponse
!     sleep
!     
!     pusht location  // React to BS:  <"grl", leader loc>
!     pushn grl   // future:  <"grl", member ID, leader loc>
!     pushc 2   
  
!     in    // wait for response
!     pop
!     pop
!     setvar 1  // heap[1] = leader location
      
  // Register with the leader
!     loc
!     aid
!     pushn jng
!     pushc 3   // To Leader:  <"jng", member ID, member loc>
!     getvar 1
!     rout    // send to leader location
  
  // register reaction: for leader broadcast messages
!     pusht string
!     pusht string
!     aid
!     pushn lbm // <"lbm", memeber ID, screen name, chat msg>
!     pushc 4
!     pushcl LEADER_MSG
!     regrxn
  
  // register reaction: for messages from PDA+Proxy to send 
  // FromPDA+Proxy:  <'ocm', screen name, chat msg>
!     pusht string
!     pusht string
!     pushn ocm
!     pushc 3
!     pushcl PDA_MSG
!     regrxn
      
  
! WAIT    wait
      
  // React to:  <"lbm", memeber ID, screen name, chat msg>
  // Send to Proxy:  
! LEADER_MSG  remove      // remove the tuple
!     pop
!     pop
!     pop     //   Stack:  (screen name, chat msg)
!     getvar  0
!     cisnbr      // check if the PDA+Proxy is still a valid neighbor
!     rjumpc  LM_CONT
!     pop     //   fail, disgard chat msg
!     pop
!     endrxn
!   LM_CONT pushn icm   // <"icm", screen name, chat msg>
!     pushc 3
!     getvar  0
!     rout      //   success, send tuple to PDA+Proxy
!     endrxn
  
  // React to:  <'ocm', screen name, chat msg> from PDA+Proxy
  // Send to leader:  <"mbm", AgentID, String:name, String:msg>
! PDA_MSG   remove
!     pop
!     pop     //  Stack:  (screen name, chat msg)
!     aid
!     pushn mbm
!     pushc 4     // <"mbm", AgentID, String:name, String:msg>
!     getvar 1
!     rout      // send to leader 
!     pushc 26
!     putled      // toggle green when message is sent to leader
!     endrxn
  
--- 3,125 ----
  // heap[0] = PDA+Proxy location
  // heap[1] = leader location
  
! BEGIN               randnbr     // look for a node in the network
!                     rjumpc NEIGHBOR_FOUND  
!                     rjump BEGIN
! NEIGHBOR_FOUND      smove   // migrate to the node  
  
!                     pushc 31
!                     putled    // toggle all LED
  
  // Query Base station, Discover the leader location
!                     loc
!                     pushn abc // group name = "abc", HARD CODED
!                     pushn req
!                     pushc 3   
!                     pushloc uart_x uart_y
!                     rout    // Send To BaseStation:  <"req", "abc", member loc>
  
!                     pusht location  // React to BS:  <"grl", leader loc>
!                     pushn grl   // future:  <"grl", member ID, leader loc>
!                     pushc 2   
  
!                     in    // wait for response
!                     //pushc 26
!                     //putled
!                     pop       // pop 2
!                     pop       // pop grl
!                     setvar 1  // heap[1] = leader location
      
  // Register with the leader
!                     loc
!                     aid
!                     pushn jng
!                     pushc 3   // To Leader:  <"jng", member ID, member loc>
!                     getvar 1
!                     rout    // send to leader location
  
  // register reaction: for leader broadcast messages
!                     pusht string
!                     pusht string
!                     aid
!                     pushn lbm // <"lbm", memeber ID, screen name, chat msg>
!                     pushc 4
!                     pushcl LEADER_MSG
!                     regrxn
  
  // register reaction: for messages from PDA+Proxy to send 
  // FromPDA+Proxy:  <'ocm', screen name, chat msg>
!                     pusht string
!                     pusht string
!                     pushn ocm
!                     pushc 3
!                     pushcl PDA_MSG
!                     regrxn
!     
! // register reaction:  for member agent to follow PDA
! // From Proxy:  <"mov", new loc>
!                     pusht value
!                     pushn mov
!                     pushc 2
!                     pushcl FOLLOW_PDA
!                     regrxn
      
  
! WAIT                wait
      
  // React to:  <"lbm", memeber ID, screen name, chat msg>
  // Send to Proxy:  
! LEADER_MSG          remove      // remove the tuple
!                     pop
!                     pop
!                     pop     //   Stack:  (screen name, chat msg)
!                     getvar  0
!                     cisnbr      // check if the PDA+Proxy is still a valid neighbor
!                     rjumpc  LM_CONT
!                     pop     //   fail, disgard chat msg
!                     pop
!                     endrxn
! LM_CONT             pushn icm   // <"icm", screen name, chat msg>
!                     pushc 3
!                     getvar  0
!                     rout      //   success, send tuple to PDA+Proxy
!                     endrxn
  
  // React to:  <'ocm', screen name, chat msg> from PDA+Proxy
  // Send to leader:  <"mbm", AgentID, String:name, String:msg>
! PDA_MSG             remove
!                     pop
!                     pop     //  Stack:  (screen name, chat msg)
!                     aid
!                     pushn mbm
!                     pushc 4     // <"mbm", AgentID, String:name, String:msg>
!                     getvar 1
!                     rout      // send to leader 
!                     //pushc 26
!                     //putled      // toggle green when message is sent to leader
!                     endrxn
  
+ // register reaction:  for member agent to follow PDA
+ // From Proxy:  <"mov", new loc>
+ // To Leader:  <"upd", agentID, curr location>
+ FOLLOW_PDA          pushc 8
+                     putled    // turn off all 3 LEDs
+                     remove
+                     pop
+                     pop     //   Stack:  (new loc)
+                     
+                     copy
+                     aid
+                     pushn upd
+                     pushc 3
+                     getvar  1
+                     rout        // send location update to the leader     
+                     
+                     smove
+                     rjumpc FOLLOWSUCC
+                     pushc 1
+                     putled    // turn on red LED only if fail to move
+                     halt            
+ FOLLOWSUCC          pushc 4   // turn on blue LED if successfully move
+                     putled
+                     endrxn         
\ No newline at end of file

Index: Proxy.ma
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/AgillaAgents/GroupComm/mobile-chat/Proxy.ma,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Proxy.ma	15 Nov 2006 15:03:41 -0000	1.4
--- Proxy.ma	21 Nov 2006 00:26:58 -0000	1.5
***************
*** 2,31 ****
  // heap[1] = previous member agent location
  
! pushc 25
! putled
! pushc 8
! sleep
! pushc 25
! putled    //blink red LED for 1s
  
  // register reaction:  Receive message from PDA, send message to member agent
  // <'ocm', screen name, chat msg> (ocm - out chat msg)
!     pusht string
!     pusht string
!     pushn ocm
!     pushc 3
!     pushcl SND_MSG
!     regrxn
  
  // register reaction:  Receive message from member agent, send message to PDA
  // <"icm", screen name, chat msg> (icm - in chat msg)
!     pusht string
!     pusht string
!     pushn icm
!     pushc 3
!     pushcl  RCV_MSG
!     regrxn
     
! WAIT          wait
  
  
--- 2,37 ----
  // heap[1] = previous member agent location
  
!                 pushc 26
!                 putled    // toggle green LED
! 
! // find the neighbor's address.  This is the neighbor
! // that will host the member agent.
! FIND_NBR        randnbr
!                 rjumpc NBR_FOUND
!                 rjump FIND_NBR
! NBR_FOUND       copy
!                 setvar  0  // heap[0] = current member loc
!                 setvar  1  // heap[1] = prev member loc
!               
  
  // register reaction:  Receive message from PDA, send message to member agent
  // <'ocm', screen name, chat msg> (ocm - out chat msg)
!                 pusht string
!                 pusht string
!                 pushn ocm
!                 pushc 3
!                 pushcl SND_MSG
!                 regrxn
  
  // register reaction:  Receive message from member agent, send message to PDA
  // <"icm", screen name, chat msg> (icm - in chat msg)
!                 pusht string
!                 pusht string
!                 pushn icm
!                 pushc 3
!                 pushcl  RCV_MSG
!                 regrxn
     
! WAIT            wait
  
  
***************
*** 34,79 ****
  // To Member:  <"ocm", screen name, chat msg> (ocm - out chat msg)
  // # Future Optimization:  <'ocm', member agentID, chat msg> for multiple member agents on the same node
! SND_MSG       	remove                 
!               	randnbr
!               	rjumpc GOT_NBR
!               	pushc 8
!               	putled    	
!               	pushc	31
!               	putled		// light all 3 LED if no neighbor found
!              	clear
!              	pushn	nma	// tell PDA that it is not in range of network
! 		pushloc force_uart_x force_uart_y
! 		rout
!               	pushc	WAIT
!               	rjump
! GOT_NBR		getvar	0	//   Stack:  (member loc, neighbor loc, <3, "ocm", screen name, chat msg>)
! 		ceq
! 		rjumpc	GOT_MEM
! 		pop		//member agent NOT on neighbor node
! 		pop			// pop the message
! 		pop
! 		pop
! 		randnbr		
! 		pushn	mov
! 		pushc	2		// send to member:  <"mov", new location>
! 		getvar	0
! 		rout
! 		getvar	0		// heap[1] = old loc
! 		setvar	1
! 		randnbr			// heap[0] = curr loc
! 		setvar	0
! 	GOT_MEM	getvar	0	// member agentis on neighbor node, 
! 		rout      		// send tuple to member agent
!         	pushc 26    		// toggle green
!         	putled              
!         	endrxn
  
  
  // reaction fired:  Receive message from member agent, send message to PDA
  // From Member:  <"icm", chat msg> (icm - in chat msg)
! RCV_MSG   remove      
!     pushloc force_uart_x force_uart_y
!     rout      // send tuple to base station   
!     pushc 25    
!     putled      // toggle red LED
!     endrxn
--- 40,85 ----
  // To Member:  <"ocm", screen name, chat msg> (ocm - out chat msg)
  // # Future Optimization:  <'ocm', member agentID, chat msg> for multiple member agents on the same node
! SND_MSG         pushc 25
!                 putled
!                 remove                 
!                 randnbr
!                 rjumpc GOT_NBR  //   Stack:  neighbor loc                   
!                 pushc 23
!                 putled    // light all 3 LED if no neighbor found
!                 clear
!                 pushn nma // tell PDA that it is not in range of network
!                 pushc 1
!                 pushloc force_uart_x force_uart_y
!                 rout
!                 rjump WAIT 
! GOT_NBR         getvar  0 //   Stack:  (member loc, neighbor loc, <3, "ocm", screen name, chat msg>)
!                 ceq
!                 rjumpc  GOT_MEM   //   Stack:  (<3, "ocm", screen name, chat msg>)
!                 randnbr
!                 rout              // place outgoing tuple in member's new location.  it will find it when it arrives...
!                 randnbr   
!                 pushn mov
!                 pushc 2   
!                 getvar  0
!                 rout              // fetch the member:  <"mov", new location>
!                 getvar  0         // heap[1] = old loc
!                 setvar  1
!                 randnbr           // heap[0] = curr loc
!                 setvar  0
!                 endrxn
! GOT_MEM         getvar  0         // member agent is on neighbor node, 
!                 rout              // send tuple to member agent
!                 pushc 26        
!                 putled            // toggle green
!                 endrxn
  
  
  // reaction fired:  Receive message from member agent, send message to PDA
  // From Member:  <"icm", chat msg> (icm - in chat msg)
! RCV_MSG         remove
!                 pushloc force_uart_x force_uart_y
!                 rout      // send tuple to base station   
!                 pushc 25    
!                 putled      // toggle red LED
!                 endrxn
!               
\ No newline at end of file



More information about the Tinyos-contrib-commits mailing list