[Tinyos-contrib-commits] CVS: tinyos-1.x/contrib/wustl/apps/Agilla README, 1.22, 1.23

Chien-Liang Fok chien-liang at users.sourceforge.net
Thu May 18 14:41:17 PDT 2006


Update of /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/Agilla
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv28880

Modified Files:
	README 
Log Message:
Modified cvs server's address.


Index: README
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/contrib/wustl/apps/Agilla/README,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** README	18 May 2006 19:58:40 -0000	1.22
--- README	18 May 2006 21:41:15 -0000	1.23
***************
*** 1,444 ****
! $Id$
! 
! Agilla: a mobile agent middleware for wireless sensor networks.  Agilla enables
! users to inject mobile agents into a wireless sensor network.  Agents are 
! autonomous computational entities that can migrate or clone across nodes in a 
! wireless sensor network.  Two types of migration and clone instructions are 
! provided: "strong" in which both code and state is maintained, and "weak" in which
! only the code is maintained.
! 
! Agilla facilitates inter-agent coordination via localized tuple spaces, 
! remote tuple space operations, and a neighbor list.
! 
! This document can be found in the TinyOS CVS repository under module
! tinyos-1.x/contrib/wustl/apps/Agilla.
! 
! Author: Chien-Liang Fok <liangfok at wustl.edu>
! Website: http://mobilab.wustl.edu/projects/agilla/index.html
! 
! DOWNLOADING AGILLA
! -------------------------------------------------------------------------------
! The latest version of Agilla can be downloaded off the TinyOS CVS server.  
! Instructions for downloading it are available here:  
! http://sourceforge.net/cvs/?group_id=28656
! 
! Checkout module tinyos-1.x/contrib/wustl.  You can use the following command:
! 
!   cvs -z3 -d:pserver:anonymous at cvs.sourceforge.net:/cvsroot/tinyos co \
!   -P tinyos-1.x/contrib/wustl
! 
! Once downloaded, Agilla's firmware will be in tinyos-1.x/contrib/wustl/apps/Agilla, 
! and the AgentInjector will be in tinyos-1.x/contrib/wustl/tools/java/.
! 
! PREREQUISITE CHANGES TO TINYOS
! -------------------------------------------------------------------------------
! Agilla interfaces with the SpaceLocalizer (module 
! tinyos-1.x/contrib/wustl/apps/SpaceLocalizer) to gain spatial information.  
! SpaceLocalizer requires that the mote's UART port be set to 115200bps, which is
! by default 57600.  To change it to 115200, open 
! tinyos-1.x/tos/platforms/<platform>/UPLUART0M.nc and change "outp(15, UBRR0L);" 
! to "outp(7, UBRR0L);".
! 
! 
! HARDWARE REQUIREMENTS
! -------------------------------------------------------------------------------
! This version of Agilla has been tested with Mica2 and MicaZ motes.  Note that
! currently SpaceLocalizer must be disabled when using MicaZ motes.  
! 
! 
! DEPENDENCIES
! -------------------------------------------------------------------------------
! Agilla relies on the following modules within TinyOS's CVS repository:
!  1) tinyos-1.x/contrib/wustl/apps/AgillaAgents
!       -This contains numerous sample Agilla agents.
!  2) tinyos-1.x/contrib/wustl/apps/LEDBlinker
!       -A utility that blinks the LEDs in various patterns.  Only uses
!          a single timer.  Used primarily for debugging purposes.
!  3) tinyos-1.x/contrib/wustl/apps/SpaceLocalizer
!       -Interfaces with a Cricket mote for location-aware applications
!  4) tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/agilla
!       -The Java-based AgentInjector application.
!  
! 
! MAKEFILE FLAGS
! -------------------------------------------------------------------------------
! Agilla's makefile system requires that you create a "Makefile.Agilla" file 
! within tinyos-1.x/contrib/wustl/apps/Agilla/.  The contents of this file must
! look like:
! 
! PFLAGS_AGILLA=-DAGILLA_NUM_AGENTS=3 \
!               -DAGILLA_NUM_CODE_BLOCKS=12 \
!               -DAGILLA_NETWORK_INTERFACE_RECEIVE_QUEUE_SIZE=4 \
!               -DAGILLA_NETWORK_INTERFACE_SEND_QUEUE_SIZE=4 \
!               -DAGILLA_SNDR_BUFF_SIZE=1 \
!               -DAGILLA_SNDR_RETRY_TIMER=512 \
!               -DAGILLA_SNDR_MAX_RETRIES=2 \
!               -DAGILLA_SNDR_RXMIT_TIMER=290 \
!               -DAGILLA_SNDR_MAX_RETRANSMITS=4 \
!               -DAGILLA_SNDR_ABORT_TIMER=1536 \
!               -DAGILLA_RCVR_ABORT_TIMER=1000 \
!               -DAGILLA_RCVR_FIN_TIMER=300 \
!               -DAGILLA_MAX_NUM_NEIGHBORS=20 \
!               -DDEFAULT_NUM_COLUMNS=4 \
!               -DAGILLA_REMOTE_TS_OP_Q_SIZE=3 \
!               -DAGILLA_TS_SIZE=100 \
!               -DAGILLA_RTS_TIMEOUT=256 \
!               -DAGILLA_RTS_MAX_NUM_TRIES=4 \
!               -DAGILLA_TS_BOUNCEQ_SIZE=2 \
!               -DAGILLA_TS_NO_DUPLICATE=0 \
!               -DREACTION_MGR_BUFFER_SIZE=5 \
!               -DBEACON_PERIOD=2048 \
!               -DBEACON_RAND=1024 \
!               -DBEACON_TIMEOUT=9216 \
!               -DTIMEOUT_GET_LOCATION=1024 \
!               -DENABLE_SPACE_LOCALIZER=1 \
!               -DENABLE_NEIGHBOR_LIST_FILTER=0 \
!               -DOMIT_AGENT_SENDER=0 \
!               -DOMIT_AGENT_RECEIVER=0 \
!               -DOMIT_CONTEXT_DISCOVERY=0 \
!               -DINCLUDE_DEFAULT_AGENT=0 \
!               -DPRINT_RXN_FIRED=0 \
!               -DDEBUG_AGENT_RECEIVER=0 \
!               -DDEBUG_AGENT_SENDER=0 \
!               -DDEBUG_OPSTACK=0 \
!               -DDEBUG_HEAPMGR=0 \
!               -DDEBUG_AGENT_MGR=0 \
!               -DDEBUG_CODEMGR=0 \
!               -DDEBUG_REMOTE_TS_OP_MGR=0 \
!               -DDEBUG_RXNMGR=0 \
!               -DDEBUG_TS=0 \
!               -DDEBUG_TUPLE_UTIL=0 \
!               -DDEBUG_NEIGHBORLIST=0 \
!               -DDEBUG_AGILLA_ENGINE=0 \
!               -DDEBUG_OP_SLEEP=0 \
!               -DDEBUG_OP_RXN=0 \
!               -DDEBUG_OPCOMPARE=0 \
!               -DDEBUG_ADDRESS_MGR=0 \
!               -DNBR_LIST_PRINT_CHANGES=0
! 
! 
! Details on each of these flags is described below. Default values are in 
! parenthesis.
! 
! -DAGILLA_NUM_AGENTS=<num> (3)
!    The maximum number of agents per node.  This value depends on 
!    the amount of memory available.  Try to keep RAM usage below 3.5K.
! 
! -DAGILLA_NUM_CODE_BLOCKS=<num> (12)
!    The number of code blocks within the CodeMgr.  Each code block is 22 bytes.
!    The CodeMgr allocates the minimum number of blocks necessary to hold an
!    agent's code.
! 
! -DAGILLA_NETWORK_INTERFACE_RECEIVE_QUEUE_SIZE=<num> (3)
!    The maximum number of incoming messages Agilla should enqueue.
!    A higher value makes communication more reliable, but increases
!    memory usage.
!    
! -DAGILLA_NETWORK_INTERFACE_SEND_QUEUE_SIZE=<num> (3)
!    The maximum number of outgoing messages Agilla should enqueue.
!    A higher value makes communication more reliable, but increases
!    memory usage.
!    
! -DDEBUG_NETWORK_INTERFACE=<0/1> (0)
!   Prints out debug messages generated from within the NetworkInterface 
!   components.  The NetworkInterface manages the send and receive buffers.
! 
! -DAGILLA_SNDR_BUFF_SIZE=<num> (1)
!    The maximum number of simultaneous outgoing agents.
!    
! -DAGILLA_SNDR_RETRY_TIMER=<num> (512)
!    The amount of time in binary milliseconds before the agent sender 
!    aborts the migration process and retries from the beginning.
!    
! -DAGILLA_SNDR_MAX_RETRIES=<num> (2)
!    The maximum number of times the agent sender will retry migrating an
!    agent before permanently aborting.
!    
! -DAGILLA_SNDR_MAX_RETRANSMITS=<num> (4)
!    The maximum number of times the agent sender will retransmit a message
!    before aborting.
! 
! -DAGILLA_SNDR_RXMIT_TIMER=<num> (256)
!    The amount of time in binary milliseconds before the agent sender 
!    retransmits a message.  If an acknowledgement is received within this
!    time, the message is not retransmitted.
!    
! -DAGILLA_SNDR_ABORT_TIMER=<num> (1536)
!    The amount of time the sender pauses before aborting an agent.  This
!    ensures that the destination node times out the receive process and 
!    frees up the memory.  This must be higher than -DAGILLA_RCVR_ABORT_TIMER.
!    
! -DAGILLA_RCVR_BUFF_SIZE=<num> (1)
!    The number of simultaneous incoming agents.  This value is limited
!    by memory availability.  NOTE: THIS OPTION IS NO LONGER AVAILABLE
!    
! -DAGILLA_RCVR_ABORT_TIMER=<num> (1000)
!    The amount of time without receiving messages that the agent receiver 
!    abort the migration process.
!    
! -DAGILLA_RCVR_FIN_TIMER=<num> (300)
!    The amount of time that the receiver waits after receiving an agent to make
!    sure no duplicate messages for the agent arrive.  The main purpose of this
!    is to prevent duplicate agents.
!    
! -DAGILLA_MAX_NUM_NEIGHBORS=<num> (20)
!    The size of the neighbor list.
! 
! -DDEFAULT_NUM_COLUMNS=<num> (20)
!    Specifies the default number of columns.  This is used when 
!    DENABLE_NEIGHBOR_LIST_FILTER=1.  It creates a virtual multi-hop network
!    by limiting the neighbor list to contain only nodes within 1 hop as defined
!    within a grid topology.
!    
! -DAGILLA_REMOTE_TS_OP_Q_SIZE=<num> (3)
!    The maximum number of remote tuple space operations.
!    
! -DAGILLA_TS_SIZE=<num> (100)
!    The size of the tuple space in bytes.  Note that this consumes RAM.
! 
! -DAGILLA_TS_NO_DUPLICATE=<num> (0)
!    Determines whether duplicate tuples should be allowed in the tuple space.
!    This is useful when performing rout operations.  If the ACK is lost, the
!    initiating node will retransmit.  This may result in duplicate tuples
!    in the destination's tuple space.
!    
! -DAGILLA_RTS_TIMEOUT=<num> (1024)
!    The maximum amount of time a node waits for an acknowledgement when 
!    performing a remove tuple space operation.
! 
! -DTIMEOUT_GET_LOCATION=<num> (1024)
!     The amount of time Agilla waits before cancelling a getAgentLocation 
!     operation.
!     
! -DAGILLA_RTS_MAX_NUM_TRIES=<num> (4)
!    The maximum number of times a node will retry transmitting a tuple space 
!    operation before trimming out.
!    
! -DAGILLA_TS_BOUNCEQ_SIZE=<num> (1)
!    The maximum number of pending remote tuple space operations.
!    
! -DREACTION_MGR_BUFFER_SIZE=<num> (5
!    The maximum number of reactions that can be registered.
! 
! -DBEACON_PERIOD=<num> (2048)
!    The minimum beacon period.  Used for maintaining the neighbor list.
!    
! -DBEACON_RAND=<num> (1024)
!    The randomized part of the beacon period.  The actual beacon period is 
!    between BEACON_PERIOD and BEACON_PERIOD+BEACON_RAND.
!    
! -DBEACON_TIMEOUT=<num> (9216)
!    The amount of time over which no beacon from a particular neighbor is
!    received before removing that neighbor from the neighbor list.
!    
! -DENABLE_SPACE_LOCALIZER=<1/0> (1)   
!    Specifies whether Agilla should use the SpaceLocalizer to change 
!    radio frequencies when the mote's location changes.  To configure the 
!    possible location spaces, and what radio frequencies are used for each
!    space, edit event "SpaceLocalizerI.moved(...)" within 
!    <agilla>/components/LocationMgrM.nc.  By default, there are two spaces
!    defined: "DOCK" and "SHIP".  DOCK uses CC1000_CHANNEL_2 while SHIP uses
!    CC1000_CHANNEL_4.  The CC1000 channel frequencies are defined within
!    module tinyos-1.x/contrib/wustl/SpaceLocalizer/SpaceLocalizer.h.
! 
! -DENABLE_NEIGHBOR_LIST_FILTER=<1/0> (0)
!    Specifies whether the neighbor list filter is enabled.  If enabled, the 
!    filter will block adding any neighbors that are not immdiate neighbors
!    based on the grid topology from being added to the neighbor list.  This
!    is used to simulate a multi-hop network.
! 
! -DINCLUDE_DEFAULT_AGENT=<1/0> (0)
!    Sets whether an agent is hard-coded into the middleware and automatically 
!    started when the mote boots.  This is useful for running Agilla without 
!    an AgentInjector.
! 
! -DOMIT_AGENT_SENDER=<1/0> (0)
!    Specifies whether the agent sender should be included.  This is use for
!    isolating bugs.  When set to 1, the agent sender components will not be
!    compiled.
! 
! -DOMIT_AGENT_RECEIVER=<1/0> (0)
!    Specifies whether the agent receiver should be included.  This is use for
!    isolating bugs.  When set to 1, the agent receiver components will not be
!    compiled.
!    
! -DOMIT_CONTEXT_DISCOVERY=<1/0> (0)
!    Specifies whether the context discovery components should be included.  This 
!    is use for isolating bugs.  When set to 1, the context discovery components 
!    will not be compiled.
! 
! -DINCLUDE_DEFAULT_AGENT=<1/0> (0) 
!    Whether to include a default agent within the firmware.  If a default agent 
!    is included, it will be started automatically when the mote is turned on.
!    
! -DDEBUG_AGENT_RECEIVER=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
! 
! -DDEBUG_AGENT_SENDER=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_OPSTACK=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_HEAPMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_AGENT_MGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_CODEMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_REMOTE_TS_OP_MGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_RXNMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_TS=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_TUPLE_UTIL=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_NEIGHBORLIST=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".   
!     
! -DDEBUG_AGILLA_ENGINE=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".   
! 
! -DNBR_LIST_PRINT_CHANGES=<1/0> (0)   
!     A flag that controls whether to print statements to the screen that 
!     indicate changes to the neighbor list.
! 
! 
! STARTING THE AGENT INJECTOR
! -------------------------------------------------------------------------------
! Agilla uses a Java-based AgentInjector to inject agents into a wireless sensor
! network.  The AgentInjector is located in module
! tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/agilla.
! 
! To compile the AgentInjector, go into its directory and type "make".
! 
! Start the AgentInjector using the following command:
! 
!   $ java -Djava.security.policy=java.policy edu.wustl.mobilab.agilla.AgentInjector 
!     -comm COM1:115200 -d &
! 
! Make sure /opt/tinyos-1.x/contrib/wustl/tools/java/ is in the CLASSPATH.
! 
!    
! REMOTE TUPLE SPACE OPERATIONS   
! -------------------------------------------------------------------------------
! 
! The following diagram shows the sequence of messages that are passed during a
! remote tuple space operation where the initiator is the PC, and the destination 
! is a node not directly connected to it.
! 
!  ----    (1)    --------    (2)    --------
! |    |  ---->  |        |  ---->  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  <----  |        |  <----  |        |
!  ----    (4)    --------    (3)    --------
!  
!  
!  (1) dest=mote2, reply=null
!  (2) dest=mote2, reply=mote1*
!  (3) dest=mote1
!  (4) dest=uart**
!  
!  *  When mote 1 receives a request destined for a remote node, it assumes it came 
!     from the base station, and forwards the request to the destination after 
!     setting the reply address to be itself.
!  ** When mote 1 receives an unexpected results message from mote2, it assumes its 
!     for the base station and forwards it to the uart.  A possible race condition 
!     will occur if an agent on Mote 1 issues a remote operation using the same 
!     template while still waiting for a base station operation's results to arrive.
!     The probability of this occurring is minimal.
! 
! The following diagram shows the sequence of messages that are passed during a
! remote tuple space operation where the initiator is a node not connected to a 
! programming board, and the destination is the PC.  Note that no address renaming
! occurs.
! 
!  ----    (2)    --------    (1)    --------
! |    |  <----  |        |  <----  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  ---->  |        |  ---->  |        |
!  ----    (3)    --------    (4)    --------
!  
!  
!  (1) dest=uart, reply=mote2
!  (2) dest=uart, reply=mote2 
!  (3) dest=mote2
!  (4) dest=mote2 
!  
!  Note that in stage (3), if no match was found, the original template is saved as
!  the results, and the success field is set to 0.  This allows mote 1 to determine
!  whether it should forward the results to mote 2, or keep it for itself.
! 
! 
! GET NEIGHBOR LIST OPERATION
! -------------------------------------------------------------------------------
! The AgentInjector provides the following public method:
! 
!   public Vector queryNbrList(int addr);
! 
! This method allows a user to query the neighbor list of a mote.  The mote's 
! neighbor list is maintained using periodic beacons by 
! components/ContextDiscovery/NeighborListM.nc.  A user can query the neighbor
! list of a mote assuming it is physically one hop away from the base station.  
! Note that if DENABLE_NEIGHBOR_LIST_FILTER=1, a mote may be multiple virtual
! hops away from the base station.  This does not matter.  So long as the mote is 
! one physical hop away from the base station, the neighbor list can be queries.
! 
! Query neighbor list works as follows.  Suppose you want to query the neighbor list
! of mote 2 in a network with the following topology:
! 
!  ----    (1)    --------    (2)    --------
! |    |  ---->  |        |  ---->  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  <----  |        |  <----  |        |
!  ----    (4)    --------    (3)    --------
! 
! 
! (1) The query is issued and passed over a serial link to Mote 1.
! (2) The query is bounced off Mote 1 to Mote 2.  The reply address of the query is
!     changed to be mote 1.
! (3) Mote 2 responds with its neighbor list.  Note that this may be more than
!     one message
! (4) Mote 1 receives a response, and forwards it to the PC.  Mote 1 will only 
!     forward it to the PC if it is a base station.  Mote 1 knows its a base 
!     station if it receives a heart beat from the PC.
! 
! 
! FUTURE IMPROVEMENTS
! -------------------------------------------------------------------------------
! 1) Error reporting mechanism will offer more details on what went wrong.  The 
!    current error message only includes up to 2 bytes of data and the total 
!    message size is only 13 bytes.
! 2) regrxn should update condition codes
! 3) If the CodeMgr fails to allocate enough code blocks for an agent, send an
!    error back to the node from which the agent is arriving instead of going into
!    an AGILLA_ERROR_GET_FREE_BLOCK error mode.
! 4) Use the flash memory for the tuple space.  Offer persistent tuple space.
! 5) Port Agilla to Telos.
! 6) High-level language.
! 7) Policies for determining which agent should run when the mote cannot support  
!    any more agents.
! 8) Middlware cognizant of global priority level; kill agents that are below current
!    priority.
! 9) Reactions sensitive to thresholds, e.g., react when the temperature is above a certain value...
  10)Remote reactions.
\ No newline at end of file
--- 1,444 ----
! $Id$
! 
! Agilla: a mobile agent middleware for wireless sensor networks.  Agilla enables
! users to inject mobile agents into a wireless sensor network.  Agents are 
! autonomous computational entities that can migrate or clone across nodes in a 
! wireless sensor network.  Two types of migration and clone instructions are 
! provided: "strong" in which both code and state is maintained, and "weak" in which
! only the code is maintained.
! 
! Agilla facilitates inter-agent coordination via localized tuple spaces, 
! remote tuple space operations, and a neighbor list.
! 
! This document can be found in the TinyOS CVS repository under module
! tinyos-1.x/contrib/wustl/apps/Agilla.
! 
! Author: Chien-Liang Fok <liangfok at wustl.edu>
! Website: http://mobilab.wustl.edu/projects/agilla/index.html
! 
! DOWNLOADING AGILLA
! -------------------------------------------------------------------------------
! The latest version of Agilla can be downloaded off the TinyOS CVS server.  
! Instructions for downloading it are available here:  
! http://sourceforge.net/cvs/?group_id=28656
! 
! Checkout module tinyos-1.x/contrib/wustl.  You can use the following command:
! 
!   cvs -z3 -d:pserver:anonymous at tinyos.cvs.sourceforge.net:/cvsroot/tinyos co \
!   -P tinyos-1.x/contrib/wustl
! 
! Once downloaded, Agilla's firmware will be in tinyos-1.x/contrib/wustl/apps/Agilla, 
! and the AgentInjector will be in tinyos-1.x/contrib/wustl/tools/java/.
! 
! PREREQUISITE CHANGES TO TINYOS
! -------------------------------------------------------------------------------
! Agilla interfaces with the SpaceLocalizer (module 
! tinyos-1.x/contrib/wustl/apps/SpaceLocalizer) to gain spatial information.  
! SpaceLocalizer requires that the mote's UART port be set to 115200bps, which is
! by default 57600.  To change it to 115200, open 
! tinyos-1.x/tos/platforms/<platform>/UPLUART0M.nc and change "outp(15, UBRR0L);" 
! to "outp(7, UBRR0L);".
! 
! 
! HARDWARE REQUIREMENTS
! -------------------------------------------------------------------------------
! This version of Agilla has been tested with Mica2 and MicaZ motes.  Note that
! currently SpaceLocalizer must be disabled when using MicaZ motes.  
! 
! 
! DEPENDENCIES
! -------------------------------------------------------------------------------
! Agilla relies on the following modules within TinyOS's CVS repository:
!  1) tinyos-1.x/contrib/wustl/apps/AgillaAgents
!       -This contains numerous sample Agilla agents.
!  2) tinyos-1.x/contrib/wustl/apps/LEDBlinker
!       -A utility that blinks the LEDs in various patterns.  Only uses
!          a single timer.  Used primarily for debugging purposes.
!  3) tinyos-1.x/contrib/wustl/apps/SpaceLocalizer
!       -Interfaces with a Cricket mote for location-aware applications
!  4) tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/agilla
!       -The Java-based AgentInjector application.
!  
! 
! MAKEFILE FLAGS
! -------------------------------------------------------------------------------
! Agilla's makefile system requires that you create a "Makefile.Agilla" file 
! within tinyos-1.x/contrib/wustl/apps/Agilla/.  The contents of this file must
! look like:
! 
! PFLAGS_AGILLA=-DAGILLA_NUM_AGENTS=3 \
!               -DAGILLA_NUM_CODE_BLOCKS=12 \
!               -DAGILLA_NETWORK_INTERFACE_RECEIVE_QUEUE_SIZE=4 \
!               -DAGILLA_NETWORK_INTERFACE_SEND_QUEUE_SIZE=4 \
!               -DAGILLA_SNDR_BUFF_SIZE=1 \
!               -DAGILLA_SNDR_RETRY_TIMER=512 \
!               -DAGILLA_SNDR_MAX_RETRIES=2 \
!               -DAGILLA_SNDR_RXMIT_TIMER=290 \
!               -DAGILLA_SNDR_MAX_RETRANSMITS=4 \
!               -DAGILLA_SNDR_ABORT_TIMER=1536 \
!               -DAGILLA_RCVR_ABORT_TIMER=1000 \
!               -DAGILLA_RCVR_FIN_TIMER=300 \
!               -DAGILLA_MAX_NUM_NEIGHBORS=20 \
!               -DDEFAULT_NUM_COLUMNS=4 \
!               -DAGILLA_REMOTE_TS_OP_Q_SIZE=3 \
!               -DAGILLA_TS_SIZE=100 \
!               -DAGILLA_RTS_TIMEOUT=256 \
!               -DAGILLA_RTS_MAX_NUM_TRIES=4 \
!               -DAGILLA_TS_BOUNCEQ_SIZE=2 \
!               -DAGILLA_TS_NO_DUPLICATE=0 \
!               -DREACTION_MGR_BUFFER_SIZE=5 \
!               -DBEACON_PERIOD=2048 \
!               -DBEACON_RAND=1024 \
!               -DBEACON_TIMEOUT=9216 \
!               -DTIMEOUT_GET_LOCATION=1024 \
!               -DENABLE_SPACE_LOCALIZER=1 \
!               -DENABLE_NEIGHBOR_LIST_FILTER=0 \
!               -DOMIT_AGENT_SENDER=0 \
!               -DOMIT_AGENT_RECEIVER=0 \
!               -DOMIT_CONTEXT_DISCOVERY=0 \
!               -DINCLUDE_DEFAULT_AGENT=0 \
!               -DPRINT_RXN_FIRED=0 \
!               -DDEBUG_AGENT_RECEIVER=0 \
!               -DDEBUG_AGENT_SENDER=0 \
!               -DDEBUG_OPSTACK=0 \
!               -DDEBUG_HEAPMGR=0 \
!               -DDEBUG_AGENT_MGR=0 \
!               -DDEBUG_CODEMGR=0 \
!               -DDEBUG_REMOTE_TS_OP_MGR=0 \
!               -DDEBUG_RXNMGR=0 \
!               -DDEBUG_TS=0 \
!               -DDEBUG_TUPLE_UTIL=0 \
!               -DDEBUG_NEIGHBORLIST=0 \
!               -DDEBUG_AGILLA_ENGINE=0 \
!               -DDEBUG_OP_SLEEP=0 \
!               -DDEBUG_OP_RXN=0 \
!               -DDEBUG_OPCOMPARE=0 \
!               -DDEBUG_ADDRESS_MGR=0 \
!               -DNBR_LIST_PRINT_CHANGES=0
! 
! 
! Details on each of these flags is described below. Default values are in 
! parenthesis.
! 
! -DAGILLA_NUM_AGENTS=<num> (3)
!    The maximum number of agents per node.  This value depends on 
!    the amount of memory available.  Try to keep RAM usage below 3.5K.
! 
! -DAGILLA_NUM_CODE_BLOCKS=<num> (12)
!    The number of code blocks within the CodeMgr.  Each code block is 22 bytes.
!    The CodeMgr allocates the minimum number of blocks necessary to hold an
!    agent's code.
! 
! -DAGILLA_NETWORK_INTERFACE_RECEIVE_QUEUE_SIZE=<num> (3)
!    The maximum number of incoming messages Agilla should enqueue.
!    A higher value makes communication more reliable, but increases
!    memory usage.
!    
! -DAGILLA_NETWORK_INTERFACE_SEND_QUEUE_SIZE=<num> (3)
!    The maximum number of outgoing messages Agilla should enqueue.
!    A higher value makes communication more reliable, but increases
!    memory usage.
!    
! -DDEBUG_NETWORK_INTERFACE=<0/1> (0)
!   Prints out debug messages generated from within the NetworkInterface 
!   components.  The NetworkInterface manages the send and receive buffers.
! 
! -DAGILLA_SNDR_BUFF_SIZE=<num> (1)
!    The maximum number of simultaneous outgoing agents.
!    
! -DAGILLA_SNDR_RETRY_TIMER=<num> (512)
!    The amount of time in binary milliseconds before the agent sender 
!    aborts the migration process and retries from the beginning.
!    
! -DAGILLA_SNDR_MAX_RETRIES=<num> (2)
!    The maximum number of times the agent sender will retry migrating an
!    agent before permanently aborting.
!    
! -DAGILLA_SNDR_MAX_RETRANSMITS=<num> (4)
!    The maximum number of times the agent sender will retransmit a message
!    before aborting.
! 
! -DAGILLA_SNDR_RXMIT_TIMER=<num> (256)
!    The amount of time in binary milliseconds before the agent sender 
!    retransmits a message.  If an acknowledgement is received within this
!    time, the message is not retransmitted.
!    
! -DAGILLA_SNDR_ABORT_TIMER=<num> (1536)
!    The amount of time the sender pauses before aborting an agent.  This
!    ensures that the destination node times out the receive process and 
!    frees up the memory.  This must be higher than -DAGILLA_RCVR_ABORT_TIMER.
!    
! -DAGILLA_RCVR_BUFF_SIZE=<num> (1)
!    The number of simultaneous incoming agents.  This value is limited
!    by memory availability.  NOTE: THIS OPTION IS NO LONGER AVAILABLE
!    
! -DAGILLA_RCVR_ABORT_TIMER=<num> (1000)
!    The amount of time without receiving messages that the agent receiver 
!    abort the migration process.
!    
! -DAGILLA_RCVR_FIN_TIMER=<num> (300)
!    The amount of time that the receiver waits after receiving an agent to make
!    sure no duplicate messages for the agent arrive.  The main purpose of this
!    is to prevent duplicate agents.
!    
! -DAGILLA_MAX_NUM_NEIGHBORS=<num> (20)
!    The size of the neighbor list.
! 
! -DDEFAULT_NUM_COLUMNS=<num> (20)
!    Specifies the default number of columns.  This is used when 
!    DENABLE_NEIGHBOR_LIST_FILTER=1.  It creates a virtual multi-hop network
!    by limiting the neighbor list to contain only nodes within 1 hop as defined
!    within a grid topology.
!    
! -DAGILLA_REMOTE_TS_OP_Q_SIZE=<num> (3)
!    The maximum number of remote tuple space operations.
!    
! -DAGILLA_TS_SIZE=<num> (100)
!    The size of the tuple space in bytes.  Note that this consumes RAM.
! 
! -DAGILLA_TS_NO_DUPLICATE=<num> (0)
!    Determines whether duplicate tuples should be allowed in the tuple space.
!    This is useful when performing rout operations.  If the ACK is lost, the
!    initiating node will retransmit.  This may result in duplicate tuples
!    in the destination's tuple space.
!    
! -DAGILLA_RTS_TIMEOUT=<num> (1024)
!    The maximum amount of time a node waits for an acknowledgement when 
!    performing a remove tuple space operation.
! 
! -DTIMEOUT_GET_LOCATION=<num> (1024)
!     The amount of time Agilla waits before cancelling a getAgentLocation 
!     operation.
!     
! -DAGILLA_RTS_MAX_NUM_TRIES=<num> (4)
!    The maximum number of times a node will retry transmitting a tuple space 
!    operation before trimming out.
!    
! -DAGILLA_TS_BOUNCEQ_SIZE=<num> (1)
!    The maximum number of pending remote tuple space operations.
!    
! -DREACTION_MGR_BUFFER_SIZE=<num> (5
!    The maximum number of reactions that can be registered.
! 
! -DBEACON_PERIOD=<num> (2048)
!    The minimum beacon period.  Used for maintaining the neighbor list.
!    
! -DBEACON_RAND=<num> (1024)
!    The randomized part of the beacon period.  The actual beacon period is 
!    between BEACON_PERIOD and BEACON_PERIOD+BEACON_RAND.
!    
! -DBEACON_TIMEOUT=<num> (9216)
!    The amount of time over which no beacon from a particular neighbor is
!    received before removing that neighbor from the neighbor list.
!    
! -DENABLE_SPACE_LOCALIZER=<1/0> (1)   
!    Specifies whether Agilla should use the SpaceLocalizer to change 
!    radio frequencies when the mote's location changes.  To configure the 
!    possible location spaces, and what radio frequencies are used for each
!    space, edit event "SpaceLocalizerI.moved(...)" within 
!    <agilla>/components/LocationMgrM.nc.  By default, there are two spaces
!    defined: "DOCK" and "SHIP".  DOCK uses CC1000_CHANNEL_2 while SHIP uses
!    CC1000_CHANNEL_4.  The CC1000 channel frequencies are defined within
!    module tinyos-1.x/contrib/wustl/SpaceLocalizer/SpaceLocalizer.h.
! 
! -DENABLE_NEIGHBOR_LIST_FILTER=<1/0> (0)
!    Specifies whether the neighbor list filter is enabled.  If enabled, the 
!    filter will block adding any neighbors that are not immdiate neighbors
!    based on the grid topology from being added to the neighbor list.  This
!    is used to simulate a multi-hop network.
! 
! -DINCLUDE_DEFAULT_AGENT=<1/0> (0)
!    Sets whether an agent is hard-coded into the middleware and automatically 
!    started when the mote boots.  This is useful for running Agilla without 
!    an AgentInjector.
! 
! -DOMIT_AGENT_SENDER=<1/0> (0)
!    Specifies whether the agent sender should be included.  This is use for
!    isolating bugs.  When set to 1, the agent sender components will not be
!    compiled.
! 
! -DOMIT_AGENT_RECEIVER=<1/0> (0)
!    Specifies whether the agent receiver should be included.  This is use for
!    isolating bugs.  When set to 1, the agent receiver components will not be
!    compiled.
!    
! -DOMIT_CONTEXT_DISCOVERY=<1/0> (0)
!    Specifies whether the context discovery components should be included.  This 
!    is use for isolating bugs.  When set to 1, the context discovery components 
!    will not be compiled.
! 
! -DINCLUDE_DEFAULT_AGENT=<1/0> (0) 
!    Whether to include a default agent within the firmware.  If a default agent 
!    is included, it will be started automatically when the mote is turned on.
!    
! -DDEBUG_AGENT_RECEIVER=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
! 
! -DDEBUG_AGENT_SENDER=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_OPSTACK=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_HEAPMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_AGENT_MGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_CODEMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_REMOTE_TS_OP_MGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_RXNMGR=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_TS=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_TUPLE_UTIL=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".
!     
! -DDEBUG_NEIGHBORLIST=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".   
!     
! -DDEBUG_AGILLA_ENGINE=<1/0> (0) 
!     A flag that controls whether to print debug statements to the screen under
!     mode "usr1".   
! 
! -DNBR_LIST_PRINT_CHANGES=<1/0> (0)   
!     A flag that controls whether to print statements to the screen that 
!     indicate changes to the neighbor list.
! 
! 
! STARTING THE AGENT INJECTOR
! -------------------------------------------------------------------------------
! Agilla uses a Java-based AgentInjector to inject agents into a wireless sensor
! network.  The AgentInjector is located in module
! tinyos-1.x/contrib/wustl/tools/java/edu/wustl/mobilab/agilla.
! 
! To compile the AgentInjector, go into its directory and type "make".
! 
! Start the AgentInjector using the following command:
! 
!   $ java -Djava.security.policy=java.policy edu.wustl.mobilab.agilla.AgentInjector 
!     -comm COM1:115200 -d &
! 
! Make sure /opt/tinyos-1.x/contrib/wustl/tools/java/ is in the CLASSPATH.
! 
!    
! REMOTE TUPLE SPACE OPERATIONS   
! -------------------------------------------------------------------------------
! 
! The following diagram shows the sequence of messages that are passed during a
! remote tuple space operation where the initiator is the PC, and the destination 
! is a node not directly connected to it.
! 
!  ----    (1)    --------    (2)    --------
! |    |  ---->  |        |  ---->  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  <----  |        |  <----  |        |
!  ----    (4)    --------    (3)    --------
!  
!  
!  (1) dest=mote2, reply=null
!  (2) dest=mote2, reply=mote1*
!  (3) dest=mote1
!  (4) dest=uart**
!  
!  *  When mote 1 receives a request destined for a remote node, it assumes it came 
!     from the base station, and forwards the request to the destination after 
!     setting the reply address to be itself.
!  ** When mote 1 receives an unexpected results message from mote2, it assumes its 
!     for the base station and forwards it to the uart.  A possible race condition 
!     will occur if an agent on Mote 1 issues a remote operation using the same 
!     template while still waiting for a base station operation's results to arrive.
!     The probability of this occurring is minimal.
! 
! The following diagram shows the sequence of messages that are passed during a
! remote tuple space operation where the initiator is a node not connected to a 
! programming board, and the destination is the PC.  Note that no address renaming
! occurs.
! 
!  ----    (2)    --------    (1)    --------
! |    |  <----  |        |  <----  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  ---->  |        |  ---->  |        |
!  ----    (3)    --------    (4)    --------
!  
!  
!  (1) dest=uart, reply=mote2
!  (2) dest=uart, reply=mote2 
!  (3) dest=mote2
!  (4) dest=mote2 
!  
!  Note that in stage (3), if no match was found, the original template is saved as
!  the results, and the success field is set to 0.  This allows mote 1 to determine
!  whether it should forward the results to mote 2, or keep it for itself.
! 
! 
! GET NEIGHBOR LIST OPERATION
! -------------------------------------------------------------------------------
! The AgentInjector provides the following public method:
! 
!   public Vector queryNbrList(int addr);
! 
! This method allows a user to query the neighbor list of a mote.  The mote's 
! neighbor list is maintained using periodic beacons by 
! components/ContextDiscovery/NeighborListM.nc.  A user can query the neighbor
! list of a mote assuming it is physically one hop away from the base station.  
! Note that if DENABLE_NEIGHBOR_LIST_FILTER=1, a mote may be multiple virtual
! hops away from the base station.  This does not matter.  So long as the mote is 
! one physical hop away from the base station, the neighbor list can be queries.
! 
! Query neighbor list works as follows.  Suppose you want to query the neighbor list
! of mote 2 in a network with the following topology:
! 
!  ----    (1)    --------    (2)    --------
! |    |  ---->  |        |  ---->  |        |
! | PC |         | Mote 1 |         | Mote 2 |
! |    |  <----  |        |  <----  |        |
!  ----    (4)    --------    (3)    --------
! 
! 
! (1) The query is issued and passed over a serial link to Mote 1.
! (2) The query is bounced off Mote 1 to Mote 2.  The reply address of the query is
!     changed to be mote 1.
! (3) Mote 2 responds with its neighbor list.  Note that this may be more than
!     one message
! (4) Mote 1 receives a response, and forwards it to the PC.  Mote 1 will only 
!     forward it to the PC if it is a base station.  Mote 1 knows its a base 
!     station if it receives a heart beat from the PC.
! 
! 
! FUTURE IMPROVEMENTS
! -------------------------------------------------------------------------------
! 1) Error reporting mechanism will offer more details on what went wrong.  The 
!    current error message only includes up to 2 bytes of data and the total 
!    message size is only 13 bytes.
! 2) regrxn should update condition codes
! 3) If the CodeMgr fails to allocate enough code blocks for an agent, send an
!    error back to the node from which the agent is arriving instead of going into
!    an AGILLA_ERROR_GET_FREE_BLOCK error mode.
! 4) Use the flash memory for the tuple space.  Offer persistent tuple space.
! 5) Port Agilla to Telos.
! 6) High-level language.
! 7) Policies for determining which agent should run when the mote cannot support  
!    any more agents.
! 8) Middlware cognizant of global priority level; kill agents that are below current
!    priority.
! 9) Reactions sensitive to thresholds, e.g., react when the temperature is above a certain value...
  10)Remote reactions.
\ No newline at end of file



More information about the Tinyos-contrib-commits mailing list