[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